안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.
코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.
업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.
아주 오래 전에 아두이노로 파이썬으로 제어하는 법을 알아보고 모터 제어하는 방법도 포스팅 하겠다고 해놓고 이제서야 포스팅 해봅니다.
2021.12.18 - [파이썬 패키지/아두이노] - [Python/Serial] 파이썬으로 아두이노 제어하기
[Python/Serial] 파이썬으로 아두이노 제어하기
안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다. 코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도
coding-kindergarten.tistory.com
예전에 했던 프로젝트를 정리하는 느낌으로 포스팅 해보겠습니다.
이 글을 보시는 대부분의 분들께서는 이미 아두이노를 아신다는 가정하에 글을 썼으니, 이 점 참고 부탁드립니다.
1. 개념도
저의 경우엔 차트를 180도 회전시키는 프로젝트를 진행했었는데 전원이 꺼지면 원점 정보를 잃어버리는 스텝 모터를 보완해주기 위해서 리미트 센서도 함께 사용했었습니다.
2. 준비물
1) 스테핑모터 NK243-01AT 2상스테핑모터, 23,100원
2) 아두이노 우노
3) 아두이노 L293D 모터 드라이버 쉴드
4) 리미트 센서
5) 9V 1A 전원 어댑터
3. 배선
저는 모터 구매 사이트에서 알려주는 배선도와 모터 케이블의 색깔이 달라서 배선에 매우 애를 먹었었습니다.
참고로 GND에 빨간색과 파란색 선을 연결해주지 않아도 모터가 돌아는 가지만 소음이 심하고 힘도 부족합니다.
4. 아두이노
아두이노 모터 드라이버 쉴드를 사용하기 위해서는 Adafruit Motor Shield library라는 라이브러리를 설치해주어야 합니다.
아래는 아두이노 코드입니다. 앞서 말씀드렸 듯이 스텝모터와 리미트 센서를 함께 사용했기에 조금 코드가 깁니다.
혹시나 필요하실 분들을 위해 함께 남겼고, 스텝모터만 제어하실 분들은 더 아래의 코드를 이용해주세요.
#define OFFMODE 0
#define CW 1
#define CCW 2
#include <AFMotor.h>
int sensorPin = 2;
int flag_start;
AF_Stepper motor(200, 2);
char cmd;
int state = OFFMODE;
void setup() {
Serial.begin(9600);
motor.setSpeed(8);
pinMode(sensorPin, INPUT);
// 가장 처음 스텝모터의 원점을 잡기 위한 코드
while(true){
int val = digitalRead(sensorPin);
if(val==1){
break;
}
Serial.println(val);
if(val==0){
motor.step(1, FORWARD, MICROSTEP);
}
Serial.println(val);
if(val==1){
break;
}
}
}
void loop() {
if(Serial.available()){
cmd = Serial.read();
}
if(cmd=='a'){
state=CW;
}else if(cmd=='b'){
state=CCW;
}else{
state=OFFMODE;
}
if(state==CW){
motor.step(100, FORWARD, MICROSTEP);
delay(1000);
state=OFFMODE;
}
else if(state==CCW){
motor.step(100, BACKWARD, MICROSTEP);
delay(1000);
state=OFFMODE;
}
else{
state=OFFMODE;
}
}
<리미트 센서 제외한 스텝모터 제어 코드>
#define OFFMODE 0
#define CW 1
#define CCW 2
#include <AFMotor.h>
//모터 셋팅(360도를 200step으로 설정, 모터 드라이버 쉴드 2번 포트 사용)
AF_Stepper motor(200, 2);
char cmd;
int state = OFFMODE;
void setup() {
Serial.begin(9600);
motor.setSpeed(8);
pinMode(sensorPin, INPUT);
}
void loop() {
if(Serial.available()){
cmd = Serial.read();
}
if(cmd=='a'){
state=CW;
}else if(cmd=='b'){
state=CCW;
}else{
state=OFFMODE;
}
//모터 정회전(180도)
if(state==CW){
motor.step(100, FORWARD, MICROSTEP);
delay(1000);
state=OFFMODE;
}
//모터 역회전(180도)
else if(state==CCW){
motor.step(100, BACKWARD, MICROSTEP);
delay(1000);
state=OFFMODE;
}
else{
state=OFFMODE;
}
}
5. 파이썬 코드
import serial
import time
py_serial = serial.Serial(
# serial port 설정
port = "com3",
# 보드 레이트 (통신 속도)
baudrate=9600
)
while True:
commend = input('아두이노에게 내릴 명령:')
#정회전
commend = 'a'
py_serial.write(commend.encode())
#역회전
commend = 'b'
py_serial.write(commend.encode())
오늘 준비한 내용은 여기까지입니다.
감사합니다.
'파이썬 패키지 > 아두이노' 카테고리의 다른 글
[Python/Serial] 파이썬으로 아두이노 제어하기 (12) | 2021.12.18 |
---|