PCB图如下:
描述
一个完整的电池容量测量设备,使用 Arduino-Nano [Lithium-NiMH-NiCd]
特征:
识别假锂离子/锂聚合物/镍镉/镍氢电池
可调恒流负载(也可由用户修改)
能够测量几乎任何类型电池的容量(低于 5V)
易于焊接、构建和使用,即使对于初学者也是如此(所有组件均为 Dip)
LCD 用户界面
规格:
板电源:7V 至 9V(最大值)
电池输入:0-5V(max) – 无反极性
恒流负载:37mA 至 540mA(max) – 16 步 – 可由用户修改
电池容量的真实测量对于许多情况都是必不可少的。容量测量设备也可以解决发现假电池的问题。如今,假冒的锂电池和镍氢电池随处可见,无法满足其宣传的容量。有时很难区分真假电池。这个问题存在于备用电池市场,例如手机电池。此外,在许多情况下,必须确定二手电池(例如笔记本电脑电池)的容量。在本文中,我们将学习使用著名的 Arduino-Nano 板构建电池容量测量威廉希尔官方网站 。我为浸入式组件设计了 PCB 板。因此,即使是初学者也可以焊接和使用该设备。
示意图
印刷威廉希尔官方网站 板
材料清单
Arduino代码
#include#include 常量 浮动Low_BAT_level = 3.2 ; //3R 负载 (R7) 的电流步长 const int Current[] = { 0 , 37 , 70 , 103 , 136 , 169 , 202 , 235 , 268 , 301 , 334 , 367 , 400 , 440 , 470 , 500 , 540 }; 常量字节 RS = 2 , EN = 3 , D4 = 4 , D5 = 5 , D6 = 6 , D7 = 7 ; 常量字节 PWM_Pin = 10 ; 常量字节扬声器 = 12 ; 常量 int BAT_Pin = A0; int PWM_Value = 0 ; 无符号 长容量 = 0 ; int ADC_Value = 0 ; 浮动BAT_Voltage = 0 ; 字节 Hour = 0 , Minute = 0 , Second = 0 ; 布尔计算=假,完成=假; LiquidCrystal lcd (RS、EN、D4、D5、D6、D7); 按钮UP_Button ( 16 , 25 , false , true ) ; 按钮Down_Button ( 15 , 25 , false , true ) ; 无效 设置() { pinMode(PWM_Pin,输出); pinMode(扬声器,输出); 模拟写入(PWM_Pin,PWM_Value); UP_Button.begin(); Down_Button.begin(); lcd.setCursor( 0 , 0 );液晶显示器开始( 16、2 ); lcd.print( "电池容量" ); lcd.setCursor( 0 , 1 ); lcd.print( "测量 v1.0" ); 延迟(3000); lcd.clear(); lcd.print( "加载调整:向上/向下" ); lcd.setCursor( 0 , 1 ); lcd.print( "0" ); } 无效 循环() { UP_Button.read(); Down_Button.read(); if (UP_Button.wasReleased() && PWM_Value < 80 && calc == false ) { PWM_Value = PWM_Value + 5; 模拟写入(PWM_Pin,PWM_Value); lcd.setCursor( 0 , 1 ); lcd.print( "" ); lcd.setCursor( 0 , 1 ); lcd.print(String(Current[PWM_Value / 5 ]) + "mA" ); } if (Down_Button.wasReleased() && PWM_Value > 1 && calc == false ) { PWM_Value = PWM_Value - 5 ; 模拟写入(PWM_Pin,PWM_Value); lcd.setCursor( 0 , 1 ); lcd.print( "" ); lcd.setCursor( 0 , 1 ); lcd.print(String(Current[PWM_Value / 5 ]) + "mA" ); } if (UP_Button.pressedFor( 1000 ) && calc == false ) { 数字写入(扬声器,高); 延迟(100); 数字写入(扬声器,低); lcd.clear(); 定时器中断(); } } 无效 定时器中断() { 计算 =真; 而(完成==假){ 第二个++; 如果(第二 == 60){ 第二 = 0 ; 分钟++; lcd.clear(); } 如果(分钟 == 60){ 分钟 = 0 ; 小时++; } lcd.setCursor( 0 , 0 ); lcd.print(String(Hour) + ":" + String(Minute) + ":" + String(Second)); lcd.setCursor( 9 , 0 ); ADC_Value = 模拟读取(BAT_Pin); BAT_Voltage = ADC_Value * ( 5.0 / 1024 ); lcd.print( "V:" + String(BAT_Voltage)); lcd.setCursor( 0 , 1 ); lcd.print( "BAT-C: 等等!..." ); 如果(BAT_Voltage < Low_BAT_level) { lcd.setCursor( 0 , 1 ); lcd.print( "" ); lcd.setCursor( 0 , 1 ); 容量 = (小时 * 3600 ) + (分钟 * 60 ) + 秒; 容量 = (容量 * 电流 [PWM_Value / 5 ]) / 3600 ; lcd.print( "BAT-C:" + String(容量) + "mAh" ); 完成 =真; PWM_Value = 0 ; 模拟写入(PWM_Pin,PWM_Value); 数字写入(扬声器,高); 延迟(100); 数字写入(扬声器,低); 延迟(100); 数字写入(扬声器,高); 延迟(100); 数字写入(扬声器,低); } 延迟(1000); } }
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !