CodingMakerPython Python에서 아두이노 서보 모터 움직이기메이커K 2018. 5. 8. 11:24 먼저 아두이노에 쉴드를 연결한 후, 아래 사진과 같이 서보모터 2개를 각각 쉴드에 연결한다. 신호의 노란 선이 각각 D8과 D7에 연결한다. 파이썬 import serial arduino = serial.Serial('COM12',9600) while(1): c=input() if c =='q': break else: c=c.encode('utf-8') arduino.write(c) 파이썬에서 위의 코드를 입력한다. COM12에 아두이노가 연결되어 있기 때문에 COM12로 입력한다. 스케치에서 확인한다. 입력이 끝나면 Ctrl+F5 키를 누른다음 아래 창이 뜨면, 1~4중 하나의 값을 입력하면 서보모터의 각도가 5도씩 움직인다. 아두이노 #include <Servo.h> Servo myservoH; // create servo object to control a servo Servo myservoV; int posH = 90; int posV = 90; void setup() { myservoH.attach(8); // 서보모터를 쉴드의 8번에 연결한다. myservoV.attach(7); // 서보모터를 쉴드의 7번에 연결한다. Serial.begin(9600); } void loop() { while (Serial.available() > 0) { long value = Serial.parseInt(); int backUpH = posH; int backUpV = posV; switch (value) { case 1: //posH = posH - 5; 같은 표현이다 posH -= 5; posH -= 5; break; case 2: posH += 5; break; case 3: posV -= 5; break; case 4: posV += 5; break; } if (posH<0 || posH>180) { posH=backUpH; } if (posV<0 || posV>180) { posV=backUpV; } myservoH.write(posH); myservoV.write(posV); } } 파이썬 import cv2 import serial arduino = serial.Serial('COM12',9600) cap = cv2.VideoCapture(0) while(True): # Capture frame-by-frame ret, frame = cap.read() cv2.imshow('frame',frame) key = cv2.waitKey(1) & 0xFF if key == ord('q'): break elif key ==ord('a'): #왼쪽 arduino.write(b'1\n') print(b'1\n') elif key ==ord('d'): #오른쪽 arduino.write(b'2\n') print(b'2\n') elif key ==ord('w'): #위 arduino.write(b'3\n') print(b'3\n') elif key ==ord('s'): #아래 arduino.write(b'4\n') print(b'4\n') # When everything done, release the capture cap.release() cv2.destroyAllWindows() frame이라는 이름의 비디오 화면이 나타나며 키보드의 a 와 d로 오른쪽 왼쪽으로 서보모터를 이동시키고 키보드의 w와 s로 위 아래로 서보모터를 이동시킨다. 라즈베리파이 같이 파이썬으로 제어 가능한 장치가 있을때 서보모터를 제어하는 기초적인 방법이다. 1. 회로도서보모터의 경우 아래와 같이 연결시켜주면 된다.
2. 파이썬 코드
참고 자료
|