아두이노 개발환경
 


a. 컴파일 버튼 : 소스코드 편집기에 있는 내용을 컴파일한다.  소스코드에 문법적인, 구조적인 에러가 없는지 확인하여 메시지 영역에 표시된다.

b.업로드 버튼 : 컴파일 + 업로드를 일괄작업 실행한다. 소스를 컴파일해서 아두이노에   올려주는 과정까지 이 버튼 하나로 실핸된다. 소스코드에 문제가 있거나 아두이노와의 USB 연결에 문제가 있거나 업로드 과정에 문제가 있는 경우 메세지 영역에 표시된다.

c.시리얼 모니터 버튼 : 이버튼을 누르면 별도의 시리얼모니터 창이 표시된다.  USB로 PC 와 연결된 상태로 아두이노가 동작하면 아두이노에서 PC로 메시지를 보낼 수 있는데, 이 Serial Monitor를 통해 그 메시지를 확인할 수 있으므로 보통 디버깅 용도로 사용한다.

d.소스코드 편집기 : 아두이노 소스코드를 일력하고 편집하는 영역.

e.메시지 영역 : 아두이노 개발환경을 사용하면서 발생하는 알림 메시지나 컴파일, 업로드 결과 등등 메시지가 표시되는 영역.

 

아두이노 프로그래밍 언어

 

아두이노에서는 C 언어를 사용한다.  기본적으로 C언어 작성문법이 그대로 적용되므로 여기에서는 아두이노용으로 추가된 함수나 아두이노에서 다른 부분에 대한 설명만을 한다. 

따라서 C언어에 대해 기본지식이 없는 사람은 다른 책자나 다음 링크된 자료 등으로 C언어 기본문법에 대한 사전학습이 필요하다.  
http://playground.arduino.cc/uploads/Main/arduino_notebook_v1-1.pdf
 

1. 아두이노에서의 DATA TYPE 
 1) HIGH/LOW : 입출력핀을 통해 전류의 흐름을 제어할 때 가해지는 전압을 지정하기 위한  값으로서 HIGH는 5Volt를 의미하며 LOW는 0Volt를 의미한다.

 

2) int : 정수를 의미하는 것은 일반적인 C언어와 같으나,  아두이노에서는 -32,768 ~ 32767까지 범위의 숫자만 사용할 수 있고 더 큰 정수를 사용하고자 할 경우에는 long 타입을 사용 해야 한다는 것이 유의해야 한다. 예를 들어 int 타입 변수의 현재 값이 32,767인데 여기에 1을 더하면 -32,768이 되어버리므로 프로그램 작동이 엉망이 되어 버릴 수 있다.

 

3) TRUE/FALSE : 조건문 등에서 사용하기 위한 상수로서 TRUE는 1, FALSE는 0 값이 사용되는 것으로 되어 있으나 실제로는 0이면 FALSE, 기타 모든 값은 TRUE로 판정된다.
 

 2. 핀단자를 통해 연결되는 부속장치들을 제어하기 위한 함수. 

1) pinMode(pin,mode) :  pin에 지정하는 번호의 핀을 지정하는 mode(INPUT또는OUTPUT)로 사용하겠다고 선언한다. 예를 들어 pinMode(5,OUTPUT)하면 디지털 5번핀을 출력용으로 사용하겠다는 의미이다.

digitalRead(pin)  : pin에 지정된 디지털핀으로 입력되는 신호값을 읽어 들인다.  결과값은 HIGH (5V) 또는 LOW( 0V) 둘 중 하나의 값인데, 3V를 기준으로 이보다 크면 HIGH값으로, 낮으면 LOW값으로 판정된다.  
 
2) digitalWrite(pin,value) : pin에 지정된 번호의 핀에 value(HIGH 또는 LOW) 값을 출력하라는 함수이다. 즉 digitalWrite(3,HIGH) 를 실행시키면 디지털 3번핀에 5V 전압 전류가 흐르게  된다. 

 

3)analogRead(pin)  : pin에 지정된 아나로그핀으로 입력되는 신호값을 읽어 들인다. 디지털 신호값은 HIGH 또는 LOW 둘중 하나 이지만 아날로그핀에서는 이를 세분하여 0 ~ 1023까지의 숫자로 구분해 준다. 따라서 ON/OFF 등 단순한 구분이 아닌 스피커볼륨의 크기나  각종 센서들의 저항값을 세밀하게 구분할 때 등에 사용할 수 있다.  

 

4) analogWrite(pin,value) :  함수이름은 아날로그이지만 디지털핀에 출력하는 함수이다. 단  아날로그처럼 세분된 값을 출력하기 위해 PWM방식 (Pulse Width Modulation:  전압은  동일하되 출력되는 시간 간격을 조절하여 전체적인 출력량을 조절하는 방식)으로 출력한다. 출력량을 조절하여 출력할 수 있으므로  LED전구의 밝기를 조절하거나 모터의 동작을 제어하기 위한 용도로 활용할 수 있는데, 아두이노나노의 경우 3, 5, 6, 9, 10, 11번핀 총 6개 핀만 이런 용도로 사용할 수 있다.


3. 개발과정에서 디버깅용으로 활용가능한 함수. 

Serial.begin( rate)  : rate로 지정하는 속도로 통신을 시작하겠다는 의미이다. 기본적으로 디지털핀 0번으로 수신, 1번으로 송신하는 방식인데 아누이노가 USB를 통해 PC에 열결되어 있으면 PC와의 통신을 의미하며 앞페이지의 시리얼통신 모니터를 통해 송수신내용을 확인할 수 있다. 단 통신하는 양측은 속도가 동일해야 하므로 이 함수로 지정하는 속도와 동일한  값을 PC의 시리얼모니터의 속도로 지정해 주어야 한다.

 

Serial.print( data ) 시리얼통신으로 data값을 전송하는 명령이다. 전송된 값은 PC의 시리얼모니터 영역에 표시므로 이 함수를 이용하여 프로그램의 작동 상황을 모니터링하는 용도로 사용할 수 있다. 즉 아두이노 프로그램이 동작중 어떤 변수의 현재값을 알고 싶을때 이 함수를 이용하여 보내면 PC의 시리얼모니터에 표시되므로 보고 확인할 수 있다.  print문 대신 println문을 사용하면 화면표시 후 줄바꿈까지 실행되어 보기 편하게 표시된다

 

첫 프로그램 실행해 보기
 


1. 위 그림처럼 [파일 - 예제 - 01.Basics - Blink] 를 선택한다. 그러면 소소코드 편집기에 새로운 프로그램 소스코드가 불려져 온다.

 

 

2. USB케이블로 아두이노 나노를 연결하고 [툴 - 포트] 영역에 새로 표시되는 포트를 선택한다.

 

3. [업로드] 버튼을 클릭하면 컴파일 및 업로드 과정이 진행되고 잠시후에 메세지영역에 완료되었다는 메세지가 표시되고 작동이 시작된다.  

즉, 아두이노나노 보드에 있는 붉은색 LED가 1초간격으로 깜박이기 시작한다.

 

 

"avrdude:stk500_... "Error가 발생될 경우

 

사용하고 있는 아두이노 IDE와 아두이노 나노의 Bootloader 버전이 맞지 않아 발생되는 경우가 많다. 즉 아두이노IDE 는 최신 버전(1.8.X)을 다운 받아 사용하는데 아두이노 나노 모듈은 이전 버전용으로 출시된 것을 사용하는 경우에 프로그램 로드가 되지 않고 위와 같은 에러가 발샌된다. 이때에는 다음과 같이 프로세서 메뉴에서 ATmega329P 대신에 ATmega328P(Old Bootloader)를 선택하고 업로드 작업을 다시 해보도록 한다.

 

 

 

첫 프로그램에 대한 설명
 


아두이노 프로그램은 기본적으로 setup함수(1~4 line), loop 함수(6~12line) 두개의 함수로 구성된다.

- setup 함수 : 아두이노에 전원이 들어오거나 reset 되었을 때 처음 1회만 실행되는 함수.  따라서 아두이노가 가진 pin 들을 초기화하거나 소스코드내에서 사용되는 변수 및 각종 하드웨어를 초기화 하는 코드를 작성한다.
- loop 함수: setup이 실행된 후 무한반복해서 호출되는 함수이다. 즉, 아두이노가 작동되는 동안 계속해서 반복 수행할 일의 내용을 지정하는 동작코드를 작성한다.
- 전역변수나 라이브러리 헤더include문 등 선언사항은 setup함수 윗부분에 작성한다.

 

2 line : 디지털 13번핀을 OUTPUT모드로 선언한다. (13번핀은 보드상의 LED와 연결되어 있다. 즉 별도의 하드웨어 연결없이 즉석에서 예제를 실행해보기 위해 보드상의 LED를 출력용으로 사용하겠다는 의미이다.)

8 line : 13번핀으로 HIGH신호 즉 5V 전압을 출력하라는 명령. 실행되면 보드상의 붉은색 LED가 켜진다.

9 line :  1000밀리세컨드 즉 1초 동안 대기하라는 명령. 윗줄에서 LED가 켜진 상태로 1초간 대기하게 된다.

10~11 line : 13번 핀에 LOW신호(0V)출력, 즉 LED를 끄고 1초간 대기하라는 명령이다.

-loop()함수 안에 있는 8~11 line명령이 반복 실행되므로 LED는 1초간격으로 켜졌다가 꺼지는 동작을 계속 반복하게 된다.     

아두이노(Arduino)?

오픈소스를 기반으로 한 단일 보드 마이크로컨트롤러. 즉, 하나의 컴퓨터인데 저장공간,입출력장치 등을 생략하여 자그마한 하나의 보드형태로 소형화하고 대신 임의의   입출력장치들을 여러개 연결할 수 있도록 범용 입출력 연결 단자들만을 가지고 있다.
아두이노는 다수의 스위치나 센서로부터 값을 받아들이거나, LED나 모터와 같은 외부 전자  장치들을 통제함으로써 환경과 상호작용이 가능한 물건을 만들어낼 수 있으며, 이러한 것들을 개발하기 위한 개발환경도 무료로 오픈되어 있고 사용하기도 매우 간편하게 되어있다.  따라서 전세계에  수많은 사람들이 이를 이용해 각가지 자신만의 기기들을 개발하고 있으며  개발된 사례 및 샘플코드들도 공개된 것이 많아 배우기도 쉽다.
아두이노의 제작방법은 오픈되어 있어 누구나 비슷한 보드를 만들어낼 수 있으므로 시중에는 수십가지 종류의 아두이노 보드들이 있어 자신의 용도에 맞는 것을 선택할 수 있는데   대표적으로 많이 사용하는 것들은 다음과 같다.  

 

 

 

아두이노 나노

 

1) Mini USB 단자  : PC와 연결하여 전원도 공급하고 PC와의 통신을 통해 프로그램을 설치하거나 상태를 확인하는 등 개발과정에서 주로 사용하는 단자이다. 

2) VIN : PC와 연결되지 않은 상태에서도 동작시키기 위한 전원단자로서 5 ~12V의 전압을 가해 주면 아두이노 나노 내부적으로 5V로 조절하여 사용된다.  

3) 디지털 I/O핀 D0 ~ D13번 
    - 디지털 신호 (HIGH는 LOW값)을 입출력하기 위한 핀들로서 각종 센서나 부품들을  연결할 수 있다. Digital이라는 의미로 D라는 문자 뒤에 핀번호가 표시되어 있다. 
     -D0번과 D1번은 기본 통신용으로 사용되므로 TX, RX로 표시되어 있으며,  D13핀은  내부LED와 연결되어 있어 초기 부팅시 등에 수시로 내부LED가  깜박일때 D13번핀에도 동일한 전류가 흐르므로 이를 감안하고 사용해야 한다.
4) 아날로그 Input핀 A0 ~ A7번
   - 단순한 HIGH/LOW신호가 아닌 세분화된 값(0~1023)을 읽기 위한 핀으로서 각종  센서로 부터 측정값을 읽어들일 때 주로 사용한다.   

4) 5V, 3.3V출력핀 : 연결되는 센서나 부품들에 전원을 공급하기 위한 단자. 

5) Memory  : 프로그램제작용으로 사용할 수 있는 영역은 약30KB로서, 큰 용량은아니지만  웬만한 제어용 기기 제작용도로는 사용할 수 있다.   

 

아두이노 개발환경의 설치

 

1) PC에 아두이노 IDE 개발환경 설치 


    -  http://www.arduino.cc 에 접속하여 Download메뉴에서 IDE를 다운받아 설치.
    -  화면 아래 왼쪽의 JUST DOWNLOAD를 눌러 다운로드 받으면 됨.
    -  설치 진행중 driver 설치하겠냐는 질문에 예로 계속 진행
    -  설치가 완료되면 바탕화면에 Arduino 아이콘이 생성됨

 

 

2) 아두이노 나노 연결  

 


   - Arduino를 기동시키고 툴 메뉴에서 보드: Arduino Nano, 프로세서: ATmega328 선택
   - 아두이노나노를 USB케이블로  PC에 연결시키고 툴메뉴 포트에 새로운 포트번호가  생성되는지 확인하여 새로 생성되는 포트번호를 선택한다

 

 

아두이노 포트가 자동연결되지 않을 경우

 

- Made in Italy 아두이노정품은 USB 연결 드라이버가 IDE에 포함되어 있어 처음부터  자동으로 연결되지만,  Made in China 호환보드일 경우 전용 CH340 USB드라이버를 한번 설치해 주어야 만 다음 부터 자동연결 된다.   

- CH340 드라이버 설치 방법 :  http://www.wch.cn/download/CH341SER_ZIP.html 에   접속하여 CH341SER.ZIP 파일을 다운로드하여 설치하면 된다.

- 압축파일  풀기 하면 CH341SER 폴더가 생성되고 그 아래 또 생성된 CH341SER 안의 setup.exe 실행한다.

 

 

 

- 드라이버 설치가 완료되면 Arduino IDE의 툴 메뉴의  포트부분에 연결된 포트가 표시된다.

본 프로젝트를 위해 소요되는 부품들은 다음과 같고, 부품별 사양을 설명해 놓았다.
부품의 종류가 많고 별로 구입처가 각기 달라 각각의 부품값보다 구입처별 배송비가 더 많이 발생되므로...
한번에 구입할 수 있도록 키트형태로 구성하여 쇼핑몰에 올릴 예정이다.

 

 

 

1. 아두이노 : 소형으로 사용이 간편한 아두이노 나노 v3.0 기종을 사용. 조그만 부주의에도 쉽게 망가질 수 있으므로 여분으로 하나 더 준비하는 것이 좋다.
3. 프로토타이핑보드: 아두이노와 각각의 부품들은 여러개의 케이블들을 연결해주어야 하는데, 배선이 복잡해져 지저분해 지고 접선불량 등 에러날 가능이 많아지므로 프토로타이핑 보드를 통해 연결하면 조립이 깔끔해지고 안정적이 된다.
4. LCD디스플레이: 4개선으로 제어할 수 있는 I2C방식으로 구성되고, 16자 * 2줄 표시용 사용
5. 미니스위치: 가동중 평상시에는 LCD화면을 꺼 두기 위해 LCD백라이트 조명에 스위치을 달아 ON/OFF하기 용도
7. 피에조 부저: 능동형과 수동형이 있는데 원하는 주파수의 소리를 내기 위해서 수동형을 사용
8. 온습도센서: 일반적으로 많이 사용하고 온습도를 함께 측정할 수 DHT11 기종
9. 수위센서: 보통 토양수분센서라고 하는 센서를 사용하되, 전극부분은 별도제작 ( 화분에 꽂아두기 위한 용도가 아니고 수조내에 있는 수중워터펌프 입구에 물이 있는지 여부 판단하기 위한 용도로 )
10. 릴레이: 5V로 제어되는 릴레이.  역전류 흐름방지용 다이오드가 부착된 KY-019기종을 사용 (다이오드가 부착되지 않은 릴레이를 사용할 경우 릴레이가 작동될 때 역전류가 흘러 아두이노 작동이 중지되어 버리는 에러가 발생될 수 있음)
11. LED전구: 200~300옴 저항을 연결하여 아두이노 5V 단자에 연결할 수 있도록 제작.
12. 펌프: 12V에서 4W급으로 동작해서 240L/H정도 용량을 가진 수중워터펌프. 
13. 케이스: 3D 프린터로 출력하여 제작. FDM방식 3D프린터용 3D모델링파일(STL)을 LINK시켜 놓았으므로 다운로드 받아 출력 가능 ( 적층두께 0.3mm )
*** STL 파일이 용량제한으로 UPLOAD가 안되므로, 다른 곳에  올리고 LINK할 예정.
15. 수조 : 물을 5~6L 충분히 담아둘 수 있는 용기, 시중에서 구할 수 있는 투명PET 물통을 사용하면 수조 뚜껑과 본체가 합체되도록  케이스가 디자인되어 있음.
18.전원아답터: 12 V 6W급( 0.5A)용량

+ Recent posts