about Arduino

Posted by 알 수 없는 사용자
2015. 3. 29. 15:41 프로그래밍/사물인터넷

1. 아두이노란 ?




: 오픈 소스를 지향하는 마이크로 컨트롤러를 내장한 기기 제어용 기판이다. 컴퓨터 메인보드의 단순 비전으로 이 기판에 다양한 센서나 부품 등의 장치를 연결할 수 있다. 컴퓨터와 연결해 소프트웨어를 로드하면 동작을 하게 되므로 제어용 전자장치부터 로봇과 같은 것을 만들 수 있는 '오픈 소스 하드웨어'라고 할 수 있다.



2. Arduino IDE


 작성한 소스를 컴파일 합니다

 작성한 소스를 컴파일 한 후 컴파일된 이진코드를 아두이노 보드에 업로드 합니다

  새로운 문서를 엽니다

  기존파일이나 라이브러리 소스를 불러옵니다

  파일을 저장합니다


setup() 함수 : setup() 함수는 스케치를 시작할 때 불러옵니다.​ 초기 변수, 핀 상태, 사용 라이브러리 라이브러리 시작등에 사용합니다 

         setup기능은 전원이 켜졌을 때 혹은 리셋버튼을 눌렀을 때 한번만 실행됩니다


loop() 함수 : setup()을 생성한 후에 loop() 함수가 프로그램의 변화와 응답 내에서 연속적으로 작동합니다 



3. 기본예제

- LED On/Off

#define PIN 13  //13 번을 PIN이라는 글자로 별칭을 줍니다

 

 //13 번을 PIN이라는 글자로 별칭을 줍니다

 void setup() {

   pinMode(PIN, OUTPUT);  //13 번을 PIN이라는 글자로 별칭을 줍니다

 }

 

 //무한루프로 실제 수행할 동작을 코딩하는 함수

 void loop() {  

   digitalWrite(PIN, HIGH); //13번 핀으로 HIGH(1)를 디지털로 출력

   delay(1000);  //1초(1000밀리세컨드) 동안 대기해라

  

   digitalWrite(PIN, LOW); //13번 핀으로 LOW(0)을 디지털로 출력

   delay(1000);  

 }


디지털 핀으로 뭔가를 입력을 받을 때에는 digitalRead() 함수를 사용합니다.

반대로 디지털 출력을 할때는 digitalWrite() 를 사용합니다.  

 

아날로그 핀으로 입력을 할때에는 analogRead() 함수를 씁니다.

반대로 아날로그 출력을 할때에는 analogWrite() 를 쓰는데 이건 실제론 PWM(Pulse Width Modulation)이라는 기술을 씁니다.  


- 버튼 입력 받기




     #define BTN_PIN 2

 

      void setup() {

        Serial.begin(9600); // Baud rate(보율) : 통신속도

        pinMode(BTN_PIN, INPUT);

      }

 

 

      void loop() {

        int btn = digitalRead(BTN_PIN);

        Serial.println(btn); //시리얼모니터창에 출력

        delay(100);

      }






버튼을 눌렀을 때는 시리얼 모니터창에 1이 출력되고 버튼을 떼어놓으면 0이 출력되야 되는게 정상이다

하지만 하지만 버튼을 눌렀을 때는 1이 정확히나오지만 버튼을 떼버리면 0과 1이 마구잡이로 뜨게된다. 그이유는 바로 전문적인 용어로 플로팅이 발생해서 입니다


플로팅이란 외부환경이나 기타 자연계의 여러 이유로 깨끗한 0V가 아닌 미세한 전압이 영향을 주기 때문입니다



4. 풀업/풀다운 저항


: 플로팅 현상을 없애주고 전압을 원하는대로 꺠긋하게 보내주는 회로이다.




 - 풀업 저항







 스위치를 누르지 않을때에는 저항을 통과하여 무조건적으로 2번핀으로 전압이 통하게 됩니다. 이때 스위치를 닫게 되면 2번핀으로 가해지던 전압이 검은색선(GND)쪽으로 가게됩니다. 2번핀의 미세하게 입력되던 전압도 GND로 흐르게 되서 결국 2번핀에는 깨끗한 0V가 됩니다. 


그래서 스위치를 뗐을때는 전압이 가해져서 코드상으로 1이 나오게 되고 눌렀을때는 0V니까 코드상으로 0이 나오게 됩니다.

값이 반대입니다.












 - 풀다운 저항

 







-

스위치가 열렸을때는 신호선으로는 0V이고 미세한 전압은 GND쪽으로 갑니다.

 

그리고 버튼이 눌러졌을때는 신호선으로 전압이 가해지게 됩니다.

풀업과는 다르게 보통때는 0 눌렀을때는 1입니다.

 

직관적으로 생각하면 풀다운을 많이 쓸거 같지만 실제로는 풀업저항을 더 많이 씁니다.











※ 플로팅을 피하기위해서는 풀업/풀다운 저항의 사용하지 않을 수 없습니다. 하지만 풀업/풀다운 저항을 사용하기위해서 저항을 매번 새로 연결해야하기 때문에 여간 귀찮을수 있습니다.

    하지만 놀랍게도 아두이노 안에 내부회로에 이미 풀업저항이 이미 구성되어 있기 떄문에 코드수정만으로도 풀업저항을 사용할 수 있습니다.


void setup() {

   Serial.begin(9600);

   pinMode(BTN_PIN, INPUT_PULLUP);  // INPUT을 INPUT_PULLUP으로 교체

 }



5.출처


한국 아두이노 개발자 커뮤니티 이노데브         http://inodev.co.kr/

MechaSolution                                             http://blog.naver.com/roboholic84/220297061644