반응형

 릴리패드LilyPAD#3】 우리집 휴지통 스마트하게 바꿔보자! (Plus 영상설명!)

 

 요즘 대세, 샤오미 휴지통 부러워 하지 맙시다!

그냥 여기서 뚝딱 한 번 만들어 보죠~  ^^;;

 

 우선, 고려사항으로 센서는 초음파센서(HC-SR04)를 이용해 보겠습니다.  그리고 메인보드는 아두이노 우노, 미니, 프로미니, 모두다 사용할 수 있지만, 작으면서도 얇은 릴리패드 328을 한 번 사용해보겠습니다.  그리고, 안드로이드 스마트폰이나  각종 충전단자 규격으로 많이 사용되는 마이크로 5핀을 사용하여,  충전 가능한 휴지통으로 구성해보겠습니다.

 

첨엔, 18650충전지를 두개 사용하였으나,  장착모듈의 사이즈를 작게 하기 위해 18650 하나만(3.7V) 사용하게 되었고, 결과적으로 3.7V의 낮은 전압에서도 동작되는 릴리패드 선택과 딱 맞아 떨어졌네요. ^^

아두이노 릴리패드를 이용한 스마트휴지통!

 

▶ 선수학습 :

    1. 릴리패드종류와 특징 소개  ☜  클릭!

    2. 릴리패드 처음사용 설명서(영상포함)  ☜  클릭!

    3. 18650 충전지와 TP-4056 충전모듈 안내  ☜  클릭!

 

▶ 영상으로 보고 따라하기 :

(아래 영상 클릭하셔서 1080p 고화질로 보세요~)

 

▶ 제작준비 :

1. 아두이노 코드 전송을 위해 아래와 같은 PC와의 UART통신용 'FT232RL' 과 같은 모듈을 준비한다.
(릴리패드USB 버전은 모듈 필요없이 직접 연결가능함)

FT232RL 모듈
릴리패드 FTDI Basic

    -  위 FTDI 모듈의 드라이버 다운로드와 설치에 대한 상세안내는 선수학습 2번 참조할 것

 

▶ 부품 목록 :

1. 아두이노 릴리패드328 (릴리패드USB, 아두이노 우노, 미니, 프로미니 등등도 가능함)

2. 초음파 센서 (HC-SR04)

3. 서보모터(SG-90 혹은 다른 서보모터 모두 가능)

4. 18650 충전지  (1구 홀더 포함)

5. TP-4056 충전 모듈  ( 위 , 선수학습 참조)

6. 스위치 (3P 슬라이드 스위치, 토글 스위치, 등등 가능)

7. 점퍼케이블(암↔수 케이블) & 연결용 전선

8. 뚜껑 오픈용 막대 (문구점 등에서 판매하는 아이스바 스틱등을 이용하면 됨)

9. 휴지통 (휴지통의 모양에 따라 작업구조가 달라지니 신중하게 선택 할 것)

 

▶ 회로 연결도 :

 

▶ 아두이노 코드(Arduino code) :

 

/*  스마트 휴지통 with LilyPAD                 */
/*  by RasINO IOT  rasino.tistory.com/285    */ 
#include <Servo.h>   // 서보 라이브러리를 포함
#define servoPin 5     // 서보 모터핀연결 포트 지정
Servo servo;      // 'servo' 라는 이름으로 선언
int angle=0;      // 서보 각도(위치)변수 선언과 초기화
int distance;     // 거리값 저장을 위한 변수 선언
int triggerPin = 6;
int echoPin = 7;

void setup() {
  Serial.begin(9600); 
  servo.attach(servoPin);       // 서보모터 연결된 아두이노 포트 지정  
  pinMode(triggerPin, OUTPUT);  // 트리거 핀을 출력으로 설정
  pinMode(echoPin, INPUT);       // 에코 핀을 입력으로 설정
}

void loop() {
// ----------- 초음파 거리 측정용 신호 발생부분 -----------------------  
  digitalWrite(triggerPin, LOW);  // 트리거 핀 초기화
  digitalWrite(echoPin, LOW);     //  에코 핀 초기화
  delayMicroseconds(2);      
  digitalWrite(triggerPin, HIGH); // 트리거 핀으로 10 us의 펄스를 발생
  delayMicroseconds(10);
  digitalWrite(triggerPin, LOW); 
// ----------- 초음파 거리 계산부분 ----------------------------------
  distance = pulseIn(echoPin, HIGH)/58; //에코핀값을 거리값(cm)으로 계산후 저장
  Serial.println("Distance(cm) = " + String(distance)); //시리얼모니터로 확인
  delay(200);
// ----------------------------------------------------------------  
  if (distance < 20) {       // 물체(사람)가 20cm 이하로 감지되면,
    digitalWrite(13, HIGH);  // LED 켜기 (아두이노의 빌트인 LED)
    servo.write(178); // 서보모터 스팩에 따라 최대 각도로 변경(뚜껑 열기)
    delay(3000);      // 뚜껑이 열리고 3초 대기                
  }
  else {              // 20cm 이하가 아닌 모든 경우는 뚜껑 닫기
    digitalWrite(13, LOW);  
    servo.write(1);   // 서보모터의 각도를 변경한다 (뚜껑 닫기)
    delay(500);       // 뚜껑이 닫히는 최소한의 시간을 준다
  }
}

 

▶ 아두이노 코드 & 라리브러리 다운로드

 서보라이브러리는 아두이노 스케치 IDE의 라이브러리 검색에서 검색 후 설치 하여도 되고, 만약 라이브러리 에러가 난다면, 기존 설치된 servo.h 라이브러리를 모두 삭제 후, 아래 서보라이브러리를 zip파일 그대로 추가하면 됨.

UltraTrashCan.zip
0.00MB
Servo.zip
0.03MB

 

▶ 유의사항 

 

1.  휴지통 선택이 중요합니다.
 :  휴지통 모양에 따라서 부품을 장착하기 불편 할 수도 있으며, 서보모터를 스틱 바를 이용해서 뚜껑을 열지? 아니면, 직접 서보모터와 고정시켜서 열어야 할지? 가 달라지기 때문입니다. 

 

2. 릴리패드가 아닌 다른 아두이노 보드를 선택할 경우, 최하 5V 이상을 넣어줘야 하기 때문에,  18650리튬 배터리를 사용할경우 두 개를  직렬로 연결(7.4V)하여 5V 이상을 만들어 주어야 아두이노가 동작하게 됩니다.  (단, 프로미니는 3.3V 동작과 5V 동작하는 버전이 있음) ,  이렇게 되면, 18650이 제대로 충전이 되게 하려면 TP-4056모듈을 각각(2개) 연결 해줘야 합니다.

 

3. 센서 위치

 : 초음파 센서의 위치나 방향에 따라 쓰레기를 버리는데 편할 수도 있고 불편할 수 있으니 충분히 고민해보세요.   이 때 센서를 달아줄 구멍은 인두기를 사용하면 좀더 쉽게 뚫립니다.

 

4. 지금 제작한 스마트 휴지통은 쓰레기를 담는 몸체에는 아무것도 설치를 하지 않는 방식으로 제작되어서 비닐봉지를 넣고 쓰레기 처리를 하는 등등의 작업이 실생활에서 편하도록 디자인 되었습니다.  
따라서 이런점도 고려해서 제작해보세요~  ^^;;

 

▶ 스마트 휴지통 버전 2.0 에서는 스마트한 기능들을 더 집어 넣어 제작해 볼 예정입니다. 

감사합니다~

 

※ 주의! : 18650과 같은 리튭배터리는 직접적인 합선(쇼트)이나  회로내에서의 합선 등에 의해 불꽃과 소폭발의 가능성이 있는 제품이므로 다루실 때 충분한 주의와 사전지식이 필요하니 주의하시기 바랍니다.

반응형
반응형

【 아두이노Proj#4 아두이노 스마트 화분 만들기 Ver2 with FND

 

 지난시간 아두이노를 이용해 기본적인 스마트 화분을 만들어 보았다. 

이제 여기에 화분의 수분 상태를 한 눈에 알아 볼 수 있도록 디스플레이 장치를 하나 추가하려고 한다.

다만 저전력으로 돌아가도록 하기 위해 FND를 사용하여 심플하게 표시해보려고 한다.
토양습도센서 모듈에서 나오는 아날로그 출력 단자(AO) 값(0V~5V)을 아두이노의 아날로그 입력(A0~A6)단자 중 하나로 받게 되면 0~1023 사이값으로 입력 받게 될 것이다. (보드에서 10bit A/D변환 처리) 

 그럼 이 값을 FND로 표현하고자 하는데, 0~9 사이의 숫자 값으로 맵핑 시켜서 나타내면 될 것이다. 

그리고 통상적으로 숫자 0을 매우 건조,  9를 매우 습함으로 생각하고 맵핑 시키면 될 것이다.

  ex)  map(sensorVal, 0, 1023, 9, 0); 

 

그럼 지난 시간에 배운 스마트 화분 1편을 참고하여 아래 내용을 본다면 어렵지 않게 완성시켜 볼 수 있을 것이다.

 

▶ 선수 학습 :

   1. [아두이노 센서#34]  토양 센서( YL-38) Sensor 다루기  ☜ (클릭)

   2. [아두이노 기초#11] FND 구동실습 II (숫자 카운트하기)  ☜ (클릭) 

   2. [아두이노 프로젝트#1] 아두이노 스마트화분 만들기Ver1 ☜ (클릭) 

 

 토양습도센서 (YL-38 , YL-69) 세부 스팩

< 센서모듈과 수분탐침을 연결한 모습 >

 

 

 

 

 

 시중에 YL-38, YL-69 두 종류가 있다, 기능상의 차이는 없으며 핀배열이 조금 상이할 뿐이다. 여기서는 YL-38을 가지고 제작 하려고 한다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 워터 펌프 스팩

 

 

 

 

 

 

 

 

 

 

 

 

< 워터펌프용 튜브 : 지름 6mm, (외경6mm, 내경4mm) >

※ 위에 사용된 호수는 외경이 6 mm 이고 내경이 4mm 입니다. 그리고 펌프 출수구에 호수를 끼울때 호수를 출수구 바같으로 감싸듯 끼우게 되는데요, 펌프출수구의 외경이 7.4mm 됩니다. 이렇게 어느정도 역으로 크기 차이가 나야 호수가 수압에 의해 쉽게 빠지지 않습니다. 다만, 지금 정도의 차이에서, 끼워보니 상당히 빡빡했어요. 이럴때는 호수 내부에 물기를 살짝 묻혀서 끼워보면 조금 쉽게 끼워집니다.  ^^

 

▶ 실습 목표 :  

  1. [ 토양습도 센서에 대해 이해 할 수 있다. 

 2. [ 워터펌프에 대해 이해 할 수 있다. ]

 3. [ 토양 센서 값에 따라 펌프를 작동시켜 물공급 조절을 할 수 있다.]

 4. [ FND에 숫자를 표현 할 수 있다 ]

 5. [ FND에 습도 data를 숫자 0~9 값으로 맵핑해 출력 할 수 있다 ]

 

▶ 실습 회로도면 :
  (이미지 클릭하면 확대 가능)

 

 

※ 위 회로에 대해 모터 작동이 원활 하지 않을 수 있고, 장시간 사용시 아두이노 보드에 무리가 갈 수 있어 아래 처럼 NPN타입의 TR과 저항을 추가하여 보강하였다.  가급적이면 아래 회로를 참조하여 구성해주면 좋을 것이다.

(TR은 NPN 타입의 ' 2SC 9013 '을 사용하였으나,   TR 타입이 NPN타입 이면 어떤 것이든 동일하게 사용 가능하다. ) 

[ 위 회로에서 주의 하셔야 할 것은  아두이노 회로에서 주로 사용되는 TR의 경우(2SA, 2SC타입)  NPN형 타입은 PNP형 타입과 마찬가지로 핀의 순서가 있으니 주의 하셔야 합니다. 

우선, 도면에 사용된 NPN형 TR은 2SC9011 이며, 라벨이 적인 면의 왼쪽을 기준으로 핀 이름이 
1.   2SC9011 :  - E B C -  순서로 되어 있고, 

2.   2SC1815 :  - E C B - 순서로 되어 있으니 반드시 확인 후 연결하세요. 

또한, 이외의 TR을 사용할 경우 미니 테스터기 혹은 인터넷 검색으로 핀 순서를 확인하여 도면대로 연결하시면 문제 없이 동작 할 거예요. ]

 

[ 추가로 위 회로의 모터 연결 방식은 장시간 사용하기에는 좀 무리가 따르며, 전원을 별도로 넣어 줄 수 있는 릴레이 모듈이나, L298 모터 드라이버 모듈을 연결해서 사용하시는 걸 권장합니다. 조만간 보강된 회로의 업로드 버전도 올려 볼게요. ^^; ]   

 

 

▶ 실습 절차  : 

1.   부품을 준비하여 위와 같은 회로를 구성한다. 

2.   물펌프는 물통 속에 담겨진다. 따라서 물펌프의 전선이 빠져나오는 부분은 필요한 경우 글루건 등으로 보강처리 할 필요가 있다. 

3.  우선 본 실험처럼 작은 물통을 준비하고, 간이 화분을 준비해서 실험을 해 본 후 실제 화분에 설치해보면 좋을 것이다. 또한 필요한 경우 센서를 두 개 이상 설치할 수도 있고, 두개의 화분을 하나의 보드로 연결하여 관리 해 볼 수 있을 것이다.

4.  선수학습을 참고하여 FND를 다루는 법을 먼저 익혀보고, 아래 코드에서 처럼, 배열과 for 구문을 이용하여 FND를 좀더 세련되게 코딩하는 법에 대해 숙지 하면 좋다. 

5. 건조,습함의 정도를 FND로 0~9 사이 10단계 값으로 나타 내었으나, 좀더 정밀하게 0~F 사이값인 16단계로 표시해 볼 수 있다. 이를 개인연습 차원에서 해본다면 코딩능력 향상에 많이 도움이 될 것이다.

 

▶ 프로그램 코드 및 설명 : 

/* Auto Water Pot - 자동 물공급 화분 with FND */

#define A0Pin 0

int sensorVal = 0;

int pump = 13;

byte digits[10][7] = {

//  {a,b,c,d,e,f,g}   FND 핀 배열

    {1,1,1,1,1,1,0},      // 0을 출력

    {0,1,1,0,0,0,0},      // 1을 출력

    {1,1,0,1,1,0,1},      // 2를 출력

    {1,1,1,1,0,0,1},      // 3을 출력

    {0,1,1,0,0,1,1},      // 4를 출력

    {1,0,1,1,0,1,1},      // 5를 출력

    {0,0,1,1,1,1,1},      // 6을 출력

    {1,1,1,0,0,1,0},      // 7을 출력

    {1,1,1,1,1,1,1},      // 8을 출력

    {1,1,1,1,0,1,1},      // 9를 출력

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

 for (int i=2; i<9; i++) {

      pinMode(i,OUTPUT);    // 2~8번 포트 모두 출력 설정 

  }
}

 

void displayDigit(int num)   {    // FND 숫자표시 함수

  int pin = 2;
 
for (int i=0; i<7; i++)     {      
   
digitalWrite(pin+i, digits[num][i]);   

  }
}
void loop ( ) { 
 
int FNDVal=0;
 
sensorVal = analogRead(A0Pin);        // 토양센서값 읽어 저장

  Serial.print("Asensor = ");
 
Serial.println(sensorVal);                  // 0(습함) ~ 1023(건조)값 출력

  FNDVal = map(sensorVal,0,1023,9,0); // 습도값을 FND 출력값으로 맵핑
  // 매우습함 : 9,  매우건조 : 0

  displayDigit(FNDVal);                       // FND에 숫자를 표시한다.
 
// 습도 값에 따라 출력 처리 다르게 해줌

  Serial.print("FND Val =");

  Serial.println(FNDVal);

  if ( FNDVal >= 3) {   

    Serial.println(" Very Wet ! ");       

    digitalWrite(pump, LOW);      }

  //만약 건조하면 1초동안 펌프작동
  else if ( FNDVal < 3)  {

    Serial.println(" Very Dry ! ");   

    Serial.println("Pumping for 1 Second!");   

    digitalWrite(pump, HIGH);

    delay(1000);
 
}   
 
delay(3000);      //정보수집 시간(간격) 설정

}                             

 

▶ 실행 모니터링 영상 :  (시리얼 모니터)

(전체화면 보기로 보세요)

 

▶ 실행영상 :  

(전체화면 보기로 보세요)

아두이노로 스마트화분 만들기 with FND 디스플레이

(아래는 유튜브로 시청하기)

https://youtu.be/-kT_9XRJnxw

▶ 아두이노 파일다운 :

(다운받아서 압축을 풀어 사용하세요)

RasINO_AutoPotFND.zip
0.00MB

반응형