우선 opencv 가상환경을 불러옵니다.
pip install pyserial
을 통해 pyserial을 다운로드 받습니다.
우리의 목표는
카메라에서 원을 detect하고 원에 대한 정보를 아두이노로 전송합니다.
우선은 파이썬에서 작성한 코드를 전송하는거로 합시다
1초마다 0과 1을 전송합니다.
그러면 아두이노에서 0일 때 13번 핀의 LED를 깜빡이게 만듭시다.
(내장되어 있는 LED입니다)
우선은 아두이노를 실행합시다.
cd arduino
./ar (tab)
그리고 아두이노를 노트북과 연결합니다.
여기서 중요한 부분은
해당 명령어와 연관이 있는 것으로 보입니다.
(윈도우의 경우는 더 쉽게 찾을 수 있다고 하는데)
dmesg | grep tty
일단 시리얼 통신을 하기위해서는
포트 번호를 알고있어야한다.
또한 바이트 단위로 인코딩해서 파이썬에 넘겨주어야 하며,
파이썬은 인코딩된 데이터를 디코딩 해야한다.
코드를 작성하기 위해서는 이제
포트 번호를 확인해주어야한다.
윈도우의 경우는
https://m.blog.naver.com/seoulworkshop/221393935497
다음의 사이트를 참고하면 되지만
우분투니까
/dev/ttyACM0
import serial
import time
ser = serial.Serial('/dev/ttyACM0', 9600)
# 포트를 정의한다. 뒤에 붙는 숫자는 전송속도로 보임
while(True):
val = "1"
val = val.encode('utf-8')
ser.write(val)
print("LED Trun ON signal")
time.sleep(1)
val = "0"
val = val.encode('utf-8')
ser.write(val)
print("LED Trun OFF signal")
time.sleep(1)
다음의 오류가 발생한다.
모듈을 삭제하고 다시 받으라고한다.
해당 오류는 다음과 같다
https://stackoverflow.com/questions/11403932/python-attributeerror-module-object-has-no-attribute-serial
나는 시리얼을 담당하는 파일이라
serial.py라는 이름으로 만들었다.
그렇게 되면 모듈이 꼬인다는 이야기
serial.py를 다른이름으로 수정하도록하자.
아 또다른 이슈가 있다.
pyserial만 다운 받아져 있어야한다.
혹시 serial 모듈이 있다면 삭제한다.
pip uninstall serial
pip uninstall pyserial
삭제를 진행한 후에
pip install pyserial
로 진행하자.
오키 해결함
그러면 파이썬 코드에서 /dev/ttyACM0로 1과 0을 지속적으로 보내는 상태가된다.
이제 아두이노로 돌아오자고
1이라는 신호가 발생하면 LED를 켜고
0이라는 신호가 발생하면 LED를 끄자.
아두이노는 C기반임에 주의한다.
int input;
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
}
void loop() {
// 정보가 들어올 때까지 기다립니다. (파이썬 코드가 실행될때까지)
while(Serial.available()){
input = Serial.read();
}
if(input = '1')
digitalWrite(13, HIGH);
else if(input = '0')
digitalWrite(13, LOW);
}
아두이노 내부 LED가 깜빡거린다.
'ㅇ 프로젝트 > TEAM_스마트 팩토리' 카테고리의 다른 글
6. 서브모터 제작해서 분류완료하기 (0) | 2022.12.30 |
---|---|
5. 컨베이어 벨트와 합치는 중 (0) | 2022.12.30 |
4. 원을 검출하고 이를 시리얼 통신으로 아두이노 LCD에 기록하자. (0) | 2022.12.29 |
2. 스마트 팩토리 구체화하기 (0) | 2022.12.27 |
1. IOT 스마트 팩토리 구상 및 주제 선정 (0) | 2022.12.27 |