โปรเจกต์ FlowerPot Monitor
Monitor ต้นไม้ที่คุณรักแบบไร้สายด้วย FlowerPot Monitor
Monitor ต้นไม้ที่คุณรักแบบไร้สายด้วย FlowerPot Monitor
การปลูกดอกไม้ เฝ้าดูมันผลิบาน และปล่อยให้ความงามของมันสร้างแรงบันดาลใจให้กับคุณเป็นเรื่องที่ยอดเยี่ยมมาก แต่จะไม่เป็นเช่นนั้นหากคุณลืมรดน้ำ และรู้ตัวอีกทีมันก็เหี่ยวเฉาตายไปแล้ว การดูแลดอกไม้อาจเป็นเรื่องที่ท้าทาย เพราะทุกคนต่างก็มีเรื่องให้คิดมากมาย และสิ่งสุดท้ายที่คุณจะมีเวลาทำคือการถามตัวเองว่าคุณรดน้ำต้นไม้ไปแล้วหรือยัง
FlowerPot Monitor จะคอยตรวจสอบสภาพแวดล้อมของต้นไม้และแจ้งเตือนสถานะของต้นไม้ให้คุณทราบแบบไร้สาย คุณจึงสามารถรู้ได้ทันทีหากต้นไม้ต้องการการดูแล ด้วยวิธีนี้ ต้นไม้ของคุณก็จะปลอดภัยอยู่เสมอ
FlowerPot ประกอบด้วยสองส่วน คือ Transmitter และ Receiver โดย Transmitter จะทำหน้าที่เก็บค่าที่อ่านได้แล้วส่งไปยัง Receiver
FlowerPot จะตรวจสอบสภาพแวดล้อมที่ต้นไม้ตั้งอยู่ตลอดเวลา ไม่ว่าจะเป็นในร่มหรือกลางแจ้ง โดยอุปกรณ์จะตรวจสอบ:
หลังจากที่ Transmitter (Arduino Uno ที่ทำหน้าที่อ่านและส่งค่า) เก็บค่าจาก Sensor ทั้งหมดแล้ว มันจะส่งค่าไปยัง Receiver (Arduino Uno ที่ทำหน้าที่รับค่าและแสดงผล) ผ่านคลื่น RF (Radio Frequency) โดยข้อมูลจะถูกแสดงผลบนจอ LCD นี่คือภาพรวมของ Code:


Transmitter จะต้องแพ็ก Variable แบบ int
(integer) ทั้ง 3 ตัวลงใน Variable แบบ unit8_t
แล้วจึงส่งข้อมูลผ่านการสื่อสาร RF ไปยัง Arduino Uno อีกเครื่องที่ติดตั้ง Receiver ไว้ นี่คือ Diagram แสดงขั้นตอนดังกล่าว

เมื่อได้รับข้อมูลแล้ว Receiver จะต้องประมวลผลข้อมูลและแปลงกลับเป็น Variable ทั้ง 3 ตัวที่ถูกส่งมา

อุปกรณ์ทั้งสองทำงานด้วย Battery โดย Receiver สามารถอยู่ห่างจาก Transmitter ได้ 20 เมตรหรือน้อยกว่า (หากไม่มีสิ่งใดขวางทางสัญญาณของอุปกรณ์ เช่น ประตู) เพื่อให้คุณสามารถตรวจสอบต้นไม้ได้จากทุกที่ในบ้าน นี่คือรูปภาพบางส่วนที่ถ่ายขณะรดน้ำต้นไม้
Step 1: Required Apparatus
โปรเจกต์นี้ต้องใช้ Circuit 2 ชุด ชุดหนึ่งสำหรับ Transmitter และอีกชุดสำหรับ Receiver
สำหรับ Receiver
สำหรับ Transmitter
Step 2: Connecting the Circuit
ตอนนี้เราต้องเชื่อมต่อส่วนประกอบทั้งหมดเข้าด้วยกัน ผมใช้ Breadboard สำหรับทั้งสอง Circuit (Transmitter และ Receiver) สำหรับ Receiver ผมใช้ Genuino Uno และ Breadboard ที่ได้มากับ Genuino starter kit เมื่อนานมาแล้วเพราะมันมีขนาดค่อนข้างกะทัดรัด


Step 3: Acknowledging the Code
โปรเจกต์นี้ประกอบด้วย Sketch สองชุด ชุดหนึ่งสำหรับ Receiver และอีกชุดสำหรับ Transmitter ทั้งสอง Sketch ประกอบด้วยฟังก์ชันมากมาย ซึ่งอธิบายไว้ดังนี้
void readValues()
{
uint8_t buf[VW_MAX_MESSAGE_LEN]; // สร้าง buffer สำหรับรับข้อมูล
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)) // ถ้าได้รับข้อความ
{
for (int i = 0; i < buflen; i++)
{
data[i] = buf[i]; // เก็บข้อความ
}
if(buflen == 4)
{
temperature = data[1]; // เก็บค่า temperature
humidity = data[2]; // เก็บค่า humidity
soilMoisture = data[3]; // เก็บค่า soil moisture
}
}
}
Loop นี้จะอ่าน Variable แบบ unit8_t ที่ Transmitter ส่งมา และแปลงเป็น Variable สามตัวคือ temperature, humidity และ soil moisture
void displayTempAndHum()
{
lcd.setCursor(0,1);
lcd.print("Temp ");
lcd.setCursor(5,1);
lcd.print(temperature);
lcd.setCursor(7,1);
lcd.print("C");
lcd.setCursor(9,1);
lcd.print("Hum ");
lcd.setCursor(13,1);
lcd.print(humidity);
lcd.setCursor(15,1);
lcd.print("%");
}
void displaySoilMoisture()
{
lcd.setCursor(1,0);
lcd.print("Soil Moist ");
lcd.setCursor(12,0);
lcd.print(soilMoisture);
lcd.setCursor(14,0);
lcd.print("%");
}
Loop เหล่านี้จะแสดงข้อมูลที่ได้รับและประมวลผลแล้วบน LCD ความชื้นในดินของต้นไม้จะแสดงเป็นเปอร์เซ็นต์ (100 คือเป็นของเหลวทั้งหมด) พร้อมทั้งอุณหภูมิและความชื้นในสภาพแวดล้อมของต้นไม้
void readTempAndHum()
{
chk = DHT.read11(11);
temperature = DHT.temperature;
humidity = DHT.humidity;
}
void readSoilMoisture()
{
int sensorValue = analogRead(A0); // อ่านค่า raw value
soilMoisture = map(sensorValue,550,0,0,100); // ทำการ map ค่าที่ได้รับ
}
Transmitter จะเริ่มจากการอ่านค่าจาก Sensor อุณหภูมิและความชื้น DHT11 และ Soil Moisture Sensor
// ส่งค่าเหล่านี้
valueToSend[1] = temperature; // ส่งค่า temperature
valueToSend[2] = humidity; // ส่งค่า humidity
valueToSend[3] = soilMoisture; // ส่งค่า soil moisture
valueToSend[4] = 0; // ข้อมูลนี้ไม่ได้แทนค่าอะไร
vw_send((uint8_t *) valueToSend, 4); // ส่งข้อความ
vw_wait_tx(); // รอจนกว่าข้อความจะถูกส่ง
Code ส่วนนี้เป็นส่วนหนึ่งของ void loop หลังจาก Transmitter อ่านค่าจาก Sensor แล้ว Microcontroller จะแพ็กข้อมูลทั้งหมดลงใน Variable แบบ unit8_t และส่งผ่านการสื่อสาร RF ไปยัง Receiver โดย valueToSend[4]
มีค่าเป็น '0'
เนื่องจากมักเกิด Timeout กับค่าสุดท้ายและ Receiver จะไม่ได้รับค่าดังกล่าว
Libraries
virtualWire - copyright (c) 2018 Mike McCauley GNU General Public Licence Library นี้เป็น Public Domain
wire - copyright (c) 2006 Nicholas Zambetti GNU Lesser General Public Licence Library นี้เป็น Public Domain
DHT - Author Rob Tillaart Library นี้เป็น Public Domain
liquidCrystal_I2C - author DFROBOT, โพสต์บน GitHub โดย fdebrabander
Setup
ตรวจสอบให้แน่ใจว่า Circuit ได้รับการเดินสายอย่างถูกต้อง เชื่อมต่ออุปกรณ์ทั้งสอง (Transmitter และ Receiver) เข้ากับคอมพิวเตอร์และ Upload Code ด้านล่าง ตรวจสอบให้แน่ใจว่าคุณได้ Upload Code ของ Receiver ไปยัง Board Receiver หากคุณเชื่อมต่อ Microcontroller ทั้งสองตัวเข้ากับคอมพิวเตอร์ผ่าน Port แยกกัน ให้เปลี่ยน USB Port บนคอมพิวเตอร์ของคุณไปยังอีก Board หนึ่งและ Upload Sketch ของ Transmitter ตอนนี้คุณก็พร้อมแล้ว!
Final
ผมได้ออกแบบ Enclosure สำหรับ Board Receiver จากกระดาษลัง ผมตัดสินใจว่า Transmitter ไม่จำเป็นต้องมีฝาครอบเพราะผมไม่กังวลเรื่องการเดินสายไฟไว้ข้างหน้าต่าง กล่องนี้ทำได้ง่ายมาก
สิ่งที่คุณต้องการสำหรับ Enclosure นี้คือ กรรไกร, เทปกาว และกระดาษลังบางๆ ขนาดประมาณ 200 มม. x 180 มม.
ทำตาม Diagram ด้านล่าง ตัดกระดาษลังออกเป็นชิ้นเล็กๆ โดยใช้กรรไกรหรือแท่นตัดกระดาษ
ชิ้นส่วนล่าง (bottom piece)

ฝาครอบขวา (right cover)

ฝาครอบซ้าย (left cover)

ชิ้นส่วนเสริม (extras)

ฝาครอบด้านบนแบ่งออกเป็นสองส่วน โดยมีช่องว่างตรงกลางเพื่อให้เห็นภายในและ LED เล็กน้อย ซึ่งช่วยให้อุปกรณ์ดูเท่ หน้าจอก็ต้องมองเห็นได้เช่นกัน ดังนั้นเราจึงต้องตัดช่องว่างบนชิ้นส่วนฝาครอบทั้งสองสำหรับหน้าจอ วัดขนาดหน้าจอและทำการคำนวณ
ได้เวลาประกอบส่วนประกอบทั้งหมดเข้าด้วยกัน ขั้นแรกติดกาว Arduino Uno และ Breadboard เข้ากับชิ้นส่วนด้านล่าง
ต่อไปเราจะวางฝาครอบไว้ด้านบน อย่าลืมตัดรูสำหรับ Power input บน Arduino Uno ติดกาวฝาครอบชิ้นใหญ่ทางด้านขวาและชิ้นที่เล็กกว่าทางด้านซ้าย ตรวจสอบให้แน่ใจว่า LED อยู่ในช่องว่างระหว่างกัน
ตอนนี้โปรเจกต์เสร็จเรียบร้อยแล้ว! นี่คือรูปภาพบางส่วนของอุปกรณ์ที่เสร็จสมบูรณ์:

แม่และยายของผมชอบดูแลดอกไม้ แต่บางครั้งพวกท่านก็ลืมรดน้ำและต้นไม้ก็ตายไป แล้วการทำงานและการดูแลทั้งหมดก็มลายหายไป เพื่อป้องกันไม่ให้ช่วงเวลาที่น่าเศร้าเหล่านั้นเกิดขึ้น ผมจึงสร้างอุปกรณ์นี้ขึ้นเพื่อช่วยพวกท่านในการทำสวน
สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้