반응형

 

 

 

지난 포스팅에서 아두이노 서버 구성에 대해 알아보았고 필요한 도구(Tool)로 A.M.P (Apache, MySQL, PHP) 중 Apache(아파치)를 설치하는 방법에 대해 알아보았습니다. 이어서 MySQL 설치 방법을 알아보겠습니다. 앞 글은 아래 링크 참조 부탁드립니다 ^^

 

아두이노(Arduino) 홈 IoT(사물인터넷)을 위한 서버(Sever) 구성

그동안 아두이노와 센서의 기본적인 동작법 및 프로그램 코딩은 어느 정도 익숙해졌을 겁니다. 이제 본격적인 프로젝트를 진행하기 전에 인터넷을 통해 데이터 및 신호를 주고받을 수 있어야 아두이노를 원하는 로..

it-g-house.tistory.com


  • MySQL

MySQL은 가장 많이 사용되고 있는 데이터베이스(Database, DB) 시스템으로, 오픈소스로 제공되고 있는 관계형 데이터베이스(RDBMS: Relational Database Management System)입니다. '데이터베이스'는 여러사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합니다. (출처: 위키페디아) 단순 저장과 공유뿐만이아니라 데이터접근성, 보완성, 일관성 및 데이터 공간 효율화 등의 정보를 저장하고 다루는데 특화된 시스템이라고 할 수 있습니다. MySQL은 파이썬, C/C++, 자바, PHP 등 다양한 프로그래밍 언어를 지원하는데 그 중 PHP(Professional HyperText Preprocessor)가 HTML처리에 강점이 있고 많은 데이터베이스를 지원가능하기 때문에 DB서버(Sever)를 구성하는데 도구로 MySQL과 같이 많이 사용되고 있습니다. 

 

  • MySQL 설치방법

MySQL 홈페이지 다운로드 페이지 https://dev.mysql.com/downloads/에서 'MySQL Installer for Windows'를 선택합니다. 용량이 더 큰 Windows (x86, 32-bit), MSI Installer로 다운로드 합니다. 그럼 로그인 관련 문구가 나오는데 아래 No thanks, 를 클릭하면 다운로드가 시작됩니다.

 

MySQL 홈페이지 메인화면
MySQL 다운로드 페이지
MySQL 커뮤니티 다운로드 페이지
MySQL 커뮤니티 다운로드 페이지

다운로드한 install 파일을 실행하면 설치가 진행되는데 MySQL 서버와 관련된 Tool이 설치 가능하게 선택하여 진행합니다. 읽어보시고 각자 목적에 맞게 선택하여 진행하시면 될 듯합니다. 

 

MySQL Installer 실행 화면
MySQL 설치에 필요한 스프트웨어 설치

MySQL 설치 진행 전에 필요한 소프트웨어를 설치하라고 하는데 왠만한건 자동으로 설치 가능한데 manual이라고 표시된 소프트웨어는 직접 찾아 설치해 주어야 합니다. 근데 꼭 설치 안 해서 MySQL 설치 진행에는 큰 무리가 없는 듯합니다. 나중에 실행할 때 어떤 문제가 나올지 몰라 저는 필요한 항목을 직접 찾아 설치한 후에 계속 진행하였습니다. 사용자의 컴퓨터의 상황에 따라 항목이 다를 수 있어 추가적인 설치 방법은 skip 하겠습니다. Next를 누르면 본격적으로 MySQL 프로그램을 다운로드합니다. Execute를 누르고 모두 설치가 완료되면 Next를 누릅니다.

 

 

MySQL 설치
Standalone MySQL Sever 선택
MySQL Type and Networking 선택

웬만한 거 그냥 설정되어 있는 데로 Next를 해주면  Password 설정할 수 있습니다. 대소문자, 숫자, 특수문자를 잘 섞어주면 됩니다. 그리고 Next 누르면 SeverName을 설정할 수 있습니다. 전 생각하기 싫어서 'MySQL80' 그대로 갑니다 ㅎㅎ 

 

MySQL Password 설정
MySQL Apply Configuration 설치

이후에 또 왠만한건 그냥 설정된 대로 Next를 해주면 Server connection check를 합니다. User name은 'root'으로 그대로 두고 Password는 아까 설정한 Password를 입력해주시고 'Check'를 클릭하면 위에 상태창에 Connection succeeded라고 메시지가 나옵니다.

 

MySQL Server connection check
MySQL Product Configuration 완료

 

마지막으로 Product Configuration 설정이 완료되고 나고 Next를 누르면 마지막 Finish 창을 볼 수 있습니다. 그럼 설치가 완료 됩니다. 수고하셨습니다 ^^

 


여기까지 서버(Sever) 구성하는데 필요한 도구 A.M.P (Apache, MySQL, PHP) 중 MySQL 설치 방법을 알아보았습니다. 생각보다 하나하나 포스팅이 길어지네요... 다음 포스팅에선 이어서 PHP 설치와 사용방법에 대해 알아보겠습니다.

 

긴 글 읽어주셔서 감사합니다.

 

 

 

반응형
반응형

 

 

 

그동안 아두이노와 센서의 기본적인 동작법 및 프로그램 코딩은 어느 정도 익숙해졌을 겁니다. 이제 본격적인 프로젝트를 진행하기 전에 인터넷을 통해 데이터 및 신호를 주고받을 수 있어야 아두이노를 원하는 로직(Logic)에 맞게 동작시킬 수 있습니다. 우선 각 종 센서가 측정하는 데이터나 신호를 서버(Sever)로 송신하는 방법을 알아본 뒤 데이터를 분석하고, 적절한 명령신호를 다시 아두이노나 외부기기에 전달하는 방법을 알아보겠습니다.

 


  • 아두이노와 컴퓨터를 직접 연결하는 방법

앞서 USB 케이블을 통한 시리얼 통신(Serial communication)으로 PC에 바로 데이터를 전송하고 저장하는 방법을 알아보았습니다.  

 

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

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

it-g-house.tistory.com

DHT11 온습도 센서(Temperature and Humidity sensor)로 측정된 온도와 습도 데이터를 PC로 시리얼 통신을 통해 송신하고, 컴퓨터에서 데이터를 받는데 'CoolTerm'이나 'PLX-DAQ' 프로그램을 사용하였습니다. 받은 데이터를 *. txt 파일로 저장하거나 엑셀로 연동하여 실시간 그래프를 그리거나 데이터 분석을 할 수 있었습니다.

 

아두이노(Arduino) 시리얼 통신(Serial communication)으로 PC에 데이터를 저장하는 구성

 

  • 인터넷을 이용한 데이터 송수신 방법

인터넷을 사용하여 웹을 통해 데이터를 송수신하려면 웹서버(Web sever)가 필요합니다. 파이썬(Phython)이나 C언어같은 프로그램 언어로 직접 서버를 만들 수 있으나 프로그램 언어가 능숙하지 않고 서버의 개념이 숙지되지 않은 경우 서버를 구성하는 일은 어렵습니다. 그렇다고 돈을 들여 프로그래머를 고용해서 서버를 만들정도로 고퀄이 필요한 것도 아니죠... 그래서 이렇게 직접 서버를 구성하기 힘든 개인이나 업체들을 위해 많은 기업들이 오픈소스 웹서버 프로그램을 제공하고 있습니다. 정말 고마운 일이죠~ 뮤뮤

 

아두이노(Arduino)로 인터넷(Internet)을 이용한 데이터를 송수신하기 위한 서버(Sever)구성

 

가장 많이 알려진 웹서버 프로그램은 Apache(아파치)입니다. 내컴퓨터에 웹서버를 구축하는 방법으로 Apache, MySQL, PHP 앞글자를 따서 A.M.P라고 많이 들어보셨을 겁니다. 여기서 Apache로 웹서버를 만들고 데이터를 수신할 수 있습니다. 그럼 받은 데이터를 어딘가 쌓아놓고 필요할 때 출력하거나 가공할 수 있어야 하는데.. 그 역할을 하는 게 데이터베이스 서버(DataBase server), DB서버라고 합니다. 역시나 많이 알려진 데이터베이스 프로그램이 MySQL입니다. DB는 크게 RDB, NoSQL 두 종류로 나뉘는데, RDB는 다시 RDBMS (Relational Database Management System: 관계형 데이터베이스)와 ORDBMS (Object-Relational Database Management System: 객체지향 데이터베이스)로 구분됩니다. RDB가 아닌 데이터 베이스가 NoSQL인데 RDB와는 달리 데이터 간 관계를 정의하지 않고 대용량의 데이터를 다루는데 유용해서 최근 빅데이터를 다루는데 적합하다고 합니다. (요즘 핫한 MongoDB가 NoSQL입니다.) 데이터베이스에 관해서는 추후 자세히 공부해 보도록 하겠습니다. 그리고 프로그램 언어 PHP (Professional HyperText Preprocessor)는 서버에서 해석되는 HTML에 내장되어 동작하는 스크립트 언어로 PHP 소프트웨어를 통해 코딩을 할 수 있습니다.

 

 

 


그럼 각각 프로그램을 설치하는 방법을 알아보겠습니다.

 

  • Apache(아파치) 설치방법

Apache는 홈페이지에서 다운로드할 수 있는데 메인 홈페이지가 아닌 https://www.apachelounge.com/download/에서 다운로드할 수 있습니다. 아래 공식 홈페이지에 들어가면 다운로드 받을 수 있는 파일들이 있긴 하지만 저는 쉽게 사용할 수 없는 파일 형태라서 apachelounge.com에서 다운로드하는 걸 추천드립니다.

 

Apache(아파치) 공식 홈페이지 메인 화면
Apache(아파치) 다운로드 페이지

Apache 2.4.41 Win 64 버전으로 다운로드하여서 C드라이버에 압축을 풀고 Apache24\conf 폴더 안에 'httpd.conf' 파일을 메모장으로 열어줍니다. Apache를 정상적으로 운영하기 위해 'httpd.conf' 파일을 SeverRoot, SeverName 등을 수정하는 과정이 필요합니다. (꼭 메모장이 아니더라도 수정할 수 있으면 됩니다.)

Apache(아파치) SeverRoot 설치폴더 확인

메모장에서 조금 아래 ServerRoot 부분에서 파일 압축을 푼 폴더가 "c:/Apache24"와 같은지를 확인합니다. 만약 다른 곳에 압축을 푸셨으면 폴더 경로를 수정해주시면 됩니다. 저도 아래와 같이 수정하였습니다. 여기서 주의할 점은 하위 폴더 표시를 '/'로 사용해야 합니다.

 

꽤나 더 아랫부분에 SeverName에 관한 내용이 있습니다. 여기서 '#SeverName www.example.com:80'을 '#'은 지우고 'ServerName loacalhost:80'로 수정합니다. (또는 'ServerName 127.0.0.1:80'이라고 바꿔줘도 됩니다.)

 

Apache(아파치) ServerName 변경

 

그리고 명령 프롬프트를 열어서 Apache24 폴더로 찾아가서 bin폴더에서 'httpd.exe -k install'이라고 명령어를 치면 Apache가 설치됩니다.

 

일단 설치가 진행되고 나면 윈도우 '서비스' 창에서 아래와 같이 Apache2.4가 설치된 것을 확인할 수 있습니다. 아직은 실행상태는 아닌데 다시 명령 프롬프트에서 'httpd.exe -k start'라고 입력해주시면 아래와 같이 '실행 중'이라고 표시되고 Apache가 실행된 상태입니다. (윈도우 검색창에서 '서비스'라고 입력하면 서비스 창을 실행할 수 있습니다.)

 

 

 

 

Apache를 멈추고 싶으면 'httpd.exe -k stop'을 입력하면 됩니다. 저는 명령 프롬프트가 아무래도 익숙하지 않아서 또 다른 방법을 사용하고 있습니다. 'bin'폴더 안에 'ApacheMonitor'를 실행하면 윈도우 실행창에 ApacheMonitor 아이콘이 생깁니다. 

 

ApacheMonitor
ApacheMonitor 실행
ApacheMonitor 실행

여기서 간단하게 Apache를 실행하고 정지할 수 있습니다. 아.. 진작에 이렇게 할걸...;; 죄송합니다... 그럼 Apache가 정상적으로 작동하는지 확인하기 위해 Apache를 Start 하고 웹브라우저에서 http://loacalhost라고 주소를 입력하면 아래와 같이 "It works!"라고 메시지가 나오면 정상적으로 작동하고 있는 겁니다. 와우~!! 혹시 앞에서 ServerName을 127.0.0.1:80라고 수정했으면 http://127.0.0.1라고 입력하면 됩니다.

 

Apache 정상 작동시 (http://localhost)
Apache 정상 작동시 (http://127.0.0.1)


여기까지 아두이노(Arduino)의 데이터를 웹서버를 통해 송수신하기 위한 서버(Server)의 구성과 함께 A.M.P (Apache, MySQL, PHP) 중 Apache를 실행하는 방법을 알아보았습니다. 이어서 MySQL 설치방법은 다음 포스팅으로 이어가겠습니다. 아래 링크 따라가시면 되요~ ^^

 

 

아두이노(Arduino) 홈 IoT(사물인터넷)을 위한 서버(Sever) 구성 2: MySQL 설치방법

지난 포스팅에서 아두이노 서버 구성에 대해 알아보았고 필요한 도구(Tool)로 A.M.P (Apache, MySQL, PHP) 중 Apache(아파치)를 설치하는 방법에 대해 알아보았습니다. 이어서 MySQL 설치 방법을 알아보겠습니다...

it-g-house.tistory.com

개념 정리가 조금 미흡할 수 있지만 나름 쉽게 이해하려고 한 부분을 전달하려고 노력하였습니다. 고수분들은 혹시 수정사항이나 좀 이상한 부분 있으면 언제든지 첨언 부탁드리며, 좋은 의견 댓글로 부탁드립니다.

 

 

 

반응형
반응형

 

 

 

아두이노(Arduino)를 사용하여 홈 IoT(사물인터넷)를 구현하는 프로젝트를 진행하기 위해서는 우선 인터넷이 되어야 합니다. 지난 포스팅에도 설명하였지만 일반적인 아두이노 모델인 UNO R3, Nano, MEGA 같은 보드는 인터넷을 사용할 수 있는 칩셋이 내장되어 있지 않기 때문에 인터넷을 사용하려면 이더넷(ethernet), 와이파이(Wifi), 3G/LTE 모듈 등을 사용해야 합니다. 조금 더 비용을 지불하고 와이파이 칩이 내장되어 있는 아두이노 UNO 와이파이 모델을 구입해도 됩니다 ㅎㅎ 전... 사정이 넉넉하지 못해서 ㅠㅠ 

 

그래서! 오늘 드디어 이더넷 모듈을 사용하는 방법에 대해서 포스팅하겠습니다. 아두이노로 인터넷 연결하는 모듈 제품들에 관해서는 지난 포스팅 링크 첨부하게요~ 참고 부탁드립니다 ^^

 

Arduino 아두이노 인터넷(Internet) 연결하는 방법

지난 포스팅에서 아두이노를 이용하여 온습도 센서를 동작해 보면서 아두이노의 기본적인 사용법과 코딩하는 방법을 알아보았습니다. 본격적인 홈 IoT(사물인터넷) 프로젝트를 진행하려면 아두이노를 인터넷에 연..

it-g-house.tistory.com


1. 이더넷(Ethernet) 모듈

 

아두이노 이더넷(Ethernet) 모듈

 

인터넷 케이블을 직접 연결하여 사용하는 이더넷 모듈(ENC28J60)입니다. 모듈 형태에서 볼 수 있듯이 랜선(LAN)을 모듈의 케이블 커넥터에 바로 연결할 수 있고 아두이노가 인터넷 통신을 할 수 있게 합니다. 'ENC28J60' 칩셋을 사용해서 모델명이 보통 ENC28J60 이더넷 모듈이라고 불리고, 온라인상에서 제조사에 따라 모양이나 사용된 부품이 조금씩 다르게 판매하고 있습니다.

 

칩셋 ENC28J60
구동 전압 3.1~3.4 V DC
동작 온도 0 ~ 70
Oscillator 25mhz
LAN IEEE 802.3 호환

 

2. 이더넷(Ethernet) 모듈 배선

 

이더넷 모듈은 구동 전압이 3.1~3.4V로 VCC 핀을 아두이노의 3.3 V 핀에 연결해주고, GND는 아두이노 GND와 연결합니다. 이더넷 모듈은 아두이노와 통신을 시리얼 통신(Serial communication) 중 하나인 SPI (Serial Peripheral Interface: 직렬 주변기기 인터페이스) 통신을 사용하고 있습니다. 랜선(LAN)을 통해서 송수신하는 신호를 아두이노에 MOSI, MISO, SCK, SS선을 통해 전달하는데, 각각의 역할은 표와 같습니다.

 

  기능
MOSI(SI): Master Out, Slave In 마스터(아두이노)에서 데이터를 출력하기 위한 신호
MISO(SO): Master In, Slave Out 슬레이브(이더넷 모듈)에서 데이터를 출력하기 위한 신호
SCK: Serial Clock Clock (동기화) 신호
SS(CS): Slave Select 데이터를 송수신할 슬레이브(이더뎃 모듈)를 선택하기 위한 신호

 

 

 

 

SPI 통신에 대해선 다음에 시리얼 통신에 대해 다루면서 자세히 알아보도록 하겠습니다. 다시 이더넷 모듈로 돌아가서 전원을 위한 VCC와 GND pin 외에 6개 핀 중에서 SI, SO, SCK, CS만 사용합니다. SI는 11번 핀, SO는 12번 핀, SCK는 13번 핀에 연결하고 CS는 8번 핀에 연결하면 되는데 나중에 프로그램에서 자유롭게 바꿀 수 있습니다. 연결하실 때 아래 그림 참고하시면 될 거 같아요 ^^

 

 

아두이노(Arduino) 인터넷 연결하기 - 이더넷(Ethernet) 모듈 배선

 

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

 

이더넷 모듈을 사용하려면 역시 '라이브러리(Library)'가 필요합니다. 지난번에도 잠깐 언급하였지만 '라이브러리'를 간단히 설명하면 이미 코딩된 프로그램을 인용해서 사용하는 개념 정도로 이해하시면 됩니다. 라이브러리 파일은 아래 첨부해 두겠습니다.

EtherCard.zip
0.12MB

첫 번째 코딩은 DHCP(Dynamic Host Configuration Protocol: 동적 호스트 구성 프로토콜)와 DNS(Domain Name System)를 테스트하여 IP주소를 할당받을 수 있는 프로그램입니다. 

 

#include <EtherCard.h>

#define REQUEST_RATE 5000 // milliseconds

// ethernet interface mac address
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };

byte Ethernet::buffer[700];

void setup () {
  Serial.begin(57600);
  Serial.println("\n[getDHCPandDNS]");

  // Change 'SS' to your Slave Select pin, if you arn't using the default pin
  if (ether.begin(sizeof Ethernet::buffer, mymac, SS) == 0)
    Serial.println( "Failed to access Ethernet controller");

  if (!ether.dhcpSetup())
    Serial.println("DHCP failed");

  ether.printIp("My IP: ", ether.myip);
  ether.printIp("Netmask: ", ether.netmask);
  ether.printIp("GW IP: ", ether.gwip);
  ether.printIp("DNS IP: ", ether.dnsip);
}

void loop () {
}

 

앞서 얘기했듯이 CS핀은 어디든지 연결할 수 있습니다. 그렇기 때문에 프로그램 중간쯤에 'Change 'SS' to your Slave Select pin, if you arn't using the default pin'이라고 적혀 있듯이 CS 핀을 8번 핀에 연결했으면 if (ether.begin(sizeof Ethernet::buffer, mymac, SS) == 0)에서 SS를 8로 바꿔주시면 됩니다. 프로그램 코딩 후 랜선(LAN)을 이더넷 모듈에 연결하고 아두이노에 스케치를 통해 업로드를 합니다. 시리얼 모니터(Serial Monitor) 창을 열면 IP, Netmask, 게이트웨이, DNS 정도를 확인할 수 있습니다. IP 192.168.0.102로 할당되었네요 ^^ 

 

이더넷 모듈 사용하여 아두이노 인터넷 연결하기

 

아두이노(Arduino) 인터넷 연결하기 - 이더넷(Ethernet) 모듈 사용하여 IP 할당받기

 


 

여기까지 이더넷(Ethernet) 모듈을 사용하여 아두이노(Arduino)로 인터넷을 연결하고 IP를 할당 받는 방법을 알아보았습니다. 그럼 진짜 인터넷이 되는지 궁금하니까 웹상으로 데이터도 보내보고 ping도 확인해보는 작업을 해보도록 하겠습니다.

 

긴 글 읽어주셔서 감사합니다. 질문사항이나 추가적인 내용 궁금하시면 언제든지 댓글로 남겨주세요 ^^

 

 

* 이어서 이더넷 모듈을 사용하여 웹브라우저에 간단한 텍스트를 출력해보는 방법에 대해서 포스팅 완료하였습니다. 관심있으신 분은 아래 링크를 타고 들어가셔서 참고 부탁드립니다 ^^ (2019.11.17 업데이트)

 

Arduino 아두이노 인터넷 사용 - 이더넷(Ethernet)과 웹브라우저

지난 포스팅에서 아두이노(Arduino)로 인터넷을 연결하는 방법 중 이더넷(Ethernet) 모듈을 사용해보았습니다. 'ENC28J60' 이더넷 모듈을 아두이노 UNO R3 보드와 연결하여 DHCP(Dynamic Host Configuration Proto..

it-g-house.tistory.com

 

 

 

 

반응형
반응형

 

 

 

온습도 센서(Temperature and Humidity sensor)는 환경 측정에서 중요하면서도 기본적인 센서로 많이 사용됩니다. 중요하지만 비교적 흔하게 구할 수 있는 센서라 시중에 다양한 종류의 제품이 있고 기능적으로는 큰 차이가 나지 않습니다. 하지만 사용 장소나 측정 목적에 따라서 차별점은 분명하기 때문에 적합한 제품으로 선택할 필요가 있습니다. (단순 온습도 경향만 측정하는데 너무 비싼 센서를 사용할 필요는 없죠 ㅎㅎ) 오늘은 아두이노(Arduino)에서 많이 사용되고 있는 온습도 센서의 종류 및 사용법를 알아보고 각각의 특징을 살펴보도록 하겠습니다. 

 


 

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

 

1. DHT11

 

온라인상에서 가장 흔하게 찾아볼 수 있는 센서입니다. 가격이 저렴한 만큼 온도와 습도의 측정 가능한 범위가 온도는 0 ~ 50 ℃, 습도는 20 ~ 80 %로 비교적 제한적이고 측정주기 또한 2초 간격으로 측정 가능합니다. 온도가 급격히 변하지 않는 실내의 온습도를 측정하는데 적합할 듯합니다. 또한 가격이 저렴하기 때문에 다량으로 필요할 때도 좋을 듯합니다. DHT11 온습도 센서의 사용법과 프로그램 코딩 방법 링크 및 라이브러리 파일 첨부하께요~ 참고 부탁드립니다.

 

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

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

 

 

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

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

it-g-house.tistory.com

DHT_Library.zip
0.01MB

 


 

2. DHT22 (AM2302)

 

DHT11 온습도 센서 업그레이드 버전으로 역시 온라인상에서 흔하게 찾아볼 수 있는 센서입니다. DHT11에 비해 조금 더 비싸지만 충분히 저렴합니다. 측정 가능한 범위는 온도가 -40 ~ 80 ℃, 습도는 0 ~ 100 % 범위로 가능하고 측정주기는 1초 간격으로 측정됩니다. 왠만한 실내외의 온습도는 측정 가능할 듯 하고 가격이 저렴하기 때문에 다량으로 필요할 때도 좋을 듯합니다. 사용법과 라이브러리는 DHT11과 거의 동일합니다. 프로그램 코딩에서 DHT11을 DHT22로 바꿔주기만 하면 됩니다. 아래 코드블럭 참고 부탁드려요~

 

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

 

동작 전압 (Power) 3.3~5.5 V DC
온도 측정 범위 (Temperature range) -40 ~ 80 ℃ (±0.5 ℃)
습도 측정 범위 (Humidity range) 0 ~ 100 % (±2~5 %) 
최대소비전력 (Max. current) 2.5 mA
데이터 주기 (sampling rate) 1 Hz (1초당)
#include<dht.h>
dht DHT;
#define DHT22_PIN 2
float hum; //Stores humidity value
float temp; //Stores temperature value

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

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

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

 

 

 

3. AM2301 (DHT21)

 

DHT 온습도 센서 시리즈의 다른 형태 버전으로 AM2301 센서입니다. DHT11와 DHT22에 비해 더 비싸지만 회로를 감싸는 외부 케이스가 있어서 실외에서 사용하기 괜찮습니다. 측정 가능한 범위는 온도는 -40 ~ 80 ℃, 습도는 0 ~ 99.9 % 범위로 측정 가능하고 측정주기는 1초 간격으로 측정됩니다. 왠만한 실내외의 온습도는 측정 가능할 듯하고 내부 회로가 보호되기 때문에 실외 환경에서도 사용하기도 좋습니다. 역시 사용법과 라이브러리는 DHT11, DHT22와 거의 동일합니다. 프로그램 코딩에서 DHT11을 DHT21로 바꿔주기만 하면 됩니다. 아래 코드블럭 참고 부탁드려요~

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

 

동작 전압 (Power) 3.3~5.2 V DC
온도 측정 범위 (Temperature range) -40 ~ 80 ℃ (±0.5 ℃)
습도 측정 범위 (Humidity range) 0 ~ 99.9 % (±3 %) 
최대소비전력 (Max. current) 2.5 mA
데이터 주기 (sampling rate) 1 Hz (1초당)
#include<dht.h>
dht DHT;
#define DHT21_PIN 2
float hum; //Stores humidity value
float temp; //Stores temperature value

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

void loop() {
DHT.read21(DHT21_PIN);
hum = DHT.humidity;
temp = DHT.temperature;

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

 

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

 

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

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

smartstore.naver.com

 

4. AM2305

 

AM23XX 시리즈 센서입니다. DHT11와 DHT22에 비해 더 비싸지만 측정오차가 가장 작고 회로를 감싸는 외부 케이스가 있어서 실외에서 사용하기 좋습니다. 측정 가능한 범위는 온도는 -40 ~ 80 ℃, 습도는 0 ~ 99.9 % 범위로 측정 가능하고 측정주기는 1초 간격으로 측정됩니다. 왠만한 실내외의 온습도는 측정 가능할 듯하고 내부 회로가 보호되기 때문에 실외 환경에서도 사용하기도 좋습니다. 

 

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

 

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

 

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

 

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

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

smartstore.naver.com

 


 

 

 

실외에서 온도를 측정할 때는 태양의 복사열(Radiation)으로 인해 실제 온도보다 더 높게 측정됩니다. 그렇기 때문에 실외 환경 측정기들은 보통 백엽상(radiation shield)으로 보호됩니다. 예전에는 사진같은 백엽상을 많이 보셨을 건데요 기상청에서도 측정방식이 바뀌면서 최근에는 아마 볼 수 있는 곳이 드물겁니다. 

 

백엽상  https://www.hankookilbo.com/News/Read/201808020958716535

 

그래서 백엽상 역할을 하는 Radiation shield(미니백엽상) 제품이 판매되고 있습니다. 실외에서 온습도 센서를 사용할 때는 정확한 측정을 위해 미니백엽상에 넣어 사용하는게 좋습니다. AM2305 제품이 길게 생긴 이유도 Radiation shield안에 설치하기 좋은 형태로 보입니다. 아마 온라인상에서 AM2305 전용 Radiation shield 제품도 판매하지 않을까요? ㅎㅎ

 

Radiation shield

 

 

* 접촉식 온도센서

 

접촉식 온도센서로 아두이노로 자주 사용되는 센서입니다. 직접 사용해보지는 않았지만 방수가 되기 때문에 어항 물의 온도나 뜨거운 액체의 온도를 측정할 때 유용할 듯 합니다. 그러나 접촉식으로 대류와 접촉에 따른 온도 전달은 다를 수 있기 때문에 공기 중의 온도도 잘 반영되는지는 실험해 보는게 좋을 듯 합니다. 

아두이노 접촉식 온도 센서

 

동작 전압 (Power) 3.0~5.5 V DC
온도 측정 범위 (Temperature range) -10 ~ 85 ℃ (±0.5 ℃)
데이터 주기 (Query time) 750ms
특징 방수가능

 

 

 

반응형
반응형

 

 

 

지난 시간 스케치로 프로그램을 코딩할 때 자주 사용되는 꼭 필요한 명령어 몇 가지를 알아보았습니다. IT 비전공자가 프로그램 언어를 기본부터 완전히 이해하면서 배우는 것은 쉬운 일은 아닙니다. 그렇기 때문에 직접 프로그램을 코딩해보면서 익숙해지거나 온라인상에서 다른 사람이 코딩한 아두이노 프로그램을 한 줄 한 줄 파헤쳐봐야 쓰임이나 로직을 이해할 수 있습니다.

 

그래도 아는게 있어야 조금 더 보인다고.. 저도 조금씩 보이고 있지만.. 배울수록 산 넘어 산이 너무 많더군요 ㅠㅠ 그래도 원하는 프로젝트를 위하여~! 오늘은 프로그램을 코딩할 때 정말 많이 사용되는 몇 가지 명령어를 알아볼까 합니다.

 


명령어 기능 사용법
pinMode I/O 핀의 입출력 설정 pinMode(pin#, mode);
If 조건문 조건에 따라 다음 명령을 실행 if 조건, true일때 명령, else false일때 명령
digitalWrite 디지털 핀에 High, Low 값 출력  digitalWrite(pin#, HIGH); or digitalWrite(pin#, LOW);

 

 

 

1. pinMode( )

 

아두이노의 디지털 입출력 핀(digital Input/Output pin)을 '입력'으로 사용할지 '출력'으로 사용할지 설정하는 명령어입니다. pinMode(pin, mode); 형태로 사용하면 되는데 여기서 pin은 설정하려는 핀번호가 되며, mode는 OUTPUT, INPUT 또는 INPUT_PULLUP 중 하나를 선택해서 입력하면 됩니다. 주의하실 점은 대문자로 입력해야 합니다.  

void setup(){
pinMode(13, OUTPUT); // 13번 핀을 output으로 설정
}

void loop{
}

설정하려는 핀번호를 13번으로 mode를 OUTPUT, 출력으로 코딩하면 13번 핀에서 5V를 출력할 수 있는 상태로 설정합니다. INPUT, 입력으로 코딩하면 13번 핀을 통해 센서 data를 읽을 수 있는 상태로 설정합니다.

 

INPUT_PULLUP모드는 아두이노의 '내부 pull-up 저항'을 사용하겠다는 설정입니다. 모든 아두이노 보드에는 일반적으로 내부 pull-up 저항이 있으며, pull-up저항을 사용하는 이유는 플로팅(floating)을 방지하기 위해 사용됩니다. 플로팅 상태는 영어 floating 뜻 그대로 '떠 있다'는 의미로 입력 신호가'1(High)'인지 '0(Low)'를 정확히 알 수 없는 상태로 있다는 말합니다. 플로팅 상태에서는 아주 작은 노이즈 만으로 신호가 왔다 갔다 하기 때문에 센서나 아두이노가 오작동을 일으키게 됩니다.  플로팅 개념에 대해서 알기 쉽게 설명해놓은 블로그 링크 첨부해두겠습니다. 참고하시면 될 거 같아요 ^^ (코딩 학원의 설명이라 굿입니다. ㅋㅋ)

 

 

[기초 지식] 풀업 저항이란? (Pull-Up저항이란)

안녕하세요 강남 대치동 1등 코딩학원! 어린이 청소년 전문 자율참여형 코딩학원. 잼있고 깊게, 비교할수록...

blog.naver.com

 


 

2. If (조건문)

 

프로그램을 조금이라도 다뤄보신 분은 If 조건문은 아주 많이 보셨을 정도로 세상 모든 것은 조건문으로 이루어졌다 해도 과언이 아닐 정도로 유용하게 많이 사용할 수 있는 명령어입니다. '조건'문은 말 그대로 '특정 조건이 주어질 때 그 조건이 맞으면 A 명령을 틀리면 B 명령을 해라' 같은 내용을 코딩할 때 사용합니다. 일상생활에서 자동문에 사람이 가까이 오면 문을 열고 아닐 때는 닫혀있어라... 든지 실내 온도가 설정 온도보다 올라가면 에어컨을 더 강하게, 설정온도보다 내려가면 좀 약하게 틀어라.. 같은 명령을 If 조건문으로 구성할 수 있습니다. 아두이노도 스케치의 프로그램 언어가 C/C++을 기반으로 하기 때문에 당연히 If 조건문을 사용할 수 있습니다.

 

사용법은 if 다음 괄호( ) 안에 조건을 쓰고, 중괄호{ } 안에 조건이 맞을 때 실행하고자 하는 'A 명령'을 적으면 됩니다. 그리고 이어서 else { } 안에 조건이 틀린 경우 'B 명령'을 적으면 됩니다.

if (조건)

{

명령문 A;

}

else

{

명령문 B;

}

형태로 사용하면 되는데..

 

예를 들어 실내'습도'가 설정 값보다 올라가면 LED 경고등을 점등하고, 아니면 LED는 끄라는 내용으로 프로그램을 코딩해보겠습니다. 앞서 다룬 온습도 센서 사용법과 프로그램 코딩 법은 아래 링크 참고 부탁드립니다.

 

 

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

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

it-g-house.tistory.com

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

void setup() {
  Serial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
 }

void loop() {
  DHT.read11(DHT11_PIN);
    hum = DHT.humidity;
    temp = DHT.temperature;
  
  Serial.print(temp);
  Serial.print(",");
  Serial.println(hum);
  
  if(hum > 70){
  digitalWrite (LED_BUILTIN, HIGH);
  }
  else{
  digitalWrite (LED_BUILTIN, LOW);
  }
  delay(2000); //Delay 2 sec.
  }

 

우선 아두이노에 내장(built in)되어 있는 LED를 점등하기 위해 'pinMode(LED_BUILTIN, OUTPUT);'이라고 설정합니다. 그리고 hum(습도) 값이 70보 크면..이라는 if 조건문을 사용하였습니다. if (조건)에서 'hum > 70'이라고 습도 값이 70보다 클 때라는 조건을 적었습니다. 부등호 '>'는 조건 연산자에 해당하는데 우리가 흔히 아는 부등호와 비슷하지만 다음과 같이 사용해야 합니다. 

 

조건연산자 if 조건에서 사용 예
A == B A와 B가 같음 if(hum == 70) //hum 값이 70 일 때
A != B A와 B가 같지 않음 if(hum != 70) //hum 값이 70 아닐 때
A > B A가 B보다 큼 if(hum > 70) //hum 값이 70보다 클 때
A < B A가 B보다 작음 if(hum < 70) //hum 값이 70보다 작을 때
A>=B A가 B보다 크거나 같음  if(hum >= 70) //hum 값이 70보다 크거나 같을 때
A<=B A가 B보다 작거나 같음 if(hum <= 70) //hum 값이 70보다 작거나 같을 때

습도가 70 이상이면 'digitalWrite(LED_BUILTIN, HIGH)'로 내장 LED를 점등하고, else 명령어를 사용하여 그렇지 않으면 'digitalWrite(LED_BUILTIN, LOW)'로 LED를 꺼지는 명령문이 됩니다.

 


 

 

 

3. digitalWrite()

 

원하는 디지털 핀(digital pin)에 'High(1)' 값 또는 'Low(0)' 값을 출력하는 명령어입니다. 예를 들어 pinMode(13, OUTPUT);를 통해 13번 핀을 OUTPUT모드로 설정 후 'digitalWrite(13, HIGH);' 명령어를 통해 HIGH값을 출력할 수 있습니다. if() 문 예제를 통해서도 내장된 LED에 digitalWrite() 명령을 통해 HIGH(점등)와 LOW(소등) 값을 출력하여 LED를 제어하였습니다.  

 

스케치를 통해 프로그램을 코딩하고 아두이노로 업로드하면 시리얼 모니터(Serial Monitor)에는 아래와 같이 나오고 습도(hum) 값이 70보다 크면 LED가 점등하고 아닐 경우 LED가 꺼지는 것을 볼 수 있습니다. 

 

아두이노(Arduino)를 사용해서 실내습도가 70보다 크면 내장 LED를 점등하고 아니면 소등하는 if 조건문 실행

 


여기까지 아두이노(Arduino)에서 자주 사용되는 'pinMode();', 'if(){}' 'digitalWrite();' 명령어에 대해 알아보았습니다. 오늘 알아본 조건문 코딩을 기반으로 온도나 습도가 설정 값보다 높거나 낮을 때 경고등을 점등한다던지 알람이 울린다던지.. 더 나아가 외부기기(에어컨, 선풍기)를 작동하는 프로젝트로 확장할 수 있습니다. 와~ 우~ 

 

다음번 포스팅에도 더 쓰임이 좋은 명령어를 소개해 보겠습니다. 긴 글 읽어 주셔서 감사합니다. 질문이나 추가적으로 필요하신 내용 있으면 언제든지 댓글로 남겨주세요~ ^^

 

아두이노 프로그램 코딩 입문도 참고하세요~

 

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

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

it-g-house.tistory.com

 

 

 

반응형
반응형

 

 

 

지난 포스팅에서 아두이노를 이용하여 온습도 센서를 동작해 보면서 아두이노의 기본적인 사용법과 코딩하는 방법을 알아보았습니다. 본격적인 홈 IoT(사물인터넷) 프로젝트를 진행하려면 아두이노를 인터넷에 연결하는 것은 필수겠죠? ^^  인터넷 연결하는 방법은 다양하게 있지만 대표적으로 몇 가지를 알아보고 각각의 필요 제품과 특징을 알아보겠습니다.

 


1. 이더넷(Ethernet) 연결

 

"이더넷(Ethernet)은 컴퓨터 네트워크 기술의 하나로, 일반적으로 LAN, MAN 및 WAN에서 가장 많이 활용되는 기술 규격이다." (출처: 위키피디아)라고 정의되어 있습니다. 근거리 통신망(LAN)의 대표적인 통신 프로트콜이라고 말할 수 있는데.. 사실 이런 정의는 잘 모르겠고~ ㅎㅎ 그냥 인터넷 케이블을 직접 연결하는 이더넷 모듈(ENC28J60)을 사용하여 인터넷을 사용하는 방법입니다. 모듈 형태에서 볼 수 있듯이 랜선(LAN)을 모듈의 케이블 커넥터에 바로 연결할 수 있고 아두이노가 인터넷 통신을 할 수 있게 합니다.  

아두이노 인터넷 연결: 이더넷 모듈 ENC28J60
아두이노 인터넷 연결: ENC28J60 이더넷 쉴드

 

'ENC28J60' 칩셋을 사용해서 모델명이 보통 ENC28J60 이더넷 모듈이라고 불리고, 온라인상에서 제조사에 따라 모양이나 사용된 부품이 조금씩 다르게 판매하고 있습니다. 또 아두이노 보드와 적층하여 사용하는 '쉴드(shield)' 형태도 판매하고 있습니다. 개인적으로 쉴드 제품들은 초보자들이 사용하는데 친절하지 못하고 제약이 많아서 추천하지 않고 있습니다. 이더넷 모듈을 사용하는 방법과 코딩하는 내용은 아래 링크 첨부하도록 하겠습니다. (2019.11.06 업데이트)

 

Arduino 아두이노 인터넷 연결하기 - 이더넷(ethernet) 사용 방법

아두이노(Arduino)를 사용하여 홈 IoT(사물인터넷)를 구현하는 프로젝트를 진행하기 위해서는 우선 인터넷이 되어야 합니다. 지난 포스팅에도 설명하였지만 일반적인 아두이노 모델인 UNO R3, Nano, MEGA 같은 보..

it-g-house.tistory.com

 


 

2. 와이파이(Wifi) 연결

 

두 번째로 어디서나 쉽게 사용할 수 있는 와이파이(Wifi)를 연결하는 방법입니다. 일반적으로 아두이노 UNO R3, MEGA, NANO에는 내장된 와이파이 칩이 없기 때문에 ESP8266 와이파이 모듈을 사용합니다. ESP8266 칩셋을 사용하기 때문에 ESP8266 와이파이 모듈이라고 하고 온라인상에서 검색하면 ESP-01 제품을 가장 많이 찾을 수 있습니다. ESP 시리즈는 ESP-14까지 출시되었는데 버전에 따라 다양한 사양과 기능을 활용할 수 있다고 합니다. 가장 일반적으로 사용하는 모델이 ESP-01이며 제가 사용하는 통신도 간단한 데이터 정도만 주고받으면 되기 때문에 ESP-01 모듈로 충분하게 잘 사용하고 있습니다. 기획하시는 프로젝트에 따라 맞게 구입하시면 될 거 같아요 ^^ 

아두이노 인터넷 사용: ESP-01 와이파이 모듈
아두이노(Arduino) 인터넷 사용하기: ESP8266 와이파이 모듈(Wifi module) 종류

 

아두이노(Arduino) 인터넷 사용하기: ESP8266 와이파이 쉴드(Wifi shield)

 

ESP8266 와이파이도 쉴드 형태로 판매되고 있습니다. 역시나 아두이노에 입문하신 지 얼마 안 되시는 분들에게는 쉴드 사용은 추천하지 않지만...(저도 동작하는데 고생~ 고생을 해서 ㅠㅠ) 추후에 와이파이 실드 사용법은 포스팅하도록 하겠습니다. 직접 사용해 본 단점은 업로드하기 너무 불편했다는 것과 실드를 아두이노와 결착하고 나면 기존 아날로그 I/O 핀이 먹통이 되어 버리고 실드에 있는 1개 핀만 사용할 수 있다는 거였죠.. 이런저런 제약이 많았던 녀석이었습니다...

 

최근에는 ESP8266 와이파이 칩이 내장되어 있는 아두이노 UNO 제품 및 다양한 버전의 제품이 개발되었는데 아두이노 공식 홈페이지 스토어 https://store.arduino.cc/usa/에서 판매하고 있습니다. 응? 그럼 왜 와이파이 모듈을 사용하냐고요?.... 변명일 수 있지만... 와이파이가 내장되어 있는 제품은 비쌉니다...ㅠㅠ UNO 같은 경우 $44.9이네요... 일반 UNO R3가 $22.0이니까 2배가 넘네요... ESP-01 모듈은 온라인상에서 3천 원대 정도면 구할 수 있으니까!! 조금만 몸과 머리가 고생하면... ㅠㅠ 아 슬프네요 ㅎㅎㅎ

 

아두이노 우노 와이파이(Arduino UNO Wifi)

 

ESP-01 와이파이 모듈 사용하는 방법과 프로그램 업로드 후 'AT command'로 와이파이 접속해서 IP 확인하는 내용을 최근에 업데이트 하였습니다. 아래 링크 참고 부탁드리께요 ^^ (2019.11.19 업데이트)

 

아두이노(Arduino) 인터넷 하기 - Wifi (ESP-01)연결하는 방법

아두이노(Arduino)로 인터넷을 연결하는 방법은 랜선(LAN)을 연결하는 방법인 이더넷 모듈(Ethernet module)을 사용하는 방법, Wifi를 연결하는 방법, 3G/LTE를 연결하는 방법이 있습니다. 지난 포스팅까지 주로..

it-g-house.tistory.com

 

 

3. 3G/LTE 연결하기

 

마지막으로 3G/LTE를 사용하는 방법으로 SIM5320 칩셋을 사용하는 3G 모듈을 사용합니다. 다른 모듈과 마찬가지로 온라인상에서 제조사에 따라 조금씩 다른 모듈 형태와 부품을 사용하고 있습니다. LTE 모듈은 SIM7000, SIM7600 같은 LTE를 지원하는 칩셋을 사용하여 만들어집니다. 모듈을 보면 USIM을 장착할 수 있는 곳이 있는데 Nano USIM이 아닌 Micro USIM 크기라 사용하시던 USIM을 바로 꼽아 사용하시기에는 불편함이 있습니다. 역시나 3G/LTE 쉴드 버전도 판매되고 있습니다. 

 

아두이노 인터넷 사용: SIM5320 3G 모듈
아두이노 인터넷 사용: SIM5320 3G 모듈 뒷면 (USIM 장착 가능)

3G 모듈을 사용할 경우 USIM을 개통해야 하고, 일반적으로 우리나라에서 개통되는 USIM을 사용하려면 법적으로 3G 모듈의 기기인증을 받아하는 것으로 알고 있기 때문에 사실 편하게 사용하기는 쉽지 않은 듯합니다. 그리고 사용한다 해도 데이터 비용이 계속 지불해야 하기 때문에 인터넷이 안 되는 산골에서 프로젝트를 하지 않는 한 굳이 3G/LTE 모듈을 사용할 일이 있을까 생각되네요 ^^ (참고로 아두이노 홈페이지 스토어에서 아두이노용 USIM을 구입할 수도 있네요 ㅎㅎ)

 


여기까지 아두이노(Arduino)를 인터넷(Internet)에 연결하는 방법들과 각 모듈에 대해서 알아보았습니다. 저는 이더넷과 와이파이 모듈을 사용해봤는데 모두 인터넷 연결이 잘 되었습니다. 각 모듈 사용방법은 정리되는 데로 바로 포스팅하도록 하겠습니다.

 

궁금하신 부분이나 필요하신 주제 있으면 언제든지 댓글로 의견 부탁드립니다 ^^

 

 

 

반응형

+ Recent posts