- Nødvendige materialer
- Kredsløbsdiagram
- Måleenhed
- Beregnings- og displayenhed
- Programmering af Arduino
- Hvordan måles med mere nøjagtighed?
- Arbejde og test
Som elektronikingeniører er vi altid afhængige af målere / instrumenter til at måle og analysere, hvordan et kredsløb fungerer. Begyndende med et simpelt multimeter til en kompleks effektkvalitetsanalysator eller DSO har alt deres egne unikke applikationer. De fleste af disse målere er let tilgængelige og kan købes baseret på de parametre, der skal måles, og deres nøjagtighed. Men nogle gange kan vi ende i en situation, hvor vi har brug for at bygge vores egne målere. Sig for eksempel, at du arbejder på et solcelle-PV-projekt, og at du gerne vil beregne strømforbruget for din belastning. I sådanne scenarier kan vi bygge vores eget Wattmeter ved hjælp af en simpel mikrocontrollerplatform som Arduino.
At bygge dine egne målere reducerer ikke kun testomkostningerne, men giver os også plads til at lette testprocessen. Ligesom et wattmeter bygget ved hjælp af Arduino kan let finjusteres for at overvåge resultaterne på seriel skærm og plotte en graf på seriel plotter eller tilføje et SD-kort for automatisk at logge værdierne for spænding, strøm og effekt med foruddefinerede intervaller. Det lyder interessant, ikke !? Så lad os komme i gang…
Nødvendige materialer
- Arduino Nano
- LM358 Op-Amp
- 7805 Spændingsregulator
- 16 * 2 LCD-skærm
- 0,22 ohm shuntmodstand på 2 watt
- 10k trimmerpotte
- 10k, 20k, 2.2k, 1k modstande
- 0,1 uF kondensatorer
- Testbelastning
- Perfbræt eller brødbræt
- Loddesæt (valgfrit)
Kredsløbsdiagram
Det komplette kredsløbsdiagram for arduino wattmeterprojektet er angivet nedenfor.
For at lette forståelsen er arduino wattmeter kredsløb opdelt i to enheder. Den øverste del af kredsløbet er måleenheden, og den nederste del af kredsløbet er beregnings- og displayenheden. For folk, der er nye med denne type kredsløb, fulgte etiketterne. Eksempel + 5V er etiket, hvilket betyder, at alle de ben, som etiketten er tilsluttet til, skal betragtes, da de er forbundet sammen. Etiketter bruges normalt til at få kredsløbsdiagrammet til at se pænt ud.
Kredsløbet er designet til at passe ind i systemer, der fungerer mellem 0-24V med et aktuelt interval på 0-1A under hensyntagen til specifikationen for en solcelle-solcelle. Men du kan nemt udvide rækkevidden, når du forstår, hvordan kredsløbet fungerer. Det underliggende princip bag kredsløbet er at måle spændingen over belastningen og strømmen igennem den for at beregne strømforbruget af den. Alle målte værdier vises i et 16 * 2 alfanumerisk LCD-display.
Længere nedenfor lad os opdele kredsløbet i små segmenter, så vi kan få et klart billede af, hvordan kredsløbet er indrykket for at fungere.
Måleenhed
Måleenheden består af en potentiel skillevæg, der hjælper os med at måle spændingen, og en lukket modstand med en ikke-inverterende op-forstærker bruges til at hjælpe os med at måle strømmen gennem kredsløbet. Den potentielle skilledel fra ovenstående kredsløb er vist nedenfor
Her er indgangsspændingen repræsenteret af Vcc, som fortalt tidligere designer vi kredsløbet til et spændingsområde fra 0V til 24V. Men en mikrokontroller som Arduino kan ikke måle så høje spændingsværdier; det kan kun måle spænding fra 0-5V. Så vi er nødt til at kortlægge (konvertere) spændingsområdet på 0-24V til 0-5V. Dette kan let gøres ved at bruge et potentielt skillekredsløb som vist nedenfor. Modstanden 10k og 2.2k danner sammen det potentielle delerkredsløb. Udgangsspændingen for en potentialdeler kan beregnes ved hjælp af nedenstående formler. Det samme bruges til at bestemme værdien af dine modstande. Du kan bruge vores online regnemaskine til at beregne værdien af modstanden, hvis du er ved at designe kredsløbet.
Vout = (Vin × R2) / (R1 + R2)
Den kortlagte 0-5V kan fås fra den midterste del, der er mærket som Spænding. Denne kortlagte spænding kan derefter føres til Arduino Analog pin senere.
Derefter skal vi måle strømmen gennem LOAD. Som vi ved, kan mikrokontrollere kun læse analog spænding, så vi skal på en eller anden måde konvertere værdien af strøm til spænding. Det kan gøres ved blot at tilføje en modstand (shuntmodstand) i stien, som ifølge Ohms lov vil falde en spændingsværdi over den, der er proportional med strømmen, der strømmer gennem den. Værdien af dette spændingsfald vil være meget mindre, så vi bruger en op-forstærker til at forstærke det. Kredsløbet for det samme er vist nedenfor
Her er værdien af shuntmodstand (SR1) 0,22 ohm. Som tidligere nævnt designer vi kredsløbet til 0-1A, så vi kan beregne spændingsfaldet over denne modstand baseret på Ohms-lov, som vil være omkring 0,2 V, når maksimalt 1A strøm passerer gennem belastningen. Denne spænding er meget lille for en mikrocontroller at læse, vi bruger en Op-Amp i ikke-inverterende forstærkertilstand for at øge spændingen fra 0,2 V til højere niveau for Arduino at læse.
Op-forstærkeren i ikke-inverterende tilstand er vist ovenfor. Forstærkeren er designet til at have en forstærkning på 21, så 0,2 * 21 = 4,2V. Formlerne til beregning af forstærkningen af Op-amp er angivet nedenfor, du kan også bruge denne online forstærkningsberegner til at få værdien af din modstand, hvis du redesigner kredsløbet.
Forstærkning = Vout / Vin = 1 + (Rf / Rin)
Her i vores tilfælde er værdien af Rf 20k, og værdien af Rin er 1k, hvilket giver os en gianværdi på 21. Den forstærkede spænding fra Op-amp gives derefter til et RC-filter med modstand 1k og en kondensator 0.1uF til filtrer enhver støj, der er koblet. Endelig tilføres spændingen til Arduino analoge pin.
Den sidste del, der er tilbage i måleenheden, er spændingsregulatordelen. Da vi vil give en variabel indgangsspænding, har vi brug for en reguleret + 5V volt til Arduino og Op-amp til at fungere. Denne regulerede spænding leveres af 7805 spændingsregulatoren. En kondensator tilføjes ved udgangen for at filtrere støj.
Beregnings- og displayenhed
I måleenheden har vi designet kredsløbet til at konvertere spændings- og strømparametrene til 0-5V, som kan tilføres til Arduino analoge ben. Nu i denne del af kredsløbet vil vi forbinde disse spændingssignaler til Arduino og også interface en 16 × 2 alfanumerisk skærm til Arduino, så vi kan se resultaterne. Kredsløbet for det samme er vist nedenfor
Som du kan se, er spændingsstiften forbundet med den analoge stift A3, og den nuværende stift er tilsluttet den analoge stift A4. LCD'et får strøm fra + 5V fra 7805 og er tilsluttet de digitale stifter på Arduino for at arbejde i 4-bit-tilstand. Vi har også brugt et potentiometer (10k) tilsluttet Con-pin til at variere LCD-kontrasten.
Programmering af Arduino
Nu hvor vi har en god forståelse af hardwaren, lad os åbne Arduino og starte programmeringen. Formålet med koden er at læse den analoge spænding på pin A3 og A4 og beregne spændings-, strøm- og effektværdien og endelig vise den på LCD-skærmen. Det komplette program til at gøre det samme findes i slutningen af siden, som kan bruges som sådan til den hardware, der er diskuteret ovenfor. Yderligere er koden opdelt i små uddrag og forklaret.
Som alle programmer begynder vi med at definere de ben, vi har brugt. I ud-projektet bruges A3- og A4-stiften til at måle henholdsvis spænding og strøm, og de digitale stifter 3,4,8,9,10 og 11 bruges til at grænsefladen mellem LCD og Arduino
int Read_Voltage = A3; int Read_Current = A4; const int rs = 3, en = 4, d4 = 8, d5 = 9, d6 = 10, d7 = 11; // Nævn pinkoden til LCD-forbindelse LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Vi har også inkluderet en headerfil kaldet liquid crystal for at interface LCD-skærmen med Arduino. Derefter initialiserer vi LCD-skærmen inden for opsætningsfunktionen og viser en introtekst som “Arduino Wattmeter” og venter i to sekunder, før vi rydder den. Koden for det samme er vist nedenfor.
ugyldig opsætning () { lcd.begin (16, 2); // Initialiser 16 * 2 LCD lcd.print ("Arduino Wattmeter"); // Intro meddelelseslinje 1 lcd.setCursor (0, 1); lcd.print ("- Circuitdigest"); // Intro Message line 2 delay (2000); lcd.clear (); }
Inde i hovedsløjfefunktionen bruger vi den analoge læsefunktion til at læse spændingsværdien fra pin A3 og A4. Som vi ved, er Arduino ADC-outputværdien fra 0-1203, da den har en 10-bit ADC. Denne værdi skal derefter konverteres til 0-5V, hvilket kan gøres ved at gange med (5/1023). Derefter tidligere i hardwaren har vi kortlagt den aktuelle spændingsværdi fra 0-24V til 0-5V og den aktuelle værdi af strømform 0-1A til 0-5V. Så nu skal vi bruge en multiplikator til at tilbageføre disse værdier til den faktiske værdi. Dette kan gøres ved at gange det med en multiplikatorværdi. Multiplikatorens værdi kan enten beregnes teoretisk ved hjælp af formlerne i hardwareafsnittet, eller hvis du har et kendt sæt spændings- og strømværdier, kan du beregne det praktisk.Jeg har fulgt den sidstnævnte mulighed, fordi den har en tendens til at være mere præcis i realtid. Så her er værdien af multiplikatorer 6,46 og 0,239. Derfor ser koden ud som nedenfor
float Voltage_Value = analogRead (Read_Voltage); flyde 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;
Hvordan måles med mere nøjagtighed?
Ovenstående måde at beregne værdien af faktisk spænding og strøm på fungerer fint. Men lider af en ulempe, det vil sige forholdet mellem den målte ADC-spænding og den faktiske spænding vil ikke være lineær, og derfor vil en enkelt multiplikator ikke give meget nøjagtige resultater, det samme gælder også for strøm.
For at forbedre nøjagtigheden kan vi plotte sæt af målte ADC-værdier med faktiske værdier ved hjælp af et kendt sæt værdier og derefter bruge disse data til at plotte en graf og udlede multiplikatorligningen ved hjælp af den lineære regressionsmetode. Du kan henvise til Arduino dB-måleren, hvor jeg har brugt en lignende metode.
Når vi endelig har beregnet værdien af den aktuelle spænding og den aktuelle strøm gennem belastningen, kan vi beregne effekten ved hjælp af formlerne (P = V * I). Derefter viser vi alle de tre værdier på LCD-skærmen ved hjælp af nedenstående kode.
lcd.setCursor (0, 0); lcd.print ("V ="); lcd.print (Voltage_Value); lcd.print (""); lcd.print ("I ="); lcd.print (Current_Value); flyde Power_Value = Voltage_Value * Current_Value; lcd.setCursor (0, 1); lcd.print ("Power ="); lcd.print (Power_Value);
Arbejde og test
Af hensyn til vejledningen har jeg brugt et perf-kort til at lodde alle komponenterne som vist i kredsløbet. Jeg har brugt en Phoenix-skrueterminal til at forbinde belastningen og den normale jævnstrømsstik til at forbinde min strømkilde. Arduino Nano-kortet og LCD-skærmen er monteret på en kvindelig Bergstik, så de kan genbruges, hvis det kræves senere.
Efter at have gjort hardware klar, skal du uploade Arduino-koden til dit Nano-kort. Juster trimmerpotten for at kontrollere kontrastniveauet på LCD'et, indtil du ser en klar introtekst. For at teste tavlen skal du forbinde belastningen med skrueterminalstikket og kilden til tønderstikket. Kildespændingen skal være mere end 6V for at dette projekt kan fungere, da Arduino krævede + 5V for at fungere. HVIS alt fungerer fint, skal du se værdien af spændingen på tværs af belastningen og strømmen gennem den vises i første linje på LCD'et og den beregnede effekt vises på anden linje på LCD'et som vist nedenfor.
Den sjove del af at bygge noget ligger i at teste det for at kontrollere, hvor langt det fungerer korrekt. For at gøre det har jeg brugt 12V bilindikator bubs som belastning og RPS som kilde. Da RPS selv kan måle og vise værdien af strøm og spænding, vil det være let for os at krydstjekke nøjagtigheden og ydeevnen af vores kredsløb. Og ja, jeg brugte også min RPS til at kalibrere min multiplikatorværdi, så jeg kommer tæt på nøjagtig værdi.
Det komplette arbejde kan findes i videoen, der er vist i slutningen af denne side. Håber du forstod kredsløbet og programmet og lærte noget nyttigt. Hvis du har problemer med at få dette til at fungere, skal du skrive det i kommentarfeltet nedenfor eller skrive på vores fora for mere teknisk hjælp.
Dette Arduino-baserede Wattmeter-projekt har mange flere opgraderinger, der kan tilføjes for at øge ydeevnen til automatisk datalogning, plotte graf, meddele over spænding eller over aktuelle situationer osv. Så vær nysgerrig og lad mig vide, hvad du ville bruge dette til.