computerkimcuong gửi vào
- 16777 lượt xem
1. Chuẩn bị
- Arduino UNO R3
- Attiny13
- Diode 4007
- IC ổn áp 78L05
- Tụ 22uF, 10uF, 1uF
- Điện trở 10k, 3k3, 330 Ohm
- LED xanh, đỏ, vàng
- Breadboard, hoặc phíp đồng làm mạch in.
2. Sơ đồ mạch điện
3. File mạch in
Mặt trên
https://drive.google.com/open?id=0Bz8Of8V4m7oSa2twTUcyUUEtX0U (mirror)
Mặt dưới
https://drive.google.com/open?id=0Bz8Of8V4m7oSY2MydXdrQUZ5dDg (mirror)
4. Code Arduino
Code để Attiny13 đọc giá trị ADC từ bình acquy thông qua 2 điện trở R1 và R2 và hiển thị lên 3 led để báo tình trạng acquy.
- Led xanh nhấp nháy tức acquy đang sạc bình thường.
- Led đỏ nhấp nháy báo hiệu dòng nạp cho acquy quá ngưởng an toàn.
- Led xanh chỉ sáng không nhấp nháy chỉ báo bình còn tốt.
- Led vàng sáng tức acquy dưới 12V.
- Led đỏ sáng không nhấp nháy tức sức khỏe acquy kém (nên chuẩn bị cái mới là vừa).
// This sketch monitors battery voltage and turns on an LED based on it. // Processor: ATtiny 13. // Author: Rafael Larios // Date: 13.09.03 // int rLED = 4; //Red LED pin int yLED = 1; //Yellow LED pin int gLED = 2; //Green LED pin int inADC = 3; int val = 0; //This variable will hold voltage input value int dlyctr = 0; //This is the delay counter. void setup() { pinMode(rLED, OUTPUT); //Define Red LED output pinMode(yLED, OUTPUT); //ditto Yellow LED pinMode(gLED, OUTPUT); //ditto Green LED } void loop() { val = analogRead(inADC); //Read voltage through Analog input 0 if(val < 446) { //Is battery voltage below 9.6V? digitalWrite(rLED, HIGH); //Yes, this is bad, turn on Red LED digitalWrite(yLED, LOW); //Turn off Yellow LED digitalWrite(gLED, LOW); //Turn off Green LED } else { if(val < 586) { //Is battery voltage between 9.6V and 12.4V? digitalWrite(rLED, LOW); //This is a low voltage, turn off red LED digitalWrite(yLED, HIGH); //Turn on Yelow LED as a warning. digitalWrite(gLED, LOW); //Turn off Green LED } else { if(val < 621) { //Is battery voltage between 12.4V and 13.1V? digitalWrite(rLED, LOW); //Yes, turn off Red LED digitalWrite(yLED, LOW); //Turn off Yellow LED digitalWrite(gLED, HIGH); //Turn on Green LED to indicate fully charged battery voltage. } else { dlyctr = dlyctr + 1; //increase delay counter. every pass approx. 100ms if(val < 742) { //Is battery voltage above 13.1V and below 15.5V? digitalWrite(rLED, LOW); //Turn off red LED digitalWrite(yLED, LOW); //Turn off yellow LED if(dlyctr < 6) { digitalWrite(gLED, HIGH); //Pulse green LED on for half a second } else { digitalWrite(gLED, LOW); //Pulse green LED off for half a second to show battery is charging. if(dlyctr > 10) { dlyctr = 0; //Reset delay counter } } } else //Battery voltage is above 15.5V.Danger ! Overcharge { digitalWrite(yLED, LOW); //Turn off Yellow LED digitalWrite(gLED, LOW); //Turn off Green LED if(dlyctr < 6) { digitalWrite(rLED, HIGH); //Turn on Red LED for half a second. } else { digitalWrite(rLED, LOW); //Turn off Red LED for half a second. if(dlyctr > 10) { dlyctr = 0; //Reset delay counter } } } delay(100); //Stop program 100 milliseconds to help pulse LEDs. } } } }
Trong code mình để nguyên văn của tác giả, mình chỉ hướng dẫn lại, mong là qua bài viết sẻ giúp cho các bạn mới học Arduino sẻ cảm thấy sự đa dạng, trong ứng dụng thực tế, với những con chip giá rẻ và dễ lắp.