找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 11542|回復(fù): 10
打印 上一主題 下一主題
收起左側(cè)

簡易測電池容量儀制作 附Arduino代碼

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:85865 發(fā)表于 2019-1-26 11:47 | 只看該作者 |只看大圖 回帖獎勵(lì) |倒序?yàn)g覽 |閱讀模式
以前做項(xiàng)目剩有幾十個(gè)14500鋰電池,不知是否全好的,干脆就做個(gè)測試電池容量的來測一下

原理圖:


/************************************************************
*簡易測電池容量
*電阻是已知的 電壓通過A0口測得 之后就可以通過歐姆定律算得電流
*電流乘以時(shí)間得到容量 (這個(gè)用一秒一次采樣 之后將這一秒當(dāng)成恒流放電
*算出每秒放電量再不斷疊加)
*
*電阻5歐 5瓦 可根據(jù)容量改( Rdown)



**************************************************************/

float Udown=0, Rdown=5,Vcc=5,capacity,Idown,time=0;

void setup()
{
Serial.begin(9600);  //定義串口波特率為9600
}

void loop() {
time=time+1;
Udown = analogRead(A0);  //讀取A0口值
Udown=Udown/1023*Vcc;  //換算為電壓值
Idown=Udown/Rdown;    //換算為電流值
capacity=capacity+Idown;  //換算為電池容量值
Serial.print("U:");
Serial.print(Udown,3);  //電壓值保留小數(shù)點(diǎn)3位
Serial.print("V");
Serial.print("  I:");
Serial.print(Idown,3);   //電流值保留小數(shù)點(diǎn)3位
Serial.print("A");
Serial.print("  capacity:");
Serial.print(capacity,3);   //電池容量值保留小數(shù)點(diǎn)3位
Serial.print("mAh");
Serial.print("  time:");
Serial.print(time);   //測試時(shí)間
Serial.println("s");


delay(1000);        // 一秒刷新一次 這個(gè)與容量測試掛鉤 最好別改
}






*串口工具需要一直開著,否則會清零
*電池中途可以卸下 再接上 不影響測量 另外這個(gè)只是粗略測量
*只能測5v以下
*另外改改程序(A0-A7)就能實(shí)現(xiàn)多個(gè)電池一起測


評分

參與人數(shù) 1黑幣 +80 收起 理由
admin + 80 共享資料的黑幣獎勵(lì)!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏8 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:373684 發(fā)表于 2019-10-14 23:57 | 只看該作者
Arduino:1.6.9 (Windows 7), 開發(fā)板:"Arduino Due (Programming Port)"

Arduino:1: error: 'float time' redeclared as different kind of symbol

In file included from c:\users\administrator.user-20161022ou\appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\4.8.3-2014q1\arm-none-eabi\include\stdlib.h:11:0,

                 from C:\Users\Administrator.USER-20161022OU\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.8\cores\arduino/Arduino.h:24,

                 from sketch\Arduino.ino.cpp:1:

c:\users\administrator.user-20161022ou\appdata\local\arduino15\packages\arduino\tools\arm-none-eabi-gcc\4.8.3-2014q1\arm-none-eabi\include\time.h:47:11: error: previous declaration of 'time_t time(time_t*)'

time_t    _EXFUN(time,     (time_t *_timer));

           ^

D:\360嫻忚鍣ㄤ笅杞絃BV\絎簲绔犲簲鐢ㄨ繘闃禱5.4娓╂箍搴︽祴閲廫Arduino\Arduino.ino: In function 'void loop()':

D:\360嫻忚鍣ㄤ笅杞絃BV\絎簲绔犲簲鐢ㄨ繘闃禱5.4娓╂箍搴︽祴閲廫Arduino\Arduino.ino:9:11: warning: pointer to a function used in arithmetic [-Wpointer-arith]

Arduino:9: error: assignment of function 'time_t time(time_t*)'

Arduino:9: error: cannot convert 'time_t (*)(time_t*) {aka long int (*)(long int*)}' to 'time_t(time_t*) {aka long int(long int*)}' in assignment

Arduino:24: error: call of overloaded 'print(time_t (&)(time_t*))' is ambiguous

D:\360嫻忚鍣ㄤ笅杞絃BV\絎簲绔犲簲鐢ㄨ繘闃禱5.4娓╂箍搴︽祴閲廫Arduino\Arduino.ino:24:18: note: candidates are:

In file included from C:\Users\Administrator.USER-20161022OU\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.8\cores\arduino/Stream.h:26:0,

                 from C:\Users\Administrator.USER-20161022OU\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.8\cores\arduino/HardwareSerial.h:24,

                 from C:\Users\Administrator.USER-20161022OU\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.8\cores\arduino/Arduino.h:195,

                 from sketch\Arduino.ino.cpp:1:

C:\Users\Administrator.USER-20161022OU\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.8\cores\arduino/Print.h:61:12: note: size_t Print::print(char) <near match>

     size_t print(char);

            ^

C:\Users\Administrator.USER-20161022OU\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.8\cores\arduino/Print.h:61:12: note:   no known conversion for argument 1 from 'time_t(time_t*) {aka long int(long int*)}' to 'char'

C:\Users\Administrator.USER-20161022OU\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.8\cores\arduino/Print.h:62:12: note: size_t Print::print(unsigned char, int) <near match>

     size_t print(unsigned char, int = DEC);

            ^

C:\Users\Administrator.USER-20161022OU\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.8\cores\arduino/Print.h:62:12: note:   no known conversion for argument 1 from 'time_t(time_t*) {aka long int(long int*)}' to 'unsigned char'

C:\Users\Administrator.USER-20161022OU\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.8\cores\arduino/Print.h:63:12: note: size_t Print::print(int, int) <near match>

     size_t print(int, int = DEC);

            ^

C:\Users\Administrator.USER-20161022OU\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.8\cores\arduino/Print.h:63:12: note:   no known conversion for argument 1 from 'time_t(time_t*) {aka long int(long int*)}' to 'int'

C:\Users\Administrator.USER-20161022OU\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.8\cores\arduino/Print.h:64:12: note: size_t Print::print(unsigned int, int) <near match>

     size_t print(unsigned int, int = DEC);

            ^

C:\Users\Administrator.USER-20161022OU\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.8\cores\arduino/Print.h:64:12: note:   no known conversion for argument 1 from 'time_t(time_t*) {aka long int(long int*)}' to 'unsigned int'

C:\Users\Administrator.USER-20161022OU\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.8\cores\arduino/Print.h:65:12: note: size_t Print::print(long int, int) <near match>

     size_t print(long, int = DEC);

            ^

C:\Users\Administrator.USER-20161022OU\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.8\cores\arduino/Print.h:65:12: note:   no known conversion for argument 1 from 'time_t(time_t*) {aka long int(long int*)}' to 'long int'

C:\Users\Administrator.USER-20161022OU\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.8\cores\arduino/Print.h:66:12: note: size_t Print::print(long unsigned int, int) <near match>

     size_t print(unsigned long, int = DEC);

            ^

C:\Users\Administrator.USER-20161022OU\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.8\cores\arduino/Print.h:66:12: note:   no known conversion for argument 1 from 'time_t(time_t*) {aka long int(long int*)}' to 'long unsigned int'

exit status 1
'float time' redeclared as different kind of symbol

在文件 -> 首選項(xiàng)開啟
“編譯過程中顯示詳細(xì)輸出”選項(xiàng)
這份報(bào)告會包含更多信息。

回復(fù)

使用道具 舉報(bào)

板凳
ID:373684 發(fā)表于 2019-10-15 15:10 | 只看該作者
我用Arduino DUE板做的,,做不出來,,上面就是錯(cuò)誤報(bào)警
回復(fù)

使用道具 舉報(bào)

地板
ID:264926 發(fā)表于 2019-10-15 18:30 | 只看該作者
加個(gè)顯示屏  顯示呢
回復(fù)

使用道具 舉報(bào)

5#
ID:373684 發(fā)表于 2019-10-18 19:32 | 只看該作者
zhengyouhua 發(fā)表于 2019-10-15 18:30
加個(gè)顯示屏  顯示呢

論壇有的,,我看到有顯示屏的做法
回復(fù)

使用道具 舉報(bào)

6#
ID:689745 發(fā)表于 2020-2-3 17:41 | 只看該作者
圖1  Arduino Pro Mini 測量 2 節(jié) 7 號電池電壓和容量


圖2  硬件連接 Arduino Pro Mini 和 電池



圖3  APP 實(shí)時(shí)顯示電池電壓和容量





謝謝您的介紹,按這個(gè)原理實(shí)現(xiàn)了 Arduino Pro Mini 測量 2 節(jié) 7 號電池(電壓=2.93V,電量=94%)。算法原理和實(shí)驗(yàn)過程,請參考《花 1 小時(shí),開源設(shè)計(jì) LoRa 檢測電池容量》  https://blog.csdn.net/jiangjunjie_2005/article/details/104070668
回復(fù)

使用道具 舉報(bào)

7#
ID:85865 發(fā)表于 2020-2-4 13:20 | 只看該作者
cr8526 發(fā)表于 2019-10-15 15:10
我用Arduino DUE板做的,,做不出來,,上面就是錯(cuò)誤報(bào)警

DUE 好像不行的哦,
回復(fù)

使用道具 舉報(bào)

8#
ID:373684 發(fā)表于 2021-1-6 23:39 | 只看該作者
252622979 發(fā)表于 2020-2-4 13:20
DUE 好像不行的哦,

要什么板??
回復(fù)

使用道具 舉報(bào)

9#
ID:373684 發(fā)表于 2022-2-27 22:04 | 只看該作者
252622979 發(fā)表于 2020-2-4 13:20
DUE 好像不行的哦,

原來是這樣 啊,,明白了
回復(fù)

使用道具 舉報(bào)

10#
ID:593198 發(fā)表于 2022-10-11 21:02 | 只看該作者
樓主的程序計(jì)算出的容量應(yīng)該是AS(安秒),這一句“capacity=capacity+Idown;  //換算為電池容量值”改為
   “capacity=capacity+Idown/3.6;  //換算為電池容量值” 單位才能用mAh.   
回復(fù)

使用道具 舉報(bào)

11#
ID:138707 發(fā)表于 2023-7-29 17:57 | 只看該作者
原來是這樣 啊,,明白了
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表