#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);
}
}