สารบัญ:

เซ็นเซอร์แจ้งเตือนเครื่องซักผ้า: 6 ขั้นตอน (พร้อมรูปภาพ)
เซ็นเซอร์แจ้งเตือนเครื่องซักผ้า: 6 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: เซ็นเซอร์แจ้งเตือนเครื่องซักผ้า: 6 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: เซ็นเซอร์แจ้งเตือนเครื่องซักผ้า: 6 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: วิธีต่อ ตัววัดระดับน้ำเครื่องซักผ้า pressure switch 2024, กรกฎาคม
Anonim
Image
Image
ต้นแบบ
ต้นแบบ

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

รหัสสามารถพบได้ที่นี่:

รายการชิ้นส่วนทั้งหมด:

  • 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
การส่งการแจ้งเตือนผ่าน 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: เสร็จสิ้นการสัมผัส

Image
Image
สัมผัสสุดท้าย
สัมผัสสุดท้าย
สัมผัสสุดท้าย
สัมผัสสุดท้าย

ฉันติดแม่เหล็กนีโอไดเมียม 4 6 มม. x 4 มม. ติดแน่นเป็นพิเศษกับฐานของกล่อง ซึ่งช่วยให้ติดแน่นกับส่วนบนของเครื่องซักผ้าด้วยโลหะ

กล่องโปรเจ็กต์มีรูเล็ก ๆ เพื่อให้เข้าถึงสายเคเบิลได้ โชคดีที่ฉันสามารถวางบอร์ด ESP32 ไว้ใกล้กับรูนี้เพื่อให้สามารถเข้าถึงขั้วต่อไมโคร USB ได้ หลังจากขยายรูด้วยมีดประดิษฐ์แล้ว สายเคเบิลก็พอดีพอดีเพื่อให้ชาร์จแบตเตอรี่ได้ง่าย

หากคุณสนใจรายละเอียดใด ๆ ของโครงการนี้โปรดแสดงความคิดเห็น หากคุณต้องการดูรหัส โปรดตรวจสอบบน Github:

github.com/alexspurling/washingmachine

แนะนำ: