[아두이노#579] 서보모터(SG90)의 가변저항값을 측정해서 아날로그 피드백 서보모터로 티칭 기능 구현해보기!(녹칸다의 아두이노)
프로그래밍/로봇팔(robotarm) 2023. 11. 22. 23:03
https://youtube.com/live/h-DIrej9crc
[아두이노#579] 서보모터(SG90)의 가변저항을 측정해서 아날로그 피드백 서보모터로 티칭 기능 구현해보기!(녹칸다의 아두이노)
녹칸다의 아두이노 시리즈이다!
서보모터 개조방법
https://blog.naver.com/jangstargosu/223218981142
아두이노로 어렵지 않게 서보모터의 각도를 제어할 수 있다.
0~180도 사이로 각도를 제어할 수 있는 것이다.
그리고 아두이노의 내장된 서보모터 라이브러리에는 현재 서보모터의 각도가 몇도인지를 알아내는 함수가 있다.
(그러나) 엄밀히 말해서 아두이노가 서보모터의 현재 각도를 측정을 한다기 보다는 마지막으로 제어한 서보모터의 각도를 변수로 저장하고 있는 것이다.
계속 작동중이라면 현재위치라는 개념과 마지막 위치가 동일하겠지만 아두이노가 재부팅되게 되면 문제가 생긴다.
아두이노가 서보모터를 90도위치로 회전시켜두고 재부팅 되었다면 아두이노 입장에서는 서보모터의 각도를 알 수 없다.
(물론 시작할때 초기각도로 이동시킨다면 이야기가 달라짐)
이번편의 핵심은 아두이노가 서보모터의 현재 위치를 직접 측정을 하는 것이다.
그것이 가능하도록 디자인 된 것이 아날로그 피드백 서보모터란 용어를 사용하는 듯하다.
문제는 이러한 기능이 있는 서보모터는 학습용이 아니고 산업용이라 가격이 대단히 비싸다는 것이다.
대부분의 서보모터는 작동원리가 동일하다.
내부에 모터가 있고 가변저항이 있다.
서보모터 스스로 가변저항값에 따라서 모터를 정회전/역회전 하면서 위치를 설정하는 것이다.
여기서 아두이노가 서보모터의 가변저항값을 아날로그값으로 읽어올 수 있다면 서보모터의 각도값을 알아낼 수 있다.
그러기 위해서는 SG90의 뚜껑을 열어서 가변저항에 선을 1개 납땜해주는 개조작업이 필요하다.
그리고 가변저항선을 아두이노의 아날로그입력핀에 연결하면 선형적으로 아날로그값이 바뀌기 때문에 각도를 측정할 수 있다.
아두이노가 서보모터의 각도를 알 수 있다면 재미난 작업을 할 수 있다.
녹칸다가 일정한 시간동안 서보모터의 각도를 물리적으로 변경하면서 레코딩을 할 수 있다.
그리고 아두이노가 레코딩된 서보모터의 각도값을 그대로 재현해내는 것이 가능하다.
이런 방식을 티칭이라는 용어를 사용하는듯 하다!
물리력으로 서보모터의 각도를 변경시키고 그대로 재현해내는 학습이 가능하다는 것이다.
이번편(전편)에서는 서보모터(SG90) 1개를 어떤전략으로 활용할지에 대해서 알아보고 후편에서 서보모터 4개가 부착되어있는 아크릴 로봇팔을 이용해서 본격적으로 로봇팔에 티칭기능을 구현해보도록 한다.
시연하는 모터나 로봇팔이 정밀하지 않고 부실하기 때문에 정확성에 대해서는 논하지 않도록 한다.
(참고자료)
1.예제1번을 작동시키기 위해서는 시리얼모니터에 종료문자로 라인피더를 적용시켜줘야함!(새줄)
2.예제5분부터는 시리얼모니터에 새줄이라고 선택해논것을 라인엔딩없음 으로 선택할것!
3.순차반복작업에서 A라는 위치와 B라는 위치를 지정했을 경우 A에서 B로 이동할때 servo.write함수를 사용하게 되면 서보모터가 최대속도로 회전하게된다!
4.해결방안은 A위치에서 B위치까지 사이에 여러가지 단계를 둬서 천천히 이동되도록 해야한다!
(예제)
1.아두이노가 녹칸다에게 시리얼입력으로 각도값을 입력받아서 제어되도록 만드시오!(PC와 아두이노간 통신)
2.예제1번에서 측정한 아날로그값을 각도값으로 환산하시오!
3.아두이노가 가변저항값을 스스로 인식해서 각도값을 계산하도록 만드시오!(모든 서보모터의 대응하기 위한 예제)
4.녹칸다가 서보모터의 회전축을 물리력으로 회전시켰을때의 각도값을 측정하시오!
5.녹칸다가 서보모터의 현재위치를 1~5까지 번호를 붙혀서 5개 지정할 수 있다! 서보모터의 현재위치에서 숫자1을 누르면 1번위치로 저장하고 3을 입력하면 3번위치로 저장한다. A를 입력하면 1번위치로 서보모터를 이동시키고, B를 입력하면 2번위치로 이동하고 순서대로 C=3,D=4,E=5의 위치로 이동시킨다!
6.예제5번에서 기억한 5개의 위치를 이용해서 F를 입력하면 1번위치에서 5번위치까지 1초간격으로 이동(반복)하고 G를입력하면 중지된다!(순차반복작업)
7.예제6번에서 순차반복작업을 멀티태스킹개념으로 적용해보시오!
8.녹칸다가 아두이노에게 1이라는 명령을 전송하면 10초동안 서보모터의 움직임을 레코딩하고 2라는 명령을 보내면 레코딩했던 내용을 그대로 재생한다!
9.예제8번에서 아두이노에 버튼2개를 연결해서 1버튼을 누르면 10초간 레코딩을하고 2번버튼을 누르면 재생하도록 하시오!