Introduction
Weatherbot คือหุ่นยนต์ตรวจสภาพอากาศ มันสามารถแนะนำว่าเราควรใส่ชุดอะไรดี แจ้งเตือนสภาพอากาศปัจจุบันอย่างหิมะหรือฝนตก และแสดงอุณหภูมิและความชื้นในตอนนี้ได้
เจ้า **WeatherBot** ตัวนี้คือสะพานเชื่อมระหว่างการสื่อสาร API จากอินเทอร์เน็ตกับอนิเมทรอนิกส์ในโลกจริง แทนที่จะต้องมานั่งอ่านข้อมูลจากหน้าจอเพื่อดูสภาพอากาศ คุณก็แค่มองไปที่หุ่นยนต์ของคุณ ถ้าข้างนอกฝนตก หุ่นยนต์ก็จะกางร่มจิ๋วออกมา! โปรเจกต์นี้จะพาน้องๆ รู้จักกับแนวคิดสุดเจ๋งที่เรียกว่า **Ambient Technology** ซึ่งเป็นการสื่อสารข้อมูลผ่านการเปลี่ยนแปลงสถานะทางกายภาพ แทนที่จะเป็นตัวเลขธรรมดาๆ
อุปกรณ์ที่ต้องใช้
- Arduino Nano RP2040 Connect
- จอแสดงผล 0.96 OLED SPI
- โพเทนชิโอมิเตอร์ (Potentiometer)
- เซ็นเซอร์ DHT 11
- ปุ่มกด (Button)
- ตัวต้านทาน 220 โอห์ม (Resistor 220)
- สายจัมเปอร์ (Jumper Wires)
วิธีประกอบ
เริ่มต้น เอาเซ็นเซอร์ DHT มาต่อขาต่างๆ กับ Arduino ตามนี้เลย
- ขา Data (ขาซ้ายสุด) ต่อกับ D4
- ขา VCC (ขากลาง) ต่อกับ +3v3
- ขา GND (ขาขวา) ต่อกับ GND
ต่อไป มาจับคู่จอ OLED กัน
- RES ต่อกับ D8
- D/C ต่อกับ D9
- CS ต่อกับ D10
- CLK ต่อกับ D13
- DIN ต่อกับ D11
- GND ต่อกับ GND และ VCC ต่อกับ +3v3
ทีนี้มาต่อโพเทนชิโอมิเตอร์กันบ้าง
- ขาเดี่ยว ต่อกับ A0
- ขาคู่แรกทางซ้าย ต่อกับ +3v3
- ขาคู่ที่สองทางขวา ต่อกับ GND
สุดท้าย ต่อปุ่มกดตามรูปด้านล่างนี้เลยน้อง
WeatherBot ทำงานยังไง
หน้าจอหลักจะแสดงอุณหภูมิปัจจุบันเป็นองศาเซลเซียสและชื่อ WeatherBot หน้าจอถัดไปที่เข้าได้โดยการหมุนโพเทนชิโอมิเตอร์ จะแสดงอุณหภูมิและความชื้นปัจจุบัน ส่วนหน้าจอสุดท้ายจะแนะนำว่าวันนี้ควรใส่ชุดอะไรดี จอจะแสดงการแจ้งเตือนสภาพอากาศปัจจุบัน เช่น ฝนตกหรือหิมะตก เมื่อเรากดค้างปุ่มไว้
รายละเอียดเทคนิคเพิ่มเติม
ดึงข้อมูลพยากรณ์อากาศ (API Integration)
หุ่นยนต์ต้องเชื่อมต่ออินเทอร์เน็ตผ่าน **ESP8266 หรือ ESP32**
- ขั้นตอนการขอข้อมูล: ESP จะส่งคำขอ HTTP GET ไปยังบริการ API อย่างเช่น `OpenWeatherMap.org`
- ผลลัพธ์: เซิร์ฟเวอร์จะตอบกลับมาเป็นสตริง JSON ที่มีข้อมูลพยากรณ์อากาศอยู่
- การตีความข้อมูล: ไลบรารี `Arduino_JSON` จะค้นหาคีย์เวิร์ด เช่น `"weather": "Rain"`
การสั่งงานอนิเมทรอนิกส์
เมื่อ ESP ตีความสภาพอากาศได้แล้ว มันจะขับเซอร์โวมอเตอร์เพื่อแสดงการกระทำทางกายภาพ:
- `If (condition == "Rain")`: Arduino จะสั่งงาน Servo 1 ให้แขนกลยกร่มที่พิมพ์จากเครื่อง 3D พริ้นท์ขึ้นมาบนหัวหุ่นยนต์ พร้อมกับให้ไฟ LED กะพริบสีน้ำเงิน
- `If (condition == "Clear")`: Servo 1 จะลดร่มลง แล้ว Servo 2 จะหย่อนแว่นกันแดดคู่จิ๋วมาครอบตาหุ่นยนต์แทน!
- `If (condition == "Wind")`: มอเตอร์ DC จะหมุนใบพัดเล็กๆ บนหน้าอกหุ่นยนต์
ฮาร์ดแวร์ขั้นสูงที่อาจต้องใช้
- ESP8266 NodeMCU: สำหรับดึงข้อมูล API จากอินเทอร์เน็ต
- เซอร์โวมอเตอร์ขนาดเล็กหลายตัว (SG90): ใช้เป็นตัวขับเคลื่อน
- มอเตอร์ DC ขนาดเล็ก: สำหรับเอฟเฟกต์ลม
- NeoPixels: สำหรับไฟแสงสีประกอบบรรยากาศ
- โครงสร้างหุ่นยนต์สุดครีเอท: ทำจากกระดาษลัง เลโก้ หรือชิ้นส่วนที่พิมพ์จากเครื่อง 3D พริ้นท์