CodingMaker

Python에서 아두이노 서보 모터 움직이기 본문

Python

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로 위 아래로 서보모터를 이동시킨다.

0 Comments
댓글쓰기 폼