- Vereiste materialen
- Schakelschema
- Meeteenheid
- Reken- en weergave-eenheid
- Programmeren van de Arduino
- Hoe nauwkeuriger te meten?
- Werken en testen
Als elektronica-ingenieurs zijn we altijd afhankelijk van meters / instrumenten om de werking van een schakeling te meten en te analyseren. Beginnend met een eenvoudige multimeter tot complexe power quality analyzers of DSO's, alles heeft zijn eigen unieke toepassingen. De meeste van deze meters zijn direct verkrijgbaar en kunnen worden gekocht op basis van de te meten parameters en hun nauwkeurigheid. Maar soms kunnen we in een situatie terechtkomen waarin we onze eigen meters moeten bouwen. Stel dat u bijvoorbeeld aan een zonne-PV-project werkt en u wilt het stroomverbruik van uw belasting berekenen, dan kunnen we in dergelijke scenario's onze eigen Wattmeter bouwen met behulp van een eenvoudig microcontrollerplatform zoals Arduino.
Het bouwen van uw eigen meters verlaagt niet alleen de testkosten, maar geeft ons ook de ruimte om het testproces te vergemakkelijken. Zo kan een wattmeter die is gebouwd met Arduino eenvoudig worden aangepast om de resultaten op de seriële monitor te volgen en een grafiek op de seriële plotter uit te zetten of een SD-kaart toe te voegen om automatisch de waarden van spanning, stroom en vermogen op vooraf gedefinieerde intervallen te loggen. Klinkt interessant toch !? Dus laten we beginnen…
Vereiste materialen
- Arduino Nano
- LM358 Op-Amp
- 7805 Spanningsregelaar
- 16 * 2 LCD-scherm
- 0.22 ohm 2Watt shuntweerstand
- 10k snoeipot
- 10k, 20k, 2,2k, 1k weerstanden
- 0.1uF condensatoren
- Testbelasting
- Perf bord of breadboard
- Soldeerkit (optioneel)
Schakelschema
Het volledige schakelschema van het Arduino wattmeter-project wordt hieronder gegeven.
Voor een beter begrip is het arduino-wattmetercircuit opgesplitst in twee eenheden. Het bovenste deel van de schakeling is de meeteenheid en het onderste deel van de schakeling is de reken- en weergave-eenheid. Voor mensen die nieuw zijn in dit type circuits, volg je de labels. Voorbeeld + 5V is een label, wat betekent dat alle pinnen waarmee het label is verbonden, moeten worden beschouwd als ze met elkaar zijn verbonden. Labels worden normaal gesproken gebruikt om het schakelschema er netjes uit te laten zien.
Het circuit is ontworpen om te passen in systemen die werken tussen 0-24V met een stroombereik van 0-1A, rekening houdend met de specificatie van een zon-PV. Maar u kunt het bereik gemakkelijk uitbreiden als u de werking van het circuit begrijpt. Het onderliggende principe achter het circuit is om de spanning over de belasting en de stroom erdoorheen te meten om het stroomverbruik ervan te berekenen. Alle gemeten waarden worden weergegeven op een 16 * 2 alfanumeriek LCD-scherm.
Laten we verderop het circuit opsplitsen in kleine segmenten, zodat we een duidelijk beeld krijgen van hoe het circuit is ingesprongen om te werken.
Meeteenheid
De meeteenheid bestaat uit een potentiaalverdeler om ons te helpen de spanning te meten en een sluitweerstand met een niet-inverterende op-amp wordt gebruikt om ons te helpen de stroom door het circuit te meten. Het potentiaalverdelingsgedeelte van het bovenstaande circuit wordt hieronder weergegeven
Hier wordt de ingangsspanning weergegeven door Vcc, zoals eerder verteld, we ontwerpen het circuit voor een spanningsbereik van 0V tot 24V. Maar een microcontroller als Arduino kan zulke hoge spanningswaarden niet meten; het kan alleen spanning meten van 0-5V. We moeten dus het spanningsbereik van 0-24V naar 0-5V in kaart brengen (omzetten). Dit kan eenvoudig worden gedaan door een potentiaaldelercircuit te gebruiken, zoals hieronder wordt weergegeven. De weerstand 10k en 2.2k vormen samen de potentiaaldelerschakeling. De uitgangsspanning van een potentiaalverdeler kan worden berekend met behulp van onderstaande formules. Hetzelfde wordt gebruikt om de waarde van uw weerstanden te bepalen, u kunt onze online calculator gebruiken om de waarde van de weerstand te berekenen als u het circuit opnieuw ontwerpt.
Vout = (Vin × R2) / (R1 + R2)
De toegewezen 0-5V kan worden verkregen uit het middelste gedeelte dat is gelabeld als Voltage. Deze toegewezen spanning kan later naar de Arduino Analog-pin worden gevoerd.
Vervolgens moeten we de stroom door de LOAD meten. Zoals we weten, kunnen microcontrollers alleen analoge spanning lezen, dus we moeten de waarde van stroom op de een of andere manier omzetten in spanning. Het kan worden gedaan door eenvoudig een weerstand (shuntweerstand) in het pad toe te voegen die volgens de wet van Ohm een waarde van de spanning eroverheen laat vallen die evenredig is met de stroom die er doorheen vloeit. De waarde van deze spanningsval zal veel kleiner zijn, dus we gebruiken een op-amp om deze te versterken. Het circuit voor hetzelfde wordt hieronder getoond
Hier is de waarde van de shuntweerstand (SR1) 0,22 Ohm. Zoals eerder gezegd, ontwerpen we het circuit voor 0-1A, dus op basis van de wet van Ohm kunnen we de spanningsval over deze weerstand berekenen, die ongeveer 0,2V zal zijn wanneer er maximaal 1A stroom door de belasting gaat. Deze spanning is erg klein voor een microcontroller om te lezen, we gebruiken een Op-Amp in niet-inverterende versterker-modus om de spanning te verhogen van 0.2V naar een hoger niveau zodat de Arduino kan lezen.
De Op-Amp in niet-inverterende modus wordt hierboven weergegeven. De versterker is ontworpen om een versterking van 21 te hebben, zodat 0,2 * 21 = 4,2V. De formules om de versterking van de Op-amp te berekenen worden hieronder gegeven, je kunt deze online versterkingscalculator ook gebruiken om de waarde van je weerstand te krijgen als je het circuit opnieuw ontwerpt.
Winst = Vout / Vin = 1 + (Rf / Rin)
Hier in ons geval is de waarde van Rf 20k en de waarde van Rin is 1k, wat ons een gian-waarde van 21 geeft. De versterkte spanning van de Op-amp wordt dan gegeven aan een RC-filter met weerstand 1k en een condensator 0.1uF naar filter alle ruis die is gekoppeld. Ten slotte wordt de spanning vervolgens naar de analoge pin van Arduino gevoerd.
Het laatste deel dat overblijft in de meetunit is het spanningsregelaardeel. Omdat we een variabele ingangsspanning zullen geven, hebben we een gereguleerde + 5V volt nodig om de Arduino en de Op-amp te laten werken. Deze geregelde spanning wordt geleverd door de 7805 spanningsregelaar. Aan de uitgang is een condensator toegevoegd om de ruis te filteren.
Reken- en weergave-eenheid
In de meeteenheid hebben we het circuit ontworpen om de spanning en stroomparameters om te zetten in 0-5V die naar de Arduino analoge pinnen kunnen worden gevoerd. Nu zullen we in dit deel van het circuit deze spanningssignalen verbinden met Arduino en ook een 16 × 2 alfanumeriek display aan de Arduino koppelen, zodat we de resultaten kunnen bekijken. Het circuit voor hetzelfde wordt hieronder getoond
Zoals je kunt zien is de spanningspin verbonden met analoge pin A3 en de huidige pin is verbonden met analoge pin A4. Het LCD-scherm wordt gevoed door de + 5V van de 7805 en is verbonden met de digitale pinnen van Arduino om in 4-bit-modus te werken. We hebben ook een potentiometer (10k) gebruikt die is aangesloten op de Con-pin om het contrast van het LCD-scherm te variëren.
Programmeren van de Arduino
Nu we de hardware goed begrijpen, kunnen we de Arduino openen en beginnen met programmeren. Het doel van de code is om de analoge spanning op pin A3 en A4 te lezen en de spanning, stroom en vermogen te berekenen en deze uiteindelijk op het LCD-scherm weer te geven. Het volledige programma om hetzelfde te doen staat aan het einde van de pagina, dat als zodanig kan worden gebruikt voor de hierboven besproken hardware. Verder wordt de code opgesplitst in kleine fragmenten en uitgelegd.
Zoals alle programma's waarmee we beginnen, de pinnen definiëren die we hebben gebruikt. In ons project worden de A3- en A4-pin gebruikt om respectievelijk spanning en stroom te meten en de digitale pinnen 3,4,8,9,10 en 11 worden gebruikt om het LCD-scherm met Arduino te verbinden.
int Read_Voltage = A3; int Read_Current = A4; const int rs = 3, en = 4, d4 = 8, d5 = 9, d6 = 10, d7 = 11; // Noem het pincode voor LCD-aansluiting LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
We hebben ook een header-bestand met de naam liquid crystal toegevoegd om de LCD met Arduino te verbinden. Vervolgens initialiseren we in de setup-functie het LCD-scherm en geven we een intro-tekst weer als "Arduino Wattmeter" en wachten twee seconden voordat we het wissen. De code voor hetzelfde wordt hieronder weergegeven.
leegte setup () { lcd.begin (16, 2); // Initialiseer 16 * 2 LCD lcd.print ("Arduino Wattmeter"); // Intro Message line 1 lcd.setCursor (0, 1); lcd.print ("- Circuitdigest"); // Intro Message line 2 delay (2000); lcd.clear (); }
Binnen de hoofdlusfunctie gebruiken we de analoge leesfunctie om de spanningswaarde van de pin A3 en A4 te lezen. Zoals we weten, is de Arduino ADC-uitvoerwaarde van 0-1203 omdat deze een 10-bits ADC heeft. Deze waarde moet vervolgens worden omgezet naar 0-5V, wat kan worden gedaan door te vermenigvuldigen met (5/1023). Nogmaals, eerder in de hardware hebben we de werkelijke waarde van de spanning in kaart gebracht van 0-24V tot 0-5V en de werkelijke waarde van de huidige vorm van 0-1A tot 0-5V. Dus nu moeten we een vermenigvuldiger gebruiken om deze waarden terug te zetten naar de werkelijke waarde. Dit kan worden gedaan door het te vermenigvuldigen met een vermenigvuldigingswaarde. De waarde van de vermenigvuldiger kan theoretisch worden berekend met behulp van de formules in het hardwaregedeelte of als u een bekende reeks spannings- en stroomwaarden heeft, kunt u deze praktisch berekenen.Ik heb de laatste optie gevolgd omdat deze de neiging heeft om in realtime nauwkeuriger te zijn. Dus hier is de waarde van vermenigvuldigers 6,46 en 0,239. Daarom ziet de code er als volgt uit
float Voltage_Value = analogRead (Read_Voltage); float Current_Value = analogRead (Read_Current); Voltage_Value = Voltage_Value * (5.0 / 1023.0) * 6.46; Current_Value = Current_Value * (5,0 / 1023,0) * 0,239;
Hoe nauwkeuriger te meten?
De bovenstaande manier om de waarde van de werkelijke spanning en stroom te berekenen, werkt prima. Maar lijdt aan één nadeel, namelijk dat de relatie tussen de gemeten ADC-spanning en de werkelijke spanning niet lineair zal zijn, dus een enkele vermenigvuldiger zal geen erg nauwkeurige resultaten geven, hetzelfde geldt ook voor stroom.
Dus om de nauwkeurigheid te verbeteren, kunnen we een reeks gemeten ADC-waarden uitzetten met werkelijke waarden met behulp van een bekende reeks waarden en vervolgens die gegevens gebruiken om een grafiek uit te zetten en de vermenigvuldigingsvergelijking af te leiden met behulp van de lineaire regressiemethode. Je kunt verwijzen naar de Arduino dB-meter waarin ik een vergelijkbare methode heb gebruikt.
Ten slotte, als we de waarde van de werkelijke spanning en de werkelijke stroom door de belasting hebben berekend, kunnen we het vermogen berekenen met behulp van de formules (P = V * I). Vervolgens geven we alle drie de waarden weer op het LCD-scherm met behulp van de onderstaande code.
lcd.setCursor (0, 0); lcd.print ("V ="); lcd.print (Voltage_Value); lcd.print (""); lcd.print ("I ="); lcd.print (Current_Value); zweven Power_Value = Voltage_Value * Current_Value; lcd.setCursor (0, 1); lcd.print ("Power ="); lcd.print (Power_Value);
Werken en testen
Omwille van de tutorial heb ik een perf board gebruikt om alle componenten te solderen zoals getoond in het circuit. Ik heb een Phoenix-schroefklem gebruikt om de belasting aan te sluiten en een normale DC-vataansluiting om mijn stroombron aan te sluiten. Het Arduino Nano-bord en het LCD-scherm zijn op een vrouwelijke Bergstik gemonteerd, zodat ze indien nodig later opnieuw kunnen worden gebruikt.
Nadat u de hardware gereed heeft gemaakt, uploadt u de Arduino-code naar uw Nano-bord. Pas de trimmerpot aan om het contrastniveau van het LCD-scherm te regelen totdat u een duidelijke intro-tekst ziet. Om het bord te testen, sluit u de belasting aan op de schroefklemconnector en de bron op de Barrel-aansluiting. De bronspanning zou meer dan 6V moeten zijn om dit project te laten werken, aangezien de Arduino + 5V nodig had om te werken. ALS alles goed werkt, zou u de waarde van de spanning over de belasting en de stroom erdoorheen moeten zien in de eerste regel van het LCD-scherm en het berekende vermogen weergegeven op de tweede regel van het LCD-scherm, zoals hieronder weergegeven.
Het leuke van het bouwen van iets zit hem in het testen om te kijken in hoeverre het goed werkt. Om dat te doen heb ik 12V auto-knipperlichten gebruikt als belasting en de RPS als bron. Aangezien de RPS zelf de waarde van stroom en spanning kan meten en weergeven, zullen we gemakkelijk de nauwkeurigheid en prestaties van ons circuit kunnen controleren. En ja, ik heb mijn RPS ook gebruikt om mijn vermenigvuldigingswaarde te kalibreren, zodat ik de nauwkeurige waarde benader.
De volledige werking is te vinden op de video aan het einde van deze pagina. Ik hoop dat je het circuit en het programma hebt begrepen en iets nuttigs hebt geleerd. Als je een probleem hebt om dit te laten werken, plaats het dan in de commentaarsectie hieronder of schrijf op onze forums voor meer technische hulp.
Dit op Arduino gebaseerde Wattmeter-project heeft nog veel meer upgrades die kunnen worden toegevoegd om de prestaties van automatische datalogging, het plotten van grafieken, het melden van overspanning of overstroom situaties etc. te verbeteren. Dus blijf nieuwsgierig en laat me weten waarvoor je dit zou gebruiken.