ภาพรวม
การปลูกดอกไม้ให้เติบโต ดูมันผลิบาน และปล่อยให้ความงามของมันสร้างแรงบันดาลใจให้เรา มันสุดยอดมากเลยใช่มั้ยล่ะ? แต่... จะไม่สุดแน่ถ้าน้องลืมรดน้ำ แล้วอยู่ๆ ดอกไม้ของน้องก็เฉาตายซะงั้น การดูแลต้นไม้นี่มันท้าทายนะทุกคน มีเรื่องให้คิดในหัวเต็มไปหมด สิ่งสุดท้ายที่น้องจะมีเวลาคิดคือ "เมื่อกูรดน้ำต้นไม้หรือยังวะเนี่ย?"
เจ้า FlowerPot Monitor ตัวนี้แหละ จะเป็นผู้ช่วยคอยเฝ้าติดตามสภาพแวดล้อมของต้นไม้ และส่งข้อมูลสถานะของต้นไม้ให้น้องแบบไร้สาย (wireless) น้องจะรู้ได้ในทันทีว่าต้นไม้ต้องการการดูแลหรือยัง ด้วยวิธีนี้ ต้นไม้ของน้องจะปลอดภัยตลอดไป!
เจ้า FlowerPot เนี่ย ประกอบด้วย 2 ส่วนหลักๆ คือ ตัวส่งสัญญาณ (transmitter) และตัวรับสัญญาณ (receiver) ตัวส่งจะทำหน้าที่เก็บค่าต่างๆ จากเซนเซอร์ แล้วส่งต่อไปยังตัวรับ
การทำงาน
FlowerPot จะคอยเฝ้าติดตามสภาพแวดล้อมที่วางต้นไม้นั้นๆ ไว้ ไม่ว่าจะในร่มหรือกลางแจ้ง โดยอุปกรณ์จะตรวจวัด:
- ความชื้นในดิน (Soil Moisture)
- ความชื้นในอากาศ (Atmosphere Humidity)
- อุณหภูมิอากาศ (Atmosphere Temperature)
หลังจากที่ตัวส่ง (Arduino Uno ที่อ่านค่าและส่งค่า) เก็บค่าจากเซนเซอร์ทั้งหมดแล้ว มันจะส่งข้อมูลไปยังตัวรับ (Arduino Uno ที่รับค่าและแสดงผล) ผ่านคลื่นวิทยุ (RF - Radio Frequency) จากนั้นข้อมูลก็จะถูกแสดงบนหน้าจอ LCD นี่คือภาพรวมโค้ดของเรา:


ฝั่งตัวส่งต้องทำการ "แพ็ก" ตัวแปรทั้งสามตัวที่เป็น int (จำนวนเต็ม) ให้กลายเป็นตัวแปรประเภท unit8_t เดียว แล้วค่อยส่งข้อมูลผ่านการสื่อสาร RF ไปยัง Arduino Uno อีกตัวที่ติดตั้งตัวรับไว้ นี่คือไดอะแกรมที่แสดงขั้นตอนนี้

เมื่อข้อมูลถูกส่งมาถึง ฝั่งตัวรับต้องทำการประมวลผลข้อมูลและแปลงมันกลับมาเป็นตัวแปรสามตัวที่ถูกส่งมาในตอนแรก

อุปกรณ์ทั้งสองตัวทำงานด้วยแบตเตอรี่ ตัวรับสามารถอยู่ห่างจากตัวส่งได้ไม่เกิน 20 เมตร (โดยไม่มีอะไรมาขวางทางสัญญาณ เช่น ประตู) ดังนั้นน้องจะสามารถเฝ้าดูต้นไม้จากที่ไหนในบ้านก็ได้ นี่คือรูปที่ถ่ายตอนรดน้ำต้นไม้
การตรวจวัดสุขภาพพืชทางไกล (Botanical Health Telemetry)
FlowerPot Monitor คือเครื่องมือทำสวนอัจฉริยะแบบ IoT ที่จะทำให้แน่ใจว่าต้นไม้ของน้องได้รับน้ำและแสงในปริมาณที่เหมาะสมที่สุด
- การวิเคราะห์ความต้านทานของดิน (Soil Impedance Analysis): ใช้เซนเซอร์วัดความชื้นในดินแบบเฉพาะทางเพื่อตรวจสอบปริมาณน้ำ Arduino จะตรวจจับ "จุดเหี่ยวเฉา (Wilting Point)" และแจ้งเตือนผู้ใช้เมื่อดินแห้งเกินไปจนเป็นอันตราย
- ประสิทธิภาพ (Efficiency): เพื่อป้องกันการกัดกร่อนของเซนเซอร์ (อิเล็กโทรลิซิส) Arduino จะจ่ายไฟให้เซนเซอร์วัดความชื้นเพียง 100 มิลลิวินาที ในทุกๆ 1 ชั่วโมง ในช่วงที่ทำการสุ่มตัวอย่าง
ประโยชน์
- รับรู้สภาพปัจจุบันของต้นไม้ได้ทันที
- รับรู้สภาพแวดล้อมโดยรอบของต้นไม้
ขั้นตอนการประกอบโปรเจค
ขั้นตอนที่ 1: อุปกรณ์ที่ต้องใช้
โปรเจคนี้ต้องการวงจรสองชุด; หนึ่งชุดสำหรับตัวส่ง และอีกชุดสำหรับตัวรับ
สำหรับตัวรับ (Receiver)
- สายจัมเปอร์ (jumper wires)
- 1, ตัวรับสัญญาณ RF 433Mhz
สำหรับฝั่งตัวส่งสัญญาณ (Transmitter)
- สายจัมเปอร์ (jumper wires)
- 1, ตัวส่งสัญญาณวิทยุ 433Mhz (RF transmitter)
- 1, เซ็นเซอร์วัดอุณหภูมิและความชื้น DHT11
- 1, เซ็นเซอร์วัดความชื้นในดิน (Soil Moisture Sensor)
- 1, แบตเตอรี่ 9V
- 1, ตัวถือแบตเตอรี่ 9V
ขั้นตอนที่ 2: ต่อวงจรให้เรียบร้อย
ถึงเวลาต่อวงจรแล้วจ้า งานนี้พี่ใช้เบรดบอร์ดสำหรับทั้งสองฝั่ง (ตัวส่งกับตัวรับ) สำหรับฝั่งตัวรับ พี่ใช้ Arduino Uno กับเบรดบอร์ดที่มากับชุดเริ่มต้น เพราะมันกะทัดรัดดี งานนี้จัดไปวัยรุ่น!


ขั้นตอนที่ 3: มาดูโค้ดกันดีกว่า
โปรเจคนี้มีสเก็ตช์สองอันแยกกันนะน้อง อันหนึ่งสำหรับตัวรับ อีกอันสำหรับตัวส่ง ทั้งสองอันมีฟังก์ชันหลายตัว มาดูกันว่ามันทำอะไรบ้าง
- ฟังก์ชันอ่านค่า (ฝั่งตัวรับ)
void readValues()
{
uint8_t buf[VW_MAX_MESSAGE_LEN]; // create buffer where the data is received
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)) // if we receive a message
{
for (int i = 0; i < buflen; i++)
{
data[i] = buf[i]; // store message
}
if(buflen == 4)
{
temperature = data[1]; // store temperature
humidity = data[2]; // store humidity
soilMoisture = data[3]; // store soil moisture
}
}
}
ลูปนี้จะอ่านค่าจากตัวแปร unit8_t ที่ตัวส่งมาส่ง แล้วแปลงมันเป็นตัวแปรสามตัว: อุณหภูมิ, ความชื้น และความชื้นในดิน ห้ามช็อตนะตัวนี้!
- ฟังก์ชันแสดงผลอุณหภูมิ, ความชื้น และความชื้นในดิน (ฝั่งตัวรับ)
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("%");
}
ลูปพวกนี้จะแสดงข้อมูลที่รับมาและประมวลผลแล้วบนหน้าจอ LCD ครับ น้องจะเห็นความชื้นในดินของต้นไม้เป็นเปอร์เซ็นต์ (100 คือเปียกสุดๆ เหมือนน้ำ) รวมถึงอุณหภูมิและความชื้นรอบๆ ต้นไม้ด้วย
- อ่านค่าอุณหภูมิ ความชื้น และความชื้นในดิน (ฝั่งส่งข้อมูล)
void readTempAndHum()
{
chk = DHT.read11(11);
temperature = DHT.temperature;
humidity = DHT.humidity;
}
void readSoilMoisture()
{
int sensorValue = analogRead(A0); // read the raw value
soilMoisture = map(sensorValue,550,0,0,100); // map the received value
}
ฝั่งส่งข้อมูลจะอ่านค่าจากเซ็นเซอร์ DHT11 และเซ็นเซอร์วัดความชื้นในดินก่อนเป็นอันดับแรก
- ส่งข้อมูล (ฝั่งส่งข้อมูล)
// Send these values
valueToSend[1] = temperature; // send temperature
valueToSend[2] = humidity; // send humidity
valueToSend[3] = soilMoisture; // send soil moisture
valueToSend[4] = 0; // this data does not represent anything
vw_send((uint8_t *) valueToSend, 4); // send the message
vw_wait_tx(); // Wait until the message is sent
โค้ดส่วนนี้เป็นส่วนหนึ่งของ void loop ครับ หลังจากที่ฝั่งส่งอ่านค่าจากเซ็นเซอร์เสร็จแล้ว ไมโครคอนโทรลเลอร์จะแพ็กข้อมูลทั้งหมดลงในตัวแปร unit8_t แล้วส่งออกไปทางคลื่นวิทยุ (RF) ไปยังฝั่งรับ valueToSend[4] ตั้งค่าเป็น '0' ไว้เพราะค่าสุดท้ายมักจะเกิด timeout แล้วฝั่งรับไม่ได้รับค่าไปน่ะครับ
ไลบรารีที่ใช้
virtualWire - copyright (c) 2018 Mike McCauley GNU General Public Licence this library is in the public domain
wire - copyright (c) 2006 Nicholas Zambetti GNU Lesser General Public Licence this library is in the public domain
DHT - Author Rob Tillaart this library is in the public domain
liquidCrystal_I2C - author DFROBOT, posted on GitHub by fdebrabander
ขั้นตอนเซ็ตอัพ
ตรวจสอบให้แน่ใจว่าต่อวงจรถูกต้องแล้วนะครับ จากนั้นเชื่อมต่ออุปกรณ์ทั้งสองฝั่ง (ฝั่งส่งและฝั่งรับ) เข้ากับคอมพิวเตอร์แล้วอัปโหลดโค้ดด้านล่างลงไป ระวังให้ดีว่าอัปโหลดโค้ดฝั่งรับลงในบอร์ดฝั่งรับ ถ้าน้องเสียบบอร์ดทั้งสองอันเข้ากับคอมผ่านพอร์ต USB คนละอัน ก็อย่าลืมสลับพอร์ตบนคอมเพื่ออัปโหลดโค้ดฝั่งส่งลงบอร์ดอีกอันนึงด้วยล่ะ พร้อมลุยแล้ววว!
ขั้นตอนสุดท้าย - ทำกล่องใส่บอร์ด
พี่ออกแบบกล่องใส่บอร์ดฝั่งรับจากกระดาษแข็งให้นะ ส่วนฝั่งส่งพี่ไม่ทำกล่องแล้ว เพราะสายไฟแถวหน้าต่างมันก็ดูเท่ดี (หรือขี้เกียจทำก็ว่าไป 555) วิธีทำง่ายมากๆ
- ขั้นตอนที่ 1: เตรียมอุปกรณ์
สิ่งที่ต้องใช้มีแค่ กรรไกร เทป และกระดาษแข็งบางๆ ขนาดประมาณ 200mm x 180mm
- ขั้นตอนที่ 2: ตัดชิ้นส่วน
ดูจากไดอะแกรมในรูปด้านล่าง แล้วใช้กรรไกรหรือคัตเตอร์ตัดกระดาษแข็งออกเป็นชิ้นเล็กๆ ตามแบบเลย
ชิ้นส่วนก้นกล่อง

ฝาด้านขวา

ฝั่งซ้ายจ้า

ของแถม
ข้อมูล Frontmatter ดั้งเดิม
apps: - "1x Arduino Web Editor" author: "andreiflorian" category: "Sensors & Environment" components: - "1x SparkFun Soil Moisture Sensor (with Screw Terminals)" - "1x LED (generic)" - "1x DHT11 Temperature & Humidity Sensor (4 pins)" - "1x 9 Volts Battery Box" - "1x 433Mhz RF transmitter" - "1x Jumper wires (generic)" - "1x Resistor 221 ohm" - "1x I2C 16x2 LCD" - "1x 433Mhz RF Transmitter" - "2x Arduino UNO" - "1x 9 Volts Battery" description: "ดูแลต้นไม้สุดรักแบบไร้สายด้วยเซนเซอร์เทพๆ งานง่ายแต่หล่อ รู้ทันทุกการเปลี่ยนแปลงของดินและแสง วัยรุ่นสายช่างต้องจัดไป!" difficulty: "Intermediate" documentationLinks: [] downloadableFiles: - "https://create.arduino.cc/editor/LightPro/e54e12ce-7548-4a89-991d-47b9cde07770" - "https://create.arduino.cc/editor/LightPro/a39c451a-a0a2-4061-8eb8-21d7bac2da1e" - "https://create.arduino.cc/editor/LightPro/a39c451a-a0a2-4061-8eb8-21d7bac2da1e" - "https://create.arduino.cc/editor/LightPro/e54e12ce-7548-4a89-991d-47b9cde07770" encryptedPayload: "U2FsdGVkX19XrqwpZp25uktC2D4H38QzUYuvMOk0wD0lGVeKasZAUzn3XRlfF81M7N7yfQUVXSsc01rPH6oIFZRtUoyMlSGDz+uRwsKekp0=" heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/flowerpot-monitor-997a64_cover.JPG" lang: "en" likes: 16 passwordHash: "c86a72baa6171cbaec00e527b446268720acc7bfa5f642e234676667898efa59" price: 2450 seoDescription: "Wireless FlowerPot Monitor for plants. Track health using Arduino and Sensor for optimal growth. Your smart plant care solution." tags: - "data collection" - "monitoring" - "garden" title: "หม้อดอกไม้สายเฝ้า! (Wireless FlowerPot Monitor)" tools: [] videoLinks: [] views: 11868