반응형

아두이노, Arduino 여기저기서 많이 들었을 겁니다. 이걸 해야 된다는 말이 귀에 못이 박히도록 이야기 합니다. 대충 뭔지는 알겠는데 개발자도 아닌 내가 과연 이걸로 뭘 할 수 있을까 싶기도 하죠. 

아두이노에 대해 설명을 해드릴 필요가 있을만큼 인터넷에는 너무나 많은 아두이노에 대한 글들이 널리고 널렸습니다. 게다가 저처럼 적당한 수준의 지식만 가지고 있는 사람이 설명을 할 수 있을 만큼 실제로 단순한 장치도 아니지요.

오늘 저는 이 포스트에서 딱 한가지만 전달 드릴 생각입니다.

아두이노를 갖고 싶다는 마음 말이죠.

 

아두이노를 제가 정의한다면 다음과 같습니다.

"오직 내손에 의해 만들어지는 세상에서 가작 작은 컴퓨팅 프로세서"

아두이노는 정말 사용자가 프로그래밍을 해서 프로세서 칩에 데이터를 넣은뒤 동작을 시켜 주어야 동작하는 장치입니다. 다른 전자제품처럼 모든게 세팅되어 있지도 않고 만들어져 있지도 않습니다. 오직 나에 의해 만들어지는 것이죠.

그런데 어렵냐고요?

어렵다고 말하면 어렵고 쉽다고 말하면 이렇게 쉬운게 없습니다.

인터넷에는 너무나 많은 예제 프로그램들이 돌고 있고 아두이노 개발 환경을 설치하는 것만으로도 기본적으로  자체에서도 엄청난 양의 예제 코드를 제공합니다. 대충 코드의 흐름만 읽을 줄 알아도 개발을 시작할 수 있다는 이야기죠. 심지어 많은 경우에 전체 코드를 짜지 않고 변수나 값을 일부만 바꾸어도 내가 원하는 코드가 완성되는 경우가 대부분이니 코딩을 잘 몰라도 걱정 마시고 시작하셔도 됩니다.

 

 

우선 ARDUINO 를 사라!

 

자 그럼 아두이노를 처음 시작하는 분은 어떤 과정을 거쳐야 할까요?

전자제품(부품) 쇼핑몰에서 아두이노 패키지를 사야 할까요? 저는 비추입니다. 비싸고 불필요한 것들이 많습니다. 우선 아두이노 자체를 구입하세요. 제일 만만한건 아두이노 나노 또는 기본형인 아두이노 우노 입니다. 아두이노 나노와 우노는 생김새에는 차이가 많지만 사실상 차이가 없는 동일한 제품이라 생각하셔도 됩니다. 모든 코드가 호환되며 입출력 핀 수도 같기 때문에 브래드 보드 없이 바로 테스팅을 진행하려면 우노를, 브래드 보드에서 테스트가 끝나면 바로 자신만의 제품에 넣으려면 나노를 구입하시면 됩니다. 알리 같은 해외 쇼핑몰을 이용하시면 배송시간은 좀 걸리지만 3000원도 안되는 금액에 나만의 컴퓨팅 시스템을 만들수 있는 보드를 구입할 수 있답니다.

어짜피 이것 못해서 안달난 것 아니자나요? 주문해놓고 잊을 만할때 똭! 도착하여 마음을 다시 설레게 만들죠. 로또 사놓고 즐거워하는 시간은 길어야 일주일이지만 아두이노를 주문해놓고 몇주 동안 내손으로 만드는 기계장치를 상상하는 맛도 로또 못지 않답니다.

 

땅콩보다 조금 큰 Arduino Nano

둘다 컴퓨터에 USB 로 바로 연결이 가능하고 USB 전원을 이용하여 동작이 가능하며 LED가 달려 있어 기본적인 동작 테스트가 가능하고 모든 연결 핀이 소켓으로 되어 있거나 표준 규격의 핀으로 구성되어 브래드 보드에 바로 장착하여 테스트를 할수 있기 때문입니다.

 

아두이노로 뭔가를 해보겠다면 필요한 것들

만약 제가 처음 시작하는 분께서 구입하셔야 할 것들을 안내 해 드린다면 아래와 같을 겁니다.

  • 아두이노 NANO (필수)
  • 브래드 보드 (NANO 제품을 구입한 경우)
  • 점퍼 케이블 (필수, 하지만 없으면 만들어도 됨)
  • 가변저항 (볼륨)
  • 푸쉬 버튼, 토글 스위치, 슬라이드 스위치
  • 저항 (1.4k, 4.7k, 100)
  • LED (다리 있는것, 없는 것)

아마 이 정도가 기본일 것 같습니다. 추가로 좀더 재미있는 것들을 해보고 싶다면

  • 서보모터 (9g, 3pin)
  • 부저
  • DC 모터 드라이버 (ESC 라고 불리우는 것)
  • 무선 데이터 송수신 보드 (2.4ghz RF 또는 bluetooth) 
  • 조이스틱
  • 스텝모터
  • IR LED (송신 , 수신)
  • 터치패드
  • 초음파 거리 센서

 

요렇게 부품들이 있으시면 정말 할 수 있는것이 많죠. 사실 위의 부품들 전체를 알리에서 다 구입하더라도 1만원~2만원 정도면 구입할 수 있다는 것이 믿어 지시나요? ㅋㅋ 하지만 사실입니다. 물론 잘 구매 해야 겠고 중국에서 구입하면 배송되는 시간도 꽤 걸릴 거라서 시간을 두고 천천히 해나가시면 됩니다.

 

자 아두이노를 구입하셨고 수중에 아두이노가 있다면 다음 단계는 개발 환경을 설치하는 일 입니다. 아두이노 공식 사이트에서 다운 받으시면 되는데 오픈소스 개발환경이다 보니 사실 최신 버전을 꼭 받아야 할 필요는 없습니다. 또 어떤 부품은 이전 버전에서만 테스트 되었으며 특정 버전에서만 동작이 되는 제품도 있습니다. 개인적으로는 1.6.x 버전과 1.0.x 버전중에 자신에게 맞는 (튜토리얼 등을 참고하고 있는) 버전을 설치하시면 될 것 같습니다.

아두이노 예전 버전 받는 링크

 

Arduino - OldSoftwareReleases

Arduino IDE that can be used with any Arduino board, including the Arduino Yún and Arduino DUE. Refer to the Getting Started page for Installation instructions. See the release notes. Windows Installer Windows ZIP file for non admin install Mac OS X 10.8 M

www.arduino.cc

전 별다른 이유는 없지만 1.6.7 버전을 설치하였습니다.

아두이노 1.6.7 버전 설치 직후

 

실제로 최신 버전을 타겟으로 개발되지 않은 라이브러리가 동작하지 않는 문제가 있으므로 반드시 최신 버전을 설치해야 할 필요는 없습니다. 1.0.x 대 버전에서만 동작하는 라이브러리가 있을 수도 있으므로 라이브러리 다운로드시 어떤 버전에서 동작했는지 확인이 필요합니다.

개발하는 순서는 다음과 같습니다.

코딩을 하고 (또는 예제를 열고) 현재 자신의 보드를 선택한 뒤 프로그래머를 선택하고 빌드하시면 됩니다.

참고로 잘못 선택한다고 고장나는 경우는 거의 없으니 두려워 하실 필요 없어요. 뭔가 원하는 데로 동작이 안된다면 처음부터 다시 확인해 보시면 됩니다. 프로그래밍 상의 오류는 아두이노 IDE 에서 컴파일 할때 다 잡아 줍니다. 장비와의 매칭 문제는 컴파일된 소스를 업로드 할때 잡히게 되어 있죠. 클럭 수 등은 보통 구입할때 알수 있지만 일반적인 경우가 대부분이므로 일반적인 값을 선택해 주면 됩니다. 예를 들면 아두이노 나노라면 16Mhz 가 일반 적인 옵션이죠.

 

 

 

아두이노 코딩의 기본 규칙은 아래와 같습니다.

처음에 현재 개발하고 있는 코드에서 사용할 라이브러리를 선언합니다. 그리고 각종 변수를 선언 해 줍니다. 

void setup 이라는 함수가 나오는데 이 함수는 최초 딱 1번 실행이 되는 함수 입니다. 변수들의 초기값을 세팅해 주거나 시작하자마자 동작해야 하는 함수 등을 호출 해줄 수 있습니다.

그다음 void loop() 이라는 함수가 나오는데요. 이 함수가 실제로 아두이노를 동작시키는 함수 입니다.

loop 는 말그대로 반복하는 동작을 말하죠? loop 안의 내용이 계속해서 반복된다고 보시면 됩니다.

유사하고 같은 동작이 반복적으로 사용된다면 함수를 만들어 빼내고 loop 에서는 해당함수를 호출해 주는 방식으로 사용하게 됩니다. 이렇게 필요한 기능들을 잘 생각해서 함수를 아래로 쭉쭉 추가해 나갈 수 있습니다.

 

 

라이브러리 설치는 어떻게 하는 것인가!!!

인터넷에 궁금한 것을 찾다 보면 라이브러리를 설치하라고 나오면서 경로를 링크해놓은 경우가 많습니다. 들어가 보면 github 같은 사이트에 올라온 경우도 있고 직접 라이브러리를 압축 파일로 올려놓는 경우도 많이 있습니다. 일단 기본 예제 외에 무선 통신이나 좀 신기한거를 하려면 대부분 누군가 개발해놓은 라이브러리를 이용해야 하는 경우가 많은데요. 처음 할때는 마냥 햇갈립니다. 어떻게 하라는 건지 말이죠.

최신 버전은 라이브러리를 개발 환경 (개발 툴) 에서 직접 검색하여 설치 할 수 있도록 되어 있는데요. 예전 방식으로 그냥 복사해서 붙여넣는 것도 간단하고 쉽습니다.

제가 설치한 1.6.7 버전 기준으로 설명을 드릴께요

다운로드 받은 압축파일 , github의 경우 download zip 과 같은 버튼이 있습니다. 일단 다운로드 받으신 뒤 압축을 해제하여 주세요.

다운로드 받은 압축 파일을 해제한 상태

이렇게 압축 해제된 폴더들 (압축파일이 아닙니다)을 복사해서 내문서>arduino>library 폴더에 복사해서 붙여 넣으시면 끝! 입니다.

라이브러리 폴더를 내문서>arduino>libraries 폴더에 붙여 넣었다.

 

참쉽죠?

 

요렇게 하신 뒤에 arduino sw 를 재실행 하시면

예제 카테고리 안에 해당 라이브러리에서 제공하는 예제가 보인다.

요렇게 설치된 라이브러리의 예제가 보이는 것을 확인할 수 있답니다.

 

예제 파일을 열어보시면 라이브러리를 불러들이는 방법이나 간단한 사용방법 등이 코드로 설명이 되어 있으니 그냥 복사해서 새로운 ino 창에 붙여 넣고 사용하면 되는 것이죠.

보신것처럼 간단합니다.

 

아두이노는 이렇게 SW 를 구성하는 것으로 끝이 아니라 점퍼 케이블과 브래드 보드 등을 이용하여 원하는 동작이 되는지 확인하는 과정과 최종 제품으로 만들어가는 과정이 모두 완료 되어야 하나의 프로젝트가 마무리 되었다고 볼 수 있습니다. 

원하는 결과대로 잘 동작 할 경우 그 만큼 만족도로 아주 높습니다.

손톱만큼 작은 OELD 에 내가 만들고 있는 프로그램의 화면을 출력할 수도 있죠.

0.96inch OLED 스크린을 이용하여 글자를 출력한 모습

(OELD 스크린을 연동하는 예제는 따로 포스팅 하도록 하겠습니다)

 

대표적으로 저는 아두이노로 RC카 송수신기를 만들어 가지고 놀았습니다. 말하자면 RC 카의 무선 조종 장치를 만들고 차량에 그 신호를 받아 차량을 컨트롤 할 수 있도록 하는 장치를 만들었습니다. 아주 간단(??)하지만 재미있는 작업이었습니다.

직접 제작한 RC 카 송수신기로 동작하는 RC 카 WPL-C24

 

조종기(송신기) 와 차량 (수신기)에 각각 arduino nano 보드를 이용하여 송수신 장치를 만들었다.

 

제가 아두이노로 그동안 만들었거나 만들수 있는 재미있는 것들은 아래와 같습니다.

위의 것들 중 제가 직접 만든 것들은 링크를 할테니 한번 둘러보시는 것도 좋겠네요 ^^

 

 

자 수중에 아두이노가 이미 있다면 망설일게 무엇이 있겠습니까? 

아두이노를 이용하여 단순한 조명을 만들수도, 장난감을 만들수도, 어쩌면 좀 복잡한 기계 장치를 만들수도 있겠으며 홈 네트워크 같은 미래기술도 내손으로 직접 만들어 볼 수 있답니다. 

 

누구나 창조자, MAKER 가 될 수 있습니다. 하루하루 지루해진 일상에 단물 같은 취미를 한번 선물해 보시는건 어떨까요?

돈 몇푼이면 토니스타크 같은 멋진 컴퓨팅 시스템 개발자가 될 수 있답니다.

자 ~ 바로 시작해 보실까요?

반응형
반응형

먼저 포스트에서 아두이노를이용하여 다양한 리모콘의 신호를 해킹하는 방법을 알아 보았습니다.

https://diy-dev-design.tistory.com/65

 

[DIY] 아두이노로 만능 (통합) 리모콘 만들기 1/3

도대체 영화 한편 보려면 몇개의 리모콘을 사용하는지... TV 전원을 켜기위해 TV 리모컨을 찾아야 하고 안드로이드 TV 셋톱을 켜기위해 안드로이드 TV 리모콘을 역시 찾아야 하며 막상 틀었더니 소리가 어마무시하..

diy-dev-design.tistory.com

 

그럼 이제 신호를 TV, 안드로이드 TV BOX, 블루투스 사운드바 에 각각 보내는 테스트를 해볼 차례 입니다.

앞선 포스트에서 확인이 가능하겠지만 제가 테스트를 통해 모은 신호는 아래와 같습니다.

 * tv (NEC)
 * power :      0x2DF10EF, 32
 * input :      0x2DFD02F, 32
 * chnnel up :  0x2DF00FF, 32
 * chnnel dn :  0x2DF807F, 32
 * volumn up :  0x2DF40BF, 32
 * volumn dn :  0x2DFC03F, 32
 * OK :         0x2DF22DD, 32
 * sw up :      0x2DF02FD, 32
 * sw dn :      0x2DF827D, 32
 * sw left :    0x2DFE01F, 32
 * sw right :   0x2DF609F, 32
 * 
 * android tv (NEC)
 * power :      0x807F02FD, 32
 * sw up :      0x807F6897, 32
 * sw dn :      0x807F58A7, 32
 * sw left :    0x807F8A75, 32
 * sw right :   0x807F0AF5, 32
 * sw OK :      0x807FC837, 32
 * back :       0x807F9867, 32
 * volumn up :  0x807F18E7, 32
 * volumn dn :  0x807F08F7, 32
 * 
 * 
 * lonpoo speaker
 * power :      0x40BF807F, 32
 * volumn up :  0x40BF50AF, 32
 * volumn dn :  0x40BFD02F, 32
 * bt :         0x40BFA05F, 32
 * bt esc :     0x40BF906F, 32
 * opt :        0x40BF20DF, 32
 * 
 */

 

먼저 몇가지 확인이 쉬운 기능들을 테스트 할 예정입니다.

전원 ON/OFF 로 해보죠.

준비물은 아래와 같습니다.

  • 아두이노 나노
  • IR LED (송신용, 투명한 재질임)
  • 10 k 정도 되는 저항, 저는 4.7k * 3 개
  • push button 3개
  •  

간단하죠?

IR LED 는 전에 사 두었던 거리감지 쉴드에서 적출 하였습니다. 일정 거리 미만이 되면 신호를 보내는 쉴드 인데요. 마땅히 사용할 일이 없어 놀고 있던 보드에서 추출하였습니다.

거리 감지 센서, 아래쪽의 투명한 LED 가 IR 송신부 LED 이다.

버튼 역시 앞서 포스트에 등장했던 비디오 테이브 플레이어의 보드에서 적출 하였습니다. 다리 4개 짜리 버튼이 브래드보드에서 테스트 하기가 좋지 않기 때문에 뜯는 김에 버튼들도 추출을 진행하였습니다.

혹시 몰라 TR 도 하나 뜯어 보았는데 동작이 잘 안되면 연결해볼까 합니다.

버려진 가전제품에서 적출해낸 부품들

 

일단 테스트 코드를 만들어 보겠습니다.

미리 준비하였던 신호들을 본인의 제품에 맞는 명령으로 보내면 되는데요. 일단 예제 중에 IRremote --> IRsendDemo 예제를 기본으로 시작을 하도록 하겠습니다.

 

해당 예제에 라이브러리를 추가(스케치--> 라이브러리 포함하기--> IRremote) 하고 아래와 같이 코딩을 합니다.

#include <boarddefs.h>
#include <IRremote.h>
#include <IRremoteInt.h>
#include <ir_Lego_PF_BitStreamEncoder.h>

/*
 * IRremote: IRsendDemo - demonstrates sending IR codes with IRsend
 * An IR LED must be connected to Arduino PWM pin 3.
 * Version 0.1 July, 2009
 * Copyright 2009 Ken Shirriff
 * http://arcfn.com
 */
/*
 * tv (NEC)
 * power :      0x2DF10EF, 32
 * input :      0x2DFD02F, 32
 * chnnel up :  0x2DF00FF, 32
 * chnnel dn :  0x2DF807F, 32
 * volumn up :  0x2DF40BF, 32
 * volumn dn :  0x2DFC03F, 32
 * OK :         0x2DF22DD, 32
 * sw up :      0x2DF02FD, 32
 * sw dn :      0x2DF827D, 32
 * sw left :    0x2DFE01F, 32
 * sw right :   0x2DF609F, 32
 * 
 * android tv (NEC)
 * power :      0x807F02FD, 32
 * sw up :      0x807F6897, 32
 * sw dn :      0x807F58A7, 32
 * sw left :    0x807F8A75, 32
 * sw right :   0x807F0AF5, 32
 * sw OK :      0x807FC837, 32
 * back :       0x807F9867, 32
 * volumn up :  0x807F18E7, 32
 * volumn dn :  0x807F08F7, 32
 * 
 * 
 * lonpoo speaker
 * power :      0x40BF807F, 32
 * volumn up :  0x40BF50AF, 32
 * volumn dn :  0x40BFD02F, 32
 * bt :         0x40BFA05F, 32
 * bt esc :     0x40BF906F, 32
 * opt :        0x40BF20DF, 32
 * 
 */

#include <IRremote.h>

const int pw_tv = 4;
const int pw_and = 5;
const int pw_spk = 6;

IRsend irsend;

void setup()
{
  pinMode(pw_tv, INPUT_PULLUP);
  pinMode(pw_and, INPUT_PULLUP);
  pinMode(pw_spk, INPUT_PULLUP);
  pinMode(13, OUTPUT);
}

void loop() {

  int s_pw_tv = digitalRead(pw_tv);
  int s_pw_and = digitalRead(pw_and);
  int s_pw_spk = digitalRead(pw_spk);

  // tv 전원 역할 스위치 (평상시는 HIGH 입니다)
  if (s_pw_tv == HIGH) {
    digitalWrite(13, LOW);
  }else{
    digitalWrite(13, HIGH);
    for (int i = 0; i < 3; i++) {
     irsend.sendNEC(0x2DF10EF,32);     
      delay(40);
    }
  }
  
  // 안드로이드 tv box 전원 역할 스위치 (평상시는 HIGH 입니다)
  if (s_pw_and == HIGH) {
    digitalWrite(13, LOW);
  }else{
    digitalWrite(13, HIGH);
    for (int i = 0; i < 3; i++) {
     irsend.sendNEC(0x807F02FD,32);     
      delay(40);
    }
  }
  
  // 사운드 바 전원 역할 스위치 (평상시는 HIGH 입니다)
  if (s_pw_spk == HIGH) {
    digitalWrite(13, LOW);
  }else{
    digitalWrite(13, HIGH);
    for (int i = 0; i < 3; i++) {
     irsend.sendNEC(0x40BF807F,32);     
      delay(40);
    }
  }
	
	delay(50); //5 second delay between each signal burst
}

3개의 버튼을 사용할 것이므로 3개의 입력핀을 설정한뒤 버튼이 눌렸을 때 LED (13번 핀, 아두이노 기본 LED) 를 켜주면서 3차례에 걸쳐 신호를 보내도록 코딩하였습니다.

저는 모든 신호의 제품이 NEC 로 확인 되었기 때문에 라이브러리의 sendNEC 라는 명령을 통해 신호를 보내 주었습니다.

보드는 아래와 같이 구성하였습니다.

3개의 버튼은 각각 4,5,6 번에 연결, IR LED 는 3번에 연결 하였다.

코드를 보면 알겠지만 버튼은 모두 GND 에 연결하고 PULLUP 상태를 만들어 준 뒤 LOW 일때 동작하도록 하였습니다. 이렇게 하면 아두이노 내부 저항에 의해 별도의 외부 저항 없이 버튼 연결이 가능하게 됩니다.

IR LED 의 경우 방향이 정해져 있는데 어짜피 다이오드 이므로 신호가 나오는지 체크해서 신호가 안나오면 방향을 반대로 뒤집어 주면 됩니다. 

신호가 나오는지는 핸드폰 카메라로 확인이 가능한데요, 신호가 나올때는 보라색으로 깜박깜박 합니다. 아래 영상을 참고하시면 됩니다.

 

IR 신호가 정상적으로 나온다면 불이 깜빡이는 것을 확인할 수 있다. 

 

해당 보드로 TV 와 안드로이드 TV box, 사운드바가 정상적으로 동작하는 것을 확인할 수 있습니다.

실제 LED 는 TR 없이 쇼파에서 문제 없이 동작하였으니 이제 실제 결과물을 만들어야 할 시간입니다.

동작할 기능은 많은데 모든 기능에 대하여 버튼을 만들어 넣을 수 는 없을 것 같으니 머리를 좀 써야 할 시간입니다. 이제부터 본격적인 개발이 시작된다고 할까요?

 

이거 뭐 껌이네요. 여러분도 한번 도전해 보시기 바랍니다.

 

자 대망의 만능 리모콘 만들기 3편은 다음 포스트에서 소개해 드리겠습니다.

 

그럼 이만~

 

2020/06/17 - [DIY/Arduino] - [DIY] 아두이노로 통합(만능) 리모콘 만들기 3/3

 

[DIY] 아두이노로 통합(만능) 리모콘 만들기 3/3

아두이노로 통합(만능) 리모콘 만들기 3/3 이라 쓰고 왠지 이번 포스트에서 끝나지 않을 것 같은 느낌이 강하게 듭니다. 지난 포스트에서 아두이노 IR 센서를 이용하여 신호를 해킹하고 또 필요한

diy-dev-design.tistory.com

2020/05/26 - [DIY/Arduino] - 0.96 inch OLED 디스플레이 구동하기

 

0.96 inch OLED 디스플레이 구동하기

가끔 아두이노로 무엇인가를 만들어 보려고 하다보면 디스플레이가 있으면 하는 생각이 들때가 있습니다. 아두이노는 작은 컴퓨터이기는 하지만 모름지기 컴퓨터라 한다면 입력장치 - 중앙처��

diy-dev-design.tistory.com

2019/06/27 - [DIY/Arduino] - 아두이노를 이용한 간단한 화분 자동 물주기 시스템

 

아두이노를 이용한 간단한 화분 자동 물주기 시스템

얼마뒤면 베트남으로 가족 여행을 떠날 예정입니다. 7박이나 하고 올 예정이므로 집을 비우기 전 준비해야 할 것들이 많습니다. 이것저것 여행준비를 하던 찰나 베란다에 내어 둔 화분이 걱정이

diy-dev-design.tistory.com

2022.03.26 - [DIY] - [DIY]무민양품 USB 데스크팬 수리하기

 

[DIY]무민양품 USB 데스크팬 수리하기

사무실을 이사하다보면 각 종 쓰레기가 쏟아져 나오는데 간혹 쓸만한 것들이 나오는 경우가 있습니다. 오호~ 이건 무민 양품의 USB 선풍기! 뭐 고장 났으니 버렸겠지 싶어 지나쳐 가다가 ... 고치

diy-dev-design.tistory.com

 

만능 리모컨 만들기 최종 완성본은 아래에서 확인하세요~

2022.08.16 - [DIY/Arduino] - [DIY] 아두이노로 통합(만능) 리모콘 만들기 (최종)

 

[DIY] 아두이노로 통합(만능) 리모콘 만들기 (최종)

만능 리모컨을 만들기로 해놓고 정말 많은 시간이 흘렀습니다. 2019.11.10 - [DIY/Arduino] - [DIY] 아두이노로 만능 (통합) 리모콘 만들기 1/3 2019.11.10 - [DIY/Arduino] - [DIY] 아두이노로 통합(만능) 리모콘..

diy-dev-design.tistory.com

 

반응형
반응형

도대체 영화 한편 보려면 몇개의 리모콘을 사용하는지... 

TV 전원을 켜기위해 TV 리모컨을 찾아야 하고 안드로이드 TV 셋톱을 켜기위해 안드로이드 TV 리모콘을 역시 찾아야 하며 막상 틀었더니 소리가 어마무시하게 커서 블루투스 사운드 바 소리를 줄이기 위해 사운드바 리모콘을 찾아서 겨우 소리를 줄였더니 TV 기본 사운드가 너무 큰 탓인지 사운드바의 볼륨 1에서도 소리가 커서 하나를 줄이면 소리가 아얘 나지 않는 상황이어서 다시 TV 리모콘을 집어 들고 TV 볼륨을 줄였으나 알고보니 영상의 기본 사운드가 너무 크게 인코딩 되어 있어 안드로이드 TV 에서 볼륨 레벨을 낮추기 위하여 다시 안드로이드 TV 리모콘을 집어들어야 하는 상황이 거짓말처럼 하루건너 발생하는 우리집이다.

아놔..

끌때도 TV 끄고, 안드로이드 TV 끄고 사운드바 끄고... 

이걸 한번에 통합하는 건 불가능 한 것일까..

 

그래서 한번 만들어 보기로 하였습니다.

아두이노를 이용하여 IR 리모콘 신호를 해킹하는 예제를 언젠가 본적이 있어 구글링을 하여 보았습니다.

제가 참고한 블로그는 아래 블로그 입니다.

https://blog.naver.com/opusk/220984753138

 

[Application] 아두이노로 리모컨 IR신호 확인하기 - IRremote Library를 활용한

적외선 통신 (Infrared Ray Communication)먼저, IR통신에 대해 알아보면 말그대로 적외선 통신입니다...

blog.naver.com

좀 어려운 말들이 있기는 하지만 복잡할 것 없이 그냥 따라 해보시면 됩니다.

 

일단 신호를 따서 필요한 신호를 모두 모은 뒤에 버튼을 달고 버튼을 누를 때 마다 필요한 신호를 보내면 끝.

 

일단 신호를 따야 겠죠?

필요한 준비물은 아래와 같습니다.

  • 아두이노 나노
  • IR 리모콘 수신부 LED (저는 고장난 비디오 데크 에서 뜯어냈습니다. 재활용품 버리는날 주워왔었죠)
  • 10 k 정도의 저항 (얼마인지는 모르겠네요)
  • IR 라이브러리 (링크)

 

요렇게 하고 시작해 보겠습니다.

먼저 위에 링크 라고 되어있는 페이지로 가봅시다.

https://github.com/z3t0/Arduino-IRremote

가서보면 아래와 같은 페이지가 보이는데요. 우측에 'clone or download' 를 누르시게 되면 압축 파일로 다운로드가 됩니다.

 

 

이렇게 다운로드 받은 zip 파일을 압축을 해제한 뒤 아두이노 library 폴더에 넣으시면 되는데요. library 폴더는 아두이노가 설치된 폴더에도 있고 내문서에 Arduino 폴더에도 있습니다. 

저는 설치폴더 찾아 들어가기가 귀찮아서 그냥 내문서에 있는 라이브러리 폴더에 넣었습니다.

 

이제 아두이노 IDE 를 실행해 봅니다. (아두이노 IDE가 켜진 상태에서 라이브러리를 추가 하였다면 모두 종료하고 재실행하면 라이브러리 및 예제가 추가되어 있는 것을 알 수 있습니다)

그런다음 예제에서 IRremote 로 들어가고 그 하위에 있는 IRrecvDumpV2 를 선택해 줍니다.

 

그러면 아두이노 IDE 에 예제 파일이 보이게 되는데요.

여기에서 추가로 설정해주어야 하는 것이 입력 핀 번호 수정입니다.

아래 그림과 같이 int recvPin 을 2번으로 변경해 줍니다. 2번은 나노의 D2 에 해당됩니다.

 

끝으로 IR 라이브러리를 추가해주어야 하는데요.

요렇게 해주면 준비가 완료 됩니다.

이제 브래드 보드에 리모콘 수신부를 연결하도록 하겠습니다.

아래 사진과 같이 연결해 줍니다.

 

적외선 수신부의 가장 좌측 다리를 D2 에 연결하고 10k 저항을 통해 5v 를 인가합니다.

가운데 다리는 GND 에 우측 다리는 5v 에 직접 연결합니다.

준비 완료.

 

아두이노 IDE 에 작성해놓은 코드를 업로드 합니다. 

혹시 처음 하시는 분은 아래와 같이 설정을 하면 됩니다.

COM 포트는 사용자마다 다를거에요. 어떤 USB 포트에 연결했느냐에 따라 다른 번호가 나타납니다. 

USB 를 연결한뒤에 새로 나타나는 포트가 아두이노가 연결된 포트입니다.

 

이제 신호를 테스트 해보겠습니다.

USB 를 연결하고 시리얼 모니터를 켠 후 리모콘의 버튼을 눌러 필요한 신호를 보내봅니다.

무려 세개의 리모콘이 이번 통합 대상이다.
리모콘을 수신부를 향해 눌러준다.

그럼 시리얼 모니터에 아래와 같이 출력이 됩니다.

시리얼 모니터를 통하여 입력된 정보

중요한 것은 여기 빨간색 네모 박스의 내용입니다.

입력된 신호는 NEC 라는 회사의 프로토콜이며 0x807FAA55 라는 HEX 코드가 바로 입력된 신호인 것이죠. 위에 rawData 라는 정보가 보이는데 이는 NEC, LG 등과 같이 프로토콜의 제조사를 알 수 없는 리모콘신호인 경우 rawData 를 직접 보내기 위하여 사용되는 정보 입니다. 

저의 경우에는 NEC 라는 제조사의 신호임이 확인되었기 때문에 해당 제조사에서 약속한 0x807FAA55 라는 값을 보내면 됩니다. 

가끔 시리얼 모니터에 제조사 정보에 UNKNOWN 이라고 나오는 경우가 있습니다. 실제로 제품 사용중에 리모콘을 눌러도 신호가 전달이 되지 않는 경우가 있죠? 이렇게 신호가 불분명하게 입력되는 경우입니다. 다시 눌러보면 정확히 들어오게 되는데 이때 들어온 정보를 사용하면 됩니다.

이렇게 3개의 리모콘을 이용하여 제가 모아본 신호는 아래와 같습니다.

 * tv (NEC)
 * power :      0x2DF10EF, 32
 * input :      0x2DFD02F, 32
 * chnnel up :  0x2DF00FF, 32
 * chnnel dn :  0x2DF807F, 32
 * volumn up :  0x2DF40BF, 32
 * volumn dn :  0x2DFC03F, 32
 * OK :         0x2DF22DD, 32
 * sw up :      0x2DF02FD, 32
 * sw dn :      0x2DF827D, 32
 * sw left :    0x2DFE01F, 32
 * sw right :   0x2DF609F, 32
 * 
 * android tv (NEC)
 * power :      0x807F02FD, 32
 * sw up :      0x807F6897, 32
 * sw dn :      0x807F58A7, 32
 * sw left :    0x807F8A75, 32
 * sw right :   0x807F0AF5, 32
 * sw OK :      0x807FC837, 32
 * back :       0x807F9867, 32
 * volumn up :  0x807F18E7, 32
 * volumn dn :  0x807F08F7, 32
 * 
 * 
 * lonpoo speaker
 * power :      0x40BF807F, 32
 * volumn up :  0x40BF50AF, 32
 * volumn dn :  0x40BFD02F, 32
 * bt :         0x40BFA05F, 32
 * bt esc :     0x40BF906F, 32
 * opt :        0x40BF20DF, 32
 * 
 */

저는 위의 신호들을 하나의 리모콘을 통하여 보낼 수 있도록 만들어볼 생각입니다.

그럼 다음 포스트에서 실제 신호를 보내는 예제를 만들어 보겠습니다.

 

그럼 이만~

 

그 다음 이야기는 아래 포스트에서 확인해 주세요

https://diy-dev-design.tistory.com/66

 

[DIY] 아두이노로 통합(만능) 리모콘 만들기 2/3

먼저 포스트에서 아두이노를이용하여 다양한 리모콘의 신호를 해킹하는 방법을 알아 보았습니다. https://diy-dev-design.tistory.com/65 [DIY] 아두이노로 만능 (통합) 리모콘 만들기 1/3 도대체 영화 한편 보려..

diy-dev-design.tistory.com

 

2020/06/17 - [DIY/Arduino] - [DIY] 아두이노로 통합(만능) 리모콘 만들기 3/3

 

[DIY] 아두이노로 통합(만능) 리모콘 만들기 3/3

아두이노로 통합(만능) 리모콘 만들기 3/3 이라 쓰고 왠지 이번 포스트에서 끝나지 않을 것 같은 느낌이 강하게 듭니다. 지난 포스트에서 아두이노 IR 센서를 이용하여 신호를 해킹하고 또 필요한

diy-dev-design.tistory.com

2020/05/26 - [DIY/Arduino] - 0.96 inch OLED 디스플레이 구동하기

 

0.96 inch OLED 디스플레이 구동하기

가끔 아두이노로 무엇인가를 만들어 보려고 하다보면 디스플레이가 있으면 하는 생각이 들때가 있습니다. 아두이노는 작은 컴퓨터이기는 하지만 모름지기 컴퓨터라 한다면 입력장치 - 중앙처��

diy-dev-design.tistory.com

2020/07/01 - [DIY] - 미니 테슬라코일 만들기 - 알리 DIY KIT

 

미니 테슬라코일 만들기 - 알리 DIY KIT

어렸을적 위대한 발명가, 과학자 하면 단연 손꼽는 일인자가 있었는데 누군가 물어본다면 100 이면 100 다 토마스 에디슨을 떠올릴 것입니다.. 그런데 커보니 에디슨은 발명가나 과학자라기보다��

diy-dev-design.tistory.com

 

만능 리모컨 만들기 최종 완성본은 아래쪽을 참고해 주세요

2022.08.16 - [DIY/Arduino] - [DIY] 아두이노로 통합(만능) 리모콘 만들기 (최종)

 

[DIY] 아두이노로 통합(만능) 리모콘 만들기 (최종)

만능 리모컨을 만들기로 해놓고 정말 많은 시간이 흘렀습니다. 2019.11.10 - [DIY/Arduino] - [DIY] 아두이노로 만능 (통합) 리모콘 만들기 1/3 2019.11.10 - [DIY/Arduino] - [DIY] 아두이노로 통합(만능) 리모콘..

diy-dev-design.tistory.com

 

반응형
반응형

아두이노는 정말 놀라운 하드웨어가 아닐수 없죠. 우리가 생각하는 이런건 자동으로 해주는거 없나? 이런게 자동으로 되면 좋을텐데... 이런걸 왜 자동으로 안하는거야?? 같은 대부분의 자동화 장치, 기계장치를 원하면 직접 만드는것을 가능하게 끔 만드는 것을 아두이노는 가능하게 합니다.

사실 아주 많은 부분에서 자동화 또는 그런 류의 장치들은 간단한 로직만을 필요로 합니다. 실제 상용화된 제품에서는 보다 많은 기능과 안정성, 수익성, 또 제품화 되기 위한 여러가지 복합적인 문제들을 안고 있기 때문에 제품화 되지 않는 것일 뿐이죠.

오늘 포스트에서 올릴 내용은 바로 "아두이노를 이용한 수경재배" 에 대한 내용입니다.

회사에서 DIY 동호회를 운영중인데 이번 프로젝트가 바로 수경재배가 되시겠습니다.

수경재배를 하기 위하여 알아야 할 것들이 많이 있는데 사실 원천적으로는 복잡하지 않습니다. 식물이 생장에 필요로 하는 물과 양분을 공급해주는것. 바로 이게 핵심인데 그 과정에서 발생되는 인간의 개입 정도를 좀 줄여보는게 이번 프로젝트의 핵심이라 할 수 있겠습니다.

양액은 인터넷에서 저렴하게 구입이 가능하므로 일정 농도로 희석된 양액을 통에 담아두고 수경 재배용 통에 항상 부족하지 않게 공급하는 장치를 만들어 볼 계획입니다.

실제 수경재배를 위하여는 양액의 Ph 농도와 전해질의 양의 측정이 매우 중요하지만 이번 프로젝트를 위하여 엄청난 수확량을 기대한다거나 하는 것이 아니기 때문에 우리는 자동으로 부족한 물 (양액)을 보충해 주어 인간의 개입을 최소화 하는데에 의의를 두기로 하였습니다.

뎃글, 공감 은 블로그 작성자에게 큰 힘이 된답니다. 
도움이 되었다 생각되시면 클릭!!  부탁드려요~

 

 

먼저 필요한 구조를 고민해 보았습니다.

- 식물이 자라기 위한 pot 이 필요할 것이고 pot을 잠기에하여 양액을 공급할 수 있는 양액통이 필요할 것입니다. 그리고 보조 양액통을 만들어 주 양액통에 양액이 부족해지면 보조 양액통으로 부터 양액을 보충해주는 역할을 하도록 만들어 볼 계획입니다. 그리고 양액통 내 용존 산소량을 확보하기 위하여 일정 수준의 공기 주입을 지속적으로 해주는 장치 정도를 만들어 볼 계획입니다.

필요한 재료는 아래와 같은데 이전에 소개했던 자동으로 식물에 물을 공급하는 장치와 거의 유사합니다.

  • 아두이노 나노
  • DRV8883 듀얼 모터 드라이버
  • 미니 DC 펌프 x 2 (양액 공급용, 공기 펌프용)
  • 수위 측정용 스위치 (물주기에 사용했던 센서는 사용불가... 나중에 설명하겠습니다)
    • 일반적인 리미트 스위치
  • 어항용 공돌 (다이소 500원 짜리)
  • 어항용 호스, 링거 호스
  • 양액통 2개,
  • 싱크대 수채구멍용 거름망

 

전체적으로 보면 아래와 같은 구조입니다. 배선은 제외한 그림이기는 한데요.

두개의 DC 모터를 컨트롤 하기 위한 모터 드라이버와 아두이노 나노, 중간에 수량 체크를 위한 스위치 (탁구공의 부력을 이용합니다) 그리고 각각의 식물의 재배를 위한 pot (하수구 거름망), 두개의 양액 통이죠.

 

 

스위치에 의하여 상단 박스의 수량이 부족하면 계속해서 우측 펌프가 물을 끌어 올릴 겁니다. 물이 차오르고 필요한 높이가 되면 탁구공을 매단 수량 체크용 스위치가 신호를 보낼것이고 해당 신호를 받아 필요한 양이 보충되게 되면  양액 공급펌프는 멈출것입니다.

좌측의 에어 공급 펌프는 계속해서 상단 양액내 공기를 뿜어 넣음으로써 산소량을 높이는 역할을 하게 됩니다.

반응형

이론적으로는 간단하죠?

 

네 실제로 간단 합니다. 아래와 같은 형태로 제작이 되었다고 보시면 됩니다. 

중간에 CDS 로 보이는 부품은 네..  CDS 가 맞습니다. CDS가 필요한 이유는 뒤에 설명을 드리도록 하겠습니다.

수경재배 양액 / 산소 공급장치 구조도

 

 

프로토 타입으로 제작한 이미지를 보시죠

탁구공을 접착하여 제작한 부력스위치

탁구공의 부력이 스위치를 작동시키이에 약간 부족함이 있어 날개 길이를 조금 연장하였습니다. 

 

탁구공을 이용하여 제작한 부력스위치를 장착한모습
부력스위치와 워터펌프 테스트 중인 모습

 

 

양액내 산소공급을 위한 공돌, 다이소에서 500원에 구입하였다.

 

 

씨앗으로 부터 시작된 모종. 동그라미 친 두개의 모종이 재배용으로 결정 되었다.

 

통에 양액을 채우고 모종도 pot 에 옮겨 담아 준뒤 시스템을 가동하였습니다.

물과 공기가 예상데로 잘 공급이 되는 것을 확인하였으나 모터 구동시 소음이 좀 있는 편이고 에어의 경우 하루종일 동작하게 되어 있어 모터에 열이 좀 나는 것이 문제가 될 것 같았습니다. 워터 쪽 모터도 물을 끌어올려야하는 상황이다보니 부하가 걸려 모터에서 열이 많이 발생되었습니다. 

기본적인 수경재배 시스템이 완성된 모습

나중에 브래드보드 대신 만능기판에 보드를 옮길 계획인데 해당 작업이 완료되면 별도의 포스팅을 진행할 예정입니다.

 

그리고 위에 잠깐 소음에 대하여 언급을 했었는데요. 아무래도 사무실에서 키우는 것이다 보니 소음으로 인한 민원이 바로 올라오더군요. 시끄럽다고 꺼달라고 하더라구요. - -;;

 

그래서 긴급 조치로 CDS 를 하나 달아서 사무실 조명이 모두 꺼지면 동작하도록 간단한 기능을 추가하였습니다. 이제 아무도 없는 밤에 열심히 산소를 공급해주게 될겁니다.

빨간 동그라미 부분이 CDS 되시겠다.

 

앞으로 진행할 내용은 아래와 같습니다.

  • 만능기판에 기자재 납땜으로 부착
  • 현재 상태는 보기에 좋지 않으므로 케이스를 제작
  • 식물이 자라는것을 타임랩스로 보여주기 위한 카메라 장착 (안쓰는 블랙박스 활용)

준비가 되면 포스팅을 하도록 하겠습니다.

 

아두이노 소스코드는 아래를 참고해 주세요.


const int waterLevelCheckerSW = 2;
const int airPumpSpeedControlPin = A3;
const int motor_waterpump = 9; // pin 9 (D9) is waterpump action
const int motor_airpump = 10; // pin 10 (D10) is waterpump action
const int lightSensor_pin = A4;

int airPumpSpeed = 0;
int buttonState = 0;
int count = 0;
int lightTotal = 0;

void setup() {

  pinMode(13, OUTPUT); // status LED
  pinMode(motor_waterpump, OUTPUT);  // water pump pin
  pinMode(motor_airpump, OUTPUT); // air pump pin
  pinMode(waterLevelCheckerSW, INPUT_PULLUP); // water level checker switch pin
  
  Serial.begin(9600);
}


void loop() {

  count++;
  
  //air pump speed control
  airPumpSpeed = analogRead(airPumpSpeedControlPin); // 
  int pumpSpeed = map(airPumpSpeed, 0, 1023, 0, 128);
  
  
  int lightValue = analogRead(lightSensor_pin);
  
  lightTotal += lightValue;
  
  if (count == 10)
  {
    // the air pump run when dark
    if (lightTotal/10 < 1 )
    {
      analogWrite(motor_airpump, pumpSpeed);
    }else{      
      analogWrite(motor_airpump, 0);
    }
    lightTotal = 0;
    count = 0;
  }
  
  
  Serial.print(airPumpSpeed);
  Serial.print("/");
  Serial.print(pumpSpeed);
  Serial.print("///");
  Serial.println(lightValue);
    
  // water pump control
  buttonState = digitalRead(waterLevelCheckerSW);
  if (buttonState == HIGH ) 
  { 
    digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW       
    // stop water pumping
    digitalWrite(motor_waterpump, LOW);

  } 
  else 
  {    
    digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)    
    // start water pumping when dark
    if (lightValue < 2 )
    {
      analogWrite(motor_waterpump, 128);           
    }
  }
  
  delay(10);              // wait for a second

}

 

 

 

끝으로 수위 측정 센서관련하여 

참고로 물주기에 사용하였던 수분 측정 센서(알리익스프레스에서 구입)의 경우 양극단에서 흐르는 전류에 의해 물의 전기분해가 이루어 진 탓인지 센서 표면에 수많은 기포가 발생되었습니다.

센서 측정부에 발생된 기포. 전기분해가 이루어 졌다면 산소와 수소일 것으로 판단 된다.

결국 센서 표면중 한쪽면이 심하게 부식이 되며 양액을 변질 시키는 것을 보고 사용할 수 없겠다 판단 하였습니다.

하루정도 시간이 흐르자 양액의 색깔이 심하게 변하고 센서 표면도 변질 되었다.

결국 수위 측정은 위 사진에서 보여드린 탁구공을 이용하는 방법을 사용해야 했습니다.

토양의 수분 측정시에도 유사한 현상이 있어 결국 센서를 빼버렸었는데요. 해당 센서를 사용한다면 측정 주기를 매우 길게 하고 측정 시간을 짧게 여러번 하여 결과값을 사용하는 방식을 이용하는 것이 좋을 것으로 판단됩니다. 해당 센서를 이용하여 토양의 수분을 측정하려는 목적이시라면 연속해서 측정을 진행하지 마시고 일정 주기를 두고 실제 측정 시간은 짧게 측정을 하는 것이 센서의 수명에 도움이 될것으로 생각됩니다. 참고하세요~

 

뎃글, 공감 은 블로그 작성자에게 큰 힘이 된답니다. 
도움이 되었다 생각되시면 클릭!!  부탁드려요~

 

 

참고로 이전에 사용하였던 해당 센서를 이용한 토양 수분 측정을 통한 자동으로 물주는 시스템 관련 포스트

https://diy-dev-design.tistory.com/16

 

아두이노를 이용한 간단한 화분 자동 물주기 시스템

얼마뒤면 베트남으로 가족 여행을 떠날 예정입니다. 7박이나 하고 올 예정이므로 집을 비우기 전 준비해야 할 것들이 많습니다. 이것저것 여행준비를 하던 찰나 베란다에 내어 둔 화분이 걱정이 되었습니다. 출발..

diy-dev-design.tistory.com

2020/06/29 - [DIY/Arduino] - C# 에서 아두이노로 시리얼 통신 하기

 

C# 에서 아두이노로 시리얼 통신 하기

카테고리를 c# 으로 해야 할지 Arduino 로 해야할지 조금 고민이 되는 포스트 입니다. 음.... arduino 로 하는게 좋겠네요. 따지고 보면 C# 으로 만든 어플이 중요한게 아니라 아두에노에서 시리얼 통신

diy-dev-design.tistory.com

 

반응형
반응형

얼마뒤면 베트남으로 가족 여행을 떠날 예정입니다. 7박이나 하고 올 예정이므로 집을 비우기 전 준비해야 할 것들이 많습니다. 이것저것 여행준비를 하던 찰나 베란다에 내어 둔 화분이 걱정이 되었습니다. 출발하기 전에 물을 듬뿍 주고 간들 요즘처럼 더운 날씨에 화분이 마르는건 금방이지요. 아마 이틀이면 마르지 않을까 싶습니다. 7일뒤에 돌아왔을때 딸내미가 애지중지 물을 주던 나팔꽃이 매말라 버릴까 걱정이 되었습니다. 그래서 부랴부랴 있는 부품을 찾아 모아 간단하게 자동으로 물을 주는 시스템을 만들어 보았습니다.

뎃글, 공감 은 블로그 작성자에게 큰 힘이 된답니다. 
도움이 되었다 생각되시면 클릭!!  부탁드려요~

 

 

제 작업실에서 주워 모은 부품은 아래와 같습니다.

 

사용된 부품 리스트

토양 수분 측정 센서 

초소형 DC 모터 펌프 (3V)

아두이노 나노

drv8833 DC 모터 드라이버

링거 줄 

T 형 분배 소켓

소형 방열판 (전자제품 분해하면서 떼어냈던 것)

대형 식초 병 (코스트코에서 샀던 식초, 4L )

 

화분 물주기 시스템을 만들기 위하여 필요한 부품들

 

집에 이런것들이 왜 있나 싶지만 저처럼 DIY 를 좋아하는 사람이라면 알리익스프레스 눈팅하면서 하나둘 사모은 부품들이 있게 마련입니다. 토양 수분 측정 센서는 수위 센서라고도 하는데 언젠가 한번은 사용하겠지 싶어 사두었고 DC 모터 펌프는 물고기 수조에 공기 공급을 위하여 구입했던 부품이었습니다. DRV8833 모터 드라이버가 좀 특이한데 RC 카 만들어 보겠다면서 구입했던 보드였습니다. 

 

원리는 간단합니다.

 

토양 수분 센서를 통해 토양의 습도를 측정한뒤 일정 값 미만으로 내려가게 되면 아두이노는 DC 모터드라이버로 모터를 동작시키도록 신호를 보냅니다. 모터가 동작되면 펌프는 물을 끌어올려 화분에 뿌리게 됩니다. 화분의 흙이 일정 수준 이상 젖게 되면 센서 값에 의해 모터가 멈추게 되는 방식 입니다. 

 

이렇게 해두면 며칠을 비워도 문제가 없을 것입니다. 물론 물통이 4L 이므로 그 물이 다 소진될때 까지 비우면 안되겠지만요.

 

배선은 아래와 같이 하면 됩니다.

 

토양 수분 센서

  • GND : GND
  • VCC : VCC (5V)
  • AO : 아두이노 A0 핀
  • DO : 연결 안함

 

DRV8833

  • GND : GND
  • VCC : VCC (5V)
  • IN1 : 아두이노 9번 핀 (PWM 이 출력되지요)
  • IN2 : GND (코드에서는 10번에 연결하는것이 맞지만 최종 적으로 한쪽 방향으로만 돌릴꺼라서 그냥 GND 에 연결)
  • OUT1 : motor +
  • OUT2 : motor -

그림은 나중에 다시 올리도록 하겠습니다.

 

 

 

먼저 간단하게 아두이노 코드를 작성해 보았습니다. 별도의 라이브러리 없이 간단히 작성이 가능합니다.

 

int soilPin = A0;


void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);

  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
    int value = analogRead(soilPin);

    if (value > 800)
    {
      analogWrite(9, 128);
      digitalWrite(10, LOW);
    }else{
      digitalWrite(9, LOW);
      digitalWrite(10, LOW);
    
    }
    
    Serial.print("read sensor value : ");
    Serial.println(value);

    delay(600000); // 10분에 한번 체크하는 것으로 수정하였습니다.
}

토양 센서로 부터 받는 신호는 A0 번 핀을 통해 전달받으며 코드상에서는 analogRead 라는 명령어로 입력 받습니다. 테스트를 해보니 해당 센서는 흙속의 수분에 의해 전기 전도가 이루어 지고 이 정도를 파악하는 센서인데요. 공기중에 노출시킨상태, 즉 토양이 완전히 마른상태에서는 1023 의 값을 출력하고요, 물에 담갔을 때, 즉 완전히 젖은 상태에서는 200 미만의 값이 출력이 되는 것을 확인하였습니다. (아마 물 속의 전해질의 농도에 따라서 최소 값은 차이가 있을 것 같았습니다)

 

저는 완전히 마를때 까지 둘 것이 아니었으므로 800 이라는 값보다 커지게 되면 모터를 동작하도록 한 것이죠.

 

DRV8833 으로는 PWM 신호를 보내서 모터의 속도를 제어할 수 있습니다. 두개의 모터를 각각 제어할 수 있는데요 IN1, IN2 를 통해 하나의 모터를, IN3 IN4 를 통해 다른 하나의 모터를 제어할 수 있습니다. 4개의 모터에 대하여 정방향, 역방향으로 각각 속도를 제어하기 위하여는 4개의 PWM 이 필요한데 만약 저처럼 단방향으로만 제어한다면 모터당 1개의 PWM 만 있으면됩니다.

 

IN1 : PWM / IN2 : GND --> 정방향 회전 (속도는 PWM에 따라)

IN1 : GND / IN2 : PWM --> 역방향 회전 (속도는 PWM에 따라)

IN1 : GND / IN2 : GND --> 정지

 

이런식으로 제어를 하시면 되겠습니다. 

 

위에 코드를 보시면 하나의 핀을 PWM 출력도 하고 GND 로 하기도 하는 코드가 있습니다.

 

저는 5V 를 전원으로 사용하고 모터의 정격 전압이 3V 이므로 PWM 은 안전빵으로 128을 출력하였습니다. 실제 모터에 몇 V 가 인가되는지는 확인하지는 않았으나 별다른 무리 없이 잘 동작 되었습니다.

참고로 DRV8833 으로 입력하는 전원은 모터가 워낙 작고 저전력을 사용하므로 그냥 아두이노의 5V 출력을 이용했습니다. (참고로 모터 구동은 왠만하면 별도의 전원을 사용하는 것이 좋고 노이즈 차단을 해주는 것도 좋습니다)

 

 

그럼 설치가 완료된 사진을 보시겠습니다

 

물주기 시스템 장착된 작은 화분, 나팔꽃과 수박, 참외가 자라고 있다.

 

알리익스프레스에서 2000 원 정도 주고 구입한 작은 펌프. N20 모터가 달려있다.

동작해보니 모터에서 열이 조금 나는 것이 느껴져 방열판을 하나 달아 주었습니다. 버리는 전자제품을 뜯어 보면 저런 방열판이 흔히 발견되므로 보는 족족 적출하여 보관하는 습관을 가집시다.

 

토양 수분 센서를 화분에 꼽아 주었다.
좌측이 아두이노 나노, 가운데가 DRV8833, 우측은 토양 수분 센서와 연결된 보드
전체 모습이다. 좀 지저분 하지만 1주일 뒤에 철거 할 예정이므로 적당히...

이렇게 해서 설치가 모두 완료 되었습니다. 내일 모레 출발 전에 물은 다시 한통 가득 채워놓을 예정입니다.

설치된 모습이 좀 지저분 하기는 하지만 1주일 뒤 귀국하면 다시 치울 예정이므로 적당히 저렇게 두기로 합니다. 물도 물이지만 18650 배터리 2개를 직렬로 연결하여 두었는데 과연 1주일을 버틸지는 의문입니다. 내일이라도 아답터를 연결해 놓는것이 좋을까요... 

 

암튼 아주 간단하게 자동으로 화분이 마르지 않도록 물을 주는 시스템을 만들어 보았습니다.

 

사실 시골에서 밭농사라도 한다면 밭의 수분 측정 및 자동으로 물 주는 시스템은 요긴하게 사용될수 있는 시스템입니다. 작은 태양광 전지, NRF24L01 같은 무선 송수신 장치, 스프링클러 등을 이용하면 시골의 밭에서 자동으로 경작지에 물을 줄 수 있는 시스템을 손쉽게 만들 수 있을 것 입니다. 간단한 노력으로 쓸모있는 스마트 팜을 만들어 가실 수 있는 것이죠.

 

이상 자동으로 화분에 물주기 장치 만들기였습니다.

 

뎃글, 공감 은 블로그 작성자에게 큰 힘이 된답니다. 
도움이 되었다 생각되시면 클릭!!  부탁드려요~

 

 

궁금하신 것은 뎃글로~ 재밌으셨거나 도움이 되셨으면 공감 부탁드립니다.

 

이 시스템은 이후 수경재배용 장치를 만드는데 거의 동일하게 사용되었습니다.

https://diy-dev-design.tistory.com/60

 

[DIY] 아두이노를 이용한 수경재배 시스템

아두이노는 정말 놀라운 하드웨어가 아닐수 없죠. 우리가 생각하는 이런건 자동으로 해주는거 없나? 이런게 자동으로 되면 좋을텐데... 이런걸 왜 자동으로 안하는거야?? 같은 대부분의 자동화 장치, 기계장치를..

diy-dev-design.tistory.com

 

20191206 내용 추가

저와 동일한 센서 또는 유사한 센서를 이용하시는 분들께 안내 말씀을 드립니다.

해당 센서를 이용하였을 경우 센서의 표면의 부식이 상당히 빠르게 진행이 됩니다. 진작에 올렸어야 하는데 깜박하고 있었네요. 

아마 한쪽 핀에서 다른쪽 핀으로 전기 신호를 보내서 도착하는 전류량을 측정하는 듯한데요. 이런 과정에서 금속 표면이 부식이 되는 문제가 있었습니다. 제 생각으로는 센서로 보내는 신호를 상시 측정 하지 마시고 한시간에 한번 또는 하루에 한번 정도씩 측정 주기를 늘려주어 절대적인 전류 측정 시간을 줄여주는 것이 좋을 것 같습니다.

토양의 수분이 매순간 측정해야 할 만큼 빠르게 변하는 요소는 아니기에 측정의 인터벌을 길게 잡아주면 센서의 부식을 막고 좀더 오래 사용이 가능할 것으로 판단 됩니다.

 

 

 

자동으로 텃밭(화단) 물주기 장치

여러분들 집에는 작은 텃밭 하나씩 있으신가요? 저는 없습니다만 처갓집에는 작은 비닐 하우스와 텃밭이 있습니다. 요즘처럼 날씨가 가물거나 하우스 안에 텃밭을 가지고 계신 분들은 매일매일

diy-dev-design.tistory.com

 

 

[DIY] micro:bit - 병아리 부화기 만들어 보기 (초딩도 가능)

딸내미 : "아빠! 할머니 집에서 가져오는 계란은 유정란이야?" 나 : "그럼~. 암탉도 있고 수탉도 있으니 유정란이겠지?" 딸내미 : "그럼 내가 저거 품으면 병아리가 나오는 거야?" 나 : "흠... 아니....

diy-dev-design.tistory.com

 

 

0.96 inch OLED 디스플레이 구동하기

가끔 아두이노로 무엇인가를 만들어 보려고 하다보면 디스플레이가 있으면 하는 생각이 들때가 있습니다. 아두이노는 작은 컴퓨터이기는 하지만 모름지기 컴퓨터라 한다면 입력장치 - 중앙처��

diy-dev-design.tistory.com

 

 

미니 테슬라코일 만들기 - 알리 DIY KIT

어렸을적 위대한 발명가, 과학자 하면 단연 손꼽는 일인자가 있었는데 누군가 물어본다면 100 이면 100 다 토마스 에디슨을 떠올릴 것입니다.. 그런데 커보니 에디슨은 발명가나 과학자라기보다��

diy-dev-design.tistory.com

 

 

Arduino(아두이노) 무작정 시작하기

아두이노, Arduino 여기저기서 많이 들었을 겁니다. 이걸 해야 된다는 말이 귀에 못이 박히도록 이야기 합니다. 대충 뭔지는 알겠는데 개발자도 아닌 내가 과연 이걸로 뭘 할 수 있을까 싶기도 하��

diy-dev-design.tistory.com

 

 

C# 에서 아두이노로 시리얼 통신 하기

카테고리를 c# 으로 해야 할지 Arduino 로 해야할지 조금 고민이 되는 포스트 입니다. 음.... arduino 로 하는게 좋겠네요. 따지고 보면 C# 으로 만든 어플이 중요한게 아니라 아두에노에서 시리얼 통신

diy-dev-design.tistory.com

2019/11/10 - [DIY/Arduino] - [DIY] 아두이노로 만능 (통합) 리모콘 만들기 1/3

2019/11/10 - [DIY/Arduino] - [DIY] 아두이노로 통합(만능) 리모콘 만들기 2/3

2020/06/17 - [DIY/Arduino] - [DIY] 아두이노로 통합(만능) 리모콘 만들기 3/3

반응형
반응형

아도이노는 DIY 인 들에게 없어서는 안될 단물 같은 장치이다. 물론 요즘은 프로그래밍 교육용으로도 사용되고 미디어 아티스트들에게도 자주 사용되는 놀라운 장치이다. 간단한 코딩 만으로 하드웨어 지식이 거의 없더라고 다양한 레퍼런스를 이용하여 손쉽게 무엇인가 로지컬하게 동작하는 장치를 만들어 낼 수 있기 때문이다.

 

이번에 도전하게 된 것은 Arduino Nano 를 이용하여 RC 카 구동을 위한 무선 송수신기를 제작하는 것이다.

 

보통은 RC 카를 구성하는 송신기 (트랜스미터, Transmitter) 와 수신기 (리시버, receiver) 를 세트로 구입하여 모터와 ESC 에 연결하여 사용하는 것이 일반적이지만 직접 만들어 보는 것도 재미있을 것 같아 도전을 하게 되었다. RC 카의 차체와 모터 등은 기성품을 이용하여 가지고 놀기에도 좋아야 하며 송수신기 모듈만 아두이노를 이용하여 만드는 것을 목표로 하고 있다.

 

먼저 첫번째 시간으로 수신기 만들어 보자

 

완성된 2.4Ghz 무선 RC 수신기의 모습 (아두이노 나노 + NRF24L01)

 

필요한 부품

 

  • Arduino nano (atmega328p, 16MHz)
  • NRF24L01 SMD 버전
  • 10 uF 전해콘덴서
  • 점퍼용 선들
  • 모터 / 서보 / ESC 연결용 2핀, 3핀 소켓 (만능기판 장착용, 2.54mm)
  • 만능기판(양면) 8 * 24
  • SMD to DIP Adapter socket (1.27mm to 2.54mm, SOP14 규격) : 10개에 1 달러 미만 

아두이노 나노에 대한 설명은 넣어두고 무선 연동을 위한 NRF24L01 보드가 필요하다.

해당 보드는 알리익스프레스에서 개당 1000원 미만으로 구입할 수 있다. 보통 무선 연동은 트랜스미터와 리시버가 각각 역할을 분담하는 형태로 모듈이 만들어져 있는데 이 제품은 하나의 제품이 송신과 수신을 할수 있는 제품으로 일명 트랜시버 라고 부르기도 한다. 2.4GHz 대역을 사용하여 신호의 정확도가 좋다고 한다.

이번 DIY 를 위하여 SMD 타입을 구입하였는데 일반 보드는 4x2 형태의 핀 배열을 가지고 있어 브래드 보드를 통한 테스트가 쉽지 않은 반면 SMD 타입은 1열로 핀이 배열되어 있어 약간의 꼼수를 부리면 사용이 간편한 장점이 있다.

 

NRF24L01 보드에 꼭 필요한 부품이 있으니 바로 10uF 전해 콘덴서

 

NRF24L01 보드에 꼭 필요한 부품이 있으니 바로 10uF 전해 콘덴서이다. 처음 이 프로젝트를 도전하였을때 상당히 많은 실패를 경험했는데 결과적으로는 이 전해콘덴서를 연결하지 않은 부분과 정확한 3.3V 를 인가하지 않은데서 기인했다고 생각된다. 지금은 단 한번의 실패도 없이 잘되는 것을 생각하면 정말 어의가 없지만 거의 2개월 정도를 이 문제 해결을위해 소모하였다. 이 글을 보는 당신도 도전할 생각이 있다면 반드시 10uF전해 콘덴서를 미리 준비해놓자. 47uf 도 100uf 도 1uf 도 아닌 반드시 10 uf 로 준비하자. 알리에서 사면 몇푼 하지도 않을 뿐더러 무료배송인 판매자도 많다. 전해 콘데서는 극성이 있는 제품이다. 띠 무늬가 있는 부분이 - 극 (GND) 다른 부분이 아두이노의 3.3V 또는 NRF24L01 의 +부분에 연결이 되어 있어야 한다.

 

10 uf 전해 콘젠서를 3.3v 와 GND 에 연결한 모습

사진에 제일 위층에 얹어진 검정색 PCB 보드가 NRF24L01 보드이다. 뒤쪽에 초록색으로 보여지는 보드는 작업의 편의 성을 위하여 붙인 것으로 원래는 14 pin Attiny84 smd 타입을 일반 만능기판에 연결할 수 있도록 사용하는 아답터 보드인데 이것을 반을 자르면 7핀을 이용하는 NRF24L01 보드의 확장용 보드로 사용이 가능할 것 같아 납땜하여 붙여서 사용해보았고 아주 만족스러운 호환성을 보여주었다.

 

아래와 같은 형태의 보드인데 반을 자른 후 NRF24L01 칩을 납땜하여 붙여주면 1열로 된 핀 배열 구성이 가능하게 되어 브래드 보드에서 바로 테스트가 가능하다. 참고로 NRF4L01 은 총 8개의 연결핀이 있는데 위에서 봤을때 가장 오른쪽 핀은 사용할 필요가 없는 핀 이므로 아래 아답터 보드를 반으로 자른후 좌측부터 7개의 단자와 납땜을해서 붙이면 정확하게 딱 맞는 결과물을 얻을 수 있다.

앞뒤가 각각 규격으로 제작이 됨. NRF24L01 은 좌측(앞) 규격에 부착

 

 

NRF 24L01 SMD 타입과 DIP 타입 이미지 추가

 

NRF24L01 을 보드에 장착한 이미지 추가

 

 

아래 그림은 NRF24L01+ SMD 의 핀 배열임. 참고하시길

각각의 핀은 아두이노 나노와 아래와 같이 연결이 된다.

NRF24L01 + ////		Arduino Nano

3.3V 		-> 		3.3V
GND 		-> 		GND
CE 		-> 		8
CSN 		-> 		7
SCK 		-> 		13
MOSI 		-> 		11
MISO 		-> 		12

중요한 것은 위에도 언급한 것과 같이 우측의 아두이노 3.3V 와 GND 사이에 10uf 전해 캐패시터를 연결해야 한다는 점 이다.

 

필자는 어려 차례 시도해 보았기 때문에 한번에 잘 되었지만 본 블로그를 보고 처음 따라 하는 분은 브래드 보드에 우선 테스트 해보시기를 권장한다.

 

추가로 방향 조정용 서보모터와 모터 속도 컨트롤용, 그리고 2단 변속기를 사용할 것이므로 변속기용 서보는 아래와 같이 각각 핀을 지정하였다.

servoPin = 9; 			//steering servo
speedServoPin = 10; 	// gear high / low
accelloPin = 6; 		// main motor (ESC)

3 pin 소켓을 3개 연결해야 하는데. 위와 같이 핀에 연결해주면 된다.

소켓의 3 pin 은 각각 신호(흰색 또는 노랑) , V+(빨강) , GND(검정 또는 갈색) 순으로 연결 해주면 된다. 여기서 신호에 해당되는 부분이 위에 정의한 핀과 연결이 되는 것임. 대부분의 3핀 선은 위와 같은 색상으로 이루어져 있으니 참고할 것.

 

 

납땜이 끝난 보드 아래쪽을 보면 아래와 같이 엉망 징창임.

 

지저분 하지만 어쩔수 없다. 똥 손의 한계 입니다.

 

코드는 나중에 트렌스미터 부분 설명이 완료 되면 한번에 올려보겠다.

뎃글, 공감 은 블로그 작성자에게 큰 힘이 된답니다. 
도움이 되었다 생각되시면 클릭!!  부탁드려요~

 

이만.

 

 

 

 

반응형

+ Recent posts