질문게시판 > esp32 배터리 잔량 공부중입니다..

TODAY14,836 TOTAL4,834,723
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 질문게시판 | esp32 배터리 잔량 공부중입니다..

페이지 정보

작성자 펌린이 작성일2024-09-06 22:12 조회1,160회 댓글6건

본문

	

안녕하세요 

 

esp32 c3 모듈로 리튬 배터리 잔량 체크 공부 중인 학생입니다

 

int val=analogRead(A4);
  val=analogRead(A4);
  for(int i=0;i<100;i++){ sum+=analogRead(A4); }
  val=sum/100;
  int volt=map(val,0,4095,0,100);
  Serial.print(val); Serial.print(",analog : "); Serial.print(volt); Serial.println("Percent")


esp32는 tp4065에 물리기 전 100k 100k 전압분배로 adc에서 읽습니다.

위에 코드는 제가 이해하기로는 ADC값이 0~4095 사이일때 그 값을 0~100으로 나누는 map 함수를 사용한건데

전압분배로 나왔을때에 3.7V 최대는 1.85V라고 계산이 되더군요

그러면 1.85V MAX일때 4095 출력인 것인 것으로 이해가 됩니다

그런데 소스코드를 업로드하고 나오는 결과는

3054,analog : 74Percent 에서 계속 멈추고 있는 상황입니다. 

제 계산이 잘못된 것일까요? 

구글링을 해봤을땐 1024인 esp86 시리즈로 되어 있는데

전압분배 저항도 다르고 보정하는 소스도 있어서 어렵습니다..

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글 6

조회수 1,160

master님의 댓글

master 작성일

3.3V 시스템에서는 3.3V 이상의 전압을 입력받지 못하므로 100K 두개 사용해서 최대 6.6V를 입력 받을 수 있게 만든 것입니다.
리튬배터리는 3.7V가 최대전압이 아니고 4.2V가 만충전 전압입니다.
3.7V는 정격전압이죠
//
퍼센트 연산이 코드에 포함되어 있지 않으나 val*100.0/4095.0 인 것으로 보입니다.
//
3054,analog : 74Percent
3054라는 값이 보이는 것으로 봐서는 1024(10비트) 분해능이 아닌 4096(12비트) 분해능이 맞습니다.

master님의 댓글

master 작성일

4.2V 입력이 최대인데 6.6V까지 입력받을 수 있도록 만들면 4.2V~6.6V 사용하지 않는 구간이 커서 오차가 증가합니다만
전압분배까지 설명하기엔 글이 길어지므로
전압분배를 공부해서 최대입력이 4.5V 정도가 되도록 저항값을 변경해보시고
//
최대값 구하는 비례식은 4.2/6.6=ADC/4095
4.2V에서의 ADC 값은 2605.9 입니다.
int val=sum/100;
int volt=map(val,0,4095,0,100);
Serial.print(val); Serial.print(",analog : "); Serial.print(volt); Serial.println("Percent")
위 코드를 아래처럼 변경 해보죠

float adc=sum/100.0;
if(adc>2605.9)adc=2605.9; // 4.2V가 넘으면 4.2V로
float volt=adc*4.2/2605.9;
float Percent=adc*100.0/2605.9;
Serial.print(adc); Serial.print(" adc, "); Serial.print(volt);  Serial.println(" V, ") Serial.print(Percent); Serial.println("%")

단순한 비례식이니 어렵지 않을겁니다.
저항값 구하는 것은 답글로 적어드리죠

펌린이님의 댓글

펌린이 댓글의 댓글 작성일

안녕하세요 시간 내주셔서 정말 감사합니다!!
보내주신 코드를 적용해서 ThingSpeak 모니터링 시스템을 확인해보니
ADC : 2119, Volt : 3.4V Percent : 81%에서 동작을 정지하였습니다.
돌아와서 이번엔 멀티미터로 회로를 직접 찍어봤는데
배터리는 4V, 전압분배 후는 1.9V . ADC값은 2868로 찍힙니다.
" if(adc>2605.9)adc=2605.9; // 4.2V가 넘으면 4.2V로 "
기존 주셨던 코드로는 2605이상이 되면 4.2V로 인식하고 2605가 최대값으로 설정해놨기때문에 아마 정상적인 값으로 진행되진 않은 것 같습니다.. 하하 왜 그런건지
공부용으로 PCB를 제작해본 상황이라 다른 전압분배 저항을 사용하지 못하네요 미리 공부를 했어야했는데..

제가 이해하기로는
말씀주신 "최대값 구하는 비례식은 4.2/6.6=ADC/4095 4.2V에서의 ADC 값은 2605.9 입니다." 이 내용이 아닌
배터리는 최대 완충 전압시  4.2V이고 ESP에서 ADC로 연결되는건 4.2V의 전압분배 이후 전압 2.1V 입니다.
그렇다면 비례식을 최소동작전압/2.1V=ADC/4095  작성해야하는것일까요? 아니면 아직 제가 이해를 못한건지..

시간내서 가르침 주셔서 감사합니다. 한번 더 부탁드립니다!!

master님의 댓글

master 댓글의 댓글 작성일

"전압분배 후는 1.9V . ADC값은 2868로 찍힙니다."
ESP32 ADC가 쓰레기라는 글을 봤습니다만 위에 적은 것처럼 엉터리라면 사용하지 못합니다.
위 글에 대한 설명만 적어보겠습니다.
3.3V 아나로그 레퍼런스 전압에서는
3.3V일 때 4095입력이므로
1.9V/3.3V = ADC값/4095
ADC값 = 4095 * 1.9V/3.3V = 2357.727272727273
2357이 나와야 하는데 2868로 찍힌다면 오차가 큰 수준을 넘어서 사용하지 못할 정도입니다.
2868일 때 몇V인지 거꾸로 계산해보죠
2868/4095 = adc전압/3.3V
adc전압 = 3.3V * 2868/4095 = 2.311208791208791V
1.9V를 2.3V라고 하면 17% 오차이고, 이런 큰 오차는 12비트 adc라고 볼 수가 없습니다.

펌린이님의 댓글

펌린이 작성일

아니면  4095가 아닌 완충시(2.1V) 에 찍히는 ADC 값을 측정해놓고 퍼센테이지를 구하는게 맞을 수도 있겠단 생각이 듭니다.
위 코드로 동작 정지했을때의 ADC값은  2119 였으니  2119:0=완충ADC값:100으로 퍼센테이지를 나누는 방법도 듭니다

펌린이님의 댓글

펌린이 작성일

전압분배 이후 4.2V 에서는 2.1V , ESP32 동작전압인 3.3V에서 1.65V

질문게시판HOME > 질문게시판 목록

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은 질문게시판에서만 작성 가능합니다. 스태프 19-01-15 24088
공지 사이트 이용 안내댓글[31] master 17-10-29 38325
질문 스탭모터 3개 회로도 질문.. 새글 삉삉이 24-10-11 19
답변 답변글 답변 : 스탭모터 3개 회로도 질문.. 이미지새글 master 24-10-12 42
질문 수분수위센서와 멀티플렉서댓글[1] 김고래쓰 24-10-10 48
질문 ATmegq128 PI 제어기 추가댓글[1] 바밤 24-10-08 36
답변 답변글 답변 : ATmegq128 PI 제어기 추가댓글[1] master 24-10-08 47
질문 아두이노 ide 네오픽셀 각 셀 각자 코드 현수 24-09-29 71
질문 아두이노 IDE 프로마이크로 네오픽셀 현수 24-09-29 62
답변 답변글 답변 : 아두이노 IDE 프로마이크로 네오픽셀 master 24-09-29 76
질문 아두이노 프로마이크로 ide 현수 24-09-28 73
답변 답변글 답변 : 아두이노 프로마이크로 ide master 24-09-28 207
질문 ATmega128로 압력센서댓글[1] 이미지첨부파일 바밤 24-09-27 145
질문 아두이노 회로 배선 질문드립니다댓글[3] 이미지 아브 24-09-23 169
질문 아두이노 및 전기배선 작동이 안되어 해결 부탁드립니다 첨부파일 호떡아 24-09-14 197
답변 답변글 답변 : 아두이노 및 전기배선 작동이 안되어 해결 부탁드립니다 master 24-09-14 187
질문 USB host하고 Stop모드를 같이 쓰려는데댓글[1] 이미지 라칸 24-09-12 265
질문 아두이노 압력 센서로 LED 불빛 들어오게 할려고 하는데... 이미지첨부파일 윤시기 24-09-12 425
답변 답변글 답변 : 아두이노 압력 센서로 LED 불빛 들어오게 할려고 하는데... 이미지 master 24-09-12 299
현재글 esp32 배터리 잔량 공부중입니다..댓글[6] 펌린이 24-09-06 1161
답변 답변글 답변 : esp32 배터리 잔량 공부중입니다.. 이미지 master 24-09-07 119
질문 ads로 adc값을 읽는데댓글[1] 라칸 24-09-05 179
질문 stm32 절전모드에 대해서댓글[2] 라칸 24-08-29 220
질문 아두이노 우노보드로 스마트팜 만들려고 하는데 문제가 있어요댓글[4] 부러진명검 24-08-28 676
질문 아두이노 블루투스 통신댓글[3] 이미지첨부파일 찌릿공돌이 24-08-27 424
질문 stm32에서 USB에 파일 생성 및 저장을 하려는데댓글[1] 이미지 라칸 24-08-23 296
질문 STM32 1개의 핀으로 ADC, DAC 사용 가능 여부댓글[4] aaahhhj 24-08-21 619
질문 회로 수정 질문..댓글[3] 이미지 소정이 24-08-21 376
질문 아두이노에서 stm32 그래프 파형 보려고 하는데 발생하는 오류댓글[1] aaahhhj 24-08-19 249
질문 님들 센서를 사용해서 adc값을 읽으려는데댓글[1] 라칸 24-08-13 267
게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기