131
#define Relay4 5
void setup() {
lcd.init();
lcd.backlight();
Wire.begin();
Serial.begin(9600);
RS485_serial.begin(9600);
// กำหนดขาควบคมุ ของ RS485 เป็น Output
Blynk.begin(auth, ssid, pass, "blynk.iot-cm.com", 8080);
Serial.println(LINE.getVersion());
LINE.setToken(LINE_TOKEN);
Serial.println(" COMMUNICATIONS TO RS485 ");
timeClient.begin();
LINE.notify("Started VeggiNusery ");
timer.setInterval(1000, Set);
timer.setInterval(1000L, runStep);
timer.setInterval(1000L, Time_NTP);
pinMode(Relay1, OUTPUT);
pinMode(Relay2, OUTPUT);
pinMode(Relay3, OUTPUT);
pinMode(Relay4, OUTPUT);
digitalWrite(Relay1, LOW);
digitalWrite(Relay2, LOW);
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
while (WiFi.status() != WL_CONNECTED) {
132
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println("Initial Parameter >>> " + String(selectMode) + " | " +
String(SetTime2Notify));
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
Firebase.reconnectWiFi(true);
}
void SendRotine() {
if (timeClient.getMinutes() == 59 && timeClient.getSeconds() == 59 ) {
str2line = {"VeggiNusery : " + String(temp) + " | " + String(humi) + " | " +
String(luxs)};
LINE.notify(str2line);
Serial.println("line แจ้งเตอื น");
}
}
void Firebase_Update() {
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Temp01", AirTemp1);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Temp02", AirTemp2);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Temp03", AirTemp3);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Temp04", AirTemp4);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Temp05", AirTemp5);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Temp06", AirTemp6);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Temp07", AirTemp7);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Humidity1", AirHumi1);
133
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Humidity2", AirHumi2);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Humidity3", AirHumi3);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Humidity4", AirHumi4);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Humidity5", AirHumi5);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Humidity6", AirHumi6);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Ligh1", lux1);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Ligh2", lux2);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Ligh3", lux3);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/C02", co21);
}
void LCD_Display(void)
{
temp = (AirTemp1 + AirTemp2 + AirTemp3 + AirTemp4 + AirTemp5 + AirTemp6) / 6;
humi = (AirHumi1 + AirHumi2 + AirHumi3 + AirHumi4 + AirHumi5 + AirHumi6) / 6;
luxs = (lux1 + lux2 + lux3) / 3;
lcd.setCursor(0, 0);
lcd.print("Temp : ");
lcd.print(temp);
lcd.setCursor(13, 0);
lcd.print("C " );
lcd.setCursor(0, 1);
lcd.print("Humi : ");
lcd.print(humi);
lcd.setCursor(13, 1);
lcd.print("% ");
lcd.setCursor(0, 2);
lcd.print("Lux : ");
lcd.print(luxs);
134
lcd.print(" % ");
lcd.setCursor(0, 3);
lcd.print("Co2 : ");
lcd.print(co21);
lcd.print(" ppm " );
}
unsigned long PrevTime, NowTime;
unsigned char Cx = 0;
void loop()
{
Blynk.run();
timer.run();
RS485_SerialEvent();
LCD_Display();
SendRotine();
}
void Time_NTP()
{
timeClient.update();
secondNow = timeClient.getSeconds();
minuteNow = timeClient.getMinutes();
hourNow = timeClient.getHours();
Serial.println("The time is >> " + String(hourNow) + ":" + String(minuteNow) + ":" +
String(secondNow) + " >>> " + String(SetTime2Notify));
}
unsigned char rxCount = 0;
unsigned char rxBuff[100];
void calSensorValue(void)
135
{
Serial.println(" ");
unsigned int sensorDat = (rxBuff[4] << 8) | rxBuff[5];
AirTemp1 = sensorDat / 100.00;
Serial.print("AirTemp1: "); Serial.print(AirTemp1);
sensorDat = (rxBuff[6] << 8) | rxBuff[7];
AirTemp2 = sensorDat / 100.00;
Serial.print("AirTemp2: "); Serial.print(AirTemp2);
sensorDat = (rxBuff[12] << 8) | rxBuff[13];
AirHumi1 = sensorDat / 100.00;
Serial.print("AirHumi1: "); Serial.print(AirHumi1);
sensorDat = (rxBuff[14] << 8) | rxBuff[15];
AirHumi2 = sensorDat / 100.00;
Serial.print("AirHumi2: "); Serial.print(AirHumi2);
sensorDat = (rxBuff[26] << 8) | rxBuff[27];
lux1 = sensorDat / 100.00;
Serial.print("lux1: "); Serial.print(lux1);
sensorDat = (rxBuff[24] << 8) | rxBuff[25];
co21 = sensorDat / 100.00;
Serial.print("co21: "); Serial.println(co21);
}
void calSensorValue1(void)
{
Serial.println(" ");
unsigned int sensorDat1 = (rxBuff[4] << 8) | rxBuff[5];
AirTemp3 = sensorDat1 / 100.00;
Serial.print("AirTemp3: "); Serial.print(AirTemp3);
sensorDat1 = (rxBuff[6] << 8) | rxBuff[7];
136
AirTemp4 = sensorDat1 / 100.00;
Serial.print("AirTemp4: "); Serial.print(AirTemp4);
sensorDat1 = (rxBuff[8] << 8) | rxBuff[9];
AirTemp7 = sensorDat1 / 100.00;
Serial.print("AirTemp7: "); Serial.println(AirTemp7);
sensorDat1 = (rxBuff[12] << 8) | rxBuff[13];
AirHumi3 = sensorDat1 / 100.00;
Serial.print("AirHumi3: "); Serial.print(AirHumi3);
sensorDat1 = (rxBuff[14] << 8) | rxBuff[15];
AirHumi4 = sensorDat1 / 100.00;
Serial.print("AirHumi4: "); Serial.print(AirHumi4);
sensorDat1 = (rxBuff[26] << 8) | rxBuff[27];
lux2 = sensorDat1 / 100.00;
Serial.print("lux2: "); Serial.println(lux2);
}
void calSensorValue2(void)
{
Serial.println(" ");
unsigned int sensorDat2 = (rxBuff[4] << 8) | rxBuff[5];
AirTemp5 = sensorDat2 / 100.00;
Serial.print("AirTemp5: "); Serial.print(AirTemp5);
sensorDat2 = (rxBuff[6] << 8) | rxBuff[7];
AirTemp6 = sensorDat2 / 100.00;
Serial.print("AirTemp6: "); Serial.print(AirTemp6);
sensorDat2 = (rxBuff[12] << 8) | rxBuff[13];
AirHumi5 = sensorDat2 / 100.00;
Serial.print("AirHumi5: "); Serial.print(AirHumi5);
sensorDat2 = (rxBuff[14] << 8) | rxBuff[15];
137
AirHumi6 = sensorDat2 / 100.00;
Serial.print("AirHumi6: "); Serial.print(AirHumi6);
sensorDat2 = (rxBuff[26] << 8) | rxBuff[27];
lux3 = sensorDat2 / 100.00;
Serial.print("lux3: "); Serial.println(lux3);
}
void RS485_SerialEvent()
{
if (RS485_serial.available() > 0) {
unsigned char inChar = RS485_serial.read();
rxBuff[rxCount] = inChar;
if (rxBuff[0] == '@')
{
// Serial.print("PASS of @ |");
if ((rxCount == 39) || (rxBuff[rxCount] == '#'))
{
rxCount = 0;
if ((rxBuff[1] == 'B') && (rxBuff[2] == '0'))
{
if (rxBuff[3] == '1')
{
calSensorValue();
}
else if (rxBuff[3] == '2')
{
calSensorValue1();
}
else if (rxBuff[3] == '3')
138
{
calSensorValue2();
}
}
return;
}
rxCount++;
}
}
}
void dataToCloud(void)
{
Blynk.virtualWrite(V0, AirTemp1);
Blynk.virtualWrite(V1, AirHumi1);
Blynk.virtualWrite(V2, AirTemp2);
Blynk.virtualWrite(V3, AirHumi2);
Blynk.virtualWrite(V4, lux1);
Blynk.virtualWrite(V15, co21);
Blynk.virtualWrite(V5, AirTemp3);
Blynk.virtualWrite(V6, AirHumi3);
Blynk.virtualWrite(V7, AirTemp4);
Blynk.virtualWrite(V8, AirHumi4);
Blynk.virtualWrite(V9, lux2);
Blynk.virtualWrite(V10, AirTemp5);
Blynk.virtualWrite(V11, AirHumi5);
Blynk.virtualWrite(V12, AirTemp6);
Blynk.virtualWrite(V13, AirHumi6);
139
Blynk.virtualWrite(V14, lux3);
Blynk.virtualWrite(V23, AirTemp7);
HTTPClient http;
String URL = "https://script.google.com/macros/s/";
URL += KEY;
URL += "/exec?sht20_temp1=";
URL += AirTemp1;
URL += "&sht20_humi1=";
URL += AirHumi1;
URL += "&dht22_temp1=";
URL += AirTemp2;
URL += "&dht22_humi1=";
URL += AirHumi2;
URL += "&lux1=";
URL += lux1;
URL += "&co2=";
URL += co21;
URL += "&sht20_temp2=";
URL += AirTemp3;
URL += "&sht20_humi2=";
URL += AirHumi3;
URL += "&dht22_temp2=";
URL += AirTemp4;
URL += "&dht22_humi2=";
URL += AirHumi4;
URL += "&lux2=";
URL += lux2;
URL += "&sht20_temp3=";
140
URL += AirTemp5;
URL += "&sht20_humi3=";
URL += AirHumi5;
URL += "&dht22_temp3=";
URL += AirTemp6;
URL += "&dht22_humi3=";
URL += AirHumi6;
URL += "&lux3=";
URL += lux3;
Serial.println("[HTTP] begin...");
Serial.println(URL);
Serial.println();
http.begin(URL);
Serial.println("[HTTP] GET...");
int httpCode = http.GET();
if (httpCode > 0) {
Serial.print("[HTTP] GET... code: ");
Serial.println(httpCode);
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
Serial.println(payload);
}
} else {
Serial.print("[HTTP] GET... failed, error: ");
Serial.println(http.errorToString(httpCode).c_str());
}
Firebase_Update();
}
141
BLYNK_CONNECTED() {
Blynk.syncAll();
}
BLYNK_WRITE(V16)
{
selectMode = param.asInt();
if (selectMode == 1) //If button MANUAL on app
{
Serial.println("RY01_ON");
RS485_serial.println("*B01RY01N#");
RS485_serial.println("*B02RY01N#");
RS485_serial.println("*B03RY01N#");
digitalWrite(Relay1, HIGH);
}
else if (selectMode == 0)
{
Serial.println("RY01_OFF");
RS485_serial.println("*B01RY01F#");
RS485_serial.println("*B02RY01F#");
RS485_serial.println("*B03RY01F#");
digitalWrite(Relay1, LOW);
}
}
BLYNK_WRITE(V17)
{
selectMode = param.asInt();
if (selectMode == 1)
{
142
Serial.println("RY02_ON");
RS485_serial.println("*B01RY02N#");
RS485_serial.println("*B02RY02N#");
RS485_serial.println("*B03RY02N#");
digitalWrite(Relay2, HIGH);
}
else if (selectMode == 0)
{
Serial.println("RY02_OFF");
RS485_serial.println("*B01RY02F#");
RS485_serial.println("*B02RY02F#");
RS485_serial.println("*B03RY02F#");
digitalWrite(Relay2, LOW);
}
}
BLYNK_WRITE(V18)
{
selectMode = param.asInt();
if (selectMode == 1)
{
Serial.println("RY03_ON");
RS485_serial.println("*B01RY03N#");
RS485_serial.println("*B02RY03N#");
RS485_serial.println("*B03RY03N#");
digitalWrite(Relay3, HIGH);
}
else if (selectMode == 0)
143
{
Serial.println("RY03_OFF");
RS485_serial.println("*B01RY03F#");
RS485_serial.println("*B02RY03F#");
RS485_serial.println("*B03RY03F#");
digitalWrite(Relay3, LOW);
}
}
BLYNK_WRITE(V19)
{
selectMode = param.asInt();
if (selectMode == 1)
{
Serial.println("RY04_ON");
RS485_serial.println("*B01RY04N#");
RS485_serial.println("*B02RY04N#");
RS485_serial.println("*B03RY04N#");
digitalWrite(Relay4, HIGH);
}
else if (selectMode == 0)
{
Serial.println("RY04_OFF");
RS485_serial.println("*B01RY04F#");
RS485_serial.println("*B02RY04F#");
RS485_serial.println("*B03RY04F#");
digitalWrite(Relay4, LOW);
}
}
144
BLYNK_WRITE(V30) {
if (param.asInt() == 1) {
Sel = true;
Serial.println("Selector is True");
}
if (param.asInt() == 0) {
Sel = false;
Serial.println("Selector is False");
}
}
BLYNK_WRITE(V31) {
SetTime2Notify = param.asInt();
Serial.println("Now set time to notify every " + String(SetTime2Notify) + " minute");
}
BLYNK_WRITE(V20)
{
if (Sel == true) {
if (param.asInt() == 1) {
digitalWrite(Relay1, HIGH);
LINE.notify("Valve[1]NO+ลดน้ำต้นกล้า");
}
if (param.asInt() == 0) {
digitalWrite(Relay1, LOW);
LINE.notify("Valve[1]FFO สน้ิ สุดโปรแกรม");
}
}
}
BLYNK_WRITE(V21) {
145
if (param.asInt() == 1) {
digitalWrite(Relay3, HIGH);
LINE.notify("Valve[2]NO+พ่นฝอย");
}
else {
digitalWrite(Relay3, LOW);
LINE.notify("Valve[2]FFO ส้นิ สุดโปรแกรม");
}
}
BLYNK_WRITE(V22)
{
if (param.asInt() == 1)
{
digitalWrite(Relay4, HIGH);
digitalWrite(Relay2, HIGH);
LINE.notify("Valve[3]NO+นำ้ ฉดี หลงั คาโรงเรอื น");
}
else
{
digitalWrite(Relay4, LOW);
digitalWrite(Relay2, LOW);
LINE.notify("Valve[3]FFO สน้ิ สุดโปรแกรม");
}
}
BLYNK_WRITE(V24)
{
tempset = param.asInt();
}
146
void Set() {
if (Sel == false) {
if (temp >= tempset) {
digitalWrite(Relay4, HIGH);
digitalWrite(Relay2, HIGH);
}
else {
digitalWrite(Relay4, LOW);
digitalWrite(Relay2, LOW);
}
}
Blynk.virtualWrite(V25, temp);
Blynk.virtualWrite(V26, humi);
}
unsigned char stepCount = 0;
unsigned char Lx = 0;
void runStep(void)
{
if (stepCount == 1)
{
Serial.println("Node_01_SensorRead");
RS485_serial.println("*B01SR#");
}
else if (stepCount == 5)
{
Serial.println("Node_02_SensorRead");
RS485_serial.println("*B02SR#");
}
147
else if (stepCount == 9)
{
Serial.println("Node_03_SensorRead");
RS485_serial.println("*B03SR#");
}
stepCount++;
if (stepCount == 15) stepCount = 0;
//----
Lx++;
if (Lx == 200)
{
dataToCloud();
Lx = 0;
Serial.println("-- Data sending to CLOUD-Server OK --");
}
}
148
2.โปรแกรมควบคมุ มการทำงานกลอ่ งลูกขา่ ย 1
#include <SoftwareSerial.h>
#include "DHT.h"
#include "DFRobot_SHT20.h"
#define TX_485 8
#define RX_485 7
#define RS485transmit 1
#define RS485receive 0
#define DHTPIN 2
#define DHTTYPE DHT22
#define RunLED 13
#define RY1 9
#define RY2 10
#define RY3 11
#define RY4 12
DHT dht(DHTPIN, DHTTYPE);
DFRobot_SHT20 sht20(&Wire, SHT20_I2C_ADDR);
SoftwareSerial RS485_serial (RX_485, TX_485);
unsigned long theCurrentTime;
unsigned long theLastReadTime = 0;
long readDataInterval = 5000;
int analog1Pin = 1;
int analogPin = 0;
int Relay1 = 9;
int Relay2 = 10;
unsigned char DataBuff[65];
////////////////////////////////////// PROGRAM SETUP //////////////////////////////////////
149
void setup() {
pinMode(RunLED, OUTPUT);
pinMode(RY1, OUTPUT); digitalWrite(RY1, HIGH);
pinMode(RY2, OUTPUT); digitalWrite(RY2, HIGH);
pinMode(RY3, OUTPUT); digitalWrite(RY3, HIGH);
pinMode(RY4, OUTPUT); digitalWrite(RY4, HIGH);
Serial.begin(9600);
RS485_serial.begin(9600);
dht.begin();
sht20.initSHT20();
sht20.checkSHT20();
theCurrentTime = millis();
}
unsigned char inChar;
unsigned char RxBuff[64];
unsigned char RxdCount = 0;
boolean rxComplete = false;
void serialEvent()
{
while (RS485_serial.available())
{
inChar = RS485_serial.read();
//Serial.write(inChar);
RxBuff[RxdCount] = inChar;
if (RxBuff[0] == '*')
{
if ((RxBuff[1] != 'B') && (RxdCount == 1))
{
150
RxdCount = 0; return;
}
// Serial.print(" "); Serial.println(RxdCount);
if ((RxdCount == 9) || (RxBuff[RxdCount] == '#'))
{
RxdCount = 0; rxComplete = true;
return;
}
RxdCount++;
}
}
}
void sendDatToRS485(void)
{
Serial.println("getCommand Sensors Data to RS-485");
for (unsigned char i=0; i<40;i++)
{
RS485_serial.write(DataBuff[i]);
}
}
void pinAnalogRead(void)
{
unsigned int lux1 = analogRead(A0);
lux1 = map(lux1, 0, 600, 0, 100);
unsigned int co2 = random(15,82); //analogRead(A1);
DataBuff[26] = lux1;
DataBuff[24] = co2 >> 8; DataBuff[25] = co2;
Serial.println("-------------------------------");
151
Serial.println("Lux | CO2");
Serial.print(lux1); Serial.print("|"); Serial.println(co2);
}
void AirSensor_Read(void)
{
unsigned int datBuf;
float temp1 = dht.readTemperature(); // อ่านค่าอุณหภูมิจาก DHT Sensor
datBuf = temp1 * 100;
DataBuff[4] = datBuf >> 8; DataBuff[5] = datBuf & 0x00FF;
float temp2 = sht20.readTemperature(); // อ่านคา่ อุณหภูมิจาก sht Sensor
datBuf = temp2 * 100;
DataBuff[6] = datBuf >> 8; DataBuff[7] = datBuf & 0x00FF;
float humi1 = dht.readHumidity(); // อา่ นคา่ ความชนื้ จาก DHT Sensor
datBuf = humi1 * 100;
DataBuff[12] = datBuf >> 8; DataBuff[13] = datBuf & 0x00FF;
float humi2 = sht20.readHumidity(); // Read Humidity
datBuf = humi2 * 100;
DataBuff[14] = datBuf >> 8; DataBuff[15] = datBuf & 0x00FF;
Serial.println("***************************************");
Serial.println("AirTemp1|AirTemp2|Humid1|Humid2 ");
Serial.print(temp1); Serial.print("|"); Serial.print(temp2); Serial.print("|");
Serial.print(humi1); Serial.print("|"); Serial.println(humi2);
}
unsigned int soilTempVal;
void soilTempRead(void)
{
float soilTempRead = 27.45 ; //DS18B20_Read();
soilTempVal = soilTempRead * 100;
152
DataBuff[2] = soilTempVal >> 8; DataBuff[3] = soilTempVal & 0x00FF;
Serial.print(DataBuff[2], HEX); Serial.println(DataBuff[3], HEX);
soilTempVal = ((DataBuff[2] << 8) | DataBuff[3]);
Serial.print(soilTempVal); Serial.print("|");
float soilTemp1_Val = soilTempVal / 100.00;
Serial.println(soilTemp1_Val);
}
void RELAY_clt(void)
{
if ((RxBuff[6] == '0') && (RxBuff[7] == '1'))
{
if (RxBuff[8] == 'N') digitalWrite(RY1, LOW);
if (RxBuff[8] == 'F') digitalWrite(RY1, HIGH);
}
else if ((RxBuff[6] == '0') && (RxBuff[7] == '2'))
{
if (RxBuff[8] == 'N') digitalWrite(RY2, LOW);
if (RxBuff[8] == 'F') digitalWrite(RY2, HIGH);
}
else if ((RxBuff[6] == '0') && (RxBuff[7] == '3'))
{
if (RxBuff[8] == 'N') digitalWrite(RY3, LOW);
if (RxBuff[8] == 'F') digitalWrite(RY3, HIGH);
}
else if ((RxBuff[6] == '0') && (RxBuff[7] == '4'))
{
if (RxBuff[8] == 'N') digitalWrite(RY4, LOW);
if (RxBuff[8] == 'F') digitalWrite(RY4, HIGH);
153
}
}
//------- PROGRAM RUNNING ------//
unsigned long PreTime, NowTime;
unsigned char Cx, secNum = 0;;
void loop()
{
serialEvent();
NowTime = millis();
if (rxComplete)
{
rxComplete = false;
DataBuff[0] = '@'; DataBuff[1] = RxBuff[1];
DataBuff[2] = RxBuff[2]; DataBuff[3] = RxBuff[3];
if ((RxBuff[2] == '0') && (RxBuff[3] == '1'))
{
if ((RxBuff[4] == 'S') && (RxBuff[5] == 'R'))
{
sendDatToRS485();
}
else if ((RxBuff[4] == 'R') && (RxBuff[5] == 'Y'))
{
RELAY_clt();
}
}
}
//------ สรา้ งจังหวะในการ อ่านตัวตรวจรู้ ----//
if (NowTime >= (PreTime + 100))
154
{
if (Cx == 0)
{
digitalWrite(RunLED, HIGH);
// pinAnalogRead();
}
else if (Cx == 3) digitalWrite(RunLED, LOW);
if (Cx == 10)
{
Cx = 0;
secNum++;
if(secNum == 2)
{
AirSensor_Read();
}
else if(secNum == 4)
{
pinAnalogRead();
secNum = 0;
}
} else Cx++;
PreTime = NowTime;
}
}
155
3.โปรแกรมควบคมุ มการทำงานกลอ่ งลูกข่าย 2
#include <SoftwareSerial.h>
#include "DHT.h"
#include "DFRobot_SHT20.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#define TX_485 8
#define RX_485 7
#define RS485transmit 1
#define RS485receive 0
#define DHTPIN 2
#define DHTTYPE DHT11
#define ONE_WIRE_BUS 3
#define RunLED 13
#define RY1 9
#define RY2 10
#define RY3 11
#define RY4 12
DHT dht(DHTPIN, DHTTYPE);
DFRobot_SHT20 sht20(&Wire, SHT20_I2C_ADDR);
SoftwareSerial RS485_serial (RX_485, TX_485);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
unsigned long theCurrentTime;
unsigned long theLastReadTime = 0;
long readDataInterval = 5000;
int analog1Pin = 1;
156
int analogPin = 0;
int Relay1 = 9;
int Relay2 = 10;
unsigned char DataBuff[65];
////////////////////////////////////// PROGRAM SETUP //////////////////////////////////////
void setup() {
pinMode(RunLED, OUTPUT);
pinMode(RY1, OUTPUT); digitalWrite(RY1, HIGH);
pinMode(RY2, OUTPUT); digitalWrite(RY2, HIGH);
pinMode(RY3, OUTPUT); digitalWrite(RY3, HIGH);
pinMode(RY4, OUTPUT); digitalWrite(RY4, HIGH);
Serial.begin(9600);
RS485_serial.begin(9600);
dht.begin();
sensors.begin();
sht20.initSHT20();
sht20.checkSHT20();
theCurrentTime = millis();
}
unsigned char inChar;
unsigned char RxBuff[64];
unsigned char RxdCount = 0;
boolean rxComplete = false;
void serialEvent()
{
while (RS485_serial.available())
{
inChar = RS485_serial.read();
157
RxBuff[RxdCount] = inChar;
if (RxBuff[0] == '*')
{
if ((RxBuff[1] != 'B') && (RxdCount == 1))
{
RxdCount = 0; return;
}
if ((RxdCount == 9) || (RxBuff[RxdCount] == '#'))
{
RxdCount = 0; rxComplete = true;
return;
}
RxdCount++;
}
}
}
void sendDatToRS485(void)
{
Serial.println("getCommand Sensors Data to RS-485");
for (unsigned char i = 0; i < 40; i++)
{
RS485_serial.write(DataBuff[i]);
}
}
void pinAnalogRead(void)
{
unsigned int lux1 = analogRead(A0);
lux1 = map(lux1, 0, 2025, 0, 100);
158
unsigned int co2 = random(15, 82); //analogRead(A1);
DataBuff[26] = lux1;
DataBuff[24] = co2 >> 8; DataBuff[25] = co2;
Serial.println("-------------------------------");
Serial.println("Lux | CO2");
Serial.print(lux1); Serial.print("|"); Serial.println(co2);
}
void AirSensor_Read(void)
{
unsigned int datBuf;
float temp1 = dht.readTemperature(); // อ่านค่าอุณหภมู จิ าก DHT Sensor
datBuf = temp1 * 100;
DataBuff[4] = datBuf >> 8; DataBuff[5] = datBuf & 0x00FF;
float temp2 = sht20.readTemperature(); // อา่ นค่าอุณหภมู ิจาก sht Sensor
datBuf = temp2 * 100;
DataBuff[6] = datBuf >> 8; DataBuff[7] = datBuf & 0x00FF;
sensors.getTempCByIndex(0);
float temp3 = sensors.getTempCByIndex(0); //DS18B20_Read();
datBuf = temp3 * 100;
DataBuff[8] = datBuf >> 8; DataBuff[9] = datBuf & 0x00FF;
float humi1 = dht.readHumidity(); // อา่ นคา่ ความช้นื จาก DHT Sensor
datBuf = humi1 * 100;
DataBuff[12] = datBuf >> 8; DataBuff[13] = datBuf & 0x00FF;
float humi2 = sht20.readHumidity(); // Read Humidity
datBuf = humi2 * 100;
DataBuff[14] = datBuf >> 8; DataBuff[15] = datBuf & 0x00FF;
Serial.println("***************************************");
Serial.println("AirTemp1|AirTemp2|AirTemp3|Humid1|Humid2|");
159
Serial.print(temp1); Serial.print("|"); Serial.print(temp2);
Serial.print("|");Serial.print(temp3); Serial.print("|");
Serial.print(humi1); Serial.print("|"); Serial.println(humi2);
}
unsigned int soilTempVal;
void soilTempRead(void)
{
void RELAY_clt(void)
{
if ((RxBuff[6] == '0') && (RxBuff[7] == '1'))
{
if (RxBuff[8] == 'N') digitalWrite(RY1, LOW);
if (RxBuff[8] == 'F') digitalWrite(RY1, HIGH);
}
else if ((RxBuff[6] == '0') && (RxBuff[7] == '2'))
{
if (RxBuff[8] == 'N') digitalWrite(RY2, LOW);
if (RxBuff[8] == 'F') digitalWrite(RY2, HIGH);
}
else if ((RxBuff[6] == '0') && (RxBuff[7] == '3'))
{
if (RxBuff[8] == 'N') digitalWrite(RY3, LOW);
if (RxBuff[8] == 'F') digitalWrite(RY3, HIGH);
}
else if ((RxBuff[6] == '0') && (RxBuff[7] == '4'))
{
if (RxBuff[8] == 'N') digitalWrite(RY4, LOW);
if (RxBuff[8] == 'F') digitalWrite(RY4, HIGH);
160
}
}
//------- PROGRAM RUNNING ------//
unsigned long PreTime, NowTime;
unsigned char Cx, secNum = 0;;
void loop()
{
serialEvent();
NowTime = millis();
if (rxComplete)
{
rxComplete = false;
DataBuff[0] = '@'; DataBuff[1] = RxBuff[1];
DataBuff[2] = RxBuff[2]; DataBuff[3] = RxBuff[3];
if ((RxBuff[2] == '0') && (RxBuff[3] == '2'))
{
if ((RxBuff[4] == 'S') && (RxBuff[5] == 'R'))
{
sendDatToRS485();
}
else if ((RxBuff[4] == 'R') && (RxBuff[5] == 'Y'))
{
RELAY_clt();
}
}
}
//------ สรา้ งจังหวะในการ อ่านตัวตรวจรู้ ----
if (NowTime >= (PreTime + 100))
161
{
if (Cx == 0)
{
digitalWrite(RunLED, HIGH);
// pinAnalogRead();
}
else if (Cx == 3) digitalWrite(RunLED, LOW);
if (Cx == 10)
{
Cx = 0;
secNum++;
if (secNum == 2)
{
AirSensor_Read();
}
else if (secNum == 4)
{
pinAnalogRead();
secNum = 0;
}
// Serial.println(" ");
// Serial.print("secNum is "); Serial.println(secNum);
} else Cx++;
PreTime = NowTime;
}
}
162
4.โปรแกรมควบคมุ มการทำงานกล่องลกู ข่าย 3
#include <SoftwareSerial.h>
#include "DHT.h"
#include "DFRobot_SHT20.h"
#define TX_485 8
#define RX_485 7
#define RS485transmit 1
#define RS485receive 0
#define DHTPIN 2
#define DHTTYPE DHT22
#define RunLED 13
#define RY1 9
#define RY2 10
#define RY3 11
#define RY4 12
DHT dht(DHTPIN, DHTTYPE);
DFRobot_SHT20 sht20(&Wire, SHT20_I2C_ADDR);
SoftwareSerial RS485_serial (RX_485, TX_485);
unsigned long theCurrentTime; น
unsigned long theLastReadTime = 0;
long readDataInterval = 5000;
int analog1Pin = 1;
int analogPin = 0;
int Relay1 = 9;
int Relay2 = 10;
unsigned char DataBuff[65];
////////////////////////////////////// PROGRAM SETUP //////////////////////////////////////
163
void setup() {
pinMode(RunLED, OUTPUT);
pinMode(RY1, OUTPUT); digitalWrite(RY1, HIGH);
pinMode(RY2, OUTPUT); digitalWrite(RY2, HIGH);
pinMode(RY3, OUTPUT); digitalWrite(RY3, HIGH);
pinMode(RY4, OUTPUT); digitalWrite(RY4, HIGH);
Serial.begin(9600);
RS485_serial.begin(9600);
dht.begin();
sht20.initSHT20();
sht20.checkSHT20();
theCurrentTime = millis();
}
unsigned char inChar;
unsigned char RxBuff[64];
unsigned char RxdCount = 0;
boolean rxComplete = false;
void serialEvent()
{
while (RS485_serial.available())
{
inChar = RS485_serial.read();
RxBuff[RxdCount] = inChar;
if (RxBuff[0] == '*')
{
if ((RxBuff[1] != 'B') && (RxdCount == 2))
{
RxdCount = 0; return;
164
}
// Serial.print(" "); Serial.println(RxdCount);
if ((RxdCount == 9) || (RxBuff[RxdCount] == '#'))
{
RxdCount = 0; rxComplete = true;
return;
}
RxdCount++;
}
}
}
void sendDatToRS485(void)
{
Serial.println("getCommand Sensors Data to RS-485");
for (unsigned char i=0; i<40;i++)
{
RS485_serial.write(DataBuff[i]);
}
}
void pinAnalogRead(void)
{
unsigned int lux1 = analogRead(A0);
lux1 = map(lux1, 0, 600, 0, 100);
unsigned int co2 = random(15,82); //analogRead(A1);
DataBuff[26] = lux1;
DataBuff[24] = co2 >> 8; DataBuff[25] = co2;
Serial.println("-------------------------------");
165
Serial.println("Lux | CO2");
Serial.print(lux1); Serial.print("|"); Serial.println(co2);
}
void AirSensor_Read(void)
{
unsigned int datBuf;
float temp1 = dht.readTemperature();
datBuf = temp1 * 100;
DataBuff[4] = datBuf >> 8; DataBuff[5] = datBuf & 0x00FF;
float temp2 = sht20.readTemperature();
datBuf = temp2 * 100;
DataBuff[6] = datBuf >> 8; DataBuff[7] = datBuf & 0x00FF;
float humi1 = dht.readHumidity();
datBuf = humi1 * 100;
DataBuff[12] = datBuf >> 8; DataBuff[13] = datBuf & 0x00FF;
float humi2 = sht20.readHumidity();
datBuf = humi2 * 100;
DataBuff[14] = datBuf >> 8; DataBuff[15] = datBuf & 0x00FF;
Serial.println("***************************************");
Serial.println("AirTemp1|AirTemp2|Humid1|Humid2 ");
Serial.print(temp1); Serial.print("|"); Serial.print(temp2); Serial.print("|");
Serial.print(humi1); Serial.print("|"); Serial.println(humi2);
}
unsigned int soilTempVal;
void soilTempRead(void)
{
float soilTempRead = 27.45 ; //DS18B20_Read();
soilTempVal = soilTempRead * 100;
166
DataBuff[2] = soilTempVal >> 8; DataBuff[3] = soilTempVal & 0x00FF;
Serial.print(DataBuff[2], HEX); Serial.println(DataBuff[3], HEX);
soilTempVal = ((DataBuff[2] << 8) | DataBuff[3]);
Serial.print(soilTempVal); Serial.print("|");
float soilTemp1_Val = soilTempVal / 100.00;
Serial.println(soilTemp1_Val);
}
void RELAY_clt(void)
{
if ((RxBuff[6] == '0') && (RxBuff[7] == '1'))
{
if (RxBuff[8] == 'N') digitalWrite(RY1, LOW);
if (RxBuff[8] == 'F') digitalWrite(RY1, HIGH);
}
else if ((RxBuff[6] == '0') && (RxBuff[7] == '2'))
{
if (RxBuff[8] == 'N') digitalWrite(RY2, LOW);
if (RxBuff[8] == 'F') digitalWrite(RY2, HIGH);
}
else if ((RxBuff[6] == '0') && (RxBuff[7] == '3'))
{
if (RxBuff[8] == 'N') digitalWrite(RY3, LOW);
if (RxBuff[8] == 'F') digitalWrite(RY3, HIGH);
}
else if ((RxBuff[6] == '0') && (RxBuff[7] == '4'))
{
if (RxBuff[8] == 'N') digitalWrite(RY4, LOW);
if (RxBuff[8] == 'F') digitalWrite(RY4, HIGH);
167
}
}
//------- PROGRAM RUNNING ------//
unsigned long PreTime, NowTime;
unsigned char Cx, secNum = 0;;
void loop()
{
serialEvent();
NowTime = millis();
if (rxComplete)
{
rxComplete = false;
DataBuff[0] = '@'; DataBuff[1] = RxBuff[1];
DataBuff[2] = RxBuff[2]; DataBuff[3] = RxBuff[3];
if ((RxBuff[2] == '0') && (RxBuff[3] == '1'))
{
if ((RxBuff[4] == 'S') && (RxBuff[5] == 'R'))
{
sendDatToRS485();
}
else if ((RxBuff[4] == 'R') && (RxBuff[5] == 'Y'))
{
RELAY_clt();
}
}
}
//------ สรา้ งจังหวะในการ อ่านตัวตรวจรู้ ----
if (NowTime >= (PreTime + 100))
168
{
if (Cx == 0)
{
digitalWrite(RunLED, HIGH);
}
else if (Cx == 3) digitalWrite(RunLED, LOW);
if (Cx == 10)
{
Cx = 0;
secNum++;
if(secNum == 2)
{
AirSensor_Read();
}
else if(secNum == 4)
{
pinAnalogRead();
secNum = 0;
}
} else Cx++;
PreTime = NowTime;
}
}
169
ประวตั ผิ ูจ้ ัดทำ
170
ประวัติผ้จู ัดทำ
ช่อื -สกลุ นายกวลี กั ษณ์ อุตราชา
วัน/เดือน/ปเี กดิ 1 กรกฎาคม 2542
ทอ่ี ยู่ 246 หมู่ 11 ต.สามพรา้ ว อ.เมือง จ.อุดรธานี 41000
เบอร์โทรศพั ท์ 098 - 5099366
Email : [email protected]
ประวัติการศึกษา
พ.ศ.2559 ปวช. (อิเลก็ ทรอนกิ ส)์ วิทยาลัยเทคนคิ จังหวดั อุดรธานี
พ.ศ.2562 ปวส. (อิเล็กทรอนกิ ส)์ วิทยาลัยเทคนิค จงั หวัดอดุ รธานี
พ.ศ.2565 วศ.บ. (วศิ วกรรมอิเล็กทรอนกิ ส์อจั ฉริยะ) คณะวศิ วกรรมศาสตร์
มหาวทิ ยาลยั เทคโนโลยีราชมงคลอีสาน วิทยาเขตขอนแก่น จังหวดั ขอนแกน่
ชอ่ื -สกลุ
วัน/เดือน/ปีเกิด นายจิรายุส ดิษฐเ์ จรญิ
ท่อี ยู่ 30 สงิ หาคม 2542
เบอร์โทรศัพท์ 10 หมู่ 4 ต.โนนสะอาด อ.ศรบี ุญเรอื ง จ.หนองบัวลำภู 39180
Email : 063 - 6709875
ประวัติการศึกษา [email protected]
พ.ศ.2559
พ.ศ.2562 ปวช. (อิเลก็ ทรอนกิ ส)์ วทิ ยาลัยการอาชีพศรบี ุญเรือง จังหวดั หนองบวั ลำภู
พ.ศ.2565 ปวส. (อิเล็กทรอนกิ ส์)วทิ ยาลัยการอาชพี ศรบี ุญเรือง จังหวัดหนองบัวลำภู
วศ.บ. (วศิ วกรรมอเิ ลก็ ทรอนิกส์อจั ฉรยิ ะ) คณะวิศวกรรมศาสตร์
มหาวทิ ยาลยั เทคโนโลยีราชมงคลอีสาน วทิ ยาเขตขอนแก่น จังหวัดขอนแกน่