|
|
Kontrola napětí Princip měření napětí Arduinem byl popsán v kapitole "Měření napětí". Zde uvedený příklad je zaměřen na kontrolu stavu akumulátoru 12V. Rozsah měření byl zvolen 20 V. Referenční napětí procesoru bylo nastaveno na "INTERNAL", tj. 1,1V (viz kapitola "Měření napětí"). Vstup měření byl vybaven odporovým děličem a na analogový pin Arduina (A0) bylo přivedeno napětí 1,1 V při maximálním měření napětí 20V. Zvolené referenční napětí je vhodné předem proměřit na pinu "REF" a naměřenou hodnotu poté nastavit na odporovém děliči na vstupu Arduina. Např. bylo ověřeno, že referenční napětí parametru INTERNAL (1,1V) bylo u deseti desek (UNO, NANO) jiné a pohybovalo se v rozmezí 1,073 - 1,108 V.
Mezní varovná úroveň vybité baterie byla nastavena na hodnotu 10,5 V (napětí vybitého Pb akumulátoru). Byla použita deska Arduino NANO a displej LCD1602 i2c. Zapojení a oživení displeje je uvedeno v kapitole "LCD Displej". Připojení displeje k desce NANO je stejné jako u desky UNO, tj. piny NANO: A4/SDA, A5/SCL. Napětí 1,1 V z jezdce trimru bude v systému Adruina vracet hodnotu 1023 jako horní hranici měřeného rozsahu 20 V. Hodnotu 1023 algebraicky upravíme ve skeči podle zvoleného měřeného rozsahu (popsáno v kapitole "Měření napětí" ). Pro kontrolu vybitého akumulátoru připojíme LED diodu přes odpor R na pin D13 a do skeče naprogramujeme blikání ledky po podkročení napětí 10,5 V. Byla použita ledka L831 (1,85 V/20mA) přes odpor 120 ohmů.
Do IDE nahrajeme kód "Lcd_kontrola_napeti"(otevřeme a "klipbordem" přeneseme na pracovní plochu IDE ...) :
Skeč "Lcd_kontrola_napeti.ino" : #include <Wire.h> // knihovna (případně zde použijeme knihovnu "LCD.h") #include <LiquidCrystal_I2C.h> // knihovna LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7,3,POSITIVE); // nastavení adresy 0x3F displeje float H=0; // deklarace proměnných H, T float U=0; void setup() {Serial.begin(9600); // zahájení sériové komunikace analogReference(INTERNAL); // nastavení interního referenčního napětí procesoru na hodnotu 1,1 V lcd.begin(16,2); // nastavení 16 písmen a 2 řádky displeje pinMode(13, OUTPUT); // iniciace pinu 13 jako výstupu } void loop() {lcd.setCursor(0,0); // nastavení pozice kursoru lcd.print("Napeti:"); // tisk textu „Napeti“ lcd.setCursor(15,0); // nastavení pozice kursoru lcd.print("V"); // tisk textu „V“ lcd.setCursor(9,0); // nastavení pozice kursoru H=analogRead(14); // načtení analogové hodnoty pinu A0, "v Arduinu 14" U=((H*20)/1023); // úprava načtené hodnoty na rozsah měření 20V lcd.print(U); // tisk hodnoty měřeného napětí ve voltech delay(500); // ceká 0,5 s if (U<10.5) // podmínka - když je napětí méně než 10.5 V pak:(Poz.: ARDUINO používá v číselných hodnotách desetinnou tečku) {lcd.setCursor(0,1); // nastavení pozice kursoru lcd.print("Baterie vybita!!"); // tisk textu "Baterie vybitá !!" digitalWrite(13, HIGH); // rozsvícení ledky na pinu 13 delay(1000);} // čeká 1 s lcd.clear(); // vynulování displeje digitalWrite(13, LOW);} // zhasnutí ledky na pinu 13 Měřící rozsah (zde 20 V) nastavíme algebraickou úpravou hodnoty "H" snímané pinem "A0" (ve skeči pin 14): U=((H*20)/1023) "Desetibitovou" hodnotu snímanou na pinu A0, zde "H=analogRead(14)" násobíme rozsahem měření (20 V) a dělíme maximální "desetibitovou" hodnotou 1023. Výsledek algebraické úpravy, která odpovídá měřenému napětí ve voltech, ukládáme do proměnné U a následně tiskneme na displeji "lcd.print(U)". Algoritmus skeče je nastaven na měření Pb akumulátoru 12 V a kontrolu jeho vybití na úrovní 10,5 V. Skeč nahrajeme do Arduina a připojíme baterii s napětím 12 V. Na displeji se zobrazí napětí baterie: Pro simulaci vybitého akumulátoru připojíme např. baterii 9V.
Podmínka "if (U<10.5)" zavedena v programu aktivuje zobrazeni textu "Baterie vybita" a rozsvítí ledku. Následně příkaz čekání "delay(1000)" způsobí v opakované smyčce blikání jak nápisu "Baterie vybita", tak blikání ledky v intervalu 1s. Mezní napětí lze změnit úpravou podmínky (U<10.5). Analogové měření napětí procesorem není v nízkých úrovních zcela přesné. Na úrovni 10 % z měřeného rozsahu bylo procesorem vyhodnoceno napětí cca o 2% nižší oproti skutečnému připojeném napětí. Na úrovní 1% z měřeného rozsahu (tj. při napětí cca 10 mV na pinu A0 při referenčním napětí 1,1 V) až o 20 % nižší.
Na co si dát pozor Analogové vstupy jsou citlivé na zničení vyšším napětím než je max. napájecí napětí. Např. 12,5 V připojené nedopatřením na analogový pin A0 poškodilo procesor. Došlo pravděpodobně k průrazu v analogové části procesoru. Vstupy A0-A5 poté vracely vždy maximální hodnotu 1023 nezávisle na připojeném napětí. Další funkce poškozeného procesoru, např. nahrávání skeče, program "blink", tlačítko" aj. zůstaly zpravidla funkční. Analogové piny je poté možné konfigurovat a používat jako funkční digitální vstupy.
Říjen 2019, upraveno 2023
Arby
|