-전체 회로구성(라즈베리파이 + L293D + 모터)
- L293D 회로 구성 (둥근 홈이 오른쪽에 위치해 있음 / 홈의 방향을 반드시 확인)
- 라즈베리파이 + L293D
- 초음파 센서 추가
초음파 센서로 거리측정 구현하기
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
TRIG = 23
ECHO = 24
GPIO.setup(TRIG, GPIO.OUT)
GPIO.setup(ECHO, GPIO.IN)
def getDistance():
GPIO.output(TRIG, False)
time.sleep(1)
GPIO.output(TRIG, True)
time.sleep(0.00001)
GPIO.output(TRIG,False)
while GPIO.input(ECHO)==0:
pulse_start = time.time()
while GPIO.input(ECHO)==1:
pulse_end = time.time()
pulse_duration = pulse_end - pulse_start
distance = pulse_duration * 17150
distance = round(distance,2)
return distance
if __name__ == '__main__':
try:
while True:
distance_value = getDistance()
if distance_value > 2 and distance_value < 400:
print("Distance is {:.2f} cm".format(distance_value))
else:
print("Out of range")
except KeyboardInterrupt:
print("Terminated by Keborad Interrupt")
GPIO.cleanup()
모터를 5초 동안 전진/우회전/좌회전/정지 동작 시키는 코드 구현
#import GPIO library / time library
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
RIGHT_FORWARD = 26
RIGHT_BACKWARD = 19
RIGHT_PWM = 13
LEFT_FORWARD = 16
LEFT_BACKWARD = 20
LEFT_PWM = 21
GPIO.setup(RIGHT_FORWARD,GPIO.OUT)
GPIO.setup(RIGHT_BACKWARD,GPIO.OUT)
GPIO.setup(RIGHT_PWM,GPIO.OUT)
GPIO.output(RIGHT_PWM,0)
RIGHT_MOTOR = GPIO.PWM(RIGHT_PWM,100)
RIGHT_MOTOR.start(0)
RIGHT_MOTOR.ChangeDutyCycle(0)
GPIO.setup(LEFT_FORWARD,GPIO.OUT)
GPIO.setup(LEFT_BACKWARD,GPIO.OUT)
GPIO.setup(LEFT_PWM,GPIO.OUT)
GPIO.output(LEFT_PWM,0)
LEFT_MOTOR = GPIO.PWM(LEFT_PWM,100)
LEFT_MOTOR.start(0)
LEFT_MOTOR.ChangeDutyCycle(0)
#RIGHT Motor control
def rightMotor(forward, backward, pwm):
GPIO.output(RIGHT_FORWARD,forward)
GPIO.output(RIGHT_BACKWARD,backward)
RIGHT_MOTOR.ChangeDutyCycle(pwm)
#Left Motor control
def leftMotor(forward, backward, pwm):
GPIO.output(LEFT_FORWARD,forward)
GPIO.output(LEFT_BACKWARD,backward)
LEFT_MOTOR.ChangeDutyCycle(pwm)
if __name__ == '__main__':
try:
while True:
#5초 전진
rightMotor(1 ,0, 70)
leftMotor(1 ,0, 70)
time.sleep(5)
#5초 우회전
rightMotor(1 ,0, 70)
leftMotor(0 ,0, 0)
time.sleep(5)
#5초 좌회전
rightMotor(0 ,0, 0)
leftMotor(1 ,0, 70)
time.sleep(5)
#5초 정지
rightMotor(0 ,0, 0)
leftMotor(0 ,0, 0)
time.sleep(5)
except KeyboardInterrupt:
print("Terminated by Keborad Interrupt")
GPIO.cleanup()
자율 주행 코드 구현하기
- 50cm 보다 가까운 거리에 물체가 있으면 1초간 좌회전
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
TRIG = 23
ECHO = 24
GPIO.setup(TRIG, GPIO.OUT)
GPIO.setup(ECHO, GPIO.IN)
RIGHT_FORWARD = 26
RIGHT_BACKWARD = 19
RIGHT_PWM = 13
LEFT_FORWARD = 16
LEFT_BACKWARD = 20
LEFT_PWM = 21
GPIO.setup(RIGHT_FORWARD,GPIO.OUT)
GPIO.setup(RIGHT_BACKWARD,GPIO.OUT)
GPIO.setup(RIGHT_PWM,GPIO.OUT)
GPIO.output(RIGHT_PWM,0)
RIGHT_MOTOR = GPIO.PWM(RIGHT_PWM,100)
RIGHT_MOTOR.start(0)
RIGHT_MOTOR.ChangeDutyCycle(0)
GPIO.setup(LEFT_FORWARD,GPIO.OUT)
GPIO.setup(LEFT_BACKWARD,GPIO.OUT)
GPIO.setup(LEFT_PWM,GPIO.OUT)
GPIO.output(LEFT_PWM,0)
LEFT_MOTOR = GPIO.PWM(LEFT_PWM,100)
LEFT_MOTOR.start(0)
LEFT_MOTOR.ChangeDutyCycle(0)
def getDistance():
GPIO.output(TRIG,GPIO.LOW)
time.sleep(1)
GPIO.output(TRIG,GPIO.HIGH)
time.sleep(0.00001)
GPIO.output(TRIG,GPIO.LOW)
while GPIO.input(ECHO)==0:
pulse_start = time.time()
while GPIO.input(ECHO)==1:
pulse_end = time.time()
pulse_duration = pulse_end - pulse_start
distance = pulse_duration * 17150
distance = round(distance,2)
return distance
#RIGHT Motor control
def rightMotor(forward, backward, pwm):
GPIO.output(RIGHT_FORWARD,forward)
GPIO.output(RIGHT_BACKWARD,backward)
RIGHT_MOTOR.ChangeDutyCycle(pwm)
#Left Motor control
def leftMotor(forward, backward, pwm):
GPIO.output(LEFT_FORWARD,forward)
GPIO.output(LEFT_BACKWARD,backward)
LEFT_MOTOR.ChangeDutyCycle(pwm)
if __name__ == '__main__':
try:
while True:
distance_value = getDistance()
# 50cm 이상 거리인지 모니터링
if distance_value > 50:
#1초간 전진
print("Forward " + str(distance_value))
rightMotor(1 ,0, 70)
leftMotor(1 ,0, 70)
time.sleep(1)
else:
# 1초간 왼쪽으로 회전
print("Left " + str(distance_value))
rightMotor(0 ,0, 0)
leftMotor(1 ,0, 70)
time.sleep(1)
except KeyboardInterrupt:
print("Terminated by Keborad Interrupt")
GPIO.cleanup()
'Embedded > Raspberry Pi' 카테고리의 다른 글
Argon m.2 ssd 메뉴얼 (0) | 2021.12.09 |
---|---|
tmp (0) | 2021.03.18 |
1-1. 한글폰트 (0) | 2020.10.14 |
라즈베리파이에 파이썬 설치 (0) | 2020.10.10 |
3. VNC를 사용하여 원격접속 (0) | 2020.10.09 |