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 ooppo1660, 2022-05-21 09:57:55

นิพนธ์

นิพนธ์

132

ภาคผนวก ข
ขั้นตอนการสรา้ งระบบสมองกลฝงั ตวั ควบคุมการผลติ นำ้ เยน็ ด้วยโอ่งอลี ำยอง

133

รูปที่ ข.1 ระบบสมองกลฝังตัวควบคุมการผลติ นำ้ เยน็ ดว้ ยโอ่งอีลำยอง
รูปที่ ข.2 จัดเตรยี มโอ่งเพื่อนำไปทำการเจาะ

134

รปู ที่ ข.3 เจาะโอง่ และทำการติดตง้ั ท่อทางเดนิ น้ำ
รปู ที่ ข.4 ทำการทดลองแชน่ ้ำไวใ้ นโอง่ น้ำ

135

รูปท่ี ข.5 ทำการทดลองผ่านแผ่น cooling pad
รูปที่ ข.6 ทำการทดลองการทำน้ำวนผ่านโอ่งน้ำ

136

รปู ท่ี ข.7 นำชดุ ทำความเยน็ มาตดิ ต้ังเข้ากับโอ่ง
รปู ท่ี ข.8 ติดตง้ั โอ่งนำ้ อลี ำยองเพือ่ ทดสอบการทำความเยน็

137

รูปที่ ข.9 นำบอร์ดมาลงกล่องไฟ หรอื กล่องคอนโทรล
รูปที่ ข.10 นำแหล่งจา่ ยไฟมาลงกล่องไฟ หรือ กล่องคอนโทรล

138

รปู ที่ ข.11 นำอุปรกรณ์มาตดิ ต้งั ลงมาลงลูก
รปู ที่ ข.12 ลงอปุ กรณช์ ดุ บอรด์ คอนโทรล LowCost lot Automation

139

รูปที่ ข.13 นำสายอุปกรณ์และสายเซ็นเซอร์ต่างๆมาตอ่ เพือ่ ใชง้ าน
รปู ภาพท่ี ข. 14 ทำการตดั เหล็กไปทำฐานโอ่ง

140

รูปท่ี ข.15 ทำการเชื่อมฐานโอ่งหรือสรา้ งฐานโอง่
รูปภาพ ข. 16 นำโอ่งมาติดตั้งเข้าฐานพร้อมอุปกรณ์ทำความเยน็

141

รปู ท่ี ข.17 เม่ือนำทกุ ส่วนมาประกอบกนั สำเรจ็ แล้ว

142

ภาคผนวก ค
โปรแกรมควบคุมระบบสมองกลฝังตัวควบคุมการผลิตน้ำเยน็ ด้วยโอ่งอลี ำยอง

143

#include <SoftwareSerial.h>
#include <LiquidCrystal_I2C.h>
#include <WiFiUdp.h>
#include <NTPClient.h>
#include "PCF8574.h"
#include "ThingSpeak.h"
#include <ESP8266WiFi.h>
#define BLYNK_PRINT Serial
#include <PubSubClient.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <FirebaseESP8266.h>
#include <TridentTD_LineNotify.h>

#define FIREBASE_HOST "kkcbd-cannabis-default-rtdb.asia-
southeast1.firebasedatabase.app"
#define FIREBASE_AUTH
"jfcw30AOf4RbC1j4JogKFfrkAKqVmSXP8HAG0Mtf"

#define BTN_Start_pin P5 // Start Button for beginning
program //pcf input P6 // Start Button for stopping program
#define BTN_Stop_pin
//pcf input

#define RY01 P1 // Solenoid connector Water_Level in

pin to relay02 //PCF_01 output//delay ch 1

#define RY02 P2 // Pump connector pin to relay03

#define RY03 P3

144

#define RY04 P4

#define TX_485 13 // กำหนดใหข้ า D6 ของ NodeMCU เช่อื มต่อ

กับ DI ของ module RS 485

#define RX_485 12

#define RS485transmit 1 // กำหนดให้การส่งข้อมูลเปน็ 1 หรือ High

#define RS485receive 0

#define ON 0

#define OFF 1

#define Thing_Timer 30

#define Netpie_Timer 30

/**********\** Config Functions ************/
SoftwareSerial RS485_serial (RX_485, TX_485);
LiquidCrystal_I2C lcd(0x3F, 20, 4);
WidgetTerminal terminal(V3);
BlynkTimer timer;
PCF8574 PCF_01(0x26);
WiFiClient espClient;
PubSubClient client(espClient);
WidgetLED led1(V51);
WidgetLED led2(V52);
FirebaseData firebaseData;
String Project = "/FireBase_VarSet";
String MT01_FB = Project + "/AirSensor";
char msg[500];
const long offsetTime = 25200;
WiFiUDP ntpUDP;

145

NTPClient timeClient(ntpUDP, "pool.ntp.org", offsetTime);
/*--------------------- network Config ---------------------*/
char ssid[] = "KKCBD2021"; // your network SSID (name)
char pass[] = "0629149455"; // your network password
//char ssid[] = "Praya than_smart"; // your network SSID (name)
//char pass[] = "Yes31lnKK"; // your network password
//char ssid[] = "JMsuraphum"; // your network SSID (name)
//char pass[] = "1410401490976"; // your network password

#define
LINE_TOKEN"rpWvjnG18lJPafXpoUJNX1ZRETFSoW4yq7pujTCM4zU"//LIN
E
char auth[] = "ofLj3vQA_dJaWcEn0EiG9lBfM7lcnIi0"; //BLYNK
unsigned long myChannelNumber = 1612300;//ThingSpeak
const char * myWriteAPIKey = "WZLXIBGLBULDRFNY";
const char* mqtt_server = "broker.netpie.io";//Netpie
const int mqtt_port = 1883;
const char* mqtt_Client = "7031e8af-2fff-4e5a-82c2-c0033ae352b0";
const char* mqtt_username =
"8GYyNxGGeZWnVShwbG7WCYLSmLnbPUdX";
const char* mqtt_password = "(52gi*QK$bAlOcY7p-K(S2-Na-XlqYvs";
/*--------------------- End Config ---------------------*/
//******************************************************
int hourNow, minuteNow, secondNow;
unsigned char HOUR, MIN, SEC;
int Add = 1;
int WiFi_CONNECTED;
float lux1;

146

float DHT_Temp, DHT_Humi;
float DHT_Temperature, DHT_AirHumi;
float Temperature1, Temperature2, Temperature3, Temperature4,
Temperature5;
float temp0, temp1, temp2, temp3, temp4 ;
String Str_Line ;
String myStatus = "";
String message;
String tpc;
byte number[5];
boolean Old_Start , Net_Send ;
unsigned int WiFi_Cx = 60 , ThingCx , P_Step ;

unsigned char Cx = 0, LINE_CX;
unsigned char rxCount = 0;
unsigned char rxBuff[100];
unsigned char stepCount = 0, stepSend = 0 ;
//***********************************************************//
void setup() {

PCF_01.pinMode(BTN_Start_pin, INPUT_PULLUP);
PCF_01.pinMode(BTN_Stop_pin, INPUT_PULLUP);
PCF_01.pinMode(RY01, OUTPUT);
PCF_01.pinMode(RY02, OUTPUT);
PCF_01.pinMode(RY03, OUTPUT);
PCF_01.pinMode(RY04, OUTPUT);
if (PCF_01.begin()) {
Serial.println("OK");

147

PCF_01.digitalWrite(RY01, HIGH);
PCF_01.digitalWrite(RY02, HIGH);
PCF_01.digitalWrite(RY03, HIGH);
PCF_01.digitalWrite(RY04, HIGH);
} else {
Serial.println("KO");
}
Serial.begin(9600);
RS485_serial.begin(9600);
Serial.println(" COMMUNICATIONS TO RS485 ");
lcd.begin();
lcd.backlight();
timeClient.begin();
Blynk.begin(auth, ssid, pass, "prakitblog.com", 8181);
WiFi.mode(WIFI_STA);
if (WiFi.status() == WL_CONNECTED) {
lcd.clear();
lcd.setCursor(6, 0);
lcd.print("Welcome to");
lcd.setCursor(2, 1);
lcd.print(" Smart Cooling Pot");
lcd.setCursor(3, 2);
lcd.print("Embedded system.");
lcd.setCursor(0, 3); lcd.print("...WiFi Connected...");
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());

148

Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
Firebase.reconnectWiFi(true);
Firebase.setReadTimeout(firebaseData, 1000 * 60);
Firebase.setwriteSizeLimit(firebaseData, "tiny");
Serial.println("Firebase begin ");

client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
ThingSpeak.begin(espClient); // Initialize ThingSpeak
Serial.println(" Smart Farm Ready To Process Your Program!" );
Serial.print("welcome suraphum ");
}
timer.setInterval(1000L, runStep);
timer.setInterval(1000L, CheckConnection);
timer.setInterval(1000L, Time_NTP);
delay(1000);
LINE.setToken(LINE_TOKEN);
LINE.notifySticker("Smart Farm Ready To Process Your Program!", 1, 2);
LINE.notify(" กลอ่ ง เรมิ่ ทำงานแลว้ ครบั ");
lcd.clear();
}

void RS485_SerialEvent() {
while (RS485_serial.available() > 0) {
unsigned char inChar = RS485_serial.read();

149

rxBuff[rxCount] = inChar;

if (rxBuff[0] == '@') {
if ((rxCount == 39) || (rxBuff[rxCount] == '#')) {
rxCount = 0;
if ((rxBuff[1] == 'B') && (rxBuff[2] == '0')) {

if (rxBuff[3] == '1') {
calSensorValue();
Clear_Buff();
}
}
return;
}
rxCount++;
}
else {
rxCount = 0;
Clear_Buff();
return;
}
}
}

void calSensorValue(void) {
unsigned int sensorDat = (rxBuff[4] << 8) | rxBuff[5];
temp0 = sensorDat / 100.00;
sensorDat = (rxBuff[6] << 8) | rxBuff[7];
temp1 = sensorDat / 100.00;

150

sensorDat = (rxBuff[8] << 8) | rxBuff[9];
temp2 = sensorDat / 100.00;
sensorDat = (rxBuff[10] << 8) | rxBuff[11];
temp3 = sensorDat / 100.00;
sensorDat = (rxBuff[12] << 8) | rxBuff[13];
temp4 = sensorDat / 100.00;
sensorDat = (rxBuff[14] << 8) | rxBuff[15];
DHT_Temp = sensorDat / 100.00;
sensorDat = (rxBuff[16] << 8) | rxBuff[17];
DHT_Humi = sensorDat / 100.00;
sensorDat = rxBuff[26] ;
lux1 = sensorDat ;
Set_sensor();

Serial.print("\nStation_01_readString Complete : ");
Serial.print(Temperature1); Serial.print(" | ");
Serial.print(Temperature2); Serial.print(" | ");
Serial.print(Temperature3); Serial.print(" | ");
Serial.print(Temperature4); Serial.print(" | ");
Serial.print(Temperature5); Serial.print(" | ");
Serial.print(DHT_Temperature); Serial.print(" | ");
Serial.print(DHT_AirHumi); Serial.print(" | "); Serial.println(lux1);
}

void Clear_Buff() {
for (int i = 0; i < 40; i++)
{
rxBuff[i] = ' ';

151

}
}

// netpie callback
void callback(char* topic, byte * payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {

message = message + (char)payload[i];
}
Serial.println(message);
tpc.toCharArray(msg, (tpc.length() + 1));
client.publish("@shadow/data/update", msg);
}

// netpie reconnect
void reconnect() {
while (!client.connected()) {

if (client.connect(mqtt_Client, mqtt_username, mqtt_password)) {
//Serial.println("connected");
client.subscribe("@msg/led");
}
else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println("try again in 5 seconds");
}

152

}
}

void Send_to_Netpie() {
String data = "{\"data\": {\"Moisture\":" + String(Temperature1) +
",\"Temperature\":" + String(Temperature2) + ",\"Bank\":" +
String(Temperature3) +

",\"Jimmee\":" + String(Temperature4) + ",\"Suraphum\":" +
String(Temperature5) + ",\"Hum\":" + String(DHT_Temperature) +

",\"Tem\":" + String(DHT_AirHumi) + ",\"Light\":" +
String(lux1) + "}}";
//Serial.println(data);
data.toCharArray(msg, (data.length() + 1));
client.publish("@shadow/data/update", msg);
}

void Send_to_Thingspeak() {
/* ThinngSpeak Zone */
ThingSpeak.setField(1, Temperature1);
ThingSpeak.setField(2, Temperature2);
ThingSpeak.setField(3, Temperature3);
ThingSpeak.setField(4, Temperature4);
ThingSpeak.setField(5, Temperature5);
ThingSpeak.setField(6, DHT_Temperature);
ThingSpeak.setField(7, DHT_AirHumi);
ThingSpeak.setField(8, lux1);

// set the statu

153

ThingSpeak.setStatus(myStatus);
// write to the ThingSpeak channel
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (x == 200) {
/*Serial.println("Channel update successful.");*/
}
else {
/*Serial.println("Problem updating channel. HTTP error code " +
String(x));*/
}
}

// Blynk4Send
void BLYNK_Write() {
Blynk.virtualWrite(V19, DHT_AirHumi);
Blynk.virtualWrite(V20, DHT_Temperature);
Blynk.virtualWrite(V21, Temperature1);
Blynk.virtualWrite(V22, Temperature2);
Blynk.virtualWrite(V23, Temperature3);
Blynk.virtualWrite(V24, Temperature4);
Blynk.virtualWrite(V25, Temperature5);
Blynk.virtualWrite(V26, lux1);
}

void LCD_Update() {
lcd.setCursor(0, 0);
lcd.print("T1: " + String(Temperature1));
lcd.setCursor(0, 1);

154

lcd.print("T2: " + String(Temperature2));
lcd.setCursor(0, 2);
lcd.print("T3: " + String(Temperature3));
lcd.setCursor(0, 3);
lcd.print("T4: " + String(Temperature4));
lcd.setCursor(11, 0);
lcd.print("T5: " + String(Temperature5));
lcd.setCursor(11, 1);
lcd.print("T: " + String(DHT_Temperature));
lcd.setCursor(11, 2);
lcd.print("H: " + String(DHT_AirHumi));
lcd.setCursor(11, 3);
lcd.print("L: " + String(lux1));
}

void Set_sensor() {
if (temp0 <= 60) {
Temperature1 = temp0;
}
if (temp1 <= 60) {
Temperature2 = temp1;
}
if (temp2 <= 60) {
Temperature3 = temp2;
}
if (temp3 <= 60) {
Temperature4 = temp3;
}

155

if (temp4 <= 60) {
Temperature5 = temp4;
}

if ((DHT_Humi != 0) && (DHT_Humi <= 100)) {
DHT_AirHumi = DHT_Humi ;
}
if ((DHT_Temp != 0) && (DHT_Temp <= 100)) {
DHT_Temperature = DHT_Temp ;
}
}

//void myLineNotify()
//{
//
// Str_Line = {" Cold_Pot : " + String(Temperature1) + " | " +
String(Temperature2) + " | " + String(Temperature3)
// + " | " + String(Temperature4) + " | " +
String(Temperature5) + " | " + String(DHT_Temperature) + " | " +
String(DHT_AirHumi) + " | " + String(lux1)
// };
// LINE.notify(Str_Line);
//
//}
unsigned char saveHOUR, saveMIN = 0, saveSEC = 0;
boolean LineActive = false;
void Time_NTP() {
timeClient.update();

156

secondNow = timeClient.getSeconds();
minuteNow = timeClient.getMinutes();
hourNow = timeClient.getHours();
if (hourNow < 10)(Serial.print("0"));
Serial.print(hourNow);
Serial.print(":");
if (minuteNow < 10)(Serial.print("0"));
Serial.print(minuteNow);
Serial.print(":");
if (secondNow < 10)(Serial.print("0"));
Serial.print(secondNow);
Serial.println();
//-----------
// if (hourNow != saveHOUR)
// {
// myLineNotify();
// saveHOUR = hourNow ;
// }

// if ((hourNow != saveHOUR) && (secondNow == 20))
// {
// LineActive = true;
// Serial.println("Line Notify Send");
// myLineNotify();
// saveMIN = minuteNow;
// }

}

157

void CheckConnection() {
if (WiFi.status() == WL_CONNECTED && !Blynk.connected()) {
Blynk.connect();
Serial.print("\nWiFi&Blynk are connected");
if (!Blynk.connected()) {

Serial.print("\nConnection failed!");
}
}

if (WiFi.status() != WL_CONNECTED) {
Serial.println("Reconnecting to WiFi...");
WiFi.disconnect();
WiFi.begin(ssid, pass);
Serial.println(WiFi.localIP());
Serial.println(WiFi.RSSI());
}
}

void Firebase_Update() {

Firebase.setFloat(firebaseData, MT01_FB + "/Temperature/Temp01",
Temperature1);
Firebase.setFloat(firebaseData, MT01_FB + "/Temperature/Temp02",
Temperature2);
Firebase.setFloat(firebaseData, MT01_FB + "/Temperature/Temp03",
Temperature3);

158

Firebase.setFloat(firebaseData, MT01_FB + "/Temperature/Temp04",
Temperature4);
Firebase.setFloat(firebaseData, MT01_FB + "/Temperature/Temp05",
Temperature5);
Firebase.setFloat(firebaseData, MT01_FB +
"/Temperature/DHT_Temperature", DHT_Temperature);
Firebase.setFloat(firebaseData, MT01_FB + "/Humidity/DHT_AirHumi",
DHT_AirHumi);
Firebase.setFloat(firebaseData, MT01_FB + "/Ligh", lux1);
}

// Sync all pin
BLYNK_CONNECTED() {
Blynk.syncAll();
}

BLYNK_WRITE(V7) {
if (param.asInt() == 1) {
PCF_01.digitalWrite(P4, HIGH);
}
else {
PCF_01.digitalWrite(P4, LOW);
}
}
BLYNK_WRITE(V8) {
if (param.asInt() == 1) {
PCF_01.digitalWrite(P3, HIGH);
}

159

else {
PCF_01.digitalWrite(P3, LOW);
}
}
BLYNK_WRITE(V9) {
if (param.asInt() == 1) {
PCF_01.digitalWrite(P2, HIGH);
}
else {
PCF_01.digitalWrite(P2, LOW);
}
}
BLYNK_WRITE(V10) {
if (param.asInt() == 1) {
PCF_01.digitalWrite(P1, HIGH);
}
else {
PCF_01.digitalWrite(P1, LOW);
}
}

BLYNK_WRITE(V5) {
if (param.asInt() == 1) {
Old_Start = 1;
}
if ((param.asInt() == 1) && ( Old_Start == 1)) {
PCF_01.digitalWrite(P1, HIGH);
PCF_01.digitalWrite(P2, HIGH);

160

PCF_01.digitalWrite(P3, HIGH);
PCF_01.digitalWrite(P4, HIGH);
Old_Start = 0 ;
}
else {
PCF_01.digitalWrite(P1, LOW);
PCF_01.digitalWrite(P2, LOW);
PCF_01.digitalWrite(P3, LOW);
PCF_01.digitalWrite(P4, LOW);
}
}
unsigned char ThinkSpeakCount = 0;
void runStep(void) {

if (stepCount == 1)
{
Send_to_Netpie();
Serial.println("Send_to_Netpie");
}
else if ((stepCount % 5) == 0)
{
if (!LineActive)
{

BLYNK_Write();
Serial.println("Sendto_BLYNK");
}
}
// else if (stepCount == 30)

161

// {
// LineActive = false;
// }
else if (stepCount == 37)
{
Send_to_Thingspeak();
Serial.println("Send_to_Thingspeak");
}
else if (stepCount == 53)
{
Firebase_Update();
Serial.println("Firebase_Update");
}
if (stepCount == 70)
{
stepCount = 0;
}
else stepCount++;
Serial.println(stepCount);

}
unsigned long NowTime, PrevTime;
unsigned char nodeCx = 0;
void loop()
{
Blynk.run();
timer.run();
RS485_SerialEvent();

162

if (!client.connected()) {
reconnect();
}
client.loop();
NowTime = millis();

if (NowTime > (PrevTime + 1000))
{
LCD_Update();
Serial.print("nodeCx:"); Serial.println(nodeCx);

if (nodeCx == 4)
{
Serial.println("\nNode_01_SensorRead");
RS485_serial.println("@B01SR0RY#");
RS485_SerialEvent();
nodeCx = 0;
}
else nodeCx++;

PrevTime = NowTime;
}
}

163

ประวตั ิผูเ้ ขียน

ชอ่ื -นามสกลุ นาย ธีรวัฒน์ อนิ ทร์สรอ้ ย
วัน-เดอื น-ปเี กิด 12 มกราคม 2543
ทอ่ี ยู่ 43 หม่ทู ี่ 7 ต.หนองกุง อ.เมืองกาฬสินธุ์ จ.กาฬสินธ์ุ 46000
ประวตั ิการศึกษา
วศบ. วิศวกรรมอเิ ลก็ ทรอนิกสอ์ จั ฉรยิ ะ
ปรญิ ญาตรี คณะวศิ วกรรมศาสตร์
มหาวทิ ยาลัยเทคโนโลยรี าชมงคลอสี าน วิทยาเขตขอนแก่น
ปกี ารศกึ ษา 2563

ปวส. ช่างอเิ ล็กทรอนกิ ส์
วทิ ยาลัยเทคนคิ กาฬสนิ ธ์ุ
ปกี ารศึกษา 2561

ปวช. ชา่ งอเิ ล็กทรอนิกส์
วทิ ยาลยั เทคนคิ กาฬสนิ ธุ์
ปกี ารศึกษา 2558

164

ประวตั ิผ้เู ขียน

ช่ือ-นามสกุล นาย สุรภมู ิ กัณหา
วัน-เดอื น-ปเี กดิ 10 พฤศจกิ ายน 2542
ท่อี ยู่ที่อยู่ 26/1 ม.1 บา้ นกดุ จิก ต.หนองหว้า อ.กมุ ภวาปี จ.อุดรธานี ………
41110
ประวัตกิ ารศึกษา
ปริญญาตรี วศบ. วิศวกรรมอเิ ล็กทรอนกิ สอ์ จั ฉริยะ
คณะวศิ วกรรมศาสตร์
มหาวิทยาลัยเทคโนโลยีราชมงคลอีสาน วทิ ยาเขตขอนแกน่
ปกี ารศึกษา 2563

ปวส. ช่างอิเล็กทรอนกิ ส์
มหาวทิ ยาลยั เทคโนโลยรี าชมงคลอสี าน วิทยาเขตขอนแก่น
ปกี ารศกึ ษา 2561

ปวช. ช่างอิเลก็ ทรอนิกส์
วิทยาลัยเทคนคิ ขอนแก่น
ปีการศกึ ษา 2558


Click to View FlipBook Version