สารบัญ:
- ขั้นตอนที่ 1: ต้นแบบ
- ขั้นตอนที่ 2: ส่งการแจ้งเตือนผ่าน Blynk
- ขั้นตอนที่ 3: การวัดการใช้พลังงานและการประมาณอายุการใช้งานแบตเตอรี่
- ขั้นตอนที่ 4: การวัดระดับแบตเตอรี่
- ขั้นตอนที่ 5: ทำให้สวยขึ้น
- ขั้นตอนที่ 6: เสร็จสิ้นการสัมผัส
วีดีโอ: เซ็นเซอร์แจ้งเตือนเครื่องซักผ้า: 6 ขั้นตอน (พร้อมรูปภาพ)
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:07
เซ็นเซอร์เครื่องซักผ้านี้ตั้งอยู่บนเครื่องซักผ้าของฉัน และใช้มาตรความเร่งเพื่อตรวจจับการสั่นจากเครื่อง เมื่อรู้สึกว่ารอบการซักสิ้นสุดลง โทรศัพท์จะส่งการแจ้งเตือนถึงฉัน ฉันสร้างสิ่งนี้ขึ้นมาเพราะว่าตัวเครื่องไม่ส่งเสียงบี๊บอีกต่อไปเมื่อทำงานเสร็จ และฉันเบื่อที่จะลืมเอาผ้าออก
รหัสสามารถพบได้ที่นี่:
รายการชิ้นส่วนทั้งหมด:
- WEMOS โลลิน32
- เขียงหั่นขนมครึ่งขนาด (สำหรับการสร้างต้นแบบ)
- กล่องโครงการ ABS พร้อมแผ่นเมทริกซ์ 59x88x30mm
- Sparkfun LIS3DH - การฝ่าวงล้อมมาตรความเร่งสามแกน
- 1x ZVP3306A P-channel MOSFET, 160 mA, 60 V, 3-Pin E-Line
- 1x BC549B TO92 30V ทรานซิสเตอร์ NPN
- ไฟ LED สีฟ้า 5 มม. 68 mcd
- 1x 100k 0.125W ตัวต้านทาน CF
- 1x 330k 0.125W ตัวต้านทาน CF
- 2x 10k 0.250W ตัวต้านทาน CF
- 1x100 0.250W ตัวต้านทาน CF
- สายเคเบิล JST PH-Style 2 ขาสำหรับผู้หญิง (14 ซม.)
- 4x M1219-8 แผ่นแม่เหล็กนีโอไดเมียม 6x4mm
ขั้นตอนที่ 1: ต้นแบบ
อุปกรณ์ใช้ไมโครคอนโทรลเลอร์ ESP32 ในกรณีนี้ ฉันใช้บอร์ดพัฒนา Lolin32 ของ Wemos ซึ่งคุณสามารถซื้อได้ใน AliExpress ในราคาประมาณ $7 มาตรความเร่งคือ Sparkfun LIS3DH - สิ่งสำคัญคือตัวตรวจวัดความเร่งต้องเป็นแบบดิจิตอลมากกว่าแบบแอนะล็อกดังที่คุณจะเห็นในภายหลัง แบตเตอรี่ที่ฉันเอามาจากลำโพงบลูทูธชุดเก่า
ESP32 เชื่อมต่อกับมาตรความเร่งผ่าน I2C โค้ดเวอร์ชันแรกทำการสำรวจแกนเร่งความเร็วสามแกน (x, y และ z) สำหรับค่าความเร่งที่วัดได้ทุกๆ 20 มิลลิวินาที การวางต้นแบบเขียงหั่นขนมบนเครื่องซักผ้า และฉันได้สร้างกราฟด้านบนซึ่งแสดงอัตราเร่งสูงสุดในช่วงต่างๆ ของรอบการซัก พีคเหล่านั้นที่ความเร่งสัมบูรณ์มากกว่า 125 มก. (125 ในพันของแรงโน้มถ่วงปกติ) จะแสดงเป็นสีส้ม เราต้องการตรวจสอบช่วงเวลาเหล่านี้และใช้เพื่อกำหนดสถานะของเครื่องซักผ้า
จะทราบได้อย่างไรว่าเครื่องเปิดหรือปิดเครื่อง?
หนึ่งในเป้าหมายของการสร้างอุปกรณ์นี้คืออุปกรณ์จะไม่ทำงานเลย เช่น. ไม่จำเป็นต้องกดปุ่ม มันจะได้ผล นอกจากนี้ยังควรใช้พลังงานต่ำมากเนื่องจากในกรณีของฉันไม่สามารถต่อสายไฟไปยังเครื่องซักผ้าได้
โชคดีที่มาตรความเร่ง LIS3DH มีคุณสมบัติที่สามารถกระตุ้นการขัดจังหวะเมื่อการเร่งเกินเกณฑ์ที่กำหนด (โปรดทราบว่าต้องใช้ตัวกรองความถี่สูงในตัวของมาตรความเร่ง - ดูโค้ดบน Github สำหรับรายละเอียด) และสามารถปลุก ESP32 ได้ ขึ้นจากโหมดสลีปลึกผ่านการขัดจังหวะ เราสามารถใช้คุณลักษณะนี้ร่วมกันเพื่อสร้างโหมดสลีปที่ใช้พลังงานต่ำมากซึ่งเกิดขึ้นจากการเคลื่อนไหว
รหัสเทียมจะมีลักษณะดังนี้:
# อุปกรณ์ปลุก
alert_threshold = 240 ตัวนับ = 10 accelerometer.set_threshold (96) #96 มก. ในขณะที่ตัวนับ > 0: if accelerometer.above_threshold (): ตัวนับ ++ อื่น ๆ: ตัวนับ - หากตัวนับ > notification_threshold: # รอบการหมุนรอบสุดท้ายตรวจพบการนอนหลับ (1 วินาที) accelerometer.set_threshold_interrupt () esp32.set_wakeup_trigger_on_interrupt() esp32.deep_sleep()
คุณสามารถดูได้ที่นี่ว่าเราใช้ตัวนับเพื่อตรวจจับจำนวนวินาทีของการเร่งความเร็วที่เราตรวจพบในช่วงเวลาปลุกปัจจุบัน หากตัวนับลดลงเป็นศูนย์ เราสามารถตั้งค่าให้เครื่องกลับสู่โหมดสลีปได้ หากตัวนับถึง 240 (เกณฑ์การแจ้งเตือน) แสดงว่าเราตรวจพบการสั่นสะเทือนเป็นเวลา 4 นาที เราสามารถปรับค่าของเกณฑ์เหล่านี้เพื่อให้แน่ใจว่าอุปกรณ์ตรวจจับรอบการหมุนรอบสุดท้ายได้อย่างถูกต้อง เมื่อตรวจพบการสั่นสะเทือนเพียงพอ เราสามารถนอนหลับต่อได้อีก 5 นาที (ในกรณีของฉัน นี่คือระยะเวลาจนกว่าการซักจะเสร็จสิ้นจริง ๆ) ก่อนที่จะส่งการแจ้งเตือน
ขั้นตอนที่ 2: ส่งการแจ้งเตือนผ่าน Blynk
Blynk เป็นบริการที่ออกแบบมาเพื่อให้สามารถโต้ตอบกับอุปกรณ์ IoT กับแอพในโทรศัพท์ของคุณ ในกรณีนี้ ฉันใช้ API การแจ้งเตือนแบบพุชซึ่งถูกทริกเกอร์โดย HTTP POST อย่างง่ายไปยัง Blynk API
ขั้นตอนที่ 3: การวัดการใช้พลังงานและการประมาณอายุการใช้งานแบตเตอรี่
ชิป ESP32 ได้รับการโฆษณาว่ามีการใช้พลังงานต่ำมากเมื่ออยู่ในโหมดสลีป (ต่ำถึง 5uA) น่าเสียดายที่วงจรบนบอร์ดพัฒนาต่างๆ มีลักษณะการใช้พลังงานที่แตกต่างกันมาก - บอร์ดสำหรับนักพัฒนา ESP32 นั้นไม่ได้สร้างมาเท่ากันทั้งหมด ตัวอย่างเช่น เมื่อฉันเริ่มโครงการนี้ครั้งแรก ฉันใช้ Sparkfun ESP32 Thing ซึ่งจะกินไฟประมาณ 1mA ในโหมดดีปสลีป (แม้หลังจากปิดไฟ LED กำลังไฟ) ตั้งแต่นั้นมาฉันใช้ Lolin32 (ไม่ใช่รุ่น Lite) ซึ่งฉันวัดกระแส 144.5uA ขณะอยู่ในโหมดหลับลึก ในการทำการวัดนี้ ฉันเพียงแค่ต่อมัลติมิเตอร์แบบอนุกรมพร้อมกับแบตเตอรี่และอุปกรณ์ ทำได้ง่ายกว่าอย่างแน่นอนในขณะที่สร้างต้นแบบด้วยเขียงหั่นขนม ฉันยังวัดการใช้งานปัจจุบันเมื่ออุปกรณ์ตื่นอยู่:
- หลับลึก: 144.5uA
- ตื่น: 45mA
- เปิดใช้งาน Wifi: 150mA
สมมติว่าฉันใช้เครื่องสัปดาห์ละสองครั้ง ฉันประมาณการกำหนดเวลาต่อไปนี้สำหรับเวลาที่เซ็นเซอร์ใช้ในแต่ละสถานะ:
- หลับลึก: 604090 วินาที (~1 สัปดาห์)
- ตื่น: 720 วินาที (12 นาที)
- เปิดใช้งาน Wifi: 10 วินาที
จากตัวเลขเหล่านี้ เราสามารถประมาณได้ว่าแบตเตอรี่จะใช้งานได้นานเท่าใด ฉันใช้เครื่องคิดเลขแสนสะดวกนี้เพื่อใช้พลังงานเฉลี่ย 0.2mA อายุการใช้งานแบตเตอรี่โดยประมาณคือ 201 วันหรือประมาณ 6 เดือน! ในความเป็นจริง ฉันพบว่าอุปกรณ์จะหยุดทำงานหลังจากผ่านไปประมาณ 2 เดือน ดังนั้นอาจมีข้อผิดพลาดในการวัดหรือความจุของแบตเตอรี่
ขั้นตอนที่ 4: การวัดระดับแบตเตอรี่
ฉันคิดว่ามันคงจะดีถ้าอุปกรณ์สามารถบอกฉันได้เมื่อแบตเตอรี่เหลือน้อย ดังนั้นฉันจึงรู้ว่าควรชาร์จเมื่อใด ในการวัดนี้ เราจำเป็นต้องวัดแรงดันไฟของแบตเตอรี่ แบตเตอรี่มีช่วงแรงดันไฟฟ้า 4.3V - 2.2V (แรงดันใช้งานขั้นต่ำของ ESP32) น่าเสียดายที่ช่วงแรงดันไฟฟ้าของพิน ADC ของ ESP32 คือ 0-3.3V ซึ่งหมายความว่า เราจำเป็นต้องลดแรงดันไฟฟ้าของแบตเตอรี่ลงจากระดับสูงสุดที่ 4.3 เป็น 3.3 เพื่อหลีกเลี่ยงไม่ให้ ADC ทำงานหนักเกินไป สามารถทำได้ด้วยตัวแบ่งแรงดันไฟฟ้า เพียงต่อตัวต้านทานสองตัวที่มีค่าที่เหมาะสมจากแบตเตอรี่กับกราวด์แล้ววัดแรงดันตรงกลาง
น่าเสียดายที่วงจรแบ่งแรงดันไฟฟ้าแบบธรรมดาจะระบายพลังงานออกจากแบตเตอรี่แม้ว่าจะไม่ได้วัดแรงดันไฟฟ้าก็ตาม คุณสามารถบรรเทาสิ่งนี้ได้โดยใช้ตัวต้านทานค่าสูง แต่ข้อเสียคือ ADC อาจไม่สามารถดึงกระแสเพียงพอเพื่อทำการวัดที่แม่นยำ ฉันตัดสินใจใช้ตัวต้านทานที่มีค่า100kΩและ330kΩซึ่งจะลดลง 4.3V เป็น 3.3V ตามสูตรตัวแบ่งแรงดันไฟฟ้านี้ ด้วยความต้านทานรวม 430kΩ เราคาดว่าจะดึงกระแส 11.6uA (โดยใช้กฎของโอห์ม) เนื่องจากการใช้งานในปัจจุบันของการนอนหลับลึกอยู่ที่ 144uA จึงเพิ่มขึ้นอย่างมีนัยสำคัญพอสมควร
เนื่องจากเราต้องการวัดแรงดันแบตเตอรี่เพียงครั้งเดียวก่อนส่งการแจ้งเตือน จึงควรปิดวงจรแบ่งแรงดันไฟฟ้าในช่วงเวลาที่เราไม่ได้วัดอะไรเลย โชคดีที่เราสามารถทำสิ่งนี้ได้ด้วยทรานซิสเตอร์สองสามตัวที่เชื่อมต่อกับหมุด GPIO ตัวใดตัวหนึ่ง ฉันใช้วงจรที่ให้ไว้ในคำตอบ stackexchange นี้ คุณสามารถเห็นฉันทดสอบวงจรด้วย Arduino และเขียงหั่นขนมในภาพด้านบน (โปรดทราบว่ามีข้อผิดพลาดในวงจรซึ่งเป็นเหตุผลที่ฉันวัดแรงดันไฟฟ้าที่สูงกว่าที่คาดไว้)
เมื่อวงจรข้างต้นเข้าที่ ฉันใช้รหัสหลอกต่อไปนี้เพื่อรับค่าเปอร์เซ็นต์แบตเตอรี่:
battery_percentage():
# เปิดใช้งานวงจรแรงดันไฟแบตเตอรี่ gpio_set_level(BATTERY_EN_PIN, สูง) # ระดับแบตเตอรี่ถูกส่งคืนเป็นจำนวนเต็มระหว่าง 0 ถึง 4095 adc_value = adc1_get_value (ADC_PIN) # เปิดใช้งานวงจรแรงดันไฟแบตเตอรี่ gpio_set_level (BATTERY_EN_PIN, LOW) float adc_voltage = adc_get_value * 3.3 / แรงดันไฟฟ้า ตัวแบ่งใช้ตัวต้านทาน 100k / 330k ohm # 4.3V -> 3.223, 2.4 -> 1.842 คาดหวัง_max = 4.3*330/(100+330) คาดหวัง_min = 2.4*330/(100+330) battery_level = (adc_voltage-expected_min)/(expected_max -expected_min) ส่งคืนระดับแบตเตอรี่ * 100.0
ขั้นตอนที่ 5: ทำให้สวยขึ้น
ในขณะที่รุ่นเขียงหั่นขนมทำงานได้ดี ฉันต้องการใส่ไว้ในแพ็คเกจที่ดูเรียบร้อยและเชื่อถือได้มากขึ้น (ไม่มีสายไฟที่หลวมหรือขาด) ฉันจัดการเพื่อค้นหากล่องโปรเจ็กต์ที่สมบูรณ์แบบสำหรับความต้องการของฉันซึ่งมีขนาดที่เหมาะสม รวมถึงพินบอร์ด ตัวยึดสำหรับยึด และสกรูเพื่อประกอบเข้าด้วยกัน นอกจากนี้ยังมีราคาถูกไม่ถึง 2 ปอนด์ หลังจากได้รับกล่อง ทั้งหมดที่ฉันต้องทำคือประสานส่วนประกอบเข้ากับพินบอร์ด
บางทีส่วนที่ยากที่สุดของสิ่งนี้คือการติดตั้งส่วนประกอบวงจรแรงดันแบตเตอรี่ทั้งหมดเข้ากับพื้นที่เล็ก ๆ ถัดจาก Lolin32 โชคดีที่มีการกระตุกเล็กน้อยและการเชื่อมต่อที่เหมาะสมกับบัดกรีที่วงจรเข้ากันได้อย่างลงตัว นอกจากนี้ เนื่องจาก Wemos Lolin32 ไม่มีพินเพื่อแสดงขั้วแบตเตอรี่บวก ฉันจึงต้องบัดกรีสายไฟจากขั้วต่อแบตเตอรี่ไปยังพินบอร์ด
ฉันยังเพิ่มไฟ LED ซึ่งจะกะพริบเมื่ออุปกรณ์ตรวจพบการเคลื่อนไหว
ขั้นตอนที่ 6: เสร็จสิ้นการสัมผัส
ฉันติดแม่เหล็กนีโอไดเมียม 4 6 มม. x 4 มม. ติดแน่นเป็นพิเศษกับฐานของกล่อง ซึ่งช่วยให้ติดแน่นกับส่วนบนของเครื่องซักผ้าด้วยโลหะ
กล่องโปรเจ็กต์มีรูเล็ก ๆ เพื่อให้เข้าถึงสายเคเบิลได้ โชคดีที่ฉันสามารถวางบอร์ด ESP32 ไว้ใกล้กับรูนี้เพื่อให้สามารถเข้าถึงขั้วต่อไมโคร USB ได้ หลังจากขยายรูด้วยมีดประดิษฐ์แล้ว สายเคเบิลก็พอดีพอดีเพื่อให้ชาร์จแบตเตอรี่ได้ง่าย
หากคุณสนใจรายละเอียดใด ๆ ของโครงการนี้โปรดแสดงความคิดเห็น หากคุณต้องการดูรหัส โปรดตรวจสอบบน Github:
github.com/alexspurling/washingmachine
แนะนำ:
DIY 37 Leds เกมรูเล็ต Arduino: 3 ขั้นตอน (พร้อมรูปภาพ)
DIY 37 Leds เกมรูเล็ต Arduino: รูเล็ตเป็นเกมคาสิโนที่ตั้งชื่อตามคำภาษาฝรั่งเศสหมายถึงวงล้อเล็ก
หมวกนิรภัย Covid ส่วนที่ 1: บทนำสู่ Tinkercad Circuits!: 20 ขั้นตอน (พร้อมรูปภาพ)
Covid Safety Helmet ตอนที่ 1: บทนำสู่ Tinkercad Circuits!: สวัสดีเพื่อน ๆ ในชุดสองตอนนี้ เราจะเรียนรู้วิธีใช้วงจรของ Tinkercad - เครื่องมือที่สนุก ทรงพลัง และให้ความรู้สำหรับการเรียนรู้เกี่ยวกับวิธีการทำงานของวงจร! หนึ่งในวิธีที่ดีที่สุดในการเรียนรู้คือการทำ ดังนั้น อันดับแรก เราจะออกแบบโครงการของเราเอง: th
Bolt - DIY Wireless Charging Night Clock (6 ขั้นตอน): 6 ขั้นตอน (พร้อมรูปภาพ)
Bolt - DIY Wireless Charging Night Clock (6 ขั้นตอน): การชาร์จแบบเหนี่ยวนำ (เรียกอีกอย่างว่าการชาร์จแบบไร้สายหรือการชาร์จแบบไร้สาย) เป็นการถ่ายโอนพลังงานแบบไร้สาย ใช้การเหนี่ยวนำแม่เหล็กไฟฟ้าเพื่อจ่ายกระแสไฟฟ้าให้กับอุปกรณ์พกพา แอปพลิเคชั่นที่พบบ่อยที่สุดคือ Qi Wireless Charging st
4 ขั้นตอน Digital Sequencer: 19 ขั้นตอน (พร้อมรูปภาพ)
4 ขั้นตอน Digital Sequencer: CPE 133, Cal Poly San Luis Obispo ผู้สร้างโปรเจ็กต์: Jayson Johnston และ Bjorn Nelson ในอุตสาหกรรมเพลงในปัจจุบัน ซึ่งเป็นหนึ่งใน “instruments” เป็นเครื่องสังเคราะห์เสียงดิจิตอล ดนตรีทุกประเภท ตั้งแต่ฮิปฮอป ป๊อป และอีฟ
ป้ายโฆษณาแบบพกพาราคาถูกเพียง 10 ขั้นตอน!!: 13 ขั้นตอน (พร้อมรูปภาพ)
ป้ายโฆษณาแบบพกพาราคาถูกเพียง 10 ขั้นตอน!!: ทำป้ายโฆษณาแบบพกพาราคาถูกด้วยตัวเอง ด้วยป้ายนี้ คุณสามารถแสดงข้อความหรือโลโก้ของคุณได้ทุกที่ทั่วทั้งเมือง คำแนะนำนี้เป็นการตอบสนองต่อ/ปรับปรุง/เปลี่ยนแปลงของ: https://www.instructables.com/id/Low-Cost-Illuminated-