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

TODAY6,815 TOTAL6,755,632
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

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


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

페이지 정보

작성자 펌린이 작성일2024-09-06 22:12 조회5,461회 댓글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

조회수 5,461

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 24261
공지 사이트 이용 안내댓글[31] master 17-10-29 38805
질문 공통음극형 FND를 9V로 동작하게 하고 싶어요.댓글[3] 새글 멘토 25-01-21 8
질문 oled 모듈 연결 질문입니다!댓글[1] 펌린이 24-12-17 163
질문 Atmega 128 타이머 질문있습니다댓글[1] ednda 24-12-11 189
답변 답변글 답변 : Atmega 128 타이머 질문있습니다 master 24-12-11 140
질문 ATmega128 2개로 hc-05,hc-06블루트수 통신 동콩이 24-12-04 157
답변 답변글 답변 : ATmega128 2개로 hc-05,hc-06블루트수 통신댓글[4] master 24-12-04 1249
질문 lm75a 온도센서 관련 질문입니다.댓글[6] 이미지첨부파일 hanmw0707 24-12-01 3264
질문 리얼타임클락 질문이요 ㅠㅠ댓글[1] 이미지 팬케이크 24-11-22 255
질문 가속도센서 2개를 강아지 2마리에 각각 달아서 스마트폰으로 움직임을 보고 싶은데요댓글[1] gainomax 24-11-21 422
질문 라즈베리파이 4B 사용 중 막히는 부분 질문합니다댓글[1] 한마바키 24-11-12 6573
질문 스위치로 PI 모터 제어 바밤 24-11-11 207
답변 답변글 답변 : 스위치로 PI 모터 제어 master 24-11-12 196
질문 아트메가128 마이크로프로세서댓글[3] 옹심이 24-11-05 712
질문 초음파 센서로 장애물 인식댓글[1] 나난ㄴ 24-10-31 324
질문 이런 투명 LCD는 뭐라고 부르나요?댓글[2] 이미지 펌린이 24-10-29 491
질문 모터제어 중 RPM 계산 질문입니다.댓글[3] suuuuuuuh 24-10-24 645
질문 아트메가 128과 블루투스 모듈(HC-06) 연결 질문댓글[1] 메가아트 24-10-24 340
질문 ATmega128 질문 DFplayer mini댓글[1] Miin 24-10-18 6825
질문 스탭모터 3개 회로도 질문.. 삉삉이 24-10-11 340
답변 답변글 답변 : 스탭모터 3개 회로도 질문.. 이미지 master 24-10-12 374
질문 수분수위센서와 멀티플렉서댓글[3] 김고래쓰 24-10-10 938
질문 ATmegq128 PI 제어기 추가댓글[1] 바밤 24-10-08 364
답변 답변글 답변 : ATmegq128 PI 제어기 추가댓글[1] master 24-10-08 496
질문 아두이노 ide 네오픽셀 각 셀 각자 코드 현수 24-09-29 226
질문 아두이노 IDE 프로마이크로 네오픽셀 현수 24-09-29 256
답변 답변글 답변 : 아두이노 IDE 프로마이크로 네오픽셀 master 24-09-29 233
질문 아두이노 프로마이크로 ide 현수 24-09-28 256
답변 답변글 답변 : 아두이노 프로마이크로 ide master 24-09-28 366
게시물 검색

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
모바일버전으로보기