1. 조립
2. -전체 회로구성(라즈베리파이 + 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()
- 자율 주행 코드 구현하기
-초음파센서 3개 달았음
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)
TRIG_R = 27
ECHO_R = 17
GPIO.setup(TRIG_R, GPIO.OUT)
GPIO.setup(ECHO_R, GPIO.IN)
TRIG_L = 18
ECHO_L = 25
GPIO.setup(TRIG_L, GPIO.OUT)
GPIO.setup(ECHO_L, GPIO.IN)
RIGHT_FORWARD = 16
RIGHT_BACKWARD = 20
RIGHT_PWM = 21
LEFT_FORWARD = 19
LEFT_BACKWARD = 26
LEFT_PWM = 13
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
def getDistanceRight():
GPIO.output(TRIG_R,GPIO.LOW)
time.sleep(1)
GPIO.output(TRIG_R,GPIO.HIGH)
time.sleep(0.00001)
GPIO.output(TRIG_R,GPIO.LOW)
while GPIO.input(ECHO_R)==0:
pulse_start = time.time()
while GPIO.input(ECHO_R)==1:
pulse_end = time.time()
pulse_duration = pulse_end - pulse_start
distance = pulse_duration * 17150
distance = round(distance,2)
return distance
#
def getDistanceLeft():
GPIO.output(TRIG_L,GPIO.LOW)
time.sleep(1)
GPIO.output(TRIG_L,GPIO.HIGH)
time.sleep(0.00001)
GPIO.output(TRIG_L,GPIO.LOW)
while GPIO.input(ECHO_L)==0:
pulse_start = time.time()
while GPIO.input(ECHO_L)==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()
distance_value2 = getDistanceRight()
distance_value3 = getDistanceLeft()
# 50cm 이상 거리인지 모니터링
if distance_value > 60 and distance_value2 > 60 and distance_value > 60:
#1초간 전진
print("Forward " + str(distance_value))
print("Right " + str(distance_value2))
print("Left " + str(distance_value3))
rightMotor(1 ,0, 60)
leftMotor(1 ,0, 60)
time.sleep(0.2)
else:
#후진 먼저 0.5초 하고나서 밑에 if or else 실행됨
rightMotor(0 ,1, 60)
leftMotor(0 ,1, 60)
time.sleep(0.5)
if distance_value3 > distance_value2:
# 1초간 왼쪽으로 회전 -
print("Turn Left " + str(distance_value))
rightMotor(0 ,0, 0)
leftMotor(1 ,0, 60)
time.sleep(0.2)
else:
print("Turn Right " + str(distance_value))
rightMotor(1 ,0, 0)
leftMotor(0 ,0, 60)
time.sleep(0.2)
except KeyboardInterrupt:
print("Terminated by Keborad Interrupt")
GPIO.cleanup()
'Android' 카테고리의 다른 글
안드로이드- 글 적고 저장 누르면 다시 실행시켰을 때 저장됨 (0) | 2020.11.05 |
---|---|
안드로이드 - 이메일 저장 (0) | 2020.11.05 |
안드로이드 - 리스트 추가,수정,삭제 만들기 (0) | 2020.11.04 |
안드로이드 - 영화 리스트 만들기 (0) | 2020.11.04 |
안드로이드 - toast 클릭 시 클릭한 것 뜨게하기 (여러 개 가능) (0) | 2020.11.04 |