반응형

 

 

 

프로젝트를 진행하면서 센서를 사용하여 수집한 데이터를 실시간 모니터링하거나 시각화하고 싶은 상황이 자주 발생합니다. 문득 아두이노(Arduino)는 그래프(graph) 기능이 없나? 하고 의문이 드시겠죠.. ㅎㅎ 있습니다!! 그래서 오늘은 아두이노로 그래프(graph): Serial Plotter 기능에 대해서 알아보겠습니다.

 


아두이노 통합개발환경(IDE) 스케치 창 상단 메뉴에서 Tool -> Serial Plotter 메뉴를 찾을 수 있습니다. 시리얼 모니터(Serial Monitor)와 같이 아두이노로부터 시리얼 통신(Serial communication)으로 들어오는 데이터를 실시간으로 plotting 해서 그래프를 그려주는 기능을 합니다. 

 

아두이노(Arduino) 시리얼 플로터(Serial Plotter)

데이터를 수신 전에는 실행해봤자 백지 창만 덩그러니 열리니.. 이전 포스팅에서도 자주 다루었던 온습도 센서를 가지고 사용하는 방법을 알아보겠습니다. 온습도 센서 사용법과 코딩은 아래 링크 첨부드려요~ 온습도 센서가 아니더라도 사용하시고 있던 어떤 센서로도 데이터만 시리얼 통신으로 들어오면 아무 문제없습니다.

 

 

 

아두이노(Arduino) 홈 IoT 입문 - 온습도 센서(DHT11) 사용하기

아두이노(Arduino)를 사용한 홈 IoT (사물인터넷)의 가장 기본은 각 종 센서를 동작시키고 센싱 값을 읽는 것이라고 할 수 있습니다. 구상하는 대부분의 프로젝트는 어떤 조건이 만족하면 원하는 명령들을 수행하..

it-g-house.tistory.com

온습도 센서에서 사용한 프로그램을 아두이노에 업로드 후 시리얼 플로터를 실행시키면 아래와 같이 그래프가 plotting 되는 것을 확인할 수 있습니다.

 

아두이노(Arduino) 시리얼 플로터(Serial Plotter) 실행 화면

응?? 에?? 뭔가 좀 이상하죠? ㅠㅠ 음.. Y축 값을 봤을 때 60~70 사이의 그래프 값이 습도, 아래 25 정도 그래프 값이 온도 값 같은데... 범례도 이상하죠?? ㅎㅎ 이렇게 나오는 이유는 데이터에 '글자'가 포함되어 있기 때문입니다. 시리얼 모니터에서 다음과 같이 나오기 때문에 범례에 'Humidity, %, Temp, Celsius' 글자가 다 표시됩니다.

 

아두이노 시리얼 모니터 온습도 데이터 출력

 

 

 

 그래서 지난번 엑셀과 연동할 때와 비슷하게 프로그램을 조금 수정하여 코딩해야 합니다. void setup에서 Serial.println("Temp, Humi"); 명령어로 범례를 지정해 주고 void loop 부분에서는 data만 받고 데이터와 데이터 사이는 쉼표', '로 구분되도록 코딩합니다.

 

아두이노 온습도 데이터를 시리얼 플로터로 plotting하기

 다시 아두이노로 업로드 후 시리얼 플로터를 실행하면 짠~! 

 

아두이노(Arduino)로 온습도 데이터를 시리얼 플로터(Serial Plotter)를 사용하여 그래프(graph) 그리기 

호우~! x축 시간에 따라 그래프가 plotting되는 것을 볼 수 있습니다. delay를 2초로 했으니 하나의 점이 2초마다 찍힐 거에요 ㅎㅎ 범례에 파란색은 온도, 빨간색은 습도라고 표시되고 아까 추측했던 대로 위 상단의 60~70 사이의 그래프가 습도, 아래쪽 25 정도 값의 그래프가 온도입니다.

 

이와 같이 아두이노 스케치 자체적으로 그래프를 plotting 하는 기능을 지원하고 있으나 센서가 많아지던가 Y축 range가 다른 값들은 그래프를 그리기 어려울 거라 예상됩니다. 그래서 엑셀에 연동하여 실시간으로 데이터를 받아 엑셀의 파워풀한 그래프 그리기로 다양하게 시각화할 수 있습니다. 아두이노를 엑셀과 연동하는 방법은 아래 링크 첨부드려요~ 참고 부탁드립니다.

 

 

 

Arduino 아두이노 시리얼 통신 데이터를 엑셀에 저장/연동하기

아두이노(Arduino)를 사용하여 온습도 센서(Temperature and Humidity sensor)를 동작하고 측정된 데이터를 출력하고 저장하는 방법까지 알아보았습니다. 앞서 알아본 저장방법은 *.txt 파일로 저장되어서 엑셀을..

it-g-house.tistory.com


여기까지 아두이노(Arduino)로 시리얼 플로터(Serial Plotter)를 사용하여 그래프(graph)를 그려보았습니다. 간단하게 그래프 그리기에 아주 유용하지만 복잡한 데이터에는 한계가 있을 거 같아요 ^^

 

그럼 다음 시간에는 아두이노 프로그램 코딩에 대해 조금 더 알아보도록 하겠습니다. 궁금하신 거나 추가적으로 필요한 내용 있으면 언제든지 댓글로 남겨주세요~^^

 

#include<dht.h>
dht DHT;
#define DHT11_PIN 2
float hum; //Stores humidity value
float temp; //Stores temperature value

void setup() {
Serial.begin(9600);
Serial.println("Temp,Humi");
}

void loop() {
DHT.read11(DHT11_PIN);
hum = DHT.humidity;
temp = DHT.temperature;

Serial.print(temp);
Serial.print(",");
Serial.println(hum);
delay(2000); //Delay 2 sec.
}

 

 

 

반응형
반응형

 

 

지난 포스팅까지 아두이노(Arduino)를 사용하여 온습도 센서(Temperature and Humidity sensor)를 동작하고 측정된 데이터를 출력하고 저장하는 방법까지 알아보았습니다. 앞서 알아본 저장방법은 *.txt 파일로 저장되어서 엑셀을 많이 사용하시는 분들은 엑셀에 바로 연동하는 방법은 없는지 궁금하셨을 거 같아요 ^^ 

 

그래서!! 오늘은 아두이노 시리얼 통신(Serial communication) 데이터를 엑셀에 연동하여 저장하는 방법을 알아보겠습니다. 엑셀과 연동이 되면 데이터를 실시간으로 받으면서 데이터의 변화 추이를 그래프로 그려도 볼 수 있으며 분석하는데 더 많은 활용을 할 수 있습니다. 

 

아두이노(Arduino) 홈 IoT 입문 - 온습도 센서 데이터 출력/저장 방법

아두이노(Arduino)를 사용하여 온습도 센서(Temperature and Humidity sensor)를 작동하고 센싱한 값을 출력하는 것은 아두이노의 기본적인 사용법을 습득하는데 많은 도움이 됩니다. 저도 온습도 센서로 연습하면..

it-g-house.tistory.com


아두이노 시리얼 통신 데이터를 엑셀과 연동하려면 'PLX-DAQ' 프로그램을 사용해야 합니다. 'PLX-DAQ'는 'Parallax'라는 회사에서 무료로 제공하고 있는 프로그램인데 업데이트는 제공하지 않아서 2010 이하 버전의 Microsoft office와는 연동이 안된다고 합니다. 그러나!! 많은 고수님들이 자체적으로 업데이트하여 v2.11까지 웹상에서 쉽게 구할 수 있습니다. 아래 다운로드 링크와 압축 파일 첨부해두게요~ 우선 다운로드하여주세요 ^^ (Parallax 회사 홈페이지에서 원본 PLX-DAQ파일을 다운 받아 사용해도 저는 정상적으로 동작하더라고요 ㅎㅎ 근데 업데이트된 버전이 기능도 추가되고 사용하기 훨씬 편하니 아래 파일을 사용하는 것을 추천드려요~)

https://forum.arduino.cc/index.php?topic=437398.msg3013761#msg301376

 

PLX-DAQ-v2.11.zip
0.49MB

압출을 풀면 아래와 같이 'PLX-DAQ-v2.11' 엑셀 파일을 볼 수 있습니다.

 

PLX-DAQ 실행파일

엑셀 파일을 실행하면 엑셀 상단에 아래와 같이 매크로 사용 여부를 묻는 경고창이 뜰 겁니다. 

 

'콘텐츠 사용'을 클릭하면 아래와 같이 실행 화면을 볼 수 있습니다. 만약 PLX-DAQ창이 뜨지 않으면 엑셀 시트 중단의 'Open PLX DAQ UI'를 클릭해 주세요~

 

아두이노 시리얼 통신(Serial communication) 데이터를 엑셀에 저장할 수 있는 PLX-DAQ 소프트웨어 실행 화면

여기까지 실행시켜놓고 아두이노로부터 시리얼 통신 데이터를 받으려면 아두이노의 프로그램도 약간의 조정이 필요합니다. 엑셀로 받기 위한 데이터 배열을 조정해 준다고 정도로 생각하시면 될 거 같아요 ^^ 시리얼 데이터는 어떤 데이터가 들어오던 상관은 없지만 이해를 돕기위해 지난 포스팅에서 진행하였던 온습도 센서를 이용해서 실제로 엑셀과 연동하면서 포스팅하도록 하겠습니다. (코드블럭은 본문 맨 아래 첨부해 두었습니다~)

 

 

 

아두이노와 엑셀을 연동하는 'PLX-DAQ' 사용을 위한 코딩

스케치로 돌아가서 이전 포스팅에서 코딩한 DHT11 온습도 센서를 위한 코딩을 위와 같이 프로그램을 수정하시면 됩니다. DHT11 온습도 센서 사용 방법과 코딩에 대해서는 아래 링크 걸어두게요~ 참고 부탁드립니다.

 

 

아두이노(Arduino) 홈 IoT 입문 - 온습도 센서(DHT11) 사용하기

아두이노(Arduino)를 사용한 홈 IoT (사물인터넷)의 가장 기본은 각 종 센서를 동작시키고 센싱 값을 읽는 것이라고 할 수 있습니다. 구상하는 대부분의 프로젝트는 어떤 조건이 만족하면 원하는 명령들을 수행하..

it-g-house.tistory.com

수정된 프로그램을 compile후 아두이노로 업로드하고 시리얼 모니터(Serial Monitor)를 실행하면 아래와 같이 데이터가 출력되는 것을 확인할 수 있습니다.

 

아두이노 시리얼 통신을 통한 DHT11 온습도 센서 데이터 출력 (엑셀과 연동 방법)

엑셀 시트가 셀 단위로 이루어져 있고 셀에 데이터를 하나하나 넣는 과정에서 셀 과셀 구분을 쉼표', '로 한다고 생각하시면 됩니다. 그래서 처음 'CLEARDATA'는 데이터를 전부 지워서 리셋하는 내용이고 그다음 LABEL, Temp, Humi이 엑셀에서 첫 행에서 각 데이터 이름이 됩니다. 그 뒤로 온도와 습도 data들이 계속 기록되는 순서로 진행된다고 이해하시면 됩니다.

 

그럼 다시 엑셀 시트로 돌아가서~ PLX-DAQ 실행 창에서 Setting 부분의 Port와 Buad rate를 PC에 연결되어 있는 아두이노와 동일하게 맞춰주시고 아래에 'Connect'를 누르면 아두이노의 시리얼 통신으로 들어오는 온도와 습도 데이터가 엑셀에 저장되는 것을 실시간으로 확인할 수 있습니다. 와우~ 신기하죠?? ㅎㅎ 아!! 여기서 주의하실 점은 시리얼 모니터 창은 닫으셔야 정상 동작합니다.

 

아두이노 엑셀연동을 위한 PLX-DAQ 셋팅

아래 엑셀 창에서 처럼 왼쪽 A, B열에 첫 행에는 열 이름 Temp, Humi 그 밑으로 2행부터 데이터가 실시간으로 기록됩니다. PLX-DAQ창에서 'Display direct debug'를 클릭하면 실질적으로 몇 시 몇 분에 데이터가 들어오는지 확인할 수 있습니다.

 

아두이노 시리얼 통신을 통한 DHT11 온습도 센서 데이터를 PLX-DAQ 프로그램을 이용하여 엑셀에 저장하는 방법

추가적으로 새로운 엑셀 시트에 저장할 수 있는 기능과 logging을 멈출 수 있는 기능 등이 있습니다. 직접 하나둘씩 만져보시면 아마 어떻게 사용하는지 금방 알 수 있을 거예요 ^^

 

 

 


여기까지 아두이노(Arduino)의 시리얼 통신(Serial communication)을 통한 데이터를 엑셀에 연동하여 저장하는 방법을 알아보았습니다. 엑셀에 실시간으로 기록되기 때문에 이를 이용해서 실시간으로 그래프를 그려본다던지 좀 더 시각화하여 데이터를 볼 수도 있을 거 같아요~ ㅎㅎ

 

다음 포스팅에는 아두이노를 사용하여 실시간으로 그래프를 그리는 방법과 이를 통하여 datalogger 기능을 살펴보겠습니다. 궁금하신 거나 추가적으로 필요한 내용 있으면 언제든지 댓글로 남겨주세요~ ^^

#include<dht.h>
dht DHT;
#define DHT11_PIN 2
float hum; //Stores humidity value
float temp; //Stores temperature value

void setup() {
Serial.begin(9600);
Serial.println("CLEARDATA");
Serial.println("LABEL,Temp,Humi");
}

void loop() {
DHT.read11(DHT11_PIN);
hum = DHT.humidity;
temp = DHT.temperature;

Serial.print("DATA,");
Serial.print(temp);
Serial.print(",");
Serial.println(hum);
delay(2000); //Delay 2 sec.
}

 

 

 

반응형
반응형

 

 

 

아두이노(Arduino)를 사용하여 온습도 센서(Temperature and Humidity sensor)를 작동하고 센싱한 값을 출력하는 것은 아두이노의 기본적인 사용법을 습득하는데 많은 도움이 됩니다. 저도 온습도 센서로 연습하면서 홈 IoT 프로젝트를 설계하는데도 많은 영감을 얻었습니다. 지난 포스팅에는 온습도 센서를 사용하는 방법에 대해 알아보았습니다.

 

아두이노(Arduino) 홈 IoT 입문 - 온습도 센서(DHT11) 사용하기

아두이노(Arduino)를 사용한 홈 IoT (사물인터넷)의 가장 기본은 각 종 센서를 동작시키고 센싱 값을 읽는 것이라고 할 수 있습니다. 구상하는 대부분의 프로젝트는 어떤 조건이 만족하면 원하는 명령들을 수행하..

it-g-house.tistory.com

오늘은 온습도 센서에서 읽은 데이터를 출력하고 저장하는 방법에 대해 알아보겠습니다.

 


  • 센서 데이터 출력하기

DHT11 온습도 센서를 동작하기 위해 아래와 같이 스케치로 프로그램을 코딩하였습니다. 지난 포스팅에서 아두이노 프로그램 코딩시 자주 사용되는 명령어를 알아봐서 그런지 처음 볼 때보다 프로그램이 조금씩 보이는 듯하네요 ㅎㅎ (기분 탓일 수도 있겠지만요.. 뮤뮤) 

 

아두이노 스케치를 통한 DHT11 온습도 센서 프로그램 코딩

 

프로그램에서 변수 'hum'에는 습도 값이, 'temp'에는 온도 값이 저장하도록 되어 있고 Serial.print와 Serial.println 명령어를 통해 데이터를 출력하고 있습니다. 

Serial.print("Humidity: "); -> Humidity: 라고 출력됩니다.

Serial.print(hum); -> 변수 'hum'에 저장된 습도 값을 출력합니다.

Serial.print(" %, Temp: "); -> %, Temp: 이라고 출력됩니다.

Serial.print(Temp); -> 변수 'Temp'에 저장된 온도 값을 출력합니다.

Serial.println(" Celsius"); -> Celsius라고 출력되고 줄 바꾸기를 합니다.

 

다 같이 출력되면 반복으로 인해

Humidity: 55%, Temp: 25 Celsius

Humidity: 54%, Temp: 25 Celsius

Humidity: 56%, Temp: 25 Celsius

...

이런 식으로 출력됩니다.

 

그럼 실질적으로 온습도 센서가 정상적으로 작동하는지 지금 온도와 습도가 얼마인지 출력 값을 보겠습니다. 스케치 상단 메뉴에서 툴(Tool) -> 시리얼 모니터(Serial Monitor)를 클릭하면 

 

 

우와~ 대박 신기!! 글 쓰고 있는 지금 습도는 62.2 %, 온도는 27.1 ℃이네요 ㅎㅎ 여기서 보레이트(Baud rate)를 프로그램의 Serial.begin(9600) 속도와 맞춰주시는 거 잊지 마시고요 ^^

 

 


 

  • 센서 데이터 저장하기

이렇게 실시간 모니터링하는 것도 좋지만 그래프로 시각화하고 홈 IoT에 활용하려면 데이터 저장이 필요하겠죠? 저장하는 방법은 세가지 정도 있습니다.

 

1. 단순하게 시리얼 모니터의 텍스트를 그대로 복사해서 메모장에 붙여넣는 방법입니다. 가장 간단한 방법이지만 나중에 데이터 정리하기가 쉽지 않을 수도 있겠네요..

 

2. 윈도우에서 명령 프롬프트(Command 창)를 실행해서 'COPY 포트번호 파일이름.txt' 형태로 명령어를 적어주면 됩니다. 그러면 아두이노가 연결되어 있는 포토 번호 (예: COM9)로 들어오는 시리얼 통신 데이터가 '파일이름.txt'(아무거나 정하시면 됩니다.) 파일로 저장됩니다. 

실시예) COPY COM9 TempHum.txt

명령 프롬프트는 윈도우 실행파일 검색창(윈도우 자판키+s)에서 '명령 프롬프트' 또는 'cmd'로 검색하면 찾을 수 있습니다. 종료할 때는 Ctrl-z를 누르면 종료됩니다. 주의하실 점은 스케치에서 시리얼 모니터 창을 닫아야 명령 프롬프트에서 포트를 인식할 수 있습니다.

 

3. 마지막으로 가장 확실하고 편한 방법이지만 프로그램을 이용해야 하는 번거로운 점이 있습니다. 'CoolTerm'이라는 프로그램을 사용하는데 시리얼 통신으로 들어오는 내용을 읽고 저장하는 기능을 합니다. 파일을 업로드해놓고 싶지만 10MB 이상이라 다운로드는 아래 링크 첨부해놓을게요~

https://coolterm.en.lo4d.com/windows

https://coolterm.sooftware.com/windows

 

다운로드한 후 압출 풀고 CoolTerm 실행파일을 실행시키면 아래와 같이 창이 뜹니다.

 

아두이노 시리얼 통신(Serial Communication) 데이터 저장하기 (CoolTerm 사용)

왼쪽 아래 보면 아두이노가 연결되어 있는 시리얼 포트번호(COM9)와 통신속도(9600), 등의 정보를 확인할 수 있습니다. 그리고 Disconnected로 연결이 되어 있지 않다는 것을 표시하고 있습니다. 메뉴 상단의 'Connect'를 클릭하면 

 

아두이노 시리얼 통신(Serial Communication) 데이터 저장하기 (CoolTerm 연결)

Disconnected가 Connected로 되어 연결된 시간과 함께 표시됩니다. 그리고 스케치의 시리얼 모니터에서 보았듯이 지금 습도와 온도 데이터가 전송되는 것을 볼 수 있습니다. 이상태에서 데이터를 저장하려면 상단 메뉴의 'Connection -> Capture to Textfile -> Start'를 클릭하면

 

아두이노 시리얼 통신(Serial Communication) 데이터 저장하기 (CoolTerm 데이터 저장)

 

저장할 파일 경로와 이름을 정할 수 있습니다. 파일 이름을 정한 뒤 '저장'을 누르면

 

아두이노 시리얼 통신 데이터 저장할 파일이름 설정

 

아두이노 시리얼 통신(Serial Communication) 데이터 저장하기 (CoolTerm 데이터 *.txt 저장)

 왼쪽 아래에 데이터 Capturing 진행 상황이 표시됩니다. 이제 데이터가 저장되고 있습니다. 호우~! ㅎㅎ 데이터 저장을 멈추려면 'Connection -> Capture to Textfile -> Stop'을 클릭하면 됩니다. 그러면 Start 누른 시점부터 Stop까지의 데이터만 설정한 파일명.txt로 저장이 됩니다.

 

아두이노 시리얼 통신(Serial Communication) 데이터 저장방법

데이터 저장은 반드시 Connected 상태에서 가능하니까 주의하세요 ^^

 

 


여기까지 아두이노(Arduino)를 사용한 DHT 온습도 센서의 데이터를 출력하고 저장하는 방법을 알아보았습니다. 놀랍지 않나요? ㅎㅎ 이제 뭐든 할 수 있을 거 같아요 ^^ 다양한 센서를 구입해서 구동해보는 재미가 있어요~ 아! 근데 아두이노에 사용하는 외부기기를 구입하실 때는 라이브러리(library)가 웹상에서 구할 수 있는지, 판매 측에서 제공하는지를 꼭 확인하셔야 합니다. 아직 기기에서 나오는 신호를 직접 잡기는 너무너무 어렵기 때문에 잘 못하면 기기만 덩그러니~ 사는 경우가 발생합니다... (경험이에요 뮤^뮤) 

 

그럼 본격적으로 홈 IoT 프로젝트를 진행하려면 인터넷이 되야겠죠??!! 다음 시간에는 아두이노에 Wifi를 달아보겠습니다. 빠르다고요?? 노노 할 수 있어요~! 다들 화이팅! (아.. 저만 화이팅 하면 되나요...)

 

 

* 저.. 엑셀로 그래프도 그릴 수 있으면 좋겠는데... 엑셀에 바로 연동하여 저장하는 방법은 없나요?? 있습니다!! 다른 프로그램을 사용하는데 실시간으로 연동되어 데이터가 들어오기 때문에 그래프를 실시간으로 그려서 변화 추이를 알아보거나 하기도 좋을 듯 합니다. 관련 내용은 아래 링크 첨부하겠습니다 참고 부탁드려요~

 

Arduino 아두이노 시리얼 통신 데이터를 엑셀에 저장/연동하기

지난 포스팅까지 아두이노(Arduino)를 사용하여 온습도 센서(Temperature and Humidity sensor)를 동작하고 측정된 데이터를 출력하고 저장하는 방법까지 알아보았습니다. 앞서 알아본 저장방법은 *.txt 파일로 저..

it-g-house.tistory.com

 

 

반응형
반응형

 

 

 

아두이노(Arduino)는 프로그램에 의해 동작하는 Micro-controller입니다. 그렇기 때문에 프로그램 코딩을 어느 정도 할 수 있어야 원하는 홈 IoT (사물인터넷) 같은 프로젝트를 진행할 수 있습니다. 저처럼 프로그램 비전공자에게는 감조차 오지 않는 영역이지만... 그래도 자주 사용하는 명령어 정도는 정확히 알아두는 게 좋을 듯하여 이번 포스팅을 기획하였습니다.

 

오늘은 아두이노 프로그램 명령어에 대해서 기본적인 몇 가지를 처음 시작하는 입장에서 이해하기 쉽게 풀어보도록 하겠습니다.

 


  • 아두이노 프로그래밍 언어 (C/C++)

아두이노 프로그래밍 언어는 기본적으로 C/C++을 기반으로 구성되어 있으며 코딩부터 compile 및 upload를 스케치(sketch: 통합개발환경 소프트웨어)를 통해서 이루어집니다. 그렇기 때문에 우선 스케치부터 설치하셔야 합니다. 스케치 설치방법은 링크 걸어두어요~ 참고 부탁드립니다.

 

 

아두이노(Arduino) 시작하기 - 통합개발환경(IDE): 스케치(sketch)

아두이노(Arduino)는 마이크로 컨트롤러(Micro-controller)로 구성된 프로그램에 따라 명령을 수행합니다. 이전 포스팅에서 살펴보았듯이 아두이노를 통해 외부기기나 센서를 컨트롤할 수 있습니다. 구상하는 대로..

it-g-house.tistory.com

스케치를 실행하면 다음과 같은 첫 화면을 볼 수 있습니다. 여기서 '//' 이후에 글들은 프로그램에 영향을 주지 않습니다. 즉, 설명이나 주석을 달 때 '//' 이후 글자를 적으면 됩니다. 

 

아두이노 스케치 첫화면

 

  • 아두이노 void 명령어

모든 프로그램이 그렇듯 일반적으로 위에서 아래로 내려가면서 순차적으로 명령어를 실행합니다. 스케치 화면을 보면 'void setup()' 명령어가 있는데 주석에도 설명되어 있듯이 프로그램 초기 셋업 코드를 위한 부분입니다. 프로그램이 진행될 때 필요한 세팅을 먼저 실행한다고 생각하시면 됩니다. 하드웨어 설정, 변수 설정 데이터 초기화 등에 관한 코드를 대괄호{ } 안에 적으면 됩니다. 세팅 후에 실질적으로 아두이노가 어떻게 동작하라는 내용은 'void loop()' 명령어의 대괄호{ } 안에 코딩하면 되는데 'loop' 단어 뜻 그대로 { } 안의 명령어가 계속 반복됩니다.

 

  • 기본적인 아두이노 명령어

자주 사용되는 기본적인 아두이노 명령어를 알아보고 실질적으로 예제를 통해 어떻게 사용되는지 살펴보겠습니다.

 

명령어 기능 사용법
  include 외부 라이브러리를 스케치 안에 포함할 때 사용 #include <라이브러리 파일명>
define 매크로 상수와 함수를 정의할 때 사용 #define 변수 상수(함수)
serial.begin 아두이노의 시리얼 통신(Serial communication)을 시작할 때 사용 Serial.begin(통신속도);
serial.print 아두이노 시리얼 통신의 데이터 값을 출력할 때 사용  Serial.print("출력내용");
delay 프로그램을 진행을 원하는 시간만큼 일시적으로 멈출 때 사용 delay(msec.);

 

 

 

1. include 

 

include 명령어는 라이브러리(사전에 코딩된 프로그램)를 스케치에서 사용할 때 필요합니다. 아두이노에서 사용하는 라이브러리는 대부분 '*. h' (헤더 파일)과 '*. cpp' (소스파일)로 구성되어 있는데 include명령을 통해서 헤더 파일을 불러와서 우리가 사용할 함수와 변수를 정의를 합니다. 사용할 때는 예로 #include<dht.h> 같은 형태가 됩니다. 만약 코드는 제대로 작성하였는데 라이브러리 파일이 없는 경우 컴파일(compile)할 때 "No such file or directory#include<dth.h>"라고 에러 메시지가 뜹니다.

 

2. define

 

define은 매크로 상수와 함수를 정의할 때 사용하는 명령어입니다. 사용 예는 '#define value 0' 라고 코딩하면 value라는 변수는 0으로 정의됩니다. 이렇게 value값을 정의해놓으면 프로그램상에서 다양하게 적용할 수 있습니다. 숫자 '0' 처럼 상수로 정의할 수 도 있고 함수로도 정의할 수 있는데 이 부분은 추후 프로그램 코딩할 때 구체적 사례를 포스팅하겠습니다.

 

3. serial.begin

 

serial.begin은 아두이노의 시리얼 통신(Serial communication)을 시작하라는 명령어입니다. 아두이노는 다양한 기기와 통신을 할 수 있는데 시리얼 통신을 사용합니다. 앞서 알아보았듯이 USB 케이블을 통해 전원 공급뿐만 아니라 스케치로 코딩된 프로그램을 PC로부터 아두이노로 업로드하기 때문에 PC와 통신도 가능합니다. 사용 예로 Serial.begin(9600);라고 적어주면 됩니다. 여기서 괄호( )안의 숫자는 통신속도를 말하는데 보레이트(Baud Rate)라고 하며 단위는 bps (bit per second)로 1초간 전송되는 신호 수를 정할 수 있습니다. 보레이트 값이 높을수록 속도가 빠르지만 송수신 속도가 같아야 데이터를 수신하는데 문제가 없습니다.

 

4. serial.print (serial.println)

 

serial.print (serial.println)는 시리얼 통신의 데이터를 출력할 때 사용합니다. 스케치에서 지원하는 시리얼 모니터(Serial Monitor)에 출력 값을 확인할 수 있는데 데이터 값을 print 하라는 명령어입니다.

 

스케치(sketch) 시리얼 모니터(Serial Monitor)

사용 예로 아래와 같이 스케치에 코딩하여 아두이노로 업로드(Upload)하면 시리얼 모니터에 "hello world!!"라고 출력되는 것을 확인할 수 있습니다. 이 때 주의하실 점은 void loop() 명령어에 아무 내용이 없더라도 지우면 compile이 되지 않더라고요.. 뮤뮤 'void setup()'과 'void loop()' 명령어 형식은 기본적으로 유지되어야 프로그램이 정상적으로 작동합니다.

 

아두이노(Arduino) 시리얼 통신으로 "hellow world!!" 송신하기
아두이노(Arduino) 시리얼 모니터 "hello world!!" 출력하기

시리얼 모니터에서는 보레이트를 Serial.begin(9600);에서 설정한 속도와 같은 값을 설정해야 정상적으로 "hello world!!"가 출력됩니다.

 

이번에는 serial.print("hello world!!");를 'void loop()'에 넣어보겠습니다. 앞서 설명했듯이 void loop에서는 명령어가 반복되기 때문에 시리얼 모니터에 "hello world!!"가 무한히 출력되는 것을 볼 수 있습니다.

 

아두이노(Arduino) 시리얼 통신으로 "hellow world!!" 반복 송신하기
아두이노(Arduino) 시리얼 모니터 "hello world!!" 반복 출력하기

여기서 serial.print와 serial.println의 차이를 알 수 있습니다. 다시 'void loop()' serial.println("hello world!!");이라고 적고 아두이노에 업로드하면 시리얼 모니터에 아래와 같이 한칸 아랫줄에 "hello world!!"가 계속 출력 되는 것 볼 수 있습니다. 이처럼 serial.println은 출력 후 한칸 아랫 줄로 바꿔라는 명령어가 포함되어 있습니다. 참고로 serial.print("hello world!!\n")이라고 해도 같은 기능을 합니다. '\n'가 한 칸 아랫 줄로 이동하는 기능이기 때문입니다. (워드나 텍스트에서 글자치고 한줄 바꿀 때 엔터와 같은 기능이라고 생각하면 이해가 빠를 듯 하네요^^) 

 

아두이노(Arduino) 시리얼 모니터 "hello world!!" serial.println 출력하기

 

5. delay

 

delay명령어는 영어 뜻 그대로 프로그램을 진행을 원하는 시간만큼 일시적으로 멈출 때 사용합니다. 사용 예로 'delay(1000);'이라고 적어주면 1,000 ms 즉 1초 동안 delay 후 프로그램이 진행됩니다.

 


여기까지 아두이노(Arduino) 스케치를 통한 기본적인 프로그램 명령어에 대해 알아보았습니다. 오늘 알아본 명령어는 자주 사용되어서 금방 익숙해질 겁니다. 프로젝트를 진행하면서 새로운 명령어를 하나씩 배워보도록 하겠습니다. 

 

다음 포스팅에는 앞서 진행한 온습도 센서(Temperature and Humidity sensor) 사용법에서 코딩한 프로그램을 하나씩 파헤쳐보고 온습도 값을 시리얼 모니터에 출력하는 방법을 알아보겠습니다.

궁금하신거나 필요하신 내용 있으면 언제든지 댓글에 남겨주세요 ^^

 

 

아두이노(Arduino) 홈 IoT 입문 - 온습도 센서(DHT11) 사용하기

아두이노(Arduino)를 사용한 홈 IoT (사물인터넷)의 가장 기본은 각 종 센서를 동작시키고 센싱 값을 읽는 것이라고 할 수 있습니다. 구상하는 대부분의 프로젝트는 어떤 조건이 만족하면 원하는 명령들을 수행하..

it-g-house.tistory.com

void setup(){
Serial.begin(9600);
Serial.print("Hello World!!");
}

void loop(){
}
void setup() {
Serial.begin(9600);
}

void loop(){
Serial.println("hello world!!");
}
void setup() {
Serial.begin(9600);
}

void loop(){
Serial.print("hello world!!\n");
}

 

 

 

반응형
반응형

 

 

아두이노(Arduino)를 사용한 홈 IoT (사물인터넷)의 가장 기본은 각 종 센서를 동작시키고 센싱 값을 읽는 것이라고 할 수 있습니다. 구상하는 대부분의 프로젝트는 어떤 조건이 만족하면 원하는 명령들을 수행하는 목적이 많죠 ^^ 여기서 '어떤 조건'을 정량화하는 과정에서 센서를 많이 사용하게 됩니다.

 

센서의 종류는 너~~무 다양한데 그중 '온습도 센서(Temperature and Humidity sensor)'는 단순하면서도 많은 곳에서 중요하게 사용됩니다. 그래서 오늘은 센서 동작의 입문이라고 할 수 있는 온습도 센서를 아두이노에 장착하고 동작하는 방법을 알아보겠습니다.

 


아두이노(Arduino)로 쉽게 사용할 수 있고 온라인에서 흔하게 구할 수 있는 온습도 센서는 몇 가지 종류가 있지만, 우선 네이버나 구글에서 ‘온습도 센서’라고 검색하면 모델명 DHT11이라는 제품을 가장 먼저 볼 수 있습니다. 저렴한 가격에 비해 실내 일상 환경의 온도나 습도를 측정하는데 무리가 없고 사용하기 쉬워서 많이 사용되는 모델입니다. 추가로 쓸만한 온습도 센서 및 동작원리에 관해서는 아래 정리한 내용 링크 참고 부탁드려요 ^^

 

Arduino 아두이노 온도 습도 센서(Temperature and Humidity sensor) 종류 및 사용법

온습도 센서는 환경 측정에서 중요하면서도 기본적인 센서로 많이 사용됩니다. 흔하면서도 중요한 센서라 다양한 종류의 제품이 있고 기능적으로 큰 차이 나지 않습니다. 그렇기 때문에 사용 장소나 측정 목적에..

it-g-house.tistory.com

  • DHT11 온습도 센서

온습도 센서(DHT11)
온습도 센서 모듈(DHT11 module)

 

DHT11 온습도 센서는 단일품과 모듈 형태로 판매를 합니다. 단품으로 구매를 하면 아두이노에 연결할 때 저항을 따로 연결해야 하고 그러면 빵판도 필요하고 번거롭기 때문에 모듈형으로 구매하는 것이 최선입니다. 센서는 몸통과 4 pin으로 구성되어 있고 사진에 표기되어 있듯이 VCC, OUT (data), NC (not connect), GND 순서로 되어 있습니다. 모듈형 같은 경우는 판매사마다 조금은 다르지만 대부분 보드에 DHT11 센서가 실장 되어 있고 3 pin (OUT, VCC, GND)으로 구성되어 있습니다. 추후 완성품을 만들 때도 모듈형이 여러모로 편하기 때문에 모듈형을 위주로 포스팅하도록 하겠습니다. 

 

동작 전압 (Power) 3~5 V
온도 측정 범위 (Temperature range) 0 ~ 50 ℃ (±2 ℃)
습도 측정 범위 (Humidity range) 20 ~ 80 % (±5 %) 
최대소비전력 (Max. current) 2.5 mA
데이터 주기 (sampling rate) 1 Hz

 

  • 아두이노와 DHT11 센서 연결

센서를 동작하기 위해서는 기본적으로 센서가 필요한 전원이 공급되어야 합니다. DHT11의 동작 전압이 3~5V로 아두이노의 3.3V나 5V pin 어디에나 연결해도 괜찮습니다. 그림과 같이 VCC(+) 핀은 아두이노의 3.3V 또는 5V 핀에 연결하고 GND는 GND핀에 연결합니다. 그리고 센서가 측정한 데이터를 아두이노가 받아야 하기 때문에 Data output 핀과 아두이노의 디지털(DIGITAL) 핀과 연결합니다. 저는 디지털 2번 핀과 연결하였는데 이 부분은 프로그램에서 바꿀 수 있기 때문에 2번부터 13번까지 어디에 연결해도 상관은 없습니다.

 

만약에 센서를 여러개 사용하시면 각 센서의 Data output 핀을 아두이노의 디지털 핀에 번호를 다르게 각각 연결하면 됩니다. 동작전압 공급은 VCC는 한꺼번에 3.3V 또는 5V에 연결하고, GND 역시 한꺼번에 아두이노의 GND에 연결하면 되는데.. 이는 병렬연결(한꺼번에 연결) 일 때 동일하게 Voltage가 공급되기 때문입니다. 주의하실 부분은 아두이노가 제공할 수 있는 Power 출력 범위보다 많은 수의 센서 또는 전력을 많이 먹는센서를 사용하면 센서가 정상적으로 작동이 안 될 수 있습니다. (집에 와트(W)수 높은 가전제품을 한 번에 꼽으면 안 되는 것과 같은 원리입니다.) 

   

온습도 센서(DHT11) 회로도

 

 

 

 

 

  • 스케치(sketch)로 프로그램 코딩

DHT11 센서를 동작하고 온도와 습도 data를 불러오는 프로그램을 스케치를 통해서 코딩합니다. 스케치를 아직 설치하지 않으신 분은 아래 링크 참조하셔서 설치 부탁드려요~

 

아두이노(Arduino) 시작하기 - 통합개발환경(IDE): 스케치(sketch)

아두이노(Arduino)는 마이크로 컨트롤러(Micro-controller)로 구성된 프로그램에 따라 명령을 수행합니다. 이전 포스팅에서 살펴보았듯이 아두이노를 통해 외부기기나 센서를 컨트롤할 수 있습니다. 구상하는 대로..

it-g-house.tistory.com

아래와 같이 코딩 후에 한가지 추가해야 하는데... 그건 '라이브러리(Library)'라고 하는 파일입니다. 여기서 '라이브러리'를 간단히 설명하면 이미 코딩된 프로그램을 인용해서 사용하는 개념 정도로 이해하시면 됩니다. 아래 명령어에서 첫 줄에 있는 #include <dht.h>가 'dht.h' 라이브러리를 사용하겠다는 내용입니다. 

 

아두이노 스케치를 이용한 DHT11 센서 프로그램 코딩

 

라이브러리가 필요한 것은 DHT11 센서에서 측정되는 값은 대부분 센서가 그렇듯 단순 전기적인 voltage 값입니다. 이를 우리가 알아볼 수 있게 calibration 된 값으로 변경하고 디지털 값으로 변화시켜 하나의 output선으로 출력해주는 과정과 같은 센서가 측정하는데 필요한 프로그램들이 'dht.h' 라이브러리에 녹아져 있는 것입니다. 덕분에 우리는 편하게 라이브러리만 인용하여 위와 같은 간단한 코딩이 가능한 것입니다. (코딩 블록은 본문 맨 아래 첨부해 두겠습니다.)

 

라이브러리는 인터넷 검색으로 쉽게 찾을 수 있으며 라이브러리 추가하는 방법은 파일을 아두이노 라이브러리 폴더에 넣어 두시면 됩니다. 대부분 C:\Users\Documents\Arduino\libraries 경로로 예상하나 다들 설치한 곳에 따라 다를 수도 있으니 라이브러리 폴더를 찾아주세요~ 그리고 폴더에 압축 푼 파일을 옮겨두고 스케치를 다시 켜주세요~ 스케치를 껐다가 다시 켜야 스케치가 인식을 하니 참고하세요 ^^ 제가 사용하는 라이브러리 파일은 여기 첨부하겠습니다. 

DHT_Library.zip
0.01MB

 

  • 아두이노에 프로그램 업로드(Upload)

코딩이 완료되었으면 메뉴 상단의 '체크' 표시를 눌러 프로그램이 이상이 없는지 Compile을 실행합니다.

 

Compile 실행

이상이 없으면 아래와 같이 "Done compiling"이라고 완료됩니다.

 

Compile 완료

그리고 메뉴 상단의 Upload를 눌러주면 코딩한 프로그램이 아두이노로 업로드됩니다. 업로드 완료 메세지가 정상적으로 나타나면 모두 완료되었습니다. 그럼 온습도 센서가 정상적으로 동작하고 있는지 확인해야겠죠? 센서가 수집하고 있는 데이터를 보기 위해 시리얼 통신(Serial communication)을 통해 컴퓨터에서 볼 수 있습니다. 스케치에서 시리얼 모니터(Serial Monitor)를 실행하면 아래와 같이 창이 뜨고 온도와 습도 데이터를 확인할 수 있습니다.

 

프로그램 업로드(Upload) 하기
아두이노(Arduino) 시리얼 모니터(Serial Monitor) 실행
아두이노(Arduino) 시리얼 모니터(Serial Monitor)를 통해 온습도 데이터 확인하기

 

 

 

 

 


여기까지 아두이노(Arduino)에 온습도 센서(DHT11)를 설치하고 동작하는 프로그램까지 코딩해 보았습니다. 처음 정상적으로 구동될 때 엄청 신기하고 신났던 게 기억나네요 ㅎㅎ 간단한 센서 동작을 응용하여 여러 개의 센서를 동작하면 복잡한 프로젝트도 진행할 수 있습니다.   

 

이제 온습도 센서(Temperature and Humidity sensor)가 수집하는 데이터를 활용하기 위해서 우선 컴퓨터로 데이터를 받아야겠죠? 다음 시간에는 시리얼 통신(Serial communication)으로 들어오는 데이터를 저장하는 방법에 대해 알아보겠습니다. 의견이나 질문 있으시면 언제든지 댓글로 남겨주세요~ ^^

 

한걸음 한걸음씩!!

 

#include<dht.h>
dht DHT;
#define DHT11_PIN 2
float hum; //Stores humidity value
float temp; //Stores temperature value

void setup() {
Serial.begin(9600);
}

void loop() {
DHT.read11(DHT11_PIN);
hum = DHT.humidity;
temp = DHT.temperature;

Serial.print("Humidity: ");
Serial.print(hum);
Serial.print(" %, Temp: ");
Serial.print(temp);
Serial.println(" Celsius");
delay(2000); //Delay 2 sec.
}

 

▼ 온도 습도 센서 사러가기!! ▼

 

DHT21 아두이노 온도 습도 디지털 센서 / AM2301 sensor : 스토어플랜트

[스토어플랜트] 안녕하세요 스토어플랜트입니다.

smartstore.naver.com

* 프로그램 코딩에 관해 처음이신 분은 아래 정리한 내용 참고 부탁드립니다. 질문사항이나 추가적으로 필요한 내용 있으면 언제든지 댓글로 남겨주세요 ^^

 

Arduino (아두이노) 스케치 프로그램 코딩 입문

아두이노(Arduino)는 프로그램에 의해 동작하는 Micro-controller입니다. 그렇기 때문에 프로그램 코딩을 어느 정도 할 수 있어야 원하는 홈 IoT (사물인터넷) 같은 프로젝트를 진행할 수 있습니다. 저처럼 프로그..

it-g-house.tistory.com

명령어 기능 사용법
  include 외부 라이브러리를 스케치 안에 포함할 때 사용 #include <라이브러리 파일명>
define 매크로 상수와 함수를 정의할 때 사용 #define 변수 상수(함수)
serial.begin 아두이노의 시리얼 통신(Serial communication)을 시작할 때 사용 Serial.begin(통신속도);
serial.print 아두이노 시리얼 통신의 데이터 값을 출력할 때 사용  Serial.print("출력내용");
delay 프로그램을 진행을 원하는 시간만큼 일시적으로 멈출 때 사용 delay(msec.);

 

 

 

반응형
반응형

 

 

아두이노(Arduino)를 구입하려고 온라인에서 'UNO R3'모델을 검색해보면 DIP타입? SMD타입? CH340? 이런 식으로 여러 종류가 있는 것을 확인할 수 있습니다. 가격이 너무 천차만별이고 생긴 건 다 비슷비슷해서 정말 아두이노 '아'자도 모를 때는 뭘 사야 할지 난감하죠 ㅠㅠ 

 

아두이노는 오픈소스(open-source)이기 때문에 누구든 어디에서든 아두이노 보드(Board)를 똑같이 만들어서 영리 목적으로 판매해도 문제가 되지 않습니다. 이러한 이유로 비슷하지만 다양한 종류의 보드들이 시중에서 판매 중이고 기능적으로 동일하지만 사용한 부품이 다르거나 만든 곳이 다른 제품들이 많습니다. 이러한 보드들을 '호환 보드'라고 합니다. 그래서 통상적으로 처음 상업적으로 제작한 이탈리아 제품을 '정품'이라고 합니다. (엄밀히 따지면 정품이라기보다 우량품? 정도로 저는 생각됩니다.) 하지만 다들 정품이라고 하면 통용되는 말이기 때문에 저도 포스팅에 정품 보드라고 할게요 ㅎㅎ

  

그럼 오늘은 아두이노 호환 보드 종류와 정품 보드와의 차이점에 대해 알아보겠습니다.

 


온라인상에서 구입할 수 있는 아두이노 우노 R3 종류는 세 가지입니다. 왼쪽부터 정품(2~3만 원대, DIP타입), 정품과 똑같이 생긴 호환 보드(7~8천 원대, DIP타입), 'CH340'이라고 불리는 호환 보드(4~5천 원대, SMD 타입)가 있습니다. 

 

아두이노 우노 R3 (Arduino UNO R3) 정품보드와 호환보드

여기서 DIP타입은 'Dual In-line Package' 약자이며, SMD 타입은'Surface Mount Device' 약자로 MCU (Micro Controller Unit) 반도체 칩 형태가 아래 사진 같이 생긴 것을 말합니다. 회로 보드에 실장 하는 방법에 따라 구분되는데 단순하게 칩에 다리가 있고 없고 차이라고 생각하셔도 됩니다. 사진에서 볼 수 있듯이 DIP 타입이 칩에 다리가 있는 제품이고 칩이 실장 된 보드 뒷면을 볼 때도 다리 구멍에 납땜된 것을 알 수 있습니다. 반대로 SMD 타입은 칩에 다리가 없기 때문에 칩이 실장 되어 있는 보드 뒷면이 깨끗합니다. 

 

DIP타입 ATmega328P칩
SMD타입 ATmega328P칩

 

보드에 실장 되어 있는 형태가 다를 뿐 MCU 반도체 칩은 정품, 호환 보드 모두 ATMega328P로 구성되어 있습니다. 정품 보드와 외관상으로 거의 비슷한 두 번째 보드는 다른 부분을 찾기 힘들 정도로 비슷하네요;; 뒷면의 프린팅만 다른정도..? 'CH340' 호환 보드는 회로 배열이나 사용된 부품이 일부 다르게 생겼습니다. 

 

 


그럼 실제적으로 기능에 차이점이 없는지 알아보겠습니다. 정품 보드와 호환 보드 모두 USB B type 케이블로 연결 가능합니다. 아두이노를 PC와 연결하는 방법은 링크 걸어요~ 참고 부탁드립니다.

 

아두이노(Arduino) 시작하기 - 스케치 (sketch) 실행

아두이노(Arduino)를 사용하려면 통합개발환경(IDE): 스케치(sketch) 소프트웨어를 통해 프로그램을 코딩하게 됩니다. 프로젝트를 진행하기 위해 스케치를 실행하고 아두이노를 PC와 연결하는데 간혹 진행이 잘 안..

it-g-house.tistory.com

여기서 잠깐!! 'CH340' 호환 보드는 PC와 통신하는 칩이 'WCH CH340G'로 구성되어있기 때문에 USB를 꼽아도 Port에 아두이노 호환 보드가 잡히지 않을 겁니다. 그래서 http://www.wch.cn/download/CH341SER_ZIP.html에서 CH340 드라이버를 다운로드하여서 설치해야 합니다. 

WCH 홈페이지 다운로드

혹시 다운로드가 안되시는 분들을 위해 파일을 업로드 해놓으께요

CH341SER.ZIP
0.18MB
드라이버 설치 파일

드라이버를 설치하고 PC와 아두이노가 정상적으로 연결되면 포트에 'CH340' 호환 보드를 인식하는 것을 확인할 수 있습니다.

 

 


 

저는 경험한 적은 없는데 첫 번째 호환 보드는 가끔 프로그램이 보드로 업로드가 안된다고 하네요.. 어떤 글에서 업로드하는 동시에 보드의 리셋 버튼을 눌렀더니 된다고 합니다 ^^ 이런저런 귀찮은 일이 싫으면 돈을 조금 더 투자해서라도 정품 보드를 사야겠네요 ㅎㅎ 정품 보드는 사진처럼 케이스부터 정품스럽습니다 ㅎㅎㅎ

 

아두이노 우노 R3 정품

 

▼ 아두이노 우노 R3 정품 (이탈리아 제품) 사러 바로가기 ▼

 

아두이노 우노 R3 정품 / Arduino Uno R3 이탈리아 제품 : 스토어플랜트

[스토어플랜트] 안녕하세요 스토어플랜트입니다.

smartstore.naver.com


 

여기까지 아두이노 우노 R3 (Arduino UNO R3) 호환 보드에 대해 간단히 알아보았습니다. 앞으로 계속 테스트하면서 외부기기나 센서를 동작할 때 호환보드 기능들의 문제점이나 차이점이 발생하면 포스팅하도록 하겠습니다.

 

다음에는 온습도 센서를 간단한 프로그램 코딩을 통해 동작해보도록 하겠습니다.

 

긴 글 읽어주셔서 감사합니다. 궁금하신 내용이나 추가적으로 필요한 내용 있으면 언제든지 댓글 부탁드립니다.

 

 

 

 

반응형

+ Recent posts