Chapter 1. Arduino UNO R3 기초
• Arduino(아르두이노) 보드는 간단한 I/O보드와, Processing/Wiring 언어를 이용한 개발
환경을 기반으로 하고 있다
• Flash, Processing, Max/MSP, Pure Data 와 같은 소프트웨어와 쉽게 연동되어 스크린
베이스의 미디어 작품에도 쉽게 연동하여 사용할 수 있습니다
• Mac OS X, Windows, Linux용 버전으로 준비 되어 있는 오픈 소스로 통합개발환경(IDE)
프로그램을 www.arduino.cc 에서 자유롭게 무료로 다운로드 받아 사용할 수 있다
[ Arduino 개발툴 ]
• 간단하게 USB를 통해서 프로그래밍 하고 시리얼 통신까지 가능
Chapter 2. Digiter입력, 출력 사용
• 아두이노는 디지털 입력, 디지털 출력을 사용하는게 기본이다
• 디지털 입력이라고 하면 스위치가 눌렸는지 등을 체크한다
디지털 입력 단자로 5V가 감지되면 ON, 0V이면 OFF로 인식할 수 있다
• 디지털 출력은 반대로 출력하면 5V가 나가고, 출력을 끄면 0V가 나가는 동작을 말한다
예를들면, 출력을 ON하면 LED가 켜지고, 출력을 OFF하면 LED가 꺼진다
EX) 프로그램 초안
Int ledPin = 13; // 전압이 출력될 핀번호 변수에 설정
void setup() { // setup 함수안의 코드는 프로그램이 시작되면 딱 한번만 실행된다 pinMode(ledPin, OUTPUP); // 핀의 출력 방향을 out으로 설정, 5V를 내보낼 수 있다 }
void loop() { // loop 함수안의 코드는 반복적으로 계속 실행된다 }
|
• 위의 그림에서 빨간색으로 표시한 부분의 핀이 디지털 입력 또는 출력으로 사용할 수 있는 핀이다
• 우측부터 0 ~ 13번까지 설정되어 있으며, 0 ~ 13번 핀은 다른 기능으로도 사용할 수 있다
• 핀의 디지털 입력 출력 설정을 꼭 한번 하여야 그 해당 핀들을 사용할 수 있다
EX) 디지털 출력
• 13번 핀은 출력으로 지정되었으므로 loop() 함수안에서 5V를 줬다가 끊었다가를 반복하면
13번 핀에 연결된 LED같은 것에 전원을 넣었다 뺏다 할 수 있어 깜빡거리는 효과를 만들 수 있다
[ 위 예제 회로도 ]
[실행 결과]
EX) 디지털 출력
• 위의 코드에서 buttonPin이라는 변수에 12번을 설정하고, pinMode()함수를 이용하여
12번 핀을 INPUT으로 설정 하였다
[ 위 예제 회로도 ]
• 그림과 같이 스위치를 12번핀과 5V핀 사이에 연결한다. 그리고, 저항 10K옴을 GND와 12번 핀 사이에 연결
• 스위치를 누르면 5V전압이 스위치를 통과하여 12번 핀으로 들어가 전압이 가해지고, 스위치를 띠면
12번 핀은 저항을 통해 항상 GND에 연결이되어 0V전압이 내려간다
[ 실행 결과 ]
• digitalRead(핀번호) 함수를 호출하면 핀 번호의 포트의 전압값을 얻어 옵니다.
스위치가 눌렸을 때 5V가 되므로 HIGH, 스위치를 누르지 않았을 때 0V이므로 LOW를 리턴
• 눌렸을 때만 HIGH가 되므로 누르고 있으면 LED는 점멸하게 된다.
[ 실험 영상 ]
Chapter 3. Analog 센서 입력 사용
• 아두이노에서 센서를 연결한다고 하는 말은 대부분이 아날로그 센서 연결을 말한다
• 거리측정, 온도측정, 무게(압력) 측정 등이 종종 사용하는 센서를 뜻한다
• "얼마"라는 값을 우리는 간단히 아날로그라고 한다. 물리적량을 표현하는 방식
디지털이란 "있다" "없다"의 값만 갖는 값을 말한다.
[ 아두이노 아날로그 포트 ]
• 아두이노는 6개의 아날로그 포트가 있다.
다시말하면, 아날로그 센서를 동시에 6개까지 장착할 수 있다.
Chapter 4. 아두이노 시리얼통신
• http://arduino.cc/en/Reference/Serial 링크에 가면 모든 시리얼 통신을 위한 함수가 존재한다.
함수 | 기능 |
begin( ) | 시리얼통신을 시작할 때 꼭 속도값을 지정하여 초기화 합니다 |
end( ) | 시리얼 통신 자체를 불능으로 만든다 |
available( ) | begin 함수 호출 후 Rx로 어떠한 값이라도 들어오면 true가 됩니다 |
read( ) | 현재 받아진 rx값을 한 byte읽어옵니다 |
flush( ) | 현재 받아진 Rx버퍼에 있는 데이터들을 모두 깨끗이 지웁니다 |
print( ) | 시리얼 통신으로 캐릭터를 보냅니다 |
println( ) | 시리얼 통신을 스트링을 보냅니다 |
write( ) | 시리얼 통신으로 hex값을 보냅니다 |
• Serial.available( ) 삼수는 시리얼통신 Rx버퍼에 어떠한 신규데이터가
• 위의 코드는 시리얼 통신으로 '1'이라는 캐릭터가 들어오면 13번 핀에 연결한 빨간 LED가
• 간단한 코드는 available( ) 체크하는 if안에서 처리하면 되지만, 좀 내용이 길어지면
• 왜냐하면, 계속 데이터가 빠르게 들어오는데, 로직을 처리하느라 available( )체크하는 if에
다다르는데 시간이 걸려 그 사이에 들어온 값들을 읽을 수 없게된다
• 기타 블루투스나 지그비, 이더넷 모듈도 신호 선은 아두이노의 RX, TX핀에 연결하도록
되어있다. 전원 5V만 공급하고, GND연결하고 RX, TX서로 cross로 연결하면 된다
• 위의 그림은 유명한 지그비 모듈인 Xbee를 연결한 모습이다
• 전원 (빨강, 검정)을 연결하고 Xbee의 Tx나 Dout은 아두이노의 Rx(0번핀)에
Xbee의 Rx나 Din은 아두이노의 Tx(1번핀)에 연결한다
• 다른 모듈들도 보면 전원과 Tx와 Rx를 이렇게 cross로 연결하는 구조이다
※ 아두이노의 시리얼 포트를 사용하는데 약간의 트릭이 필요하다. 특히, 시리얼 통신을
아두이노는 하드웨어적으로 시리얼통신을 지원하는 포트는 1포트이다만 소프트웨어적으로
지원하는 라이브러리가 있다. 시리얼통신이 모잘라 사용하게 되지만, 추천하지 않는다.
Tx전용으로 쓴다면 괜찮지만, 시리얼통신과 함께 사용할때는 약간의 문제가 발생될 수 있다
Chapter 5. CDS(광센서)를 활용한 LED제어
• CDS와 디지털 입출력포트 그중에서도 PWM포트를 사용하여 LED를 통하여
const int CDS = A0; // CDS의 값을 입력받을 포트 설정(아날로그 0) const int LedPin = 9; // PWM방식으로 LED를 제어할 포트 설정(Pin 9 PWM방식) int LED_Value = 0; // LED의 출력값 int CDS_Value = 0; // CDS로부터 들어오는 입력값 int Mode = 0; // LED의 값유지를 위한 모드 설정 변수
void setup() { // 통신속도 설정 Serial.begin(9600); // 핀의 출력방향 설정 pinMode(LedPin, OUTPUT); pinMode(CDS, INPUT);
}
void loop() { // 값이 크기 때문에 최대값 255로 만들기 위해 나누기 4 CDS_Value = analogRead(CDS) / 4; // CDS로부터 들어오는 값을 // Serial Monitor를 통하여 확인 Serial.print("sensor = "); Serial.println(CDS_Value); delay(10);
if(CDS_Value <= 100) // CDS의 값이 100이하면 LED켜짐 { // CDS의 값이 100이하일 때 LED가 계속 꺼졋다 켜졌다를 방지하기 위한 모드 설정 // CDS의 값이 100이하이면서 모드가 1이면 최대값 255값 유지 if(Mode == 0) { for(int i = 0; i <= 255; i++) { analogWrite(LedPin, i); delay(20); } Mode = 1; } else { analogWrite(LedPin, 255); // LED가 켜지는 최대 } } else { if(Mode == 1) { for(int i = 255;i >=0 ; i--) { analogWrite(LedPin, i); delay(20); } Mode = 0; } else { analogWrite(LedPin, 0); } }
}
|
• CDS로부터 값을 받기 위해서 아날로그핀 0번 사용
• LED는 출력을 해야 하므로 PWM방식을 지원하는 9번포트를 사용
• CDS_Value = analogRead(CDS) / 4;
CDS를 통해 읽어드린 값이 숫자가 크기 때문에 값을 4로 나누어 변수에 저장
• 그리고 이값이 100보다 작아지면 LED를 켜주고 100보다 커지면 LED를 꺼준다
• 아날로그로 출력하기 때문에 analogWrite를 사용하였으며 LedPin은 설정한 핀의 이름 뒤에
• 0이면 LED는 꺼지고 255이면 LED는 최대 밝기로 켜진다
[ Serial Monitor 을 이용한 CDS값 확인 ]
• 가리지 않았을 때 100이상 값을 출력 (LED off)
• 손으로 가렸을 때 100이하값 출력 (LED on)
Arduino Dot Matricx 제어 (0) | 2016.12.23 |
---|---|
Ardoino Servo 모터 제어 (2013.03.14) (0) | 2016.12.23 |
Arduino 온도센서[LM35DZ] (2013.03.13) (0) | 2016.12.23 |
Arduino RGB LED 제어 (2013.03.12) (0) | 2016.12.23 |
아두이노 (위키백과) (0) | 2016.11.21 |