The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.

ระบบควบคุมอุณหภูมิ

Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by BE ST, 2022-05-16 09:05:48

ระบบควบคุมอุณหภูมิ

ระบบควบคุมอุณหภูมิ

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 ปวส. (อิเล็กทรอนกิ ส์)วทิ ยาลัยการอาชพี ศรบี ุญเรือง จังหวัดหนองบัวลำภู
วศ.บ. (วศิ วกรรมอเิ ลก็ ทรอนิกส์อจั ฉรยิ ะ) คณะวิศวกรรมศาสตร์
มหาวทิ ยาลยั เทคโนโลยีราชมงคลอีสาน วทิ ยาเขตขอนแก่น จังหวัดขอนแกน่


Click to View FlipBook Version