Bluetooth voltmetr založený na arduinu. Digitální voltmetr na Arduinu s připojením k PC přes sériový port Arduino voltmetr s výstupem dat do počítače

Multifunkční sestavy Arduino se těší širokému zájmu fanoušků podomácku vyrobených elektronicky programovatelných zařízení, které jim umožňují oživit zajímavé nápady.

Hlavní výhodou hotových obvodů Arduino je jedinečný blokově-modulární princip: každou desku lze přidat o další rozhraní, čímž se nekonečně rozšiřují možnosti vytváření různých projektů.

moduly Arduino jsou postaveny na univerzálním mikrokontroléru s vlastním bootloaderem, který usnadňuje jeho flashování potřebným programovým kódem, bez použití dalších zařízení. Programování se provádí ve standardním jazyce C++.

Jedním z nejjednodušších příkladů použití Arduina může být implementace na základě této sestavy vysoce přesného DC voltmetru s rozsahem měření od 0 do 30 V.

Analogové vstupy Arduino jsou navrženy pro konstantní napětí ne více než pět voltů, takže jejich použití při napětích přesahujících tuto hodnotu je možné s děličem napětí.


Schéma zapojení Areduina přes dělič napětí

Dělič napětí se skládá ze dvou odporů zapojených do série. Vypočítá se pomocí vzorce:

Externí USB konektor v autorádiu

Pro ty, kteří rádi experimentují s Arduinem, je předložen užitečný diagram. Jedná se o jednoduchý digitální voltmetr, který dokáže spolehlivě měřit stejnosměrné napětí v rozsahu 0 - 30V. Deska Arduino jako obvykle může být napájena 9V baterií.

Jak asi víte, analogové vstupy Arduina lze použít k měření stejnosměrného napětí v rozsahu 0 - 5V a tento rozsah lze zvýšit,
pomocí dvou rezistorů jako děliče napětí. Dělič sníží měřené napětí na úroveň analogových vstupů Arduino. A pak program vypočítá skutečnou hodnotu napětí.

Analogový senzor na desce Arduino detekuje přítomnost napětí na analogovém vstupu a převádí jej do digitální podoby pro další zpracování mikrokontrolérem. Na obrázku je napětí přiváděno na analogový vstup (A0) přes jednoduchý dělič napětí sestávající z rezistorů R1 (100 kOhm) a R2 (10 kOhm).

S těmito hodnotami děliče lze desku Arduino napájet napětím od 0 do
55V. Na vstupu A0 máme naměřené napětí děleno 11, tedy 55V / 11=5V. Jinými slovy, při měření 55V na vstupu Arduino máme maximální povolenou hodnotu 5V. V praxi je lepší na tomto voltmetru napsat rozsah „0 - ​​30V“, aby zůstal
Bezpečnostní rezerva!

Poznámky

Pokud se údaje na displeji neshodují s údaji průmyslového (laboratorního) voltmetru, je nutné změřit hodnotu odporů R1 a R2 přesným přístrojem a tyto hodnoty vložit místo R1=100000,0 a R2=10000,0 v kódu programu. Poté byste měli laboratorním voltmetrem změřit skutečné napětí mezi 5V a „Ground“ piny desky Arduino. Výsledkem bude hodnota menší než 5V, například to bude 4,95V. Tato skutečná hodnota by měla být vložena do řádku kódu
vout = (hodnota * 5,0) / 1024,0 místo 5,0.
Zkuste také použít přesné odpory s tolerancí 1 %.

Rezistory R1 a R2 poskytují určitou ochranu před zvýšeným vstupním napětím.Pamatujte však, že jakékoli napětí nad 55V může poškodit desku Arduino. Toto provedení navíc neposkytuje další typy ochrany (před napěťovými rázy, přepólováním nebo přepětím).

Program digitálního voltmetru

/*
DC voltmetr
Arduino DVM založené na konceptu děliče napětí
T.K.Hareendran
*/
#zahrnout
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
int analogInput = 0;
float vout = 0,0;
float vin = 0,0;
float R1 = 100000,0; // odpor R1 (100K) -viz text!
float R2 = 10000,0; // odpor R2 (10K) – viz text!
int hodnota = 0;
void setup())(
pinMode(analogový vstup, INPUT);
lcd.begin(16, 2);
lcd.print(“DC VOLTMETR”);
}
void loop()
// přečtení hodnoty na analogovém vstupu
value = analogRead(analogInput);
vout = (hodnota * 5,0) / 1024,0; // viz text
vin = vout / (R2/(R1+R2));
pokud (vin<0.09) {
vin=0.0;//příkaz k potlačení nežádoucího čtení!
}
lcd.setCursor(0, 1);
lcd.print(“INPUT V= “);
lcd.print(vin);
zpoždění(500);
}

Schematické schéma Arduino-voltmetru

Seznam komponentů

Deska Arduino Uno
odpor 100 kOhm
odpor 10 kOhm
odpor 100 ohmů
Trimrový odpor 10kOhm
LCD displej 16?2 (Hitachi HD44780)

Schematické schéma domácího bipolárního voltmetru na Arduino Uno a s displejem 1602A. V článku “Dvojitý voltmetr na ARDUINO UNO” (L.1) autor navrhl popis voltmetru a programu pro současné měření a indikaci dvou konstantních napětí. Což je velmi výhodné, pokud potřebujete současně měřit dvě konstantní napětí a porovnávat je.

To může být vyžadováno například při opravě nebo nastavování stabilizátoru stejnosměrného napětí za účelem měření napětí na jeho vstupu a výstupu nebo v jiných případech.

Existují však obvody s bipolárním napájením, kdy napětí v určitém bodě obvodu vzhledem ke společné „nule“ může být buď kladné, nebo záporné.

Schematický diagram

Zde popisujeme úpravu obvodu a programu tak, aby zařízení mohlo měřit a indikovat kladné i záporné napětí.

Nejprve jsou naměřená napětí přivedena na dva analogové vstupy A1 a A2. K dispozici je celkem šest analogových vstupů, A0-A5, můžete si vybrat libovolné dva z nich. V tomto případě jsou vybrány A1 a A2. Napětí na analogových portech může být pouze kladné a pouze v rozsahu od nuly do napájecího napětí mikrokontroléru, tedy nominálně do 5V.

Výstup analogového portu je převeden do digitální podoby pomocí ADC mikrokontroléru. Chcete-li získat výsledek v jednotkách voltů, musíte jej vynásobit 5 (referenčním napětím, tj. napájecím napětím mikrokontroléru) a vydělit 1024.

Rýže. 1. Schéma bipolárního voltmetru na Arduino Uno a 1602A.

Aby bylo možné měřit napětí větší než 5V, respektive větší než napájecí napětí mikrokontroléru, protože skutečné napětí na výstupu 5voltového stabilizátoru na desce ARDUINO UNO se může lišit od 5V a obvykle o něco nižší, musíte na vstupu použít konvenční odporové děliče.

Zde se jedná o děliče napětí přes odpory R1, R3 a R2, R4. Ale co když je potřeba měřit napětí menší než nula? V tomto případě existuje pouze jedna cesta ven ze situace - zvýšit úroveň vstupní nuly. V ideálním případě potřebujete poloviční napájecí napětí, tedy do 2,5V. V tomto případě budou ke vstupnímu napětí přidána data 2,5V.

Toto napětí pak programově jednoduše odečtěte od naměřeného. To však bude vyžadovat další zdroj tohoto napětí. V zásadě to není obtížné, ale existuje jednodušší řešení.

Kromě stabilizátoru napětí 5V má deska ARDUINO UNO zdroj napětí 3,3V. Lze jej tedy použít jako „virtuální nulu“ pro zadání.

Změny v obvodu jsou patrné na obrázku 1. Oproti první možnosti je vstup „nula“ jednoduše přeuspořádán ze společné nuly na zdroj +Z.ZV. Proto, když je vstupní napětí kladné, na vstupu je více než 3,3 V (ale ne více než 5 V - to je horní mez měření), a když je záporné - méně než 3,3 V (ale ne méně než OV - toto je spodní mez měření).

Zvýšení mezí měření (modulo) je dosaženo odporovým děličem a indikace skutečného vstupního napětí přiváděného na X2 a X3 je dosaženo softwarovým odečtením hodnoty 3,3V od napětí na vstupech mikrokontroléru.

Program je uveden v tabulce 1. To je vidět na řádcích:

volt=(vout*5,0/1024,0-3,3)/0,048;

voltl=(voutl*5,0/1024,0-3,3)/0,048;

Číslo 3.3 je přesně toto napětí vstupu „virtuální nuly“.

V těchto řádcích je číslo 5.0 napětí na výstupu stabilizátoru desky ARDUINO UNO. Ideálně by to mělo být 5V, ale aby voltmetr fungoval přesně, musí se toto napětí nejprve změřit. Připojte zdroj a poměrně přesným voltmetrem změřte napětí +5V na POWER konektoru desky.

Co se stane, pak zadejte do těchto řádků místo 5.0.Totéž platí pro napětí +3.3V - je třeba měřit na konektoru desky, protože ve skutečnosti se může mírně lišit od 3,3V. Pokud je například „5V“ ve skutečnosti 4,85V a „3,3V“ je ve skutečnosti 3,32V, linky budou vypadat takto:

volt=(vout*4,85/1024,0-3,32)/0,048;

voltl=(voutl*4,85/1024,0-3,32)/0,048;

V další fázi budete muset změřit skutečné odpory rezistorů R1-R4 a určit koeficienty K (označené jako 0,048) pro tyto řádky pomocí vzorců:

K1 = R3 / (R1+R3) a K2 = R4 / (R2+R4)

Řekněme, že K1 = 0,046 a K2 = 0,051, takže napíšeme:

volt=(vout*4,85/1024,0-3,32)/0,046;

voltl=(voutl*4,85/1024,0-3,32)/0,051;

V textu programu je tedy nutné provést změny podle skutečného napětí na výstupu 5voltového a 3,3voltového stabilizátoru desky ARDUINO UNO a podle skutečných dělicích koeficientů odporových děličů.

Poté bude zařízení pracovat přesně a nebude vyžadovat žádné seřizování ani kalibraci. Při měření záporného napětí na LCD indikátoru bude před hodnotou napětí v příslušném řádku znaménko mínus. Při měření kladného napětí není žádné znamení.

Změnou dělicích koeficientů odporových děličů (a tedy koeficientů „K“) můžete vytvořit jiné meze měření, které nemusí být nutně stejné pro oba vstupy.

Připomínám, že modul displeje z tekutých krystalů H1 typ 1602A je připojen k digitálním portům D2-D7 desky ARDUINO UNO. LCD indikátor je napájen stabilizátorem napětí 5V umístěným na desce stabilizátoru napětí 5V.

Aby indikátor spolupracoval s ARDUINO UNO, musíte do programu nahrát podprogram, který jej ovládá. Takové rutiny se nazývají „knihovny“ a v softwarové sadě ARDUINO UNO existuje mnoho různých „knihoven“. Chcete-li pracovat s indikátorem LCD založeným na HD44780, potřebujete knihovnu LiquidCrystal. Proto program (Tabulka 1) začíná načtením této knihovny:

Tento řádek dává příkaz k načtení této knihovny do ARDUINO UNO. Poté musíte přiřadit porty ARDUINO UNO, které budou pracovat s indikátorem LCD. Zvolil jsem porty D2 až D7. Můžete si vybrat jiné. Tyto porty jsou přiřazeny řádkem:

LiquidCrystal led(2, 3, 4, 5, 6, 7);

Poté program přejde k vlastní činnosti voltmetru.

Karavkin V. RK-06-17.

Literatura: 1. Karavkin V. - Dvojitý voltmetr na ARDUINO UNO. RK-01-17.

Idea

Idea přístroje na měření napětí, proudu, kapacity, vybíjení a možná i nabíjení vznikly už dávno a nejen pro mě. Pro testování různých USB zařízení najdete mnoho hraček zvaných USB Tester (Doktor). Mám zájem o poněkud univerzálnější zařízení, nezávislé na rozhraní, ale jednoduše navržené pro určitá napětí a proudy. Například 0 - 20,00 V, 0 - 5,00 a, 0 - 99,99 Ah. Co se týče funkcí, vidím to takto

  • Zobrazuje aktuální napětí a proud, tedy voltampérmetr. V zásadě můžete okamžitě odrážet sílu.
  • Počítání a zobrazování akumulované kapacity. V ampérhodinách a pravděpodobně ve watthodinách.
  • Zobrazení doby procesu
  • A s největší pravděpodobností nastavitelné spodní a horní mezní hodnoty napětí (limity vybíjení a nabíjení)

Rozvoj

Pro realizaci výpočtů a měření potřebujeme regulátor. Na tento nápad jsem si vzpomněl v rámci seznámení s Arduinem, takže ovladač bude jednoduchý populární Atmega328 a bude se programovat v prostředí Arduino. Z inženýrského hlediska asi není výběr nejlepší - regulátor je na úkol trochu tlustý a jeho ADC se nedá nazvat měřicím, ale... zkusíme.

  • V tomto projektu nebudeme moc pájet. Jako základ vezmeme hotový modul Arduino Pro Mini, protože Číňané jsou připraveni je dodat za 1,5 $.
  • Zobrazovacím zařízením bude displej 1602 – dalších 1,5 dolaru. Mám možnost s modulem rozhraní I2C, ale v tomto projektu to není opravdu potřeba (0,7 $).
  • Pro vývoj potřebujeme prkénko. V mém případě se jedná o malý BreadBoard za 1 $.
  • Samozřejmě budete potřebovat vodiče a řadu odporů různých hodnot. U displeje 1602 bez I2C je také potřeba zvolit kontrast - to se provádí proměnným rezistorem 2 - 20 kOhm.
  • K implementaci ampérmetru budete potřebovat bočník. Pro první přiblížení by to mohl být odpor 0,1 Ohm, 5 W.
  • Pro realizaci automatického vypnutí budete potřebovat relé s kontakty navrženými pro maximální proud zařízení a napětí rovné napájecímu napětí. K ovládání relé potřebujete NPN tranzistor a ochrannou diodu.
  • Zařízení bude napájeno z externího zdroje, samozřejmě alespoň 5V. Pokud se napájení velmi liší, pak bude zapotřebí také integrovaný stabilizátor typu 7805 - ten určí napětí relé.
  • Když Arduino Pro Mini vyžaduje pro nahrání firmwaru převodník USB-TTL.
  • Pro nastavení budete potřebovat multimetr.

Voltmetr

Realizuji jednoduchý voltmetr s jedním rozsahem přibližně 0 - 20V. Tato poznámka je důležitá, protože ADC našeho řadiče má 10bitovou kapacitu (1024 diskrétních hodnot), takže chyba bude alespoň 0,02 V (20 / 1024). K implementaci hardwaru potřebujeme analogový vstup regulátoru, dělič z dvojice rezistorů a nějaký ten výstup (u hotové verze displej, pro ladění lze použít sériový port).

Princip ADC měření spočívá v porovnání napětí na analogovém vstupu s referenčním VRef. Výstup ADC je vždy celé číslo - 0 odpovídá 0V, 1023 odpovídá napětí VRef. Měření je realizováno sérií sekvenčních odečtů napětí a průměrováním za období mezi aktualizacemi hodnoty na obrazovce. Volba referenčního napětí je důležitá, protože se předvolí na napájecí napětí, které nemusí být stabilní. To nám vůbec nevyhovuje - za základ vezmeme stabilní interní referenční zdroj s napětím 1,1V, který inicializujeme voláním analogReference(INTERNAL). Potom zkalibrujeme jeho hodnotu pomocí odečtů multimetru.

Schéma vlevo ukazuje variantu s přímým ovládáním displeje (jednoduše se ovládá - viz standardní skica LiquidCrystal\HelloWorld). Vpravo je možnost I2C, kterou dále využiji. I2C umožňuje ušetřit na vodičích (kterých je v běžné verzi 10, nepočítaje podsvícení). To ale vyžaduje další modul a složitější inicializaci. V každém případě je třeba nejprve zkontrolovat zobrazení znaků na modulu a upravit kontrast – k tomu stačí po inicializaci zobrazit libovolný text. Kontrast se nastavuje rezistorem R1, nebo podobným rezistorem I2C modulu.

Vstupem je dělič 1:19, který umožňuje získat maximální napětí cca 20V při Vref = 1,1 (většinou je paralelně se vstupem umístěn kondenzátor + zenerova dioda kvůli ochraně, ale to pro nás zatím není důležité ). Rezistory mají rozptyl a referenční Vref regulátoru také, takže po sestavení musíme paralelně s naším zařízením a referenčním multimetrem změřit napětí (alespoň napájení) a zvolit Vref v kódu, dokud se hodnoty neshodují. Za zmínku také stojí, že jakýkoli ADC má nulové offsetové napětí (což kazí hodnoty na začátku rozsahu), ale tím se zatím nebudeme zabývat.

Důležité bude také oddělení přívodu a měřicího uzemnění. Náš ADC má rozlišení o něco horší než 1 mV, což může způsobit problémy, pokud je kabeláž nesprávná, zejména na prkénku. Vzhledem k tomu, že rozložení desky modulu je již hotové a zbývá pouze vybrat piny. Modul má několik „zemních“ kolíků, takže se musíme ujistit, že napájení vstupuje do modulu přes jednu „zem“ a měření přes druhou. Ve skutečnosti, abych provedl změny, vždy používám zemnící kolík nejblíže k analogovým vstupům.

Pro ovládání I2C se používá verze knihovny LiquidCrystal_I2C - v mém případě je uveden konkrétní pinout modulu I2C (Číňané vyrábějí moduly s různým ovládáním). Také podotýkám, že I2C v Arduinu vyžaduje použití pinů A4 a A5 - na desce Pro Mini nejsou umístěny na okraji, což je nepohodlné pro prototypování na BreadBoard.

Zdroj

#zahrnout #zahrnout // Jednoduchý voltmetr s i2c displejem 1602. V 16.11 // Nastavení pro i2c displej 1602 s nestandardním pinoutem #define LCD_I2C_ADDR 0x27 #define BACKLIGHT 3 #define LCD_EN 2 #define LCD_RW 1 #define LCD_RS 0 #define LCD_5 #define LCD5 5 #define LCD_D6 6 #define LCD_D7 7 LiquidCrystal_I2C lcd(LCD_I2C_ADDR,LCD_EN,LCD_RW,LCD_RS,LCD_D4,LCD_D5,LCD_D6,LCD_D7); // Čas aktualizace čtení, ms (200-2000) #define REFRESH_TIME 330 // Analogový vstup #define PIN_VOLT A0 // Interní referenční napětí (výběr) const float VRef = 1,10; // Koeficient vstupního odporového děliče (Rh + Rl) / Rl. V<-[ Rh ]--(analogInPin)--[ Rl ]--|GND const float VoltMult = (180.0 + 10.0) / 10.0; float InVolt, Volt; void setup() { analogReference(INTERNAL); // Инициализация дисплея lcd.begin (16, 2); lcd.setBacklightPin(BACKLIGHT, POSITIVE); lcd.setBacklight(HIGH); // включить подсветку lcd.clear(); // очистить дисплей lcd.print("Voltage"); } void loop() { unsigned long CalcStart = millis(); int ReadCnt = 0; InVolt = 0; // Чтение из порта с усреднением while ((millis() - CalcStart) < REFRESH_TIME) { InVolt += analogRead(PIN_VOLT); ReadCnt++; } InVolt = InVolt / ReadCnt; // Смещение 0 для конкретного ADC (подобрать или отключить) if (InVolt >0,2) InVolt += 3; // Převod na volty (Hodnota: 0..1023 -> (0..VRef) v měřítku Mult) Volt = InVolt * VoltMult * VRef / 1023; // Výstupní data lcd.setCursor (0, 1); lcd.print(Volt); lcd.print("V"); )

Tento článek poskytuje zajímavý diagram pro ty, kteří rádi experimentují a Arduino. Vyznačuje se jednoduchým digitálním voltmetrem, který dokáže bezpečně měřit stejnosměrné napětí mezi 0 a 30 V. Samotná deska Arduino může být napájena standardním 9V zdrojem.



Jak víte, pomocí analogového vstupu Arduino můžete měřit napětí od 0 do 5 V (se standardním referenčním napětím 5 V). Tento rozsah lze ale rozšířit použitím děliče napětí.


Dělič snižuje měřené napětí na úroveň přijatelnou pro analogový vstup. Poté speciálně napsaný kód vypočítá skutečné napětí.



Analogový senzor v Arduinu detekuje napětí na analogovém vstupu a převádí je do digitálního formátu, který lze číst mikrokontrolérem. Na analogový vstup A0 připojíme napěťový dělič tvořený odpory R1 (100K) a R2 (10K). S těmito hodnotami odporu lze do Arduina dodat až 55 V, jelikož dělicí koeficient je v tomto případě 11, takže 55V/11 = 5V. Abyste měli jistotu, že měření jsou pro desku bezpečná, je lepší měřit napětí v rozsahu od 0 do 30 V.



Pokud se hodnoty na displeji neshodují s ověřenými hodnotami voltmetru, použijte přesný digitální multimetr k nalezení přesných hodnot R1 a R2. V tomto případě budete muset v kódu nahradit R1=100000.0 a R2=10000.0 svými vlastními hodnotami. Poté byste měli zkontrolovat napájení změřením napětí na desce mezi 5V a GND. Napětí může být 4,95 V. Pak v kódu vout = (hodnota * 5,0) / 1024,0 je třeba nahradit 5,0 4,95. Je vhodné používat přesné rezistory s chybou maximálně 1 %. Pamatujte, že napětí nad 55V může poškodit desku Arduino!



#zahrnout LiquidCrystal lcd(7, 8, 9, 10, 11, 12); int analogInput = 0; float vout = 0,0; float vin = 0,0; float R1 = 100000,0; // odpor R1 (100K) plovák R2 = 10000,0; // odpor R2 (10K) hodnota int = 0; void setup())( pinMode(analogInput, INPUT); lcd.begin(16, 2); lcd.print("DC VOLTMETER"); ) void loop())( // přečtení hodnoty analogové hodnoty = analogRead(analogInput) ); vout = (hodnota * 5,0) / 1024,0; vin = vout / (R2/(R1+R2)); if (vin<0.09) { vin=0.0;// обнуляем нежелательное значение } lcd.setCursor(0, 1); lcd.print("INPUT V= "); lcd.print(vin); delay(500); }


Použité prvky:


Deska Arduino Uno
Rezistor 100 KOhm
Rezistor 10 KOhm
odpor 100 ohmů
Potenciometr 10KOhm
LCD displej 16×2