Inhoudsopgave:
- Benodigdheden
- Stap 1: Verzamelen van de benodigde componenten
- Stap 2: Het werkingsprincipe
- Stap 3: De onderdelen bij elkaar brengen
- Stap 4: De onderdelen voor het Voltage Sense-netwerk toevoegen
- Stap 5: De onderdelen voor het Current Sense Network toevoegen
- Stap 6: Voltooiing van de resterende verbindingen en voltooiing van de build
- Stap 7: De module aansluiten met Arduino
- Stap 8: Projectcode en schakelschema
- Stap 9: instructievideo
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
Hallo allemaal, ik hoop dat het goed met jullie gaat! In deze instructable laat ik je zien hoe ik deze Power meter/Wattmeter-module heb gemaakt voor gebruik met een Arduino-bord. Deze vermogensmeter kan het verbruikte vermogen en de DC-belasting berekenen. Naast vermogen kan deze module ons ook nauwkeurige metingen van spanning en stroom geven. Het kan gemakkelijk lage spanningen (ongeveer 2V) en lage stromen meten, zo laag als 50 mA met een fout van niet meer dan 20mA. De nauwkeurigheid hangt af van de keuze van de componenten op basis van uw vereisten.
Benodigdheden
- IC LM358 dubbele OP-AMP
- 8-pins IC-basis
- Shuntweerstand (8,6 milliOhm in mijn geval)
- Weerstanden: 100K, 10K, 2,2K, 1K (1/2watt)
- Condensatoren: 3 * 0.1uF keramische condensatoren;
- Veroboard of nulbord
- Schroefklemmen
- Soldeerbout en soldeer
- Arduino Uno of een ander compatibel bord
- OLED-scherm
- Breadbard-draden aansluiten
Stap 1: Verzamelen van de benodigde componenten
Dit project maakt gebruik van zeer eenvoudige en gemakkelijk te verkrijgen componenten: ze omvatten weerstanden, keramische condensatoren, operationele versterker en een veroboard voor prototyping.
De keuze en waarde van componenten hangt af van het type toepassing en het bereik van het vermogen dat u wilt meten.
Stap 2: Het werkingsprincipe
De werking van de vermogensmodule is gebaseerd op twee concepten van circuittheorie en basiselektriciteit: het spanningsdelerconcept voor het meten van de ingangsspanning en de wet van Ohm om de stroom die door het circuit vloeit te berekenen. We gebruiken een shuntweerstand om er een zeer kleine spanningsval over te creëren. Deze spanningsval is evenredig met de hoeveelheid stroom die door de shunt vloeit. Deze kleine spanning, wanneer versterkt door een operationele versterker, kan worden gebruikt als invoer voor een microcontroller die kan worden geprogrammeerd om ons de huidige waarde te geven. De operationele versterker wordt gebruikt als een niet-inverterende versterker waarbij de versterking wordt bepaald door de waarden van de feedback weerstand R2 en R1. Door de niet-inverterende configuratie te gebruiken, hebben we een gemeenschappelijke basis als meetreferentie. Hiervoor wordt de stroom gemeten aan de lage kant van de schakeling. Voor mijn toepassing heb ik een versterking van 46 gekozen door 100K en 2.2K weerstand als feedbacknetwerk te gebruiken. De spanningsmeting wordt gedaan met behulp van een spanningsdelerschakeling die de ingangsspanning verdeelt in verhouding tot het gebruikte weerstandsnetwerk.
Zowel de huidige waarde van de OP-Amp als de spanningswaarde van het scheidingsnetwerk kunnen in twee analoge ingangen van de arduino worden ingevoerd, zodat we het door een belasting verbruikte vermogen kunnen berekenen.
Stap 3: De onderdelen bij elkaar brengen
Laten we beginnen met de constructie van onze voedingsmodule door de positie van de schroefklemmen voor de ingangs- en uitgangsaansluiting te bepalen. Na het markeren van de juiste posities solderen we de schroefklemmen en de shuntweerstand op hun plaats.
Stap 4: De onderdelen voor het Voltage Sense-netwerk toevoegen
Voor ingangsspanningsdetectie gebruik ik een spanningsdelernetwerk van 10K en 1K. Ik heb ook een condensator van 0,1 uF over de 1K-weerstand toegevoegd om de spanningen af te vlakken. Het spanningsdetectienetwerk is gesoldeerd in de buurt van de ingangsklem
Stap 5: De onderdelen voor het Current Sense Network toevoegen
De stroom wordt gemeten door de spanningsval over de shuntweerstand te berekenen en te versterken met een vooraf gedefinieerde versterking die is ingesteld door het weerstandsnetwerk. Er wordt een niet-inverterende versterkingsmodus gebruikt. Het is wenselijk om de soldeersporen klein te houden om een ongewenste spanningsval te voorkomen.
Stap 6: Voltooiing van de resterende verbindingen en voltooiing van de build
Met de spannings- en stroomdetectienetwerken aangesloten en gesoldeerd, is het tijd om de mannelijke header-pinnen te solderen en de nodige aansluitingen van stroom- en signaaluitgangen te maken. De module wordt gevoed door de standaard bedrijfsspanning van 5 volt die we gemakkelijk van een arduino-bord kunnen krijgen. De twee spanningsdetectie-uitgangen worden verbonden met de analoge ingangen van de arduino.
Stap 7: De module aansluiten met Arduino
Nu de module compleet is, is het nu eindelijk tijd om hem te verbinden met een Arduino en hem aan de gang te krijgen. Om de waarden te zien, heb ik een OLED-display gebruikt dat het I2C-protocol gebruikte om met de Arduino te communiceren. De parameters die op het scherm worden weergegeven zijn Spanning, Stroom en Vermogen.
Stap 8: Projectcode en schakelschema
Ik heb het schakelschema en de code van de voedingsmodule in deze stap bijgevoegd (voorheen had ik het.ino- en.txt-bestand met de code bijgevoegd, maar door een serverfout was de code ontoegankelijk of onleesbaar voor gebruikers, dus ik schreef de hele code in deze stap. Ik weet dat dit geen goede manier is om de code te delen:(). Voel je vrij om deze code aan te passen aan je vereisten. Ik hoop dat dit project nuttig voor je was. Deel uw feedback in de opmerkingen. Proost!
#erbij betrekken
#erbij betrekken
#erbij betrekken
#erbij betrekken
#define OLED_RESET 4 Adafruit_SSD1306 display (OLED_RESET);
vlotterwaarde=0;
vlotterstroom = 0;
vlotterspanning = 0;
drijfvermogen = 0;
ongeldige setup() {
pinMode (A0, INGANG);
pinMode (A1, INGANG);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialiseer met de I2C-adr 0x3C (voor de 128x32) display.display();
vertraging (2000);
// Wis de buffer.
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 0);
display.setTextColor(WIT);
Serieel.begin(9600); // Om de waarden op de seriële monitor te zien
}
lege lus() {
// het gemiddelde nemen voor stabiele metingen
for(int i=0;i<20;i++) {
huidige = huidige + analoog lezen (A0);
spanning = spanning + analoog lezen (A1); }
huidige=(huidige/20); stroom=stroom * 0,0123 * 5,0; // kalibratiewaarde, te wijzigen volgens gebruikte componenten
spanning=(spanning/20); spanning=spanning* 0,0508 * 5,0; // kalibratiewaarde, te wijzigen volgens gebruikte componenten
vermogen = spanning * stroom;
// afdrukken van de waarden op de seriële monitor
Seriële.afdruk (spanning);
Serieel.print(" ");
Serial.print (huidig);
Serieel.print(" ");
Seriële.println(stroom);
// afdrukken van de waarden op het OLED-display
display.setCursor(0, 0);
display.print("Spanning: ");
display.print(spanning);
display.println ("V");
display.setCursor(0, 10);
display.print("Huidige: ");
display.print(huidig);
display.println ("A");
display.setCursor(0, 20);
display.print("Power: ");
display.print(kracht);
display.println(" W");
weergave.weergave();
vertraging (500); // verversingssnelheid ingesteld door de vertraging
display.clearDisplay();
}