หน้าแรก ดูโปรเจกต์ทั้งหมด
Expert

โปรเจกต์ FlowerPot Monitor

Monitor ต้นไม้ที่คุณรักแบบไร้สายด้วย FlowerPot Monitor

โปรเจกต์ FlowerPot Monitor

รายการอุปกรณ์และเครื่องมือ

1x SparkFun Soil Moisture Sensor (with Screw Terminals)
🛒 สั่งซื้อ
1x DHT11 Temperature & Humidity Sensor (4 pins)
🛒 สั่งซื้อ
1x 9 Volts Battery Box
🛒 สั่งซื้อ
1x 433Mhz RF transmitter
🛒 สั่งซื้อ
1x Jumper wires (generic)
🛒 สั่งซื้อ
1x 433Mhz RF Transmitter
🛒 สั่งซื้อ
1x 9 Volts Battery
-
}

รายละเอียดและวิธีทำ

Overview

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

FlowerPot Monitor จะคอยตรวจสอบสภาพแวดล้อมของต้นไม้และแจ้งเตือนสถานะของต้นไม้ให้คุณทราบแบบไร้สาย คุณจึงสามารถรู้ได้ทันทีหากต้นไม้ต้องการการดูแล ด้วยวิธีนี้ ต้นไม้ของคุณก็จะปลอดภัยอยู่เสมอ

FlowerPot Monitor

FlowerPot ประกอบด้วยสองส่วน คือ Transmitter และ Receiver โดย Transmitter จะทำหน้าที่เก็บค่าที่อ่านได้แล้วส่งไปยัง Receiver

Functionality

FlowerPot จะตรวจสอบสภาพแวดล้อมที่ต้นไม้ตั้งอยู่ตลอดเวลา ไม่ว่าจะเป็นในร่มหรือกลางแจ้ง โดยอุปกรณ์จะตรวจสอบ:

  • ความชื้นในดิน (Soil Moisture)
  • ความชื้นในอากาศ (Atmosphere Humidity)
  • อุณหภูมิในอากาศ (Atmosphere Temperature)

หลังจากที่ 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 แสดงขั้นตอนดังกล่าว

Transmitting Protocol

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

Package Configuration

อุปกรณ์ทั้งสองทำงานด้วย Battery โดย Receiver สามารถอยู่ห่างจาก Transmitter ได้ 20 เมตรหรือน้อยกว่า (หากไม่มีสิ่งใดขวางทางสัญญาณของอุปกรณ์ เช่น ประตู) เพื่อให้คุณสามารถตรวจสอบต้นไม้ได้จากทุกที่ในบ้าน นี่คือรูปภาพบางส่วนที่ถ่ายขณะรดน้ำต้นไม้

Benefits

  • รับรู้สภาพปัจจุบันของต้นไม้
  • รับรู้สภาวะแวดล้อมของต้นไม้

Constructing the Project

Step 1: Required Apparatus

โปรเจกต์นี้ต้องใช้ Circuit 2 ชุด ชุดหนึ่งสำหรับ Transmitter และอีกชุดสำหรับ Receiver

สำหรับ Receiver

  • สาย jumper wires
  • 1, resistor (220Ω)
  • 1, LED
  • 1, 9v Battery
  • 1, 9v Battery Holder

สำหรับ Transmitter

  • สาย jumper wires
  • 1, 9v Battery
  • 1, 9v Battery Holder

Step 2: Connecting the Circuit

ตอนนี้เราต้องเชื่อมต่อส่วนประกอบทั้งหมดเข้าด้วยกัน ผมใช้ Breadboard สำหรับทั้งสอง Circuit (Transmitter และ Receiver) สำหรับ Receiver ผมใช้ Genuino Uno และ Breadboard ที่ได้มากับ Genuino starter kit เมื่อนานมาแล้วเพราะมันมีขนาดค่อนข้างกะทัดรัด

receiver schematics

transmitter Schematics

Step 3: Acknowledging the Code

โปรเจกต์นี้ประกอบด้วย Sketch สองชุด ชุดหนึ่งสำหรับ Receiver และอีกชุดสำหรับ Transmitter ทั้งสอง Sketch ประกอบด้วยฟังก์ชันมากมาย ซึ่งอธิบายไว้ดังนี้

  • Read Values (Receiver)
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

  • Display Temp, Hum and Display Soil Moisture (Receiver)
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 คือเป็นของเหลวทั้งหมด) พร้อมทั้งอุณหภูมิและความชื้นในสภาพแวดล้อมของต้นไม้

  • Read Temp and Hum and Read Soil Moisture (Transmitter)
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

  • Send Data (Transmitter)
// ส่งค่าเหล่านี้ 
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 ไม่จำเป็นต้องมีฝาครอบเพราะผมไม่กังวลเรื่องการเดินสายไฟไว้ข้างหน้าต่าง กล่องนี้ทำได้ง่ายมาก

  • Step 1: Required Apparatus

สิ่งที่คุณต้องการสำหรับ Enclosure นี้คือ กรรไกร, เทปกาว และกระดาษลังบางๆ ขนาดประมาณ 200 มม. x 180 มม.

  • Step 2: Shaping the Parts

ทำตาม Diagram ด้านล่าง ตัดกระดาษลังออกเป็นชิ้นเล็กๆ โดยใช้กรรไกรหรือแท่นตัดกระดาษ

The parts cut out

ชิ้นส่วนล่าง (bottom piece)

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

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

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

  • Step 3: Cut top For Screen

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

  • Step 4: Putting it Together

ได้เวลาประกอบส่วนประกอบทั้งหมดเข้าด้วยกัน ขั้นแรกติดกาว Arduino Uno และ Breadboard เข้ากับชิ้นส่วนด้านล่าง

It is Glued

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

Cover Placed

ตอนนี้โปรเจกต์เสร็จเรียบร้อยแล้ว! นี่คือรูปภาพบางส่วนของอุปกรณ์ที่เสร็จสมบูรณ์:

  • Transmitter
transmitter
  • Receiver
Receiver
  • Overview
FlowerPot Monitor

Background

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

Code

🔒 ปลดล็อก Code

สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้

รหัสอ้างอิงโปรเจกต์: flowerpot-monitor-997a64
2450 บาท
PromptPay QR Code