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

โปรเจกต์ นาฬิกาพยากรณ์อากาศโดยใช้ Old Alarm และ Arduino

นาฬิกาพยากรณ์อากาศที่สร้างจาก Nano, Salvaged Alarm, BME280 Sensor, DS1307 RTC, Old Cell Phone Battery และหน้าจอ Nokia 5110

โปรเจกต์ นาฬิกาพยากรณ์อากาศโดยใช้ Old Alarm และ Arduino

วิดีโอสาธิต

Video

▶ กดเพื่อดูวิดีโอสาธิตโปรเจกต์

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

1x Arduino Nano R3
-
1x SparkFun Atmospheric Sensor Breakout - BME280
-
1x Soldering iron (generic)
-
1x DS1307 64 x 8, Serial, I²C Real-Time Clock
-

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

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

บทความฉบับเต็มพร้อมรูปภาพประกอบ สามารถอ่านได้ที่นี่

สำหรับโปรเจกต์นี้ คุณจะต้องมีอุปกรณ์ดังนี้:

  • นาฬิกาปลุกแบบเข็มทรงกลมเรือนเก่า
  • Arduino Nano
  • BME280 sensor module (วัดอุณหภูมิ, ความชื้น, ความกดอากาศ)
  • LCD display module จาก Nokia 5110
  • DS1307 RTC clock
  • TP4056 Lithium battery charger
  • แบตเตอรี่ Li-ion เก่าที่ถอดมาจากโทรศัพท์มือถือ
  • โมดูล 3.7v to 5v booster ขนาดเล็ก
  • Light Dependent Resistor (LDR - ตัววัดแสง)
  • Buzzer (ใช้ของเก่าจาก PC เครื่องเก่า)
  • ปุ่มกด 3 ปุ่ม
  • Resistors หลายตัว (2x10k, 270 ohm) และ Transistor (2N2222A หรือรุ่นใกล้เคียง)
  • ท่อหด (Shrink tube) ขนาดกว้าง
  • แผ่น PCB เก่าสำหรับใช้ตกแต่งหน้าปัด
  • สายต่อขยาย Micro-USB (ที่มีทั้งหัวตัวเมียและตัวผู้เป็น Micro-USB)
  • แผ่น Prototype board ขนาด 2x8 ซม. และสายไฟ

ขั้นตอนที่ 1: ถอดแยกชิ้นส่วนทุกอย่าง

ขั้นแรกผมถอดแยกชิ้นส่วนนาฬิกาเรือนเก่าออก ทั้งกระดิ่ง, มอเตอร์, กลไกนาฬิกาที่เสียแล้ว...

ขั้นตอนที่ 2: ปุ่มสำหรับตั้งค่า Digital

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

ผมใช้เศษอลูมิเนียมตัดออกมาเพื่อทำเป็นแผ่นป้ายชื่อปุ่ม โดยตัวอักษรบนป้ายสร้างขึ้นโดยใช้ชุดตอกตัวอักษร (Letter-punches) และเขียนเน้นด้วยปากกา Marker สีดำ

ขั้นตอนที่ 3: Capacitor สำหรับ Motor

ผมจะเก็บกระดิ่งอันเดิมไว้เพื่อใช้ส่งเสียงปลุกด้วย Motor ในกลไกนาฬิกาเก่าที่เสียแล้วมี Ceramic Capacitor ที่มีรหัส 104 อยู่ ผมถอดมันออกมาจากแผ่นวงจรแล้วบัดกรีเข้ากับ Motor โดยตรง วิธีนี้จะช่วยป้องกันการเกิด Power spikes เมื่อเปิดใช้งาน Motor ในช่วงเวลาปลุก นอกจากนี้สิ่งสำคัญที่ต้องโน้ตไว้คือ Motor จะถูกควบคุมผ่าน Transistor ซึ่งจะอธิบายเพิ่มเติมภายหลัง

ขั้นตอนที่ 4: หน้าปัดใหม่สำหรับนาฬิกา

เนื่องจากผมตัดสินใจทำหน้าปัดใหม่ให้นาฬิกา ผมจึงนำแผ่น PCB จากกองขยะมาใช้ และใช้เครื่องเป่าลมร้อน (Heatgun) ถอดอุปกรณ์ทุกอย่างออกอย่างรวดเร็ว ส่วนรูตรงกลางนั้นเจาะไว้สำหรับติดตั้งหน้าจอ Digital ของนาฬิกาเรือนใหม่

ขั้นตอนที่ 5: หน้าจอ Digital จากโทรศัพท์มือถือเครื่องเก่า

สำหรับโปรเจกต์นี้ ผมเลือกใช้หน้าจอ LCD จากโทรศัพท์มือถือ Nokia 5110 รุ่นเก่า หน้าจอเหล่านี้มีขายทั่วไปในรูปแบบ Module ใช้พลังงานน้อยมาก และมี Library สำหรับ Arduino ที่ดีมาก หากคุณซื้อ Module หน้าจอ 5110 ใหม่ คุณกำลังช่วยโลกใบนี้อยู่ เพราะ Module ใหม่ทั้งหมดผลิตขึ้นจากโทรศัพท์มือถือรุ่น 5110, 3110 และ 3210 ที่ถูกนำกลับมาใช้ใหม่!

ขั้นตอนที่ 6: การเชื่อมต่อวงจร

คุณคงเดาได้แล้วว่าผมวางแผนจะใช้บอร์ด Arduino ในการควบคุมนาฬิกาเรือนนี้ โปรเจกต์นี้ทำตามได้ง่ายแม้จะเป็นมือใหม่หัดใช้ Arduino เพราะผมไม่ได้ทำแผ่น PCB ขึ้นมาเอง มันคือบอร์ด Arduino Nano ที่เชื่อมต่อกับ Module ต่างๆ ได้แก่ BME280 sensor (วัดอุณหภูมิ, ความกดอากาศ และความชื้น), DS1307 RTC clock, TP4056 Lithium battery charger, Booster module 3.7v to 5v ขนาดเล็ก, Light Dependent Resistor (LDR - วัดแสง) และ Buzzer (นำมาจาก PC เครื่องเก่า)

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

เกร็ดเล็กน้อยเกี่ยวกับการติดตั้ง:

  • Motor เชื่อมต่อโดยตรงจาก Battery ผ่าน Transistor โดย Arduino จะควบคุม Transistor ผ่าน Resistor และขา PWM D5
  • ขา D7-12 ใช้สำหรับการเชื่อมต่อ LCD ส่วน Ground และ VCC เชื่อมต่อกับรางไฟบนบอร์ดพักสาย
  • LDR ถูกติดตั้งไว้ที่หน้าปัดนาฬิกา โดยมีการบัดกรี Resistor และสายไฟออก 3 เส้นไว้ที่ด้านหลังหน้าปัดโดยตรง
  • สำหรับการเชื่อมต่อปุ่มกด ผมใช้ฟังก์ชัน PULLUP ภายใน Arduino โดยปุ่ม Menu จะเชื่อมต่อกับ Interrupt ซึ่งผมเพิ่งมารู้ภายหลังว่าเราสามารถใช้ PULLUP ภายในสำหรับ Interrupt ได้ด้วย การใช้ Interrupt สำหรับปุ่ม Menu นั้นจำเป็นเพื่อให้ Code ไม่ต้องคอย Scan สถานะของปุ่มตลอดเวลา
  • นาฬิกาจะตรวจวัดและแสดงสถานะของ Battery ด้วย ดังนั้น Battery จึงเชื่อมต่อโดยตรงกับขา A0 เนื่องจากแรงดัน Battery จะไม่เกิน 4.2V จึงปลอดภัยที่จะต่อเข้ากับขา Analog ของ Arduino โดยตรง
  • Buzzer เชื่อมต่อโดยตรงกับขา PWM D6 ถึงแม้จะไม่ใช่วิธีที่แนะนำนัก แต่ผมก็ทำได้เพราะ Arduino Nano สามารถรับแรงดันได้สูงกว่าที่ระบุไว้ และ Buzzer ก็ไม่ได้ทำงานต่อเนื่องนานๆ อย่างไรก็ตาม การต่อแบบนี้อาจทำให้ขาบนบอร์ด ESP ไหม้ได้ง่าย ดังนั้นในกรณีเหล่านั้นผมแนะนำให้ใช้ Transistor ควบคุมจะดีกว่า
  • นาฬิกาเดิมมีสวิตช์อยู่แล้ว ผมจึงตัดสินใจนำมาใช้ ซึ่งมันดูเป็นธรรมชาติมากเมื่ออยู่ด้านหลัง

ขั้นตอนที่ 7: บอร์ดพักสายเพื่อการเชื่อมต่อที่ง่ายขึ้น

Module ทุกตัวต้องการการเชื่อมต่อไฟบวกและ Ground ผมจึงเลือกใช้แผ่น Prototype board ขนาด 2x8 ซม. และบัดกรีรางไฟ 5V และ Ground ลงไป นอกจากนี้ผมยังทำรางสำหรับ I2C ไว้ด้วย เพราะมี Module หลายตัวที่ใช้ Interface แบบ I2C

อีกด้านหนึ่งผมบัดกรี Pin มาตรฐานไว้เพื่อให้สามารถเชื่อมต่อและถอด Module ออกได้เมื่อต้องการ

อุปกรณ์เพิ่มเติมบางส่วนก็ถูกบัดกรีลงที่นี่เช่นกัน เช่น Transistor และ Resistor สำหรับควบคุม Motor และ Resistor สำหรับปุ่ม Menu ที่ใช้ Interrupt โดยผมได้แสดง Schematics ไว้ในหัวข้อก่อนหน้านี้แล้ว

ขั้นตอนที่ 8: การติดตั้งระบบพลังงาน

ผมใช้แบตเตอรี่ Lithium-ion เก่าจากโทรศัพท์มือถือมาเป็นแหล่งพลังงานให้นาฬิกา ปกติแล้วแบตเตอรี่มือถือที่ถูกเปลี่ยนทิ้งยังคงมีความจุเหลืออยู่พอสมควร (อย่างน้อยครึ่งหนึ่งจากตอนที่ยังใหม่) ข้อดีของมันคือมีวงจรป้องกันการคายประจุเกิน (Discharge protection circuit) ในตัวและบางมาก จึงเหมาะสำหรับใช้ในพื้นที่จำกัด

ในการเชื่อมต่อแบตเตอรี่ คุณแค่บัดกรีสายไฟเข้ากับขั้ว + และ - ของแบตเตอรี่ ไม่ต้องกังวล คุณจะไม่ทำให้เซลล์เสียหายเพราะมี Controller และมีช่องว่างระหว่างขั้วกับสารเคมีภายในเซลล์

ในรูปนี้คุณจะเห็นแบตเตอรี่ และเครื่องชาร์จ TP4056 รวมถึง Booster 5V ที่เชื่อมต่อเข้าด้วยกันและต่อกับแบตเตอรี่ ผมใช้ท่อหดหุ้มทุกอย่างเพื่อความปลอดภัยและทำให้มันดูเรียบร้อย

ขั้นตอนที่ 9: Micro USB สำหรับชาร์จไฟและอัปเดต Firmware

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

ถึงเวลาติดตั้งพอร์ต Micro USB ไว้ที่ด้านหลัง ทำไมต้องเป็น Micro USB ทั้งที่ Nano ใช้ Mini USB? คำตอบง่ายๆ คือเพราะในบ้านเรา สาย USB ส่วนใหญ่จะเป็นของโทรศัพท์มือถือ ซึ่งจะสะดวกกว่าถ้าใช้นาฬิกากับสายเหล่านั้นได้

เนื่องจากผมต้องการใช้ทั้งสำหรับชาร์จไฟและอัปเดตฟังก์ชันของนาฬิกาและสถานีพยากรณ์อากาศ ผมจึงปอกสาย USB แล้วเดินสายไฟไปยังเครื่องชาร์จ TP4056 และต่อสาย Data+/Data- ตรงไปยังช่อง USB ของ Arduino Nano คุณสามารถดูรายละเอียดได้จาก Schematic ที่ผมแนบไว้

ขั้นตอนที่ 10: การประกอบขั้นสุดท้าย

ได้เวลาประกอบทุกอย่างกลับเข้าไปในตัวเรือนนาฬิกาเดิม ผมใช้ท่อหดเพื่อฉนวนป้องกันอุปกรณ์และ Module ต่างๆ แม้แต่ Arduino ก็ถูกหุ้มด้วยท่อหดเช่นกัน

ขั้นตอนที่ 11: Code

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

จนถึงตอนนี้ นอกจากตัวนาฬิกาเองแล้ว นี่คือฟังก์ชันที่โปรเจกต์นี้รองรับ:

  • แสดงเวลาและวันที่ (รวมถึงเวลาและการเปิดใช้งานการตั้งปลุกในหน้าจอเดียวกัน)
  • หน้าจอสว่างขึ้นในที่มืดหรือเมื่อตรวจพบการเคลื่อนไหว (อ้างอิงจากการเปลี่ยนแปลงของแสง)
  • พยากรณ์อากาศ (แดดออก, มีเมฆมาก, ฝนตก)
  • แสดงผลอุณหภูมิ, ความกดอากาศ และความชื้น (สำหรับความชื้นจะมีการระบุหากอากาศแห้งเกินไป)
  • เมนูสำหรับการตั้งค่า: ตั้งปลุก, เปลี่ยนเวลา, เปิด/ปิดการแสดงวันที่, เปิด/ปิดเสียงแจ้งเตือนการเปลี่ยนสภาพอากาศ และสลับหน่วยวัดระหว่าง Imperial และ Metric
  • การตั้งค่านาฬิกาปลุก - เปิด/ปิด, ตั้งเวลา, เลือกเสียงทำนอง และ/หรือเปิดเสียงกระดิ่งสำหรับการแจ้งเตือน

Code ล่าสุด: https://github.com/LenkaDesign/Weather-Forecast-A...

Code จะมีการอัปเดตฟีเจอร์ใหม่ๆ ในอนาคต ดังนั้นอย่าลืมกลับมาเช็คการอัปเดต Firmware นะครับ :-)

หากคุณเป็นมือใหม่ในโลกของ Arduino นี่คือขั้นตอนที่ผมแนะนำให้ทำ:

  • ติดตั้ง USB driver สำหรับบอร์ดของคุณ (เช่น CH340)
  • ติดตั้ง Arduino IDE
  • ติดตั้ง Libraries ที่ใช้ในโปรเจกต์นี้
  • ดาวน์โหลด Code ล่าสุดจาก GitHub และอัปโหลดไปยังนาฬิกาโดยใช้สาย Micro USB (คุณสามารถใช้สายจากมือถือได้)

อัลกอริทึมการพยากรณ์อากาศมีดังนี้:

Arduino Nano จะรับข้อมูลใหม่จาก Sensor BME280 ทุกๆ 12 นาที โดยมีรอบการวัดผลอยู่ที่ 3 ชั่วโมง หลังจากผ่านไป 3 ชั่วโมง ช่วงของการตรวจสอบความกดอากาศ (ค่าสูงสุดและต่ำสุดในช่วง 3 ชั่วโมง) จะเลื่อนไปสัมพันธ์กับค่าเฉลี่ยในช่วงปัจจุบันและค่าความกดอากาศปัจจุบัน ทุกๆ ชั่วโมงทิศทางการเปลี่ยนแปลงของความกดอากาศจะถูกบันทึกพร้อมกับค่าปัจจุบัน โดยใช้หน่วย kPa ในการคำนวณพยากรณ์

เนื่องจากข้อจำกัดด้านหน่วยความจำของ Nano อัลกอริทึมพยากรณ์อากาศจึงต้องถูกทำให้ง่ายขึ้น แต่แม้จะทำให้ง่ายลง มันก็สามารถพยากรณ์ปริมาณน้ำฝนในอีก 12-24 ชั่วโมงข้างหน้าได้ แม้ว่าการพยากรณ์ตอนนี้จะค่อนข้างมองโลกในแง่ร้ายไปนิด โดยค่าเริ่มต้นคือ "ท้องฟ้ามีเมฆมาก" (Cloudy Weather)

"ท้องฟ้าแจ่มใส" (Sunny Weather) - ค่าความกดอากาศปัจจุบันสูงกว่าเกณฑ์มาตรฐาน 7 จุด, ความกดอากาศไม่ลดลง และผลต่างระหว่างค่าต่ำสุดและสูงสุดในช่วง 3 ชั่วโมงที่ผ่านมาไม่เกิน 2 จุด

มีโอกาสเกิดฝน "ฝนตก" (Rainy Weather) - ความกดอากาศปัจจุบันต่ำกว่าเกณฑ์มาตรฐาน 15 จุด และผลต่างระหว่างค่าต่ำสุดและสูงสุดมากกว่า 2 จุด หรือ ความกดอากาศกำลังลดลงและผลต่างระหว่างค่าปัจจุบันกับเกณฑ์มาตรฐานอยู่ที่ 3 - 30 จุด

เพื่อเพิ่มความแม่นยำในการพยากรณ์ แนะนำให้เปลี่ยนค่า "altitude" (ความสูงเหนือระดับน้ำทะเล) ของคุณในไฟล์ Code หลัก คุณสามารถตรวจสอบระดับความสูงของพื้นที่คุณได้ที่นี่: https://www.daftlogic.com/sandbox-google-maps-find-altitude.htm

ขั้นตอนที่ 12: วิดีโอสอนทีละขั้นตอน

หากการทำตามคำอธิบายข้างต้นเป็นเรื่องยาก ผมยังมีวิดีโอที่แสดงขั้นตอนทั้งหมดให้ดูด้วยครับ

ขั้นตอนที่ 13: บทสรุป

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

ส่วนประกอบทั้งหมดมีราคาถูกและหาซื้อได้ง่ายจาก SparkFun/Aliexpress/eBay/Amazon

ผมหวังว่าบทเรียนนี้จะเป็นประโยชน์และน่าสนใจสำหรับคุณนะครับ!

Code

🔒 ปลดล็อก Code

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

รหัสอ้างอิงโปรเจกต์: weather-forecast-clock-using-old-alarm-and-arduino-853fbf
699 บาท
PromptPay QR Code