Python에서 아두이노 서보 모터 움직이기
먼저 아두이노에 쉴드를 연결한 후, 아래 사진과 같이 서보모터 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로 위 아래로 서보모터를 이동시킨다.