เปิด Arduino ด้วยตัวจับเวลาทุก 24 ชั่วโมง


9

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

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

ฉันกำลังมองหา "วงจรสวิตช์ตัวจับเวลา" มันควรจะนับถอยหลัง 24 ชั่วโมงแล้วเปิดรีเลย์หรือ MOSFET ซึ่งเชื่อมต่อตัวควบคุมแรงดันไฟฟ้าเข้ากับพลังงานและเมื่อเปิด Arduino และ ESP8266 เมื่อ Arduino เสร็จสิ้นการส่งสัญญาณมันจะรีเซ็ตตัวจับเวลาซึ่งจะตัดการเชื่อมต่อตัวควบคุมแรงดันไฟฟ้าจากพลังงานและอื่น ๆ แน่นอนวงจรจับเวลาควรใช้พลังงานน้อยมากเท่านั้น

ไม่มีใครรู้วงจรเช่นนั้นหรือไม่? ฉันค้นหาAliExpressด้วยคำศัพท์ทั้งหมดที่อยู่ในใจของฉันไม่ประสบความสำเร็จ หรืออาจเป็น IC ที่สามารถใช้ (ง่าย) ในการสร้างวงจรดังกล่าว?


1
อุปกรณ์ควบคุมแรงดันไฟฟ้าไม่เหมือนกันทั้งหมด บางตัวจะใช้เพียงไม่กี่ไมโครแอมป์
Gerben

กำลังคิดนอกกรอบ ... ตัวจับเวลาสวิตช์สลับมาตรฐานจะไม่เพียงพอหรือไม่
user31208

คำตอบ:


5

วิธีการหนึ่งจะใช้โมดูล DS3231 (นาฬิกาเรียลไทม์แม่นยำ) โมดูลดังกล่าวขายใน eBay ด้วยราคาต่ำกว่า $ 1 ds3231 arduinoค้นหา

โดยทั่วไปแล้วโมดูลเหล่านี้มีตัวเชื่อมต่อหกพินโดยมีหมุดที่มีป้ายกำกับว่า 32K, SQW, SCL, SDA, VCC และ GND ดังที่ระบุไว้ในข้อมูลจำเพาะของ DS3231 หมุด INT / SQW จะใช้สำหรับสัญญาณคลื่นสี่เหลี่ยมหรือสัญญาณขัดจังหวะ ในหน้า 13 ของข้อกำหนดในส่วนลงทะเบียนควบคุมมันบอกว่า:

Bit 2: การควบคุมขัดจังหวะ (INTCN) บิตนี้ควบคุมสัญญาณ INT / SQW เมื่อบิต INTCN ถูกตั้งค่าเป็นลอจิก 0 คลื่นสี่เหลี่ยมจะถูกส่งออกบนขา INT / SQW เมื่อบิต INTCN ถูกตั้งค่าเป็นลอจิก 1 ดังนั้นการจับคู่ระหว่างการลงทะเบียนการรักษาเวลากับการลงทะเบียนการเตือนภัยจะเป็นการเปิดใช้งานเอาต์พุต INT / SQW (หากเปิดใช้งานการเตือนด้วย)

เริ่มแรกคุณจะเรียกใช้ร่างเพื่อตั้งค่า DS3231: เปิดสัญญาณเตือนรายวันเปิดใช้งานการขัดจังหวะแทนที่จะเป็นคลื่นสี่เหลี่ยมกำหนดเวลาปัจจุบัน ฯลฯ จากนั้นโหลดโปรแกรมปฏิบัติการที่อ่านแรงดันแบตเตอรี่รถยนต์ทุกครั้งที่ทำงาน และทำหน้าที่อย่างเหมาะสม

DS3231 INT / SQW pin จะต่อสายไปยังประตูของ mosfet P-channel ที่เปลี่ยนพลังงาน 12V ไปยัง Arduino P-fet จะเปิดขึ้นเมื่อสัญญาณขาออก open-drain INT / SQW เปิดสัญญาณเตือน โปรแกรมการดำเนินงานทำธุรกิจแล้วจึงล้างการอินเตอร์รัปต์ DS3231 เพื่อปิดเครื่องจนกว่าจะมีสัญญาณเตือนครั้งต่อไปเกิดขึ้น (สำหรับการแก้ไขข้อบกพร่องให้ตั้งช่วงเวลาแบบบรีเฟอร์มากกว่าหนึ่งวันตัวอย่างเช่นหนึ่งครั้งต่อนาทีตามที่อธิบายไว้ในตารางที่ 2 Alarm Mask Bits หน้า 12 ของข้อมูลจำเพาะ)

โดยทั่วไปแล้ว DS3231 จะดึง 0.84 μAเมื่อทำงานจากแบตเตอรี่ 3.3V หรือ 1 μAจาก 5V ดูคุณสมบัติทางไฟฟ้าหน้า 3 ของข้อกำหนด


1
ประตู P-fet น่าจะถูกดึงขึ้นไปที่ +12 ผ่านทางตัวต้านทาน 1 megohm; มิฉะนั้นจะเปิดได้อย่างมีประสิทธิภาพเมื่อขา INT / SQW ปิดและสามารถลอยไปยังระดับที่กำหนดได้
James Waldby - jwpat7

3

ตัวจับเวลาหรือวงจรตัวจับเวลาจะต้องวาดกระแส ชิพ AVR ของ pico กำลังดึงกระแสไฟฟ้าน้อยมากในโหมดสลีปในไมโครแอมป์ 10 วินาทีสำหรับ 328 ถ้าฉันจำได้ถูกต้อง การนอน AVR สำหรับการวาดที่น้อยที่สุดในปัจจุบันต้องการเพียงแค่ทุกอย่างปิดตัวลง แต่ตัวจับเวลาจ้องจับผิดและช่วงเวลา WDT สูงสุดคือ 8 วินาที ห้องสมุดเช่น Narcoleptic จะจัดการระยะเวลานานขึ้นสำหรับคุณ สิ่งที่คุณจะต้องทำคือการจัดหาแหล่งจ่ายไฟควบคุมที่มีประสิทธิภาพมากกว่าที่สร้างขึ้นบนบอร์ด Arduino (ถ้านั่นคือสิ่งที่คุณจะใช้) วิธีนี้โหลดของ Arduino สำหรับแบตเตอรี่รถยนต์ของคุณควรเป็นแบบไมโครสโคป

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

ฉันยังไม่ได้ทำงบประมาณพลังงานเพื่อทราบความจุที่คุณต้องการและไม่ว่าคุณจะต้องการเซลล์ D หรือสามารถสร้างอาร์เรย์ที่ใช้งานได้จริงจากแบตเตอรี่ขนาดเล็กพูด AAs แต่นั่นเป็นวิธีที่จะทำให้แบตเตอรี่ของรถมีศูนย์เป็นศูนย์ (ลดความต้องการเซ็นเซอร์แรงดันแบตเตอรี่รถยนต์) คุณอาจต้องการรวมสุขภาพอาร์เรย์ของแบตเตอรี่ Arduino ในรายงานประจำวันหรือสำหรับราคาของ Alkalines ไม่กี่ตัวคุณอาจออกแบบแบตเตอรี่ Arduino ที่ตรวจสอบว่ามันไม่จำเป็น

จุดข้อมูลสองสามข้อแนะนำว่าแบตเตอรี่ที่แยกต่างหากเป็นวิธีที่เป็นไปได้:

  • เครื่องอัลคาไลน์ขนาด 9 โวลต์ตัวเดียวใช้เครื่องตรวจจับควันมานานกว่าหนึ่งปีรวมถึงการทำน้ำแข็งในห้องใต้หลังคา (ในประสบการณ์ของฉันเอง) และไม่มีอัลคาไลน์ในขณะที่ 9 โวลต์ไม่รู้จักความจุของพวกเขา
  • เทอร์โมเซตถอยหลังดิจิตอลของฉันทำงานเป็นเวลาสองปีในเซลล์ AA 2 ก้อนก่อนหน้าพวกเขาเสียชีวิตและข) ฉันเริ่มคิดและเริ่มเปลี่ยนมันเป็นประจำทุกปี :)

ฉันมี ATmega48 (คล้ายกับรุ่น 328P) วิ่งออกมาจากเซลล์ AA สองครั้งตั้งแต่เดือนมิถุนายน 2012 มันตื่นมานานกว่า 4 นาทีต่อวันเล็กน้อยนอนหลับตลอดเวลา ยังไม่ได้เปลี่ยนแบตเตอรี่
Edgar Bonet

นั่นเป็นช่วงเวลาที่น่าประทับใจ - ขอบคุณสำหรับจุดข้อมูลเพิ่มเติม @EdgarBonet! ฉันคาดหวังว่า Arduino นอนหลับและก้อนแบตเตอรี่อัลคาไลน์อาจเป็นระบบ "set-it-and-forget-it" แต่โดยไม่คำนวณการสิ้นเปลืองพลังงานฉันไม่คิดว่ามันจะทำงานได้ดี @DirkPitt มีข้อมูลสนับสนุนจริง ๆ
JRobert

มันไม่ใช่ Arduino เต็มรูปแบบ: ฉันไม่สามารถจัดการให้ต่ำกว่า ~ 40 mA กับ Uno ของฉันได้ในขณะที่ ATmega เปิดเปลือยSLEEP_MODE_PWR_SAVEโดยมีเพียงตัวจับเวลา async ที่ทำงานอยู่
Edgar Bonet

0

พิจารณาใช้ "Adafruit TPL5110 Power Timer"
https://learn.adafruit.com/adafruit-tpl5110-power-timer-breakout/overview


นี่เป็นความคิดเห็นเพิ่มเติม หากคุณต้องการปล่อยให้มันเป็นคำตอบโปรดเพิ่มคำอธิบายเพิ่มเติมของการแก้ปัญหาของคุณ
MichaelT

-1

คุณสามารถใช้สวิตช์ตั้งเวลา คุณสามารถซื้อได้จากอีเบย์ประมาณ 5 ยูโร ฉันใช้อันนี้

https://www.ebay.com/itm/CN101-DC-12V-16A-Digital-LCD-Power-Programmable-Timer-Time-Relay-Switch-New/401190616827?hash=item5d68d2fefb:g:K3sAAOSwNRdX3ggT

ฉันได้ลองใช้ ds3231 แล้ว แต่ arduino อยู่ในโหมดเตรียมพร้อมและใช้พลังงาน นี่เป็นทางออกที่ดีที่สุดที่ฉันพบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.