ไฟแสดงสถานะแบตเตอรี่อ่อน


22

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


1
ไมโครคอนโทรลเลอร์ตัวไหน?
Brian Carlton

คำตอบ:


13

สำหรับคำถามหลักเกี่ยวกับวิธีการวัดแรงดันไฟฟ้าของแบตเตอรี่วิธีที่ง่ายที่สุดคือการใช้พิน ADC ตัวใดตัวหนึ่งในอาร์ดิโน

หากคุณกำลังจัดหาแบตเตอรี่ 5 โวลต์ (ไม่น่าจะเป็นไปได้) คุณสามารถเรียกใช้ + ตรงไปที่หนึ่งในอะนาล็อกในพินและใช้ analogRead () - แต่ละค่าที่เพิ่มขึ้น (จาก 0-1023) จะแสดง 4.9mV ดังนั้นคูณค่าการอ่านด้วย. 0049 เพื่อให้อ่านโวลต์

หากคุณทำงานสูงกว่า 5v (มีโอกาสมากขึ้น) คุณสามารถใช้วงจรแบ่งแรงดันไฟฟ้า (ดู: http://en.wikipedia.org/wiki/Voltage_divider ) เพื่อนำแรงดันไฟฟ้าที่คุณส่งไปยังอินพุตอนาล็อกไปที่ <= 5v หากคุณใช้งาน 12V คุณจะต้องแบ่งแรงดันไฟฟ้าออกเป็น 1/3 จากนั้นหลังจากคูณค่า ADC ให้คูณด้วย 3 เพื่อให้ได้แรงดันไฟฟ้าที่แท้จริง

ดังนั้นหากใช้ 12V และตัวแบ่งแรงดัน 1 / 3rd:

#define BAT_PIN 14

float read_batt_volts(void) {

  int val = analogRead(BAT_PIN);

  float volts = (float) val * (float) 0.0049 * (float) 3;

  return(volts)
}

! ค


2
ฉันมีสองสิ่งสำคัญที่จะเพิ่มเข้าไปในนี้ อันดับแรกแบตเตอรี่ 12V ส่วนใหญ่จะไม่ตายที่ 0V แต่อย่างน้อยก็ใกล้ถึง 5 โวลต์ของแรงดันประจุเต็มของคุณ เทคนิคทั่วไปในการวัดค่าความละเอียดที่สูงกว่าในช่วงการทำงานคือการลดแรงดันด้วยไดโอดซีเนอร์ ตัวต้านทานในซีรีย์ที่มีซีเนอร์และคุณวัดค่าได้ทั่วทั้งตัวต้านทาน ประการที่สองคนส่วนใหญ่ไม่ทราบว่าคุณต้องดึงกระแสจากแบตเตอรี่เพื่อให้ได้ความคิดที่ดีเกี่ยวกับพลังงานที่เหลือ
Kortuk

@Kortuk: คุณสามารถอธิบายสองอย่างสำหรับการเรียนรู้ของฉัน: (1) เพื่อให้อยู่ในช่วงแรงดันพินที่ยอมรับได้คุณแนะนำว่าวิธี zener-diode จะให้ความละเอียดสูงกว่าวิธีแบ่งแรงดันไฟฟ้าหรือไม่? (2) ทำไมคุณพูดเป็นพิเศษที่นี่ว่า "คุณต้องวาดกระแส ... " ฯลฯ ?
boardbite

22

tinker.it เผยแพร่ "ระดับความลับ" ระดับแรงดันไฟฟ้าใน Atmega168 / atmega328 ด้วยเคล็ดลับเล็กน้อย Arduino สามารถเปรียบเทียบ VCC กับการอ้างอิงความแม่นยำภายใน 1.1v คำอธิบายและรหัสอยู่ที่นี่: https://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/


ยอดเยี่ยมฉันใช้ atmega บนแบตเตอรี่และไม่สามารถมีค่า vref ที่เชื่อถือได้ ขอบคุณสำหรับการโพสต์สิ่งนี้มันแก้ไขปัญหาของฉันเหมือนเวทมนตร์!
radhoo

10

ข้อเสนอแนะของ shutterdrone นั้นดีมาก แต่ขาดรายละเอียดเนื่องจากหมายความว่าการอ้างอิงแรงดันไฟฟ้าแบบอะนาล็อกนั้นเหมือนกับแรงดันไฟฟ้าที่วัดได้ (นอกเหนือจากสมมติว่ามีการใช้ Arduino ซึ่งไม่ได้ระบุไว้อย่างชัดเจน)

คุณจะต้องใช้ ADC ไม่ว่าจะเป็นส่วนประกอบของ uC หรือส่วนประกอบภายนอก ADC ต้องการการอ้างอิงแรงดันไฟฟ้าแบบอะนาล็อก (ARef) เพื่อเปรียบเทียบอินพุตด้วย คุณไม่ต้องการให้ ARef เหมือนกับแรงดันไฟฟ้าที่คุณสัมผัสเพราะ ADC จะมองเห็นแรงดันไฟฟ้าขาเข้าและการอ้างอิงเท่ากันเสมอดังนั้นค่าอนาล็อกสำหรับแรงดันไฟฟ้าที่ตรวจจับจะเป็นค่าสูงสุดเสมอ สิ่งที่คุณต้องการคือการอ้างอิงแรงดันไฟฟ้าอะนาล็อกที่แม่นยำมากซึ่งจะไม่เปลี่ยนแปลงเมื่อแรงดันไฟฟ้าของแหล่งจ่ายไฟเปลี่ยนแปลง ADC จะเปรียบเทียบแรงดันอ้างอิงนั้นกับแรงดันแบตเตอรี่ คุณสามารถใช้ตัวแบ่งแรงดันไฟฟ้าเพื่อลดแรงดันแบตเตอรี่ที่จะรับรู้ได้ในช่วงของ ARef

Arduino (Atmega8 / 168/328 / etc.) มี ADC ในตัวและการอ้างอิงแบบอะนาล็อกในตัว 1.1V ดังนั้นส่วนประกอบภายนอกที่คุณต้องการคือตัวต้านทานสำหรับตัวแบ่งแรงดันไฟฟ้า ฉันคิดว่าคุณต้องการใช้ค่าที่สูงมากสำหรับตัวต้านทานเพื่อลดการระบายออกของแบตเตอรี่ในปัจจุบัน


2
คะแนนที่ยอดเยี่ยม - และคุณถูกต้องว่าฉัน (ไม่ถูกต้อง) ถือว่าเป็น Arduino ในการผสม =)! c
shutterdrone
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.