반응형
초음파 센서와 모터를 이용하여 손을 따라다니는 로봇을 제작하였다.
왼쪽 모터 = B
오른쪽 모터 = C
전방 초음파 = 1
좌측 초음파 = 2
우측 초음파 = 3
로봇을 처음 제작하여서 어디서부터 설계해야 할지 어려움이 있었다.
미션인 막대를 잘 밀기 위해 막대의 중심에 맞게 전방에 모양을 설계하였다.
스크린에 초음파 값을 클리어해주어야 하는데
딜레이를 사용하면 주행에 지장을 주어
딜레이를 사용하지 않고 스크린에 센서 값을 작성해 주었다.
#!/usr/bin/env pybricks-micropython
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import (Motor, TouchSensor, ColorSensor,UltrasonicSensor,
InfraredSensor, UltrasonicSensor, GyroSensor)
from pybricks.parameters import Port, Stop, Direction, Button, Color
from pybricks.tools import wait, StopWatch, DataLog
from pybricks.robotics import DriveBase
from pybricks.media.ev3dev import SoundFile, ImageFile, Font
ev3 = EV3Brick() #138
Ultrasonic_Sensor1 = UltrasonicSensor(Port.S1)
Ultrasonic_Sensor2 = UltrasonicSensor(Port.S2)
Ultrasonic_Sensor3 = UltrasonicSensor(Port.S3)
Ultrasonic_Sensor1.distance()
left_motor = Motor(Port.B)
right_motor = Motor(Port.C)
robot = DriveBase(left_motor,right_motor,55.5,102)
def gom(sec):
left_motor.run_time(-300,sec,Stop.BRAKE, False)
right_motor.run_time(-100,sec,Stop.BRAKE, True)
def poth(): #서브미션인 막대 밀어 넣기 함수
while 1:
if Ultrasonic_Sensor1.distance()<50:
break
else:
robot.drive(200,0)
wait(100)
robot.drive(-100,0)#바퀴를 역회전 시켜 막대를 더 잘 밀어넣을 수 있게 한다
wait(100)
def gogo(): #추적자 메인 함수
if Ultrasonic_Sensor1.distance()<300 and Ultrasonic_Sensor2.distance()<300 and Ultrasonic_Sensor3.distance()<300:
poth() #서브미션 발동 조건
elif Ultrasonic_Sensor1.distance()<300 and Ultrasonic_Sensor3.distance()<300:
robot.drive(150,255-Ultrasonic_Sensor3.distance())#센서값이 클수록 더 많이 꺾는다
elif Ultrasonic_Sensor1.distance()<300 and Ultrasonic_Sensor2.distance()<300:
robot.drive(150,-1*(255-Ultrasonic_Sensor2.distance()))
elif Ultrasonic_Sensor1.distance()<300:
robot.drive(150,0)
else:
robot.drive(0,0)
s_pan=0
def screen_yuchan(): #초음파 센서의 값을 딜레이 없이 EV3스크린에 쓰는 함수
global s_pan
s_pan+=1
if s_pan>50: #카운트가 50보다 클때마다 스크린에 센서값을 작성한다
ev3.screen.clear()
ev3.screen.draw_text(0,0, str(Ultrasonic_Sensor1.distance())+'mm')
ev3.screen.draw_text(0,20, str(Ultrasonic_Sensor2.distance())+'mm')
ev3.screen.draw_text(0,40, str(Ultrasonic_Sensor3.distance())+'mm')
s_pan=0
main_pan=0
while 1:
screen_yuchan()
if Ultrasonic_Sensor1.distance()<50: #메인 코드 발동조건
main_pan=1
elif main_pan==1:
gogo()
반응형
'EV3' 카테고리의 다른 글
EV3 전압 값에 따른 전방 후방 각도 차이 | 유찬맨 (0) | 2022.02.25 |
---|---|
EV3 파이썬 에러 (모듈 인식) | 유찬맨 (0) | 2022.02.25 |
3분만에 EV3 블루투스 연결 방법 with Python | 파이썬 블루투스 연결 (1) | 2022.02.24 |
댓글