ESP32-Cam měření napětí baterie

24.01.2022 Arduino #esp #arduino

Vývojová deska SP32-Cam je malé zařízení, které pro svůj účel, tj. snímání okolí kamerou, je dostačující a má překvapivý výkon. Bohužel, pokud z něj chceme udělat komplexnější platformu, narazíme na několik problémů. Jeden z nich je čtení analogových hodnot z externích senzorů.


Při použití klasické ESP32, lze zjistit, že není problém k takové desce připojit externí senzor a číst analogové hodnoty. Bohužel deska ESP32-Cam tohle tak jednoduše neumožňuje. Když se podíváme na piny této desky, zjistíme, že tam nejsou žádné volné pro externí senzor.

esp32-cam-pinout-new 

01-esp32-cam-ai-thinker-schematic-diagram 

Všechny piny jsou obsazeny připojenou kamerou, SD kartou nebo Wi-Fi. Pokud chceme používat tyto součásti, tak přesto, že se piny tváří jako volné, vždy jedno ze zařízení nebude fungovat.

OV2640 CAMERA ESP32 Variable name in code
D0 GPIO 5 Y2_GPIO_NUM
D1 GPIO 18 Y3_GPIO_NUM
D2 GPIO 19 Y4_GPIO_NUM
D3 GPIO 21 Y5_GPIO_NUM
D4 GPIO 36 Y6_GPIO_NUM
D5 GPIO 39 Y7_GPIO_NUM
D6 GPIO 34 Y8_GPIO_NUM
D7 GPIO 35 Y9_GPIO_NUM
XCLK GPIO 0 XCLK_GPIO_NUM
PCLK GPIO 22 PCLK_GPIO_NUM
VSYNC GPIO 25 VSYNC_GPIO_NUM
HREF GPIO 23 HREF_GPIO_NUM
SDA GPIO 26 SIOD_GPIO_NUM
SCL GPIO 27 SIOC_GPIO_NUM
POWER PIN GPIO 32 PWDN_GPIO_NUM
MicroSD card ESP32
CLK GPIO 14
CMD GPIO 15
DATA0 GPIO 2
DATA1 / flashlight GPIO 4
DATA2 GPIO 12
DATA3 GPIO 13

Kam připojit analogový senzor

Na desce se nachází signalizační dioda na GPIO_33. Když se podíváme do schématu, je vidět, že je připojena ke standardnímu pinu desky. A právě to nám umožní připojit externí čidlo pro analogové čtení.

Postup jak připojit externí senzor místo LED1

1. Musí se odpájet dioda LED1. Dioda je tam přilepena a pouhým tavením cínu ji z desky nelze dostat. Musí se použít trochu síly, ale opatrně, protože kontakty se rádi odtrhávají.

img_7394  

2. Na anodu se připájí drátek, který bude sloužit jako vstup pro externí senzor.

img_7393  

Jak měřit napětí

Důležité informace pro práci se vstupy.

  1. ESP32-Cam má vstupy, na které lze přivést maximálně 3.3V.
  2. Napájení desky ESP32-Cam je 5V, ale v pohodě snese 7.2V, takže lze použít dvě dobíjecí baterie po 3.6V

Pro změření dostupného napětí z baterií a tím hlídat, zda není nutné baterie dobýt, se musí navrhnout dělič napětí, který hodnotu maximálního napětí baterií sníží na povolených 3.3V.

Dělič napětí je jednoduchý obvod, který redukuje velké napětí na menší.

Pomocí 2 rezistorů a vstupního napětí lze vytvořit výstupní napětí, které je zlomkem vstupního. Níže je vzorec, který se používá k výpočtu rezistorů, které potřebujete v obvodu:

rovnice děliče napětí

Takže finální schéma vypadá takto:

obvod děliče napětí

Samozřejmě, že pro vstupní napětí 7.2V se budou hodnota rezistoru lišit (1.2-1.4kΩ). Online kalkulátor napěťového děliče - otevřít.

Lze také použít obousměrný konvertor logické úrovně. Bi-Directional Logic Level Converter (LLC) snižuje napětí ze signálu. To je doporučená metoda pro vyrovnání signálů řazení, které vyžadují vysokorychlostní komunikaci (sériová komunikace s vysokou přenosovou rychlostí, I2C atd.).

12009-06

Signál s vysokým napětím se jednoduše připojí na VN piny a na druhé straně (LV) vystoupí signál s nižším napětím. S deskou zobrazenou na obrázku jsou k dispozici 4 kanály.

Čtení hodnoty z napěťového děliče

#define PIN_IN_VOLT        33     // Monitoring voltage
#define LED_SIGNAL         14     // LED signal for on/off battery

void setup() {
  //GPIO input monitor voltage value
  pinMode (PIN_IN_VOLT, INPUT);

  //GPIO input signal LED ON/OFF
  pinMode (LED_SIGNAL, OUTPUT);
  digitalWrite(LED_SIGNAL, HIGH);
}

void loop() { 
  int voltageSer=analogRead(PIN_IN_VOLT);
  float voltValue = ((voltageSer * 3.3) / 4095);
  Serial.print(voltageSer); Serial.print(" - "); Serial.println(voltValue);
  if(voltValue<1.8){
    digitalWrite(LED_SIGNAL, LOW);
    delay(1000);
    digitalWrite(LED_SIGNAL, HIGH);
    delay(1000);
  }else{
    digitalWrite(LED_SIGNAL, HIGH);
    delay(10000);
  }
}

 

Základní kód je velmi jednoduchý. Na pinu 14 je připojena LED dioda, která signalizuje zapnutí systému. Na pin 33 se přivádí signál v podobě analogových hodnot, které se přepočítávají na napětí. V sériovém monitoru lze vidět hodnoty odpovídající míře napětí. Pokud je na pin 33 přiváděno maximální možné napětí tak v sériovém monitoru je hodnota 4095

Čtení analogové hodnoty pomocí ESP32 znamená, že můžete měřit různé úrovně napětí mezi 0V a 3.3V. Naměřenému napětí je pak přiřazena hodnota mezi 0 a 4095, kde 0V odpovídá 0 a 3.3V odpovídá 4095. Jakékoli napětí mezi 0V a 3.3V bude mít odpovídající hodnotu mezi nimi.

01

Pro testování byl celý systém napojen na regulovatelný zdroj.

img_7370 

Po snižování napětí pod kritickou hodnotu, kdy systém ještě pracuje, začne dioda na pinu 14 blikat.

ADC je nelineární

V ideálním případě bychom při použití pinů ADC ESP32 očekávali lineární chování. To se však neděje. Toto chování znamená, že ESP32 není schopen rozlišit 3.3V od 3.2V. Získáte stejnou hodnotu pro obě napětí: 4095. Totéž se děje pro velmi nízké hodnoty napětí: pro 0V a 0.1V získáte stejnou hodnotu: 0. Na to musíte pamatovat při použití pinů ADC ESP32.

Graf hodnot v závislosti na snižujícím se napětí.

data 

Podobný zdroj pro desku ESP32:
https://randomnerdtutorials.com/esp32-adc-analog-read-arduino-ide/
https://www.electronicshub.org/esp32-adc-tutorial/