#include <Wire.h>                // i2C 통신을 위한 라이브러리
#include <LiquidCrystal_I2C.h>   // LCD 1602 I2C용 라이브러리
#include <Adafruit_NeoPixel.h>   //네오픽셀 라이브러리 
#include "DHT.h"                 //온습도 센서 라이브러리
#define DHTPIN A0                //DHT11센서의 데이터핀은 A0핀으로 지정
#define DHTTYPE DHT11            //DHT센서중 DHT11을 사용

DHT dht(DHTPIN, DHTTYPE);        //DHT센서를 사용할거고 변수명은 dht이다.(DHT핀은 A0, DHT타입은 DHT11) 
Adafruit_NeoPixel RGB_LED = Adafruit_NeoPixel(12, 9, NEO_GRB); //네오픽셀을 사용할것이고 네오픽셀 갯수는 12개 데이터핀은 9번핀을 사용
LiquidCrystal_I2C lcd(0x27, 16, 2);   // LCD의 주소는 0x27이고 16열 2행짜리 LCD를 사용할것이다.

int AA = 5;      //모터드라이버
int AB = 4;      //모터드라이버
int BA = 6;      //모터드라이버
int BB = 7;      //모터드라이버
int hum = 0;     //습도값 저장
int temp = 0;    //온도값 저장
int soil = 0;    //토양수분값 저장
int max_hum = 70;   //최대 습도값
int max_temp = 35;  //최대 온도값
int min_temp = 20;  //최소 온도값
int nomal_soil = 10;//기준 토양수분값


void setup() {
  pinMode(AA,OUTPUT);
  pinMode(AB,OUTPUT);
  pinMode(BA,OUTPUT);
  pinMode(BB,OUTPUT);
  Serial.begin(9600);   //시리얼 통신
  dht.begin();          //DHT사용
  lcd.init();           //LCD초기화
  lcd.backlight();      //LCD백라이트 켬

  RGB_LED.begin();      //네오픽셀 사용
  RGB_LED.setBrightness(255);//네오픽셀 밝기 255(0~255까지 사용가능)
}

void loop() {
  hum = dht.readHumidity();                 //온습도센서(DHT11)에서 읽어온 습도값을 변수 hum에 저장
  temp = dht.readTemperature();             //온습도센서(DHT11)에서 읽어온 온도값을 변수 temp에 저장
  Serial.println(analogRead(A1));           //토양수분센서의 값 읽어서 시리얼모니터로 출력(토양수분센서의 데이터값 보기)
  soil = map(analogRead(A1),1023,0,0,100);  //토양수분센서의 값이 너무 커서 map함수로 데이터 값을 줄인다.
  //흙이 너무 말라있을때 LCD에 경고표시
  
  //흙의 수분이 적당할때
 
  //현재온도 > 최대온도 - 너무 뜨거울때 빨간색LED

  //현재온도 < 최소 온도 - 너무 추울때 파란색LED
 
  //현재습도 > 최대 습도 - 너무 습할때 초록색LED
  
  //생물이 자라기 적합할때    //파랑 50% / 빨강 50% - 보라색
 
}

  /*
  fan을 켜기 위한 코드
  
  digitalWrite(AA,HIGH);
  digitalWrite(AB,LOW);
  digitalWrite(BA,HIGH);
  digitalWrite(BB,LOW);

  fan을 끄기 위한 코드
  
  digitalWrite(AA,LOW);
  digitalWrite(AB,LOW);
  digitalWrite(BA,LOW);
  digitalWrite(BB,LOW);

  네오픽셀을 켜기 위한 코드

  RGB_Color(RGB_LED.Color(빨간색 LED밝기,초록색 LED밝기,파란색 LED밝기),10);
  예시)
  RGB_Color(RGB_LED.Color(255,0,0),10); - 빨간색만 255밝기(100%밝기)로 켬
  RGB_Color(RGB_LED.Color(0,255,0),10); - 초록색만 255밝기(100%밝기)로 켬
  RGB_Color(RGB_LED.Color(0,0,255),10); - 파란색만 255밝기(100%밝기)로 켬
  
*/

void RGB_Color(float c, int wait)
{
  for(int i = 0 ; i<RGB_LED.numPixels(); i++)
  {
    RGB_LED.setPixelColor(i,c);
    RGB_LED.show();
    delay(wait);
  }
}

0 Reviews
댓글작성