L293D Motor Shield+DC MOTOR 제어 (아두이노)
L293D Motor Shield+DC MOTOR 제어 (아두이노)
- 온라인 가상시뮬레이터 : https://www.tinkercad.com
지난 시간에 74HC595 칩을 이용하여 2개의 L293D 칩을 제어함으로써 4개의 DC Motor를 제어를 가상시뮬레이터에서 실험을 하였습니다. 오늘은 L293D Motor Shield를 이용하여 실제로 DC Motor를 제어하는 실험을 하겠습니다.
![](https://steemitimages.com/500x500/https://i.imgur.com/C8tLf07.jpg)
1. L293D Motor Shield
![](https://steemitimages.com/350x350/https://i.imgur.com/GhJmjXb.jpg)
- A : 전원핀
- B : Servo핀
- C :외부전원사용선택
M1, M2, M3, M4은 DC Motor 제어핀으로 총 4개의 DC Motor를 제어 할 수 있습니다. 참고로, M1, M2핀을 두개를 합치면 Stepper Motor를 제어할 수 있다. L293D Motor Shield은 비슷하지만 약간씩 다른 형태를 취하고 있는데 제가 사용하는 Motor Shield은 디지털핀을 꼽을 수 있는 곳이 없습니다. 아날로그핀은 오른쪽 하단에 A0~A5까지 꼽을 수 있게 되어 있지만 위에 0~13번까지의 디지털핀은 납땜하거나 선을 아두이노와 쉴드 사이에 묶어야 연결할 수 있기 때문에 좀 불편합니다.
핀을 많이사용할 경우 제가 쓰고 있는 L293D Motor Shield은 좀 문제가 있겠죠. 제가하는 실험은 A0~A5번핀 정도만 있어도 충분히 실험할 수 있기 때문에 사용하는데에는 문제는 없습니다.
2. L293D Motor Shield+DC MOTOR 회로도
- 준비물 : L293D Motor Shield, DC Motor 1개, 외부전원, 아두이노우노
- 내용 : 아두이노 위에 L293D Motor Shield를 꼽으면 됩니다. 참고로 M3 위치에 DC Motor 하나를 연결
- 모터 쉴드 이미지 출처 : https://github.com/adafruit/Fritzing-Library/blob/master/parts/Adafruit%20Motor%2C%20Stepper%20%26%20Servo%20Shield.fzpz
![](https://steemitimages.com/500x500/https://i.imgur.com/po1QNHN.jpg)
동일한 L293D Motor Shield 이미지를 찾았는데 못 찾고 가장 유사한 이미지로 회로도를 표현했는데 거의 동일한 L293D Motor Shield 이미지라고 생각하셔도 무방합니다. L293D Motor Shield를 아두이노우노 위에 꼽으면 됩니다 하나의 몸체로 만드시고 외부전원은 보시는 것과 같이 핀에 연결하고 DC Motor은 실험에서는 M3에 연결했습니다. 참고로 실험하실 때 원하는 위치 M1~M4 중에서 선택하셔서 실험하시면 됩니다.
3. L293D Motor Shield 라이브러리 설치
라이브러리 관리자에서 "Motor shield" 라고 치시면 여러개가 검색됩니다. 비슷한 이름의 두개의 버전이 있는데 빨간색으로 표시한 라이브러리를 설치하시면 됩니다.
![](https://steemitimages.com/500x500/https://i.imgur.com/cOg3yLK.jpg)
그리고 라이브러리 혹시 검색이 안된다면 위 라이브러리 출처에 가셔서 다운받아서 설치하시면 됩니다.
주의사항 : 실제 실험에 사용하시는 Motor Shield에 맞는 라이브러리를 설치해야 합니다. 다른 Motor Shield라면 다른 라이브러리를 찾아서 설치해야 합니다.
4. 코딩
DC Motor
#include <AFMotor.h>
- AF_DCMotor motor(3) : M3핀을 DC Motor 제어용으로 사용.
- motor.setSpeed(200) : 모터 속도
- motor.run(FORWARD) : FORWARD, BACKWARD, RELEASE 회전 명령
2초 단위로 전진, 후진, 정지를 테스트 명령을 내려 볼까요.
motor.run(FORWARD);
delay(2000);
motor.run(BACKWARD);
delay(2000);
motor.run(RELEASE);
delay(2000);
라이브러리를 이용하니깐 따로 코딩할 부분이 없습니다. 무지 간단하게 DC Motor를 제어할 수 있습니다. 이미 가상시뮬레이터에서 동작 원리와 제어 코딩에 대해 배웠으니깐 따로 설명은 안드리겠습니다. 라이브러리를 이용하면 motor.run() 함수를 이용하여 DC Motor 회전제어에 대한 명령을 한줄로 내릴 수 있게 되었고 위와 같은 코딩은 구지 설명을 안하더라도 전진, 후진, 해제라는 의미만으로 무슨 명령인지 쉽게 알 수 있을거라 생각합니다.
테스트 할 전체 코딩
#include <AFMotor.h>
AF_DCMotor motor(3);
void setup() {
motor.setSpeed(200);
motor.run(RELEASE);
}
void loop() {
motor.run(FORWARD);
delay(2000);
motor.run(BACKWARD);
delay(2000);
motor.run(RELEASE);
delay(2000);
}
5. 결과
마무리
오늘 실험은 지난 시간의 가상시뮬레이터로 실험한 내용과 동일합니다. 단지 차이점을 실제로 실험하는 것과 Motor Shield 라이브러리를 사용한다는 점만 다를 뿐이죠. 실제로 라이브러리를 이용하니깐 DC Motor를 제어하는 데 그렇게 어렵지 않죠.
motor.run(FORWARD) => 전진
motor.run(BACKWARD) => 후진
motor.run(RELEASE) => 해제(정지)
이 세가지 명령을 통해 DC Motor를 마음대로 회전 시킬 수 있게 되었습니다. 그리고, motor.setSpeed(속도) 함수로 원하는 속도로 회전을 시킬 수 있게 되었습니다.
DC Motor 1개를 오늘 배운 것처럼 어렵지 않게 제어 했으니깐 DC Motor 2개를 제어하더라도 어렵지 않게 제어가 가능하겠죠.
DC Motor 2개가 있으면 2륜 RC카를 만들 수 있습니다. 오늘 배운 회전 관련 3개의 함수와 속도함수 1개만 알면 RC카 구현도 어렵지 않을 거라 생각됩니다.
한번 여러분들은 오늘 배운 4개의 함수를 가지고 RC카 구현에 대해 상상의 나래를 펼처 보세요.
와.... 전전전 혹은 공대 오빠다....
공대 출신은 맞는지만 하드웨어랑은 안친한 소프트웨어쪽에 관심 많은 사람입니다. ^^
오~, 공대 오빠! 요즘 인기짱이라는~ ^^
저는 문송이라는... ㅠㅠ
오히려! 스팀API 코딩하면 더 인기짱일 듯요. ^^
스팀API ???? 한국말로~
이참에 steem.js api 함수랑 javascript 언어를 한번 배워보세요.
자신만의 스팀 상황판을 만들 수 있고 그걸 통해서 효율적으로 스티미언 활동을 할 수 있어요.
진짜 스팀코딩을 알게되면요 신세계가 펼쳐집니다.
Compiler 는 어떤걸 사용하세요?
아두이노 IDE를 사용합니다.
기본 함수들은 다 제공되고 아두이노싱글보드에 프로그램을 업로드 하기 쉽게 되어 있어서 비전공자분들도 쉽게 아두이노를 접할 수 있게 되어 있어요.
참고로 아두이노 IDE은 C++기반으로 코딩을 할 수 있게 되어 있어서 참 편해요
짱짱맨 호출에 출동했습니다!!
고팍스에서 MOC상장 에어드롭 이벤트를 진행합니다.
혜자스러운 고팍스!
https://steemit.com/kr/@gopaxkr/moc
짱짱맨 방문에 감사합니다.
국민인사드림니다.방가방가반가워요
방갑습니다.
천간님, 오랜만이네요. 여전히 액티브하시군요. 제가 진도를 따라가지 못해서리,,,
아들과 여전히 즐겁게 하고 있습니다. 이번 달부터 아들과 저녁에 같이 30분만 같이 즐기기로 했으니,,,조금 만회하지 않을까요? 항상 감사해요. 주변에스팀하시는 학부모들에게도 천간님 알려드렸어요.
알려드리면 안돼요! 챙피함!
그냥 예전에 실험했던가 복습차원으로 블록체인에 기록을 남기는 것 일 뿐이죠.^^
앗,,, 아두이노라는 단어만 들려도 저는 추천하는데...한 지인은 그것때문에 코인도 안하면서 스팀 가입했어요. 너무 훌륭한 자료와 설명이라 아는 척해야 하는 아빠들에게는 구세주와 같은 분이세요. 자심감을 가지셔도,,,
항상 응원합니다.
그렇게 생각해 주셔서 감사합니다.