Kiểm tra sức khỏe acquy 12V với Attiny13

1. Chuẩn bị

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).
  1. // This sketch monitors battery voltage and turns on an LED based on it.
  2. // Processor: ATtiny 13.
  3. // Author: Rafael Larios
  4. // Date: 13.09.03
  5. //
  6.  
  7. int rLED = 4; //Red LED pin
  8. int yLED = 1; //Yellow LED pin
  9. int gLED = 2; //Green LED pin
  10. int inADC = 3;
  11. int val = 0; //This variable will hold voltage input value
  12. int dlyctr = 0; //This is the delay counter.
  13.  
  14. void setup()
  15. {
  16. pinMode(rLED, OUTPUT); //Define Red LED output
  17. pinMode(yLED, OUTPUT); //ditto Yellow LED
  18. pinMode(gLED, OUTPUT); //ditto Green LED
  19. }
  20.  
  21. void loop()
  22. {
  23. val = analogRead(inADC); //Read voltage through Analog input 0
  24. if(val < 446)
  25. {
  26. //Is battery voltage below 9.6V?
  27. digitalWrite(rLED, HIGH); //Yes, this is bad, turn on Red LED
  28. digitalWrite(yLED, LOW); //Turn off Yellow LED
  29. digitalWrite(gLED, LOW); //Turn off Green LED
  30. }
  31. else
  32. {
  33. if(val < 586)
  34. {
  35. //Is battery voltage between 9.6V and 12.4V?
  36. digitalWrite(rLED, LOW); //This is a low voltage, turn off red LED
  37. digitalWrite(yLED, HIGH); //Turn on Yelow LED as a warning.
  38. digitalWrite(gLED, LOW); //Turn off Green LED
  39. }
  40. else
  41. {
  42. if(val < 621)
  43. {
  44. //Is battery voltage between 12.4V and 13.1V?
  45. digitalWrite(rLED, LOW); //Yes, turn off Red LED
  46. digitalWrite(yLED, LOW); //Turn off Yellow LED
  47. digitalWrite(gLED, HIGH); //Turn on Green LED to indicate fully charged battery voltage.
  48. }
  49. else
  50. {
  51. dlyctr = dlyctr + 1; //increase delay counter. every pass approx. 100ms
  52. if(val < 742)
  53. {
  54. //Is battery voltage above 13.1V and below 15.5V?
  55. digitalWrite(rLED, LOW); //Turn off red LED
  56. digitalWrite(yLED, LOW); //Turn off yellow LED
  57. if(dlyctr < 6)
  58. {
  59. digitalWrite(gLED, HIGH); //Pulse green LED on for half a second
  60. }
  61. else
  62. {
  63. digitalWrite(gLED, LOW); //Pulse green LED off for half a second to show battery is charging.
  64. if(dlyctr > 10)
  65. {
  66. dlyctr = 0; //Reset delay counter
  67. }
  68. }
  69. }
  70. else //Battery voltage is above 15.5V.Danger ! Overcharge
  71. {
  72. digitalWrite(yLED, LOW); //Turn off Yellow LED
  73. digitalWrite(gLED, LOW); //Turn off Green LED
  74. if(dlyctr < 6)
  75. {
  76. digitalWrite(rLED, HIGH); //Turn on Red LED for half a second.
  77. }
  78. else
  79. {
  80. digitalWrite(rLED, LOW); //Turn off Red LED for half a second.
  81. if(dlyctr > 10)
  82. {
  83. dlyctr = 0; //Reset delay counter
  84. }
  85. }
  86. }
  87. delay(100); //Stop program 100 milliseconds to help pulse LEDs.
  88. }
  89. }
  90. }
  91. }

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.

theo arduino

Facebook Comments

Trả lời

Thư điện tử của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *