반응형

아두이노(Arduino)를 이용한 홈 IoT (생활응용)에 적용하는 시간으로 무더운 여름 시즌에 맞춰 자동 선풍기를 만들어보겠습니다. 2020년 여름은 예년보다 특히 더 덥다고 하니 똑똑한 자동 선풍기로 조금이나마 더위를 식혀보자고요 ^^

 

 

 

기획은 진작에 해놓고.. 여름 다 지나가고... 업로드 하게 되었네요 ㅠㅠ 그래도 아직은 8월이니까;; 도움이 되었으면 합니다..


1. 준비물

 

1) 아두이노 우노 R3 (Arduino UNO R3)

 

아두이노 우노 R3 (Arduino UNO R3)


프로젝트가 간단해서 우노 R3 제품으로 충분한데 혹시 나노(Nano)를 보유하신 분은 나노가 더 적합한 거 같습니다.

 

 

 

2) HC-SR04 초음파 센서

 

아두이노 HC-SR04 초음파 센서

 

온라인에서 '초음파 센서'를 검색하면 아두이노용으로 많이 사용하는 모델인 'HC-SR04' 모듈입니다. 초음파 센서에 관한 자세한 내용은 앞선 포스팅에서 소개해 드렸으니 아래 링크 참조 부탁드리며, 이번 포스팅에서는 넘어가도록 하겠습니다.

 

Arduino 아두이노 초음파(거리) 센서(ultrasounds sensor) 사용방법

앞서 포스팅에서 온습도 센서(Temperature and Humidity sensor)만 가지고 아두이노의 기본적인 동작법이나 파일 저장법, 그래프 그리기, 엑셀(Excel)과 연동하는 방법들을 알아보았습니다. 그리고 인터넷(

it-g-house.tistory.com

 

 

3) AM2305 온습도 센서 (Temperature and Humidity sensor)

 

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

 

DHT11와 DHT22에 비해 조금 더 비싸지만 측정오차가 가장 작고 회로를 감싸는 외부 케이스가 있어서 실외에서도 사용하기 좋아 개인적으로 AM2305 모듈을 많이 사용합니다. 이번 프로젝트는 DHT11 모듈으로도 충분하니까 AM2305 모듈이 없으신 분은 DHT11 또는 DHT22 모듈을 사용하시면 됩니다. 

 

▼ 같은 제품 구매하시려면 아래 링크!! ▼

 

AM2305 온도 습도 디지털 센서 : 스토어플랜트

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

smartstore.naver.com

 

 

4) DC-DC 승압형 5V 600mA USB 모듈

 

DC-DC 습압형 5V 600mA USB 모듈

아두이노 및 외부전력의 5V 전압을 활용하여 USB 구동 전자기기들을 사용할 수 있게 연결해주는 모듈입니다.

 

 

 

5) 릴레이(Relay)

 

1채널 릴레이 (Relay) 모듈

 

아두이노에서 스위치로 자주 사용되는 릴레이 모듈로 1 채널짜리로 준비하였습니다. 초음파 센서와 온습도 센서의 측정 데이터를 기반으로 설정된 조건에 따라 전원의 스위치를 On/Off 하는 데 사용합니다. 릴레이 사용 방법에 대한 자세한 내용은 아래 링크 걸어두겠습니다 ^^

 

Arduino 아두이노 릴레이 (Relay, 스위치) 사용방법

아두이노(Arduino)는 컨트롤러(controller)인 만큼 외부기기나 센서의 전원을 on/off 하는 경우가 많이 있습니다. 보통 이런 기능은 스위치(switch)가 하죠 ^^ 전자기기에서 전기신호를 받아서 스위치 역��

it-g-house.tistory.com

 

6) 220V AC-5V DC 어댑터

 

220V AC-5V DC 어댑터

 

가정의 220V 교류(AC) 전원을 5V DC로 변환시켜 USB 선풍기로 공급을 위해 어댑터를 준비하였습니다. 릴레이(Relay)와 USB 모듈에 연결시켜 전원공급에 사용됩니다. 

 

 

 

 

 

 

 

 


 

2. 아두이노 배선

 

온습도 센서와 릴레이는 앞서 포스팅한대로 아두이노와 연결하면 됩니다. 릴레이의 VCC와 GND는 아두이노의 5V와 GND pin에 연결하고, IN 단자는 아두이노의 디지털 3번 핀에 연결하였습니다. 온습도 센서의 VCC와 GND는 아두이노의 3.3V와 GND pin에 연결하고, data 선은 디지털 2번 핀에 연결하였습니다. 릴레이 COM 포트에 어댑터의 '+' 선을 연결하고 NO 포트와 USB 모듈의 '+' 부분과 연결합니다. 어댑터의 '-' 선은 USB 모듈의 '-'와 연결하고 USB 선풍기를 USB 모듈에 연결하면 모든 준비가 완료됩니다.

 

 


 

3. 동작 알고리즘

 

우선 실내 온도를 계속 모니터링 하면서 실내 온도를 기준으로 너무 덥지 않으면 선풍기가 작동하지 않게 설정 온도 이상일 때만 선풍기가 동작하도록 프로그램을 코딩합니다. 그리고 초음파 센서를 이용하여 사람이 가까이 오면 릴레이에 신호를 주어 어댑터를 통해 들어오는 전원이 USB 모듈에서 선풍기로 전달될 수 있게 스위치 ON 상태가 되도록 프로그램을 코딩합니다. 다시 사람이 멀어지거나 실내온도가 설정 온도 이하가 되면 선풍기는 릴레이가 스위치 OFF가 되어 선풍기가 자동으로 꺼지게 설계합니다.

 

 


 

4. 아두이노 프로그램 코딩

 

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

int Relay = 3;
int echo = 8; 
int trig = 12; 


void setup() {
  Serial.begin(9600); 
  pinMode(trig, OUTPUT); 
  pinMode(echo, INPUT); 
  pinMode(Relay, OUTPUT);
  }

void loop() {
  DHT.read21(DHT21_PIN); 
  hum = DHT.humidity; 
  temp = DHT.temperature;
  
  float cycletime; 
  float distance; 
  digitalWrite(trig, HIGH); 
  delay(10); 
  
  digitalWrite(trig, LOW); 
  cycletime = pulseIn(echo, HIGH); 
  distance = ((340 * cycletime) / 10000) / 2; 
  Serial.print("Distance:"); 
  Serial.print(distance); 
  Serial.println("cm"); 

  Serial.print("Humidity: "); 
  Serial.print(hum); 
  Serial.print(" %, Temp: "); 
  Serial.print(temp); 
  Serial.println(" Celsius");

  if(distance < 100 and temp > 25){ 
    digitalWrite (Relay, LOW); 
  } 
  else{ 
    digitalWrite (Relay, HIGH); 
  } 
  delay(1000);

}

 

프로그램은 앞서 포스팅한 온습도 센서, 릴레이(Relay) 모듈, 초음파 센서(HC-SR04)의 프로그램을 합치면 됩니다.

 

여기서 초음파 센서를 다룰때는 LED를 점멸하기 위해 'Power' 변수를 Pin 13으로 설정한 부분을 조건에 맞게 릴레이를 on/off 하기 위해 'Relay' 변수로 Pin 3번으로 변경합니다.

 

그리고 IF 조건문에서 원하는 distance 거리와 temp 온도 설정을 하면 됩니다. 저는 100 이하 25도 이상으로 설정하였습니다.

 

그리고 업로드 해주시면 완료~! 예시 동영상처럼 원하는 온도조건에서 사람이 가까이 있으면 선풍기가 켜집니다~ 와우!

 

 

 

 

 

 

 


여기까지 아두이노(Arduino)를 이용한 홈IoT (사물인터넷) 응용으로 스마트 자동 선풍기를 만들어 보았습니다.

 

역시나 이런 간단한 알고리즘을 더하고 더해서 좀 더 스마트하고 Fancy 한 기능을 가진 제품들이 탄생합니다. 더 나아가서 와이파이를 연결하여 원격제어 및 생성되는 데이터를 축적하여 빅데이터가 만들어지고, 빅데이터를 분석하여 학습시키면 인공지능이 탄생하는 겁니다.  

 

세상이 급변하는 것처럼 보이지만 차근차근 하나씩 따라해봐도 늦지 않습니다. 다들 화이팅!!

 

 

오늘도 긴 글 읽어주셔서 감사합니다. 궁금한 점이나 추가적인 조언 있으면 언제든지 댓글로 남겨주세요~

 

 

 

반응형
반응형

 

 

 

아두이노(Arduino)의 센서들을 알아보는 시간으로 앞선 포스팅에서 아두이노를 이용해 온실(식물) 재배 환경을 측정하는 시스템을 만들 때 사용했던 광센서, 조도센서(Light sensor)에 대해 알아보겠습니다.

 

광센서는 보통 일조량을 측정하거나 빛을 감지할 때 사용하곤 해서 일상생활에서는 쉽게 접하기는 사실 어려울 수도 있을 거 같습니다. 그러나 가시광선 영역 외 사람 눈으로 보기 어려운 자외선 및 적외선 파장대를 사용하는 기기의 빛을 감지하거나 빛을 이용한 통신을 할 때도 광센서를 사용하는 등 알게 모르게 생활 속 다양한 곳에서 다양한 종류의 광센서가 사용되고 있습니다. 

 

지난 포스팅에서 광센서는 재배온실의 환경을 측정하거나 식물에게 필요한 광량을 정밀하게 측정하기 위해 사용하는 것으로 소개드렸습니다. 이처럼 이번 포스팅에서는 태양의 빛의 세기인 조도(Lux)를 측정하는 아두이노용 광센서를 소개해드리고 사용방법에 대해 알아보겠습니다.

 

아두이노(Arduino)를 활용한 온실(식물) 재배 환경 측정

아두이노(Arduino)의 기본적인 몇 가지만 습득하면 정말 다양한 분야에서 활용 가능합니다. Micro-controller에 맞게 주로 외부기기나 센서를 제어하는데 탁월한 능력을 가지고 있기 때문에 홈 IoT나 ��

it-g-house.tistory.com

 


 

1. bh1750 조도센서

 

아두이노용 bh1750 조도센서

 

아두이노에서 사용할 광센서를 검색하면 일반적으로 bh1750 조도센서를 많이 찾아볼 수 있습니다. 그중 위의 사진처럼 CY-30 또는 GY-302 모듈이 가장 많이 검색되는데 모두 Cds 타입의 조도 센서입니다.

 

Cds는 황화 카드뮴(Cadmium Sulfide) 약자로 빛에 반응하는 화합물로 빛을 Cds에 비추었을 때 내부의 전기전도도가 높아지는 광도전 효과(果, photoconductive effect)가 나타납니다. 빛이 많이 들어오면 저항이 작아지고 적게 들어오면 저항이 커지는 성질을 이용하여 빛의 유무를 측정할 수 있는 광도전소자에 많이 이용됩니다. CdS 광도전소자는 가시광선 대역에서 특히 높은 감도를 나타내기 때문에 가시광선 영역대의 빛의 세기(조도, Lux)를 측정하는 광센서로 사용됩니다. 

 

황화카드뮴 조도 센서

 

보통 Cds 조도센서라고 하면 위 사진과 같은 제품을 많이 보셨을 거라 생각되고 이런 단품으로 생각이 됩니다. 그러나 아두이노에서 사용하려면 모듈 제품이 필요하고 실질적으로 실외나 사용 환경에 따라서 모듈의 회로까지 보호할 수 있는 형태면 더욱 좋습니다. 그래서 저는 bh1750fvi 모듈을 사용하고 오늘 포스팅에도 이 모듈을 가지고 진행하려고 합니다.

 

 

아두이노(Arduino) bh1750fvi 조도센서
bh1750fvi 조도센서
아두이노(Arduino) bh1750fvi 조도센서

사진에서 볼 수 있듯이 외부환경으로부터 회로를 보호하고 태양의 직사광선을 확산시켜주는 덮개가 있어 실외에서 사용하기에도 적합합니다. 혹시 아두이노용으로 사용할 수 있는 더 괜찮은 조도센서가 있다면 추천 부탁드립니다 ^^

 

 

 


 

2. 아두이노(Arduino)와 bh1750 조도센서 배선

 

2-1. I2C 통신

 

bh1750 조도센서는 I2C 통신을 합니다. I2C (Inter-Integrated Circuit)은 실제로는 I²C (아이 스퀘어 씨)가 올바른 표기이지만 다들 I2C(아이 투 씨)라고 많이들 표기합니다.

 

I²C 는 풀업 저항이 연결된 직렬 데이터(SDA)와 직렬 클럭(SCL)이라는 두 개의 양 방향 오픈 컬렉터 라인을 사용합니다. 즉, 데이터(SDA)와 데이터의 전송 타이밍(SCL)을 위한 두 개의 선으로 통신을 하는 방식입니다. 

 

I²C는 빠른 속도를 요구하지 않는 간단한 저비용 주변 장치들에 적합하며, 특히 아두이노 같은 Micro-controller에서  단지 2개의 입출력 핀 소프트웨어만을 이용하여 여러 장치들을 제어할 수 있다는 장점이 있습니다. 또한 일반적으로 더 적은 전력을 소모하기 때문에 휴대전화나 이동형 장치들에서 사용하기에 편리합니다 (위키백과).

 

 

아두이노(Arduino) I2C 통신

 

인터넷 상에서 'I2C 통신'이라고 검색을 하면 위와 같은 그림을 많이 볼 수 있습니다. 통신을 위해서 하나의 Master와 하나 이상의 Slave가 구성되는데 Master는 MCU, 아두이노가 되며, Slave는 device, 외부기기 및 센서가 됩니다.

 

Slave는 여러개 동시에 연결을 하여 통신할 수 있는데 이때 Slave 간 구별을 위해 각 Slave마다 개별 주소(address)가 필요합니다. 실제 아두이노 프로그램이나 라이브러리에 포함된 내용을 보게 되면 I2C통신을 하는 센서나 외부기기는 address가 부여되어 있습니다.

 

더 자세한 내용은 I2C통신으로 검색하여 찾아보시면 정말 다양한 정보가 있으니 참고 부탁드리며, 여기에서는 오늘 사용하려는 bh1750 광센서가 I2C 통신을 한다. 그래서 두 개의 선 (SDA, SCL)이 필요한데, SCL (직렬 클럭)이 데이터 전송 타이밍을 맞춰주는 방식으로 통신을 한다. 또한 각 Slave에는 address가 부여하여 구분을 하기 때문에 아두이노의 하나의 SDA, SCL 포트에 여러 개의 센서 및 외부기기를 병렬로 연결하여 사용할 수 있다! 정도만 기억하시면 됩니다.

 

2-1. 아두이노와 조도센서 배선

 

bh1750 센서에는 VCC/SCL/DAT/GND/ADD 로 총 5개의 연결 단자가 있습니다. 각각 아두이노의 적합한 pin에 연결하시면 됩니다. VCC는 5V, GND는 GND, ADD는 연결하지 않거나 GND에 연결하고, 앞서 소개해드린 SCL과 DAT (SDA)는 각각 아날로그 핀 (Analog pin) 5번과 4번에 연결하시면 됩니다. 

 

아두이노(Arduino)와 조도센서(Light sensor) 배선

 

 

 


 

2. 프로그램 코딩

 

먼저 라이브러리를 다운받습니다. 다운로드한 라이브러리는 스케치에서 추가해주시고, 혹시 라이브러리를 처음 사용하시는 분은 아래 링크 참조하셔서 스케치에서 라이브러리를 추가하는 방법을 알아두시면 유용합니다.

 

BH1750-master.zip
0.27MB

 

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

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

it-g-house.tistory.com

#include <BH1750.h>

BH1750 lightMeter;

void setup(){

  Serial.begin(9600);
  lightMeter.begin();
  }

void loop() {

  float lux = lightMeter.readLightLevel();
  Serial.print("Light: ");
  Serial.print(lux);
  Serial.println(" lx");
  delay(1000);
  }

코드는 라이브러리를 사용하기 때문에 생각보다 간단합니다. 라이브러리에 속해있는 명령어 lightMeter.begin(); 명령어가 setup에서 실행되고, 변수 lux에 lightMeter.reaLightLevel(); 명령어로 측정된 조도 값을 저장한 뒤 Serial.print 명령어로 출력하는 순서입니다. 

 

프로그램 코딩 후 컴파일/업로드를 진행하면 시리얼 모니터로 조도센서에 의해 측정된 조도 값이 1초 간격으로 나타나는 것을 확인할 수 있습니다.


여기까지 아두이노(Arduino) 센서 중 조도센서(Light sensor) bh1750 모듈의 사용 방법을 알아보았습니다. 이와 함께 I2C통신 방식에 대해서도 간단하게 설명드렸습니다. 추후 기회가 생기면 통신방식에 대해서 정리해보는 포스팅을 하도록 하겠습니다.

 

앞서 소개해드렸듯이 조도센서는 일상생활에서 알게모르게 많이 사용되기도 하고 특히 식물 재배 환경에서는 햇빛의 광량을 측정할 수 있기 때문에 아주 유용합니다. 식물에게 일일적산광량 (DLI, Day Light Integral) 매우 중요한 개념이고, 개화에 있어서 광량 및 주기 또한 큰 영향을 미치기 때문에 꼭 측정하는 항목이기도 합니다.

 

광이 식물에 영향을 미치는 부분은 아두이노 블로그에서는 다루지는 않도록 하겠습니다. ㅎㅎ 그럼 오늘도 긴 글 읽어주셔서 감사합니다. 궁금하신 부분이나 다양한 의견 댓글로 남겨주시면 감사하겠습니다.

 

 

 

 

반응형
반응형

 

 

 

아두이노(Arduino)의 기본적인 몇 가지만 습득하면 정말 다양한 분야에서 활용 가능합니다. Micro-controller에 맞게 주로 외부기기나 센서를 제어하는데 탁월한 능력을 가지고 있기 때문에 홈 IoT나 온실 내부 환경 제어 같은 농업분야에 적합하다고 생각됩니다.

 

지난 포스팅에서는 대부분 기본과 간단하게 적용해볼 수 있는 내용을 위주로 포스팅하였지만 오늘은 실질적으로 농업 분야에 적용한 내용을 소개해 드리겠습니다. 아두이노를 처음 접하시는 분들은 아래 링크 내용 참고 부탁드립니다 ^^

 

아두이노(Arduino)가 뭐야? What is Arduino?

아두이노(Arduino)는 "마이크로 컨트롤러(Micro-controller)"라고 많이 정의하고 있습니다. 실질적으로 거의 정확한 표현에 가깝습니다. 말그대로 마이크로는 미니(Mini)보다 작다는 표현으로 작은 컨트�

it-g-house.tistory.com


식물재배를 위해서는 광, 수분, 온도, 습도, 이산화탄소, 양분 등의 식물이 생장하기에 적합한 환경을 조성하는 것이 필요합니다. 가정에서 인테리어용이나 취미로 식물을 기르시는 분들도 많고 실제 농업에 종사하시는 분도 많이 계신데 식물관리는 쉬운 듯하면서도 다들 시행착오가 많습니다. 최근에는 도시 근교 텃밭이나 옥상, 베란다 등에 무농약, 유기농 채소를 직접 재배하여 아이들 교육에도 건강에도 도움이 되는 도시농업이 트렌드로 자리 잡고 있습니다.

 

이런 트렌드에 IoT를 접목시켜 조금 더 효율적으로 식물을 관리할 수 있는 방법에 아두이노를 적용할 수 있습니다. 이번 포스팅은 아두이노로 온습도, 화분의 물의 양, 광량을 측정할 수 있는 간단한 계측기를 만들어 보겠습니다.

 


 

1. 준비물

 

1) 아두이노 우노 R3 (Arduino UNO R3)

 

아두이노 우노 R3 (Arduino UNO R3)

 

센서 종류마다 한개의 센서만 사용하기 때문에 우노 R3 제품으로 충분합니다. 혹시 센서수를 많이 사용하시거나 하면 MEGA 보드나 멀티플렉서(Multi-plexer) 사용을 권장드립니다. 멀티플렉서 사용 방법은 아래 링크 참조 부탁드립니다.

 

Arduino 아두이노 멀티플렉서(Multiplexer, MUX) 사용방법

아두이노(Arduino)로 프로젝트를 진행하면서 다수의 저전력 센서나 모듈을 사용하다 보면 입력(input) 또는 출력(output) 단자(Pin)가 생각보다 부족하다는 것을 느낄 때가 많습니다. 아두이노 또는 컨�

it-g-house.tistory.com

 

2) 온습도 센서

 

온습도 센서 (AM2305)

 

온습도 센서는 AM2305 모델로 온실이나 식물 재배 환경을 측정하는 것이 용도이기 때문에 실내라고 하기에는 실외에 가깝기 때문에 실외환경에서도 측정 가능하며 미니 백엽상(radiation shield)도 사용할 수 있는 모델로 선택하는 게 용이합니다. 온습도 센서 종류와 사용 방법은 이전 포스팅에서 자세히 다루었으니 참고 부탁드립니다.

 

▼ 같은 제품 구매하시려면 아래 링크!! ▼

 

AM2305 온도 습도 디지털 센서 : 스토어플랜트

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

smartstore.naver.com

 

3) 토양수분센서

 

토양수분센서 (토양수분, EC 측정 가능)

토양수분센서는 화분의 수분과 양분의 정도를 측정하기 위해 토양수분과 EC 동시에 측정 가능 한 제품으로 선택하였습니다. 또한 실제 재배 환경에서 내구성을 고려하여 방수가 가능하고 신뢰성이 괜찮은 제품으로 선택해야 합니다. 이전 포스팅에서 보여드린 아두이노에서 사용하기 쉬운 토양수분센서 중에서도 가격이 저렴한 몇몇 제품은 방수가 안되며 오래 사용하면 금방 녹이 끼는 제품이 있으니 주의해야 합니다. 토양수분센서에 대한 자세한 내용은 지난 포스팅 참고 부탁드립니다.

 

아두이노(Arduino)에서 토양수분센서(soil moisture sensor) 사용

토양수분센서(soil moisture sensor)도 아두이노(Arduino)에서 많이 다루는 센서 중 하나입니다. 앞서 소개한 온습도 센서(Temperature and humidity sensor)와 초음파 센서(Ultrasounds sensor)처럼 외부환경을..

it-g-house.tistory.com

 

4) 광 센서

 

광 센서 (BH1750)

일반적으로 식물이 광합성을 하는 파장 영역은 400~700nm로 가시광선 영역입니다. 그렇기 때문에 광센서는 광합성 유효 복사, PAR (Photosynthetic active radiation)이라고 하는 영역의 빛의 세기를 측정하는 광센서를 사용하는 것이 광이 식물에 영향을 미치는 정도를 더 긴밀하게 알 수 있습니다. 그러나 일반적으로 조도(Lux)에 익숙하고 가이드라인도 조도를 기준으로 되어 있어서 조도센서를 많이 사용합니다. 그리고 PAR 센서는 비싸기도 하죠 ㅎㅎ 

 

오늘 사용할 광센서인 BH1750 모델로 아두이노에서 사용하기 적합한 제품으로 가격도 저렴하고 나름 회로를 보호하기 위한 캡도 있어서 실외에서 사용하기 괜찮은 제품입니다. BH1750 센서의 자세한 사용 방법은 추후 포스팅하도록 하겠습니다.

 

 

5) 디스플레이

 

아두이노 LCD 디스플레이 (20x04)

각 환경 센서가 측정하는 데이터를 실시간으로 출력하기 위해 LCD 디스플레이(display)를 사용하였습니다. 사용한 디스플레이는 20x04 LCD 디스플레이로 파랑 바탕에 하얀 글씨만 출력되는 제품으로 가로 20자 세로 4줄인 디스플레이입니다. 여기에 온도, 습도, 조도, 토양수분, EC의 정도를 실시간으로 출력합니다.

 

 

6) 하이박스

 

하이박스 (컨트롤 박스)

아두이노 및 다양한 전자제품을 만들고 외부로부터 보호를 위해 하이박스에 고정 및 배선작업을 합니다. 그래서 완성품을 컨트롤 박스라고 명명합니다. 철 재질이나 플라스틱 박스로 벽에 붙어 있는 배전함 같은 것들이 모두 컨트롤 박스입니다. 

 

 

2. 식물 재배 환경 측정 시스템 배선

 

아두이노(Arduino) 식물 재배 환경 측정 시스템 배선

 


 

3. 작동 알고리즘

 

온습도 센서, 토양수분센서, 광센서에서 측정된 온도(℃), 습도(%), 수분량(%), 광량(Lux) 값을 디스플레이(20x04)에 실시간으로 출력되고 웹을 통해 사전에 구축한 데이터베이스(DB)에 저장되거나, 시리얼 통신을 활용한 컴퓨터 엑셀에 데이터를 받을 수 있는 있게 만들 수 있습니다. 웹 구축 및 컴퓨터 엑셀에 저장하는 방법은 아래 링크 참조 부탁드립니다.

 

아두이노 홈IoT 서버 활용 2: ESP8266(ESP-01) 이용하여 DB서버(MySQL)에 온습도 데이터 저장하기

아두이노(Arduino)를 이용한 홈 IoT를 구축하는 프로젝트의 진행과정으로 웹서버(Web sever)와 데이터베이스(Database, DB)를 구성하였습니다. 이어서 지난 포스팅에서는 웹브라우저를 통해서 DB서버(MySQL

it-g-house.tistory.com

 

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

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

it-g-house.tistory.com

1초 또는 2초 간격으로 측정되는 모든 데이터를 저장하려면 용량이 너무 크기도 하고, 식물 재배 환경은 1초 1분 촌각을 다루지 않기 때문에 아두이노에서 5분 또는 30분 이상의 평균값을 계산 후 저장해도 무방합니다. 

 

데이터 베이스에 저장된 데이터는 다시 웹을 통해 그래프로 시각화하여 시간에 따른 환경 변화 추이를 한 번에 볼 수도 있으며 엑셀 역시 그래프에 연동되게 만들어 바로바로 확인이 가능합니다.


 

 

아두이노(Arduino)를 사용한 식물 재배 환경 측정 (실제 농장의 재배온실 현장에 적용한 모습)

 

사진은 수국 재배 농장의 아는 사장님의 의뢰로 제작된 온실 재배 환경 계측기입니다. 앞서 설명드린 대로 아두이노 우노 R3 보드와 각 환경 센서와 제작되어 20x4 LCD 디스플레이에 실시간 측정값이 출력됩니다. 

 

분화수국은 각 재배베드(plant growth bed)위에서 화분으로 재배되기 때문에 각 베드마다 작물 주기가 다르게 진행됩니다. 그래서 원하는 베드마다의 환경 제어가 필요하기 때문에 이동 가능하고 구역별로 설치할 수 있게 소형으로 제작되었습니다. (실제로 온실 시설에 내장되어 있는 환경 시스템은 온실 전체를 대변하기 때문에 온실 내부 구역 구역마다 환경이 다른 경우가 많습니다.)

 

측정된 데이터는 ESP-01 와이파이 모듈을 통해 웹서버 DB로 데이터가 저장되고 웹브라우저를 통해 시간에 따른 온도, 습도, 조도, 토양수분, EC의 그래프로 한눈에 볼 수 있게 출력할 수 있습니다.

 

아두이노(Arduino) 활용 웹브라우저를 통한 온실 재배 환경 데이터 출력


농업도 4차 산업의 유망 업종 중 하나로 주목받고 있는 만큼 오늘은 아두이노(Arduino)를 이용해 IT를 농업에 접목하는 실제 적용 사례를 소개해 드렸습니다. 몇 가지 센서와 아두이노 보드만으로 필요한 부분에 꼭 맞게 맞춤 제작할 수 있는 것이 매력이죠 ^^

 

이렇게 재배 환경을 데이터화 하여 재배 작물의 일련의 작기를 거치면서 데이터가 쌓여 빅데이터가 되고 빅데이터가 인공지능 AI의 기반이 되는 겁니다. 

 

여기까지 긴 글 읽어주셔서 감사합니다. 혹시 아두이노를 이용한 온실 내부 환경 측정 계측기에 대해 궁금하신 부분이나 제작에 관심이 있으신 분은 이메일 주소 farmerit@naver.com으로 문의주시면 최대한 빠른 시일 내에 답변드리도록 하겠습니다. 감사합니다. 

 


 

이와 같이 측정된 데이터를 기반으로 자동으로 관수까지 할 수 있습니다. 스마트팜(Smart Farm)이라고 잘 알려져 있는데 이렇게 데이터를 기반으로 작물을 재배하는 분야를 정밀농업이라고 합니다. 

 

스마트 팜에서 자동관수 시스템을 구성하는데 전자밸브/솔레노이드 밸브 (Solenoid Valve)를 많이 사용하고 있습니다. 관심 있으신 분은 아래 링크 참조 부탁드립니다.

 

 

솔레노이드 밸브(Solenoid Valve)를 아두이노로 사용하는 방법

스마트팜(Smart Farm) 구축 중 하나인 자동관수 시스템에 자주 사용되는 솔레노이드 밸브(Solenoid Valve)에 대해 알아보겠습니다. 솔레노이드 밸브는 전자밸브 중 하나인데 전기신호를 받아 밸브를 on/

it-g-house.tistory.com

 


 

반응형
반응형

 

 

 

아두이노(Arduino)를 다루다 보면 다양한 모듈을 사용할 기회가 많은데 그 중에 쉴드(shield) 제품을 사용할 경우가 있습니다. 아두이노 쉴드는 아두이노 보드 본체와 탑처럼 쌓을 수 있게 아두이노의 pin과 결합이 가능한 모듈을 말합니다. 각 쉴드마다 특정 기능을 탑재하고 있어서 마치 아두이노 본체를 하드웨어적으로 업그레이드하는 Flex 한 느낌이 드는 모듈입니다. 

 

아두이노 쉴드 종류는 현재 시장에 나와있는 종류만 300가지가 넘고, Wifi, 이더넷, 블루투스, SD카드, USB, 등 정말 다양한 기능을 탑재한 쉴드제품이 있습니다. 쉴드 하나하나 자세히 다루고 싶긴 하지만 직접 사용해봐야 설명도 가능해서 우선 몇 가지 소개하고 있는 블로그를 아래 링크 걸어두게요 ^^ 참고하세요~

 

[아두이노 기초 강좌] 아두이노 쉴드란? 개념과 종류에 대해

[아두이노 기초 강좌. 아두이노 쉴드의 개념 및 종류] 이번 강좌에서는 아두이노 쉴드(Arduino Shield)에...

blog.naver.com

 

아두이노(Arduino) 쉴드(shield) 제품

아두이노 쉴드를 직접 사용해보시면 아실 듯 하지만 다양한 장점이 있습니다. 우선 단일 모듈은 배선을 해야 해서 전선을 복잡하게 사용해야 하는 경우가 있지만 쉴드는 pin 결합을 통해 배선이 하나 없어도 사용 가능합니다. 또한 아래와 같이 다양한 기능을 탑재한 쉴드를 결합해서 하나의 제품처럼 콤팩트 하게 사용할 수 있는 장점이 있습니다. 좀 멋지죠? ㅎㅎ 하지만 역시나 단점이 많다는 것!! 단점은 각 쉴드에 따라 경중이 있어서 쉽게 말하기 어렵지만.. 치명적인 결함도 있는 경우도 다수 있으니 항상 주의해서 구입해야 합니다.

아두이노 쉴드 사용예

쉴드 제품에 대해서 설명은 이렇게 가볍게 넘어가고 오늘 주제인 가장 관심이 많은 Wifi ESP8266 쉴드 제품 사용 방법에 대해 알아보도록 하겠습니다.

 

 


1. ESP8266 Wifi 쉴드(shield) 모듈

 

ESP8266 Wifi 쉴드 제품은 ESP8266 Wifi 모듈과 같이 ESP8266 칩셋을 사용하기 때문에 Wifi 모듈과 동일한 역할을 합니다. 아두이노에는 일반적으로 기본보드에는 와이파이 칩이 없기 때문에 와이파이 기능이 되려면 Wifi 모듈을 사용하거나 Wifi 쉴드를 사용하면 됩니다. 제품 모양은 아래 사진같이 생겼는데 좌측 중앙에 있는 칩이 Wifi 칩셋이고 그 주위로 Chip의 각 GIPO (General Purpose Input/Output)에 연결할 수 있게 pin이 배치되어 있고 보드 뒷면에는 아두이노의 pin과 결합할 수 있게 pin 다리가 있습니다. 그리고 특이하게 프로그램을 업로드할 때 사용하는 스위치가 있는데 뒤에서 사용방법을 얘기할 때 자세하게 설명드리겠습니다. 

아두이노(Arduino) Wifi 쉴드(shield)

 


 

2. ESP8266 Wifi 쉴드(shield) 모듈 라이브러리(Library) 추가

 

잠깐! ESP8266 Wifi 쉴드를 아두이노 본체에 먼저 결합하시지 마시고요 ㅎㅎ 그전에 라이브러리를 설치하고 스케치를 통해 프로그램을 아두이노를 통해서 쉴드에 업로드해야 합니다. 아마 여기저기 사용방법을 찾아보셨을 건데.. 일부 사용방법에서 펌웨어를 업로드해야 해서 추가로 모듈을 사용해야 한다고 포스팅되어 있는데도 많을 겁니다. 하지만! 매번 하는 이야기이지만 쉽게 복잡한 거 싫어하는 저는 아두이노만으로 충분히 동작하였습니다. 그럼 진행해 볼까요?

 

우선 라이브러리를 다운로드하기 전에 스케치 메뉴에서 File(파일) -> preferences(환경설정)에서 Additional Boards Manager URLs(추가적인 모드 매니저 URLs)에 http://arduino.esp8266.com/stable/package_esp8266com_index.json를 추가해줍니다.

 

아두이노(Arduino) 스케치 환경설정
아두이노(Arduino) 스케치 환경설정에 URLs 추가

그리고 라이브러리 포함하기(Include Library) 메뉴의 라이브러리 관리(Manage Libraries)에서 ESP8266 Community의 esp8266 라이브러리를 설치합니다.

 

아두이노(Arduino) 스케치에서 라이브러리(Library) 추가
esp8266 라이브러리(Library) 설치

esp8266 라이브러리가 정상적으로 설치되고 나면 스케치의 툴(Tool) 메뉴의 보드(Board)에서 NodeMCU 1.0 (ESP-12E Module)을 선택합니다. 

 

아두이노(Arduino) 스케치에서 보드(Board) 선택
아두이노(Arduino) NodeMCU 1.0 (ESP-12E Module) 보드 선택

NodeMCU 1.0 (ESP-12E Module) 보드를 선택하면 툴(Tiool) 메뉴에 보드명이 변경되고 그 아래로 Upload Speed, CPU Frequency 등의 정보가 표시되고 변경할 수 있는 메뉴들이 생성됩니다. 저는 따로 변경 없이 초기 설정되어 있는 그대로 사용하고 있지만 필요하신 분은 필요에 따라 설정을 변경하여 사용하시면 됩니다.  

 

 


 

3. ESP8266 Wifi 쉴드(shield) 모듈 프로그램 업로드

 

ESP8266 Wifi 쉴드와 스케치와 연결이 완료되었으면 테스트 프로그램을 업로드해보겠습니다. 테스트 프로그램은 따로 코딩하지 않고 라이브러리를 설치하면 자동으로 생성되는 예제 프로그램을 사용합니다. 스케치 파일(File) 메뉴에서 예제(Examples) -> ESP8266WebServe에서 'HelloServer' 프로그램을 불러옵니다.

 

그럼 꽤 긴 프로그램이 열리는데 프로그램 내용은 와이파이에 접속하고 연결된 와이파이 망내에서 할당받은 IP주소에 "hellow from esp8266!" 문자를 출력하는 내용입니다. 프로그램을 업로드하고 나서 웹상으로 "hellow from esp8266!"가 출력되었는지 확인이 가능합니다. 프로그램을 모르시더라도 한 줄 한 줄 짚어보면 이해하실 수 있을 겁니다. 여기서 수정할 내용은 프로그램 상단에 나와있는 STASSID와 STAPSK를 접속하려는 Wifi의 SSID(아이디)와 비밀번호로 변경해주시면 됩니다.

 

Wifi 아이디, 비밀번호 입력

프로그램을 업로드하기 전에 몇 가지 단계가 있어 까다롭지만 차근차근 진행하면 원활하게 업로드가 되니 반드시 하나도 빠짐없이 순서를 지켜주세요 ^^ 진행 예시로는 아두이노 우노(UNO) 제품으로 진행되지만 나노나 메가나 비슷하기 때문에 구분 없이 보셔도 됩니다.

 

3.1 아두이노 우노 보드 초기화 

보통 아두이노 보드에 기존 사용하던 프로그램이 업로드되어 있는 경우가 많습니다. 그래서 보드를 초기화하는 작업으로 스케치에서 'BareMinimum' 프로그램을 업로드하면 됩니다. 

 

스케치의 파일(File) 메뉴에서 예제(Examples) -> Basic에서 'BareMinimum' 프로그램을 찾을 수 있습니다.

'BareMinimum' 프로그램은 특별한 게 아니고 처음 스케치를 설치하고 실행하였을 때 보셨던 초기 화면입니다.

 

아두이노(Arduino) 스케치 'BareMinimum'

3.2 EPS8266 쉴드 보드 설정

앞서 잠깐 언급했던 ESP8266 쉴드 보드에 달려있는 스위치를 설정해야 합니다. 보드 설정에 따라 FLASH 모드와 통신 모드로 구분합니다.

 

스위치 DIP 업: FLASH모드 (펌웨어 업로드 및 스케치 업로드 시 사용)

스위치 DIP 다운: 통신 모드 (TX, RX 통신 및 아두이노 시리얼 통신 시 사용)

 

FLASH 모드                       통신모드

 

3.3 아두이노 보드와 ESP8266 와이파이 쉴드 보드 연결

ESP8266 와이파이 쉴드를 아두이노 보드 위에 탑재하기 전에 프로그램 업로드할 때는 다음과 같이 연결해야 합니다. 전원 공급을 위해 5V와 GND를 연결하고 아두이노의 Tx-1, Rx-0과 ESP8266 쉴드의 TXD와 RXD를 연결합니다. 여기서 주의하실 부분은 보통 아두이노의 Tx(전송)는 모듈의 Rx(수신)와 아두이노의 Rx(수신)는 모듈의 Tx(전송)하고 연결하는 게 일반적인데 반대로 Tx는 Tx와 Rx는 Rx와 연결해야 정상적으로 동작합니다. 

 

아두이노(Arduino) ESP8266 와이파이 쉴드(Wifi shield)와 연결 배선

 

3.4 스케치를 통해 프로그램 업로드

배선까지 정상적으로 완료되었으면 아래와 같이 램프에 불이 들어옵니다. 그럼 FLASH 모드 (DIP 스위치를 업)로 설정하고 스케치에서 업로드를 실행합니다. 

 

ESP8266 Wifi shield

그럼 아래와 같이 업로드가 진행되는데 아마 "Connecting......." 메시지에서 진행이 더 이상 안될 겁니다. 계속해서 업로드 실패를 보실 겁니다... 다 끝난 줄 알았는데... 완전 짜증.... 

 

재시도 끝에 해결방법을 찾았는데 방법은 DIP 스위치 오른쪽에 있는 ESP RST 버튼을 타이밍에 맞춰서 눌러줘야 하는 겁니다. 버튼을 누르는 타이밍은 "Connecting........." 메시지를 보고 바로 누르면 됩니다. (좀 복잡한가요..;; 이래서 예전에 한 번 언급했지만 저는 쉴드제품은 절대 구입을 안 합니다... ㅋㅋ)

 

아두이노(Arduino) 스케치 ESP8266 와이파이 쉴드(Wifi shield) 프로그램 업로드

프로그램이 정상적으로 업로드되면 로딩 퍼센트가 100%까지 로딩 메시지를 볼 수 있습니다.

 


 

3. ESP8266 Wifi 쉴드(shield) 모듈 작동 확인

 

프로그램 업로드가 완료되면 정상적인 동작 확인을 위해 시리얼 모니터(Serial Monitor)를 실행합니다. 이때 주의하실 점은 ESP8266Wifi 실드는 통신 모드 (DIP 스위치 다운)으로 설정한 후에 진행해야 합니다. 시리얼 모니터를 실행하고 통신속도를 115200 baud로 설정하면 아래와 같이 "Connected to 접속한 wifi아이디"와 함께 할당받은 IP address를 볼 수 있습니다.

 

아두이노(Arduino) 시리얼 모니터를 통해 ESP8266 wifi 쉴드 접속 IP 확인

저는 IP 192.168.0.101로 할당받았으며, 확인된 IP주소로 웹을 통해 접속하면 짠~ "hello from esp8266!" 메시지를 확인할 수 있습니다 ㅎㅎ

ESP8266 와이파이 쉴드(Wifi shield) 웹으로 접속 후 동작 확인

 

4. ESP8266 Wifi 쉴드(shield) 모듈 아두이노 쉴드에 탑재하기

 

ESP8266 와이파이 쉴드를 아두이노 보드에 탑재하기 전에 또 작업해야 할 일이 있습니다. 아마 쉴드 제작자의 실수로 인한 문제인 듯한데 아두이노의 디지털(Digital) 0번-Rx, 1번-Tx와 만나는 쉴드의 0, 1번 핀이 반대로 제작되어서 그대로 아두이노에 탑재하면 ESP8266 쉴드와 통신이 안 되는 문제가 발생합니다. 그렇기 때문에 아래 사진과 같이 두 핀을 구부려서 접촉되지 않게 한 후에 Tx와 Rx는 전선으로 연결해야 하는 번거로운 점이 있습니다. (여러분.. 쉴드제품 구매하기 전에는 반드시 이런 점들을 확인하셔야 합니다 ㅠㅠ)

  

ESP8266 와이파이 쉴드(Wifi shield) pin 설정

 

 


여기까지 아두이노(Arduino)의 EPS8266 와이파이 쉴드(Wifi shield)를 사용하는 방법에 대해 알아보았습니다. 생각보다 까다롭긴 해도 아두이노 보드 위에 탑재된 모습을 보면 또 멋져 보이기도 하죠 ㅎㅎ

 

아두이노를 사용하시면서 쉴드(Shield)의 Flex 한 모습에 반해 많이들 구매하실 거라 생각하며 저 또한 여러 제품을 구매해서 사용하고 있지만 일반적으로 많이 보급되지 않은 제품은 문제점도 많고 스스로 해결하기 힘들면 아까운 돈을 사용하게 되므로 구매 전에는 반드시 확인하시고 구매하시길 권고하는 바입니다. ^^

 

오늘도 긴 글 읽어주셔서 감사합니다. 궁금하신 내용 있으면 언제든지 댓글로 남겨주세요 감사합니다~

 

 

 

반응형
반응형

 

 

 

아두이노(Arduino)로 프로젝트를 진행하면서 다수의 저전력 센서나 모듈을 사용하다 보면 입력(input) 또는 출력(output) 단자(Pin)가 생각보다 부족하다는 것을 느낄 때가 많습니다. 아두이노 또는 컨트롤러(controller)를 여러 개 사용해서 해결할 수도 있지만 상황에 따라 비효율적일 수 있고 같은 센서를 여러 개 사용할 경우 딱 Pin 수만 더 많았으면... 하는 생각을 하게 됩니다. 이런 경우 사용하는 모듈이 멀티플렉서(Multiplexer, MUX)입니다.

 

'멀티플렉서(Multiplexer) 또는 MUX는 여러 아날로그 또는 디지털 입력 신호 중 하나를 선택하여 선택된 입력을 하나의 라인에 전달하는 장치이다.'라고 위키백과에 정의되어 있는데 이런 기능을 이용하여 controller의 단자를 확장해주는 역할을 할 수 있습니다. 

 

오늘은 아두이노에서 쉽게 사용할 수 있는 멀티플렉서를 소개하고 사용방법에 대해 알아보겠습니다.


1. 멀티플렉서(Multiplexer) CD74HC4067 모듈

 

Arduino Multiplexer CD74HC4067

 아두이노에서 많이 사용하는 멀티플렉서 모듈로 CD74HC4067입니다. C0~C15까지 총 16개까지 확장 가능한 모듈로 시중에서 쉽게 구할 수 있고 사용하기에도 어렵지 않은 것 같습니다.

 

Pin 코드를 설명하면 C0~C15는 입력 또는 출력할 센서 또는 모듈을 연결하는 확장 Pin이며, SIG은 받은 신호를 아두이노에 보내는 연결 Pin입니다. 그리고 S0~S3로 아두이노에서 신호를 보내 CD74HC4067 모듈을 컨트롤합니다.

 

간단한 동작 원리는 앞서 위키백과에 나온 멀티플렉서의 정의대로 여러 아날로그 또는 디지털 입력 신호(C0~C15) 중 하나를 선택하여 선택된 입력을 하나의 라인(SIG->아두이노)에 전달하는데.. 즉 C0~C15에 연결된 센서로 입력되는 데이터들을 하나씩 SIG를 통해 아두이노로 보내는 방식입니다. 이런 전달 방식이기 때문에 동시에 센서 데이터가 입력되는 것이 아니고 아주 짧지만 수 m초(설정 가능) 정도 간격으로 C0부터 C15까지 돌아가면서 데이터를 읽어 들입니다.

 

처음 보시면 이해가 안 가실 수도 있는데 사실 이해 안 하셔도 전혀 문제없습니다 ㅎㅎ 아마 뒤에서 코드를 보시면 이해하기 더 쉬울 거라 생각됩니다. ^^

 

 

 


 

2. 멀티플렉서 CD74HC4067 배선

 

앞서 CD74HC4067 Pin 코드 설명에서 보았듯이 C0~C15는 사용할 센서를 연결하고, S0~S1을 아두이노에서 신호를 보낼 디지털 Pin 8, 9, 10, 11과 차례로 연결합니다(프로그램에서 조정 가능). 저는 아날로그 센서를 사용하여 시험할 예정이라 SIG pin은 아날로그 Pin 0과 연결하는데, 아마 사용하시는 센서에 따라 디지털 신호를 받으시려면 디지털 Pin과 연결하면 됩니다. 마지막으로 VCC와 GND는 각각 아두이노의 5V, GND에 연결합니다. 

 

아두이노(Arduino) 멀티플렉서(multiplexer, MUX) CD74HC4067 모듈 연결

 


 

▼ 같은 제품 구매하시려면 아래 링크!! ▼

 

CD74HC4067 16채널 멀티플렉서 아날로그/디지털 MUX <아두이노 멀티플렉서> : 스토어플랜트

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

smartstore.naver.com

 

 

3. 멀티플렉서 CD74HC4067 프로그램 코딩

 

스케치로 아래와 같이 프로그램을 코딩하여 아두이노에 업로드합니다.

//Mux control pins
int s0 = 8;
int s1 = 9;
int s2 = 10;
int s3 = 11;

//Mux in “SIG” pin
int SIG_pin = 0;

void setup(){
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);

digitalWrite(s0, LOW);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);

Serial.begin(9600);
}

void loop(){

//Loop through and read all 16 values
//Reports back Value at channel 6 is: 346
for(int i = 0; i < 16; i ++){ 
  Serial.print("Value at channel "); 
  Serial.print(i); Serial.print(": "); 
  Serial.println(readMux(i)); 
  delay(1000); 
  } 
  }
  
  int readMux(int channel)  { 
  int controlPin[] = {s0, s1, s2, s3}; 
  int muxChannel[16][4]={ {0,0,0,0},  
  {1,0,0,0}, //channel 1 
  {0,1,0,0}, //channel 2 
  {1,1,0,0}, //channel 3 
  {0,0,1,0}, //channel 4 
  {1,0,1,0}, //channel 5 
  {0,1,1,0}, //channel 6 
  {1,1,1,0}, //channel 7 
  {0,0,0,1}, //channel 8 
  {1,0,0,1}, //channel 9 
  {0,1,0,1}, //channel 10 
  {1,1,0,1}, //channel 11 
  {0,0,1,1}, //channel 12 
  {1,0,1,1}, //channel 13 
  {0,1,1,1}, //channel 14 
  {1,1,1,1} //channel 15 
  }; 
  //loop through the 4 sig 
  for(int i = 0; i < 4; i ++){ 
    digitalWrite(controlPin[i], muxChannel[channel][i]); 
    } 
    //read the value at the SIG pin 
    int val = analogRead(SIG_pin); //return the value 
    return val; 
    } 

 

 

 

프로그램을 간단하게 설명하면 CD74HC4067를 컨트롤하는 S0~S3과 연결된 Pin 8, 9, 10, 11을 pinMode 명령어로 Output 상태로 만듭니다. 그리고 digitalWrite 명령어로 초기 값을 Low로 설정하는데 이때 Low =0, High = 1을 의미합니다.

 

아두이노에서 S0, S1, S2, S3에 신호를 Low(0)과 High(1)로 주면서 Channel 번호를 2진법에 의해 설정됩니다. 예를 들어 Channel 0 = {0, 0, 0, 0} : 2진법으로 0이 됩니다.

Channel 1 = {1, 0, 0, 0} : 2^0에 해당하는 자리에 High(1)로 신호를 주어 1을 표시합니다.

Channel 2 = {0, 1, 0, 0} : 2^1에 해당하는 자리에 High(1)로 신호를 주어 2를 표시합니다.

Channel 3 = {1, 1, 0, 0} : 2^0과 2^1에 해당하는 자리에 High(1)씩 신호를 주어 총 합 3이 되어 3을 표시합니다.

....

Channel 15 = {1, 1, 1, 1} : 1+2+4+8 = 15 표시

 

이런 식으로 각 채널을 표시하고, 이 채널을 For 반복 구문을 통해 하나씩 읽는 로직입니다. 생각보다 가.. 간단하죠?;;;

 

 pinMode 명령어나, digitalWrite 명령어가 자주 나오는데 아두이노에서는 많이 사용하는 명령어라 혹시 처음 접하시면 아래 링크 참조하시면 도움될 듯합니다.

 

아두이노(Arduino) 프로그램 코딩 초급 (pinMode, digitalWrite, if 명령어)

지난 시간 스케치로 프로그램을 코딩할 때 자주 사용되는 꼭 필요한 명령어 몇 가지를 알아보았습니다. IT 비전공자가 프로그램 언어를 기본부터 완전히 이해하면서 배우는 것은 쉬운 일은 아닙니다. 그렇기 때문..

it-g-house.tistory.com

 


 

4. 데이터 확인

 

아두이노와 멀티플렉서 및 사용한 센서들을 연결한 후 스케치를 통해 프로그램을 업로드합니다. 멀티플렉서에 연결된 센서들은 따로 전원이 들어가야 하는 점 확인하세요^^

프로그램 업로드 후 시리얼모니터(Serial Monitor)를 실행하면 아래와 같이 channel 0부터 channel 15까지 연결된 센서의 데이터를 출력합니다. 프로그램에서 delay(1000)로 1초 간격으로 channel 값이 순차적으로 표시되는데 delay를 조절하면 더 짧은 간격으로도 표시 가능합니다.

 

아두이노(Arduino) 멀티플렉서(Multiplexer, MUX) CD74HC4067 모듈 사용하기: 데이터 출력

 

 

 


여기까지 아두이노(Arduino)의 입출력 단자(Input&output pin)를 확장할 수 있는 멀티플렉서(Multiplexer, MUX) CD74HC4067 모듈에 대해 알아보고 사용방법을 알아보았습니다.

 

멀티플렉서를 사용하여 센서의 입력 데이터뿐만 아니라 릴레이(Relay) 같은 스위치나 외부기기를 여러 개 사용할 때도 활용 가능합니다. 기회가 되면 릴레이 16개를 확장해서 활용하는 예시를 포스팅하도록 하겠습니다.

 

오늘도 긴 글 읽어주셔서 감사합니다. 궁금하신 내용 있으면 언제든지 댓글로 남겨주세요^^

 

 

 

 

반응형
반응형

 

 

아두이노(Arduino)를 이용한 IoT (사물인터넷) 프로젝트에서 데이터 로거(Data logger)를 만드는 일은 흥미로운 작업입니다. 데이터 로거란 단순하게 보면 데이터 기록기, 저장기? 정도로 생각하시면 되는데 최근 데이터 로거의 기능이 많아져서 간단한 전산, 컨트롤러(controller) 및 그래프(graph) 출력 기능까지 되는 제품도 많이 나오고 있습니다. 아두이노를 활용하여 인터넷을 사용하지 않고 컴퓨터에만 연결하여 충분히 데이터 로거를 만들 수 있습니다.

 

데이터 로거

오늘은 아두이노로 간단한 데이터 로거를 만들어보겠습니다. 빠르신 분은 눈치채셨겠지만 이전에 소개했던 내용들을 조금만 응용하는 과정이 되겠지만 ㅎㅎ 끝까지 봐주시면 힘이 되겠습니다 ^^


1. 시간 표시하기

 

대부분의 계측기가 언제 어떤 상태였는지를 센서로 측정하여 데이터로 기록하는 게 목적(시간에 따른 데이터화)이기 때문에 데이터 로거의 기본은 시간이 표시되어야 합니다. 아두이노 자체적으로 시간을 표시해 주진 않기 때문에 시간을 표시하려면 몇 가지 작업이 필요합니다. 복잡한 거 싫어하고 오픈소스를 사용하는 걸 좋아하는 저는 오늘도 라이브러리를 이용하여 시간을 표시하겠습니다. ^^ 우선 아래 라이브러리를 다운로드하여 스케치(sketch)에 추가해 줍니다.

swRTC.zip
0.03MB

#include <swRTC.h>
swRTC rtc;

void setup() {
  rtc.stopRTC();            //정지
  rtc.setDate(17, 3, 2020); //일, 월, 년
  rtc.setTime(0, 0, 0);  //시, 분, 초
  rtc.startRTC();           //시작
  Serial.begin(9600);
}

void loop() {
  Serial.print(rtc.getHours(), DEC);
  Serial.print(":");
  Serial.print(rtc.getMinutes(), DEC);
  Serial.print(":");
  Serial.print(rtc.getSeconds(), DEC);
  Serial.print("\t"); 

  Serial.print(rtc.getYear(), DEC);
  Serial.print("/");
  Serial.print(rtc.getMonth(), DEC);
  Serial.print("/");
  Serial.println(rtc.getDay(), DEC);
  delay(1000);
}

코드블럭과 같이 프로그램을 코딩하고 스케치를 통해서 아두이노에 업로드합니다. 그리고 일, 월, 년, 시, 분, 초에 현재 시간 또는 원하는 시간을 세팅해줍니다. 저는 글을 포스팅하고 있는 현재 2020년 3월 17일 0시 0분 0초라고 설정하였습니다. 업로드 후 시리얼 모니터(Serial Monitor)를 실행하면 아래와 같이 시간이 표시됩니다.

 

아두이노(Arduino) 현재시간 표시하기

 

지금 보여드린 방법이 가장 간단하지만 아두이노에 자체적인 전원이 없으므로 전원이 꺼졌을 때는 시간이 가지 않습니다. 처음 현재 시간으로 설정하더라도 전원이 잠깐이라도 끊기는 순간 처음 설정한 시간으로 다시 리셋됩니다. 그래서 현재 시간이 반드시 필요하신 분들은 시계 역할을 하는 모듈을 연결하거나 인터넷을 연결하여 전원이 들어올 때 현재시간을 받는 방법을 채택해야 합니다.

 

 

 


 

2. 시간과 데이터 표시하기 

 

센서에서 측정하는 데이터를 시간과 동시에 표시하면 되는 과정이기 때문에 간단합니다. 이런 예시에 항상 사용하는 온습도 센서를 사용하여 프로그램을 코딩하겠습니다. 아두이노 및 온습도 센서 사용이 처음이신 분은 아래 링크 참조 부탁드립니다. 

 

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

온습도 센서(Temperature and Humidity sensor)는 환경 측정에서 중요하면서도 기본적인 센서로 많이 사용됩니다. 중요하지만 비교적 흔하게 구할 수 있는 센서라 시중에 다양한 종류의 제품이 있고 기능적으로는..

it-g-house.tistory.com

온습도 센서 프로그램 코드와 앞서 알아보았던 시간표시 프로그램과 함께 코드를 합쳐서 아래와 같이 프로그램을 재구성합니다.

#include <swRTC.h>
#include <dht.h>

swRTC rtc;
dht DHT; 
#define DHT22_PIN 2 
float hum; //Stores humidity value 
float temp; //Stores temperature value

void setup() {
  Serial.begin(9600); 
  rtc.stopRTC(); //정지 
  rtc.setDate(17, 3, 2020); //일, 월, 년 
  rtc.setTime(0, 0, 0); //시, 분, 초 
  rtc.startRTC(); //시작 

  }

void loop() { 
  DHT.read22(DHT22_PIN); 
  hum = DHT.humidity; 
  temp = DHT.temperature;

  Serial.print(rtc.getHours(), DEC); 
  Serial.print(":"); 
  Serial.print(rtc.getMinutes(), DEC); 
  Serial.print(":"); 
  Serial.print(rtc.getSeconds(), DEC); 
  Serial.print("\t"); 
  Serial.print(rtc.getYear(), DEC); 
  Serial.print("/"); 
  Serial.print(rtc.getMonth(), DEC); 
  Serial.print("/"); 
  Serial.print(rtc.getDay(), DEC); 
  Serial.print("\t"); 
  Serial.print("Humidity: "); 
  Serial.print(hum); 
  Serial.print(" %, Temp: "); 
  Serial.print(temp); 
  Serial.println(" Celsius"); 
  
  delay(1000);
  }

그 후 프로그램을 아두이노에 업로드하면 아래와 같이 시리얼 모니터에서 볼 수 있습니다. 데이터 스캔 간격을 delay(1000)으로 설정해서 1초 간격으로 표시되지만 delay명령어를 통해 조절 가능합니다. (일반적으로 평상시 실내 온습도는 1초 또는 1분 정도의 시간 동안 차이가 크지 않죠 ^^ 사용하시는 환경에 맞게 스캔 간격을 조절하시면 됩니다.)  

 

아두이노(Arduino) 시간에 따른 온습도 표시

 

 

 


 

3. 엑셀을 통해 시각화 하기 

 

단순 데이터만 보려면 시리얼 모니터로 충분하지만 엑셀을 이용하여 실시간으로 측정되는 데이터를 시각화(그래프)해서 좀 더 편하게 데이터를 모니터링하려 합니다. 앞서 시간과 날짜를 나타낼 수 있게 라이브러리를 도입한  방법보다 엑셀의 기능과 병합하여 좀 더 간단한 방법으로 만들 수 있습니다. 우선 아래와 같이 프로그램을 코딩한 뒤 아두이노에 업로드합니다.

#include <dht.h>

dht DHT; 
#define DHT22_PIN 2 
float hum; //Stores humidity value 
float temp; //Stores temperature value
float today = 43907; //2020-03-17
float timer; //00:00:00
float second = 0.0000115740741; //1/(24*60*60)


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

void loop() { 
  DHT.read22(DHT22_PIN); 
  hum = DHT.humidity; 
  temp = DHT.temperature;
  today = floor(today + timer);
  timer = timer + second;
  
  Serial.print("DATA,"); 
  Serial.print(today); 
  Serial.print(",");
  Serial.print(timer,10); 
  Serial.print(",");  
  Serial.print(temp); 
  Serial.print(","); 
  Serial.println(hum); 
  
  delay(1000);
  }

아두이노와 엑셀을 연동하기 위해 앞선 포스팅에서 소개한 프로그램으로 'PLX-DAQ'을 사용합니다. 아래 파일을 다운로드하여서 설치하시고, 사용방법은 아래 링크 참조 부탁드립니다.

PLX-DAQ-v2.11.zip
0.49MB

 

 

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

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

it-g-house.tistory.com

앞서 라이브러리를 사용한 방법은 2020/03/17 00:00:00 Temperature, Humidity 이런 포맷으로 출력하기 위한 거면 엑셀에서는 셀 서식 기능에 숫자를 '날짜', '시간'으로 표식이 되기 때문에 숫자만으로 프로그램이 구성됩니다. 아마 엑셀을 조금 사용해보셨으면 셀 서식 -> 표시 형식에서 설정 방법을 인지하고 계실 겁니다.

그래서 위 코드처럼 오늘 날짜(2020-03-17)에 해당하는 43907로 today를 값을 설정하고 하루가 지날 때마다 1씩 더해져서 날짜를 표시할 수 있습니다. 같은 방법으로 초기 시간 00:00:00에서 1초에 해당하는 값 즉, 1/(24시간*60분*60초) = 0.0000115740741... 을 1초 delay 마다 더하는 방법입니다. 컨셉을 이해하셨으면 상황에 맞게 시간이나 간격을 조절하셔서 사용하실 수 있을 거라 생각됩니다. 아두이노에 프로그램을 업로드 후 'PLX-DAQ' 프로그램을 사용하여 엑셀에 연동하면 아래와 같이 데이터가 들어옵니다.

 

아두이노(Arduino)로 Datalogger 만들기

아직 '표시 형식'을 변경하기 전이라 숫자로 표시되지만 셀 설정에서 표시 형식을 변경하면 원하는 포맷으로 날짜와 시간을 표시할 수 있습니다. 그리고 원하는 그래프로 시각화할 때 데이터의 셀 영역을 column 전체로 설정해놓으면 실시간으로 데이터가 들어올 때마다 그래프가 그려집니다.

 

아두이노(Arduino)로 Datalogger 만들기 엑셀에서 표시형식 변경
아두이노(Arduino)로 Datalogger 만들기 엑셀로 실시간 그래프 설정


오늘은 아두이노(Arduino)로 간단하게 데이터로거(Datalogger)를 만들어 보았습니다. 좀 단순하게 만드는 방법이다 보니 현 시간을 바로 반영할 수 없다는 점... 같은 게 허점이 될 수 있지만 가볍게 사용하기에는 파워풀한 방법입니다.

 

좀 더 정확한 시간 반영을 위해서는 인터넷을 사용하여 웹상에서 현재시간 정보를 받아 사용해야 합니다. 좀 복잡하죠 ^^ 인터넷이 안 되는 환경이나 현재 시간이 꼭 중요하지 않다면 쉽게 사용할 수 있을 듯합니다. 

 

기회가 되면 esp-01 (ESP8266) 모듈을 사용해서 구글 현재시간을 받아 정확한 시간을 표시하는 방법에 대해서 포스팅해보겠습니다. 긴 글 읽어주셔서 감사합니다.

 

 

 

 

반응형

+ Recent posts