본문 바로가기
공부기록

6월 27일 라즈베리파이 - 서보모터, 아날로그신호처리

by project100 2023. 6. 27.

서보모터

갈색 : GRD

주황 : GPIO

빨강 : 5v

 

import RPi.GPIO as G
import time

servo = 18

G.setwarnings(False)
G.setmode(G.BCM)
G.setup(servo, G.OUT)

pwm = G.PWM(servo, 50) # pwm 동작 주파수 50Hz
pwm.start(3.0) # 서브모터 시작 각도 : 0도

for cnt in range(3):
    pwm.ChangeDutyCycle(3.0)
    time.sleep(1)
    pwm.ChangeDutyCycle(7.5)
    time.sleep(1)
    pwm.ChangeDutyCycle(12.5) # 180도 회전
    time.sleep(1)

    # 5.5 : 45도, 9.5 : 135도
    
pwm.ChangeDutyCycle(0.0)
pwm.stop()
G.cleanup()

 

MCP3008, SPI, 가변저항

 

GRD : -

5v, 3v : +

 

---------------------

오른쪽

1, 2 : 3v

3 : GRD

4 : SPISCLK

5 : SPMISO

6 : SPMOSI

7 : SPICE0

8 : GRD

 

아날로그 입력(SPI 통신)

SPI(Serial Peripheral Interface)

대표적인 동기적 통신 방식

클럭(신호주기)라인으로 들어오는 rising(low to high) 또는 falling(high to low)

신호를 인식하여 데이터 값을 읽는 방식

 

import spidev
import time

delay = 0.5

pot_ch = 0

spi = spidev.SpiDev() # spi 통신용 객체
spi.open(0,0)  # spi 통신 회선 열기
spi.max_speed_hz = 100000 # 통신 속도 설정

def readadc(adcnum):
    if adcnum > 7 or adcnum < 0:
        return -1
    r = spi.xfer2([1, 8 + adcnum << 4, 0])
    data = ((r[1] & 3) << 8) + r[2]
    return data

try:
    while True:
        pot_value = readadc(pot_ch)
        print(f'저항값 : {pot_value}')
        time.sleep(delay)
except KeyboardInterrupt:
    pass
finally:
    print('프로그램 종료')

 

MCP3008, SPI, 빛센서

빛센서

한쪽 : 3v

한쪽 : MCP3008 0번, 10K 저항, GRD 

import spidev
import time

delay = 0.5

ldr_ch = 0

spi = spidev.SpiDev()
spi.open(0,0)
spi.max_speed_hz = 100000

def readldr(adcnum):
    if adcnum > 7 or adcnum < 0:
        return -1
    r = spi.xfer2([1, 8 + adcnum << 4, 0])
    data = ((r[1] & 3) << 8) + r[2]
    return data

try:
    while True:
        lv = readldr(ldr_ch)
        print(f'밝기 : {lv}')
        time.sleep(delay)
except KeyboardInterrupt:
    pass
finally:
    print('프로그램 종료')