Zelf een Variabele Voeding Bouwen met Arduino UNO – Stapsgewijze Schema & Code
Hoe een Variabele Voeding te Maken met Arduino UNO?
Een voeding is een basis- en essentiële vereiste voor elektronische en elektrische apparaten en schakelingen. Er zijn verschillende typen schakelingen en apparaten, dus hun voedingsvraag verschilt. Bijvoorbeeld Wi-Fi-modules, relais, motoren, etc. vereisen verschillende spanningen. Op de markt verkrijgen we geen aparte voedingen voor elk elektronisch apparaat, dus genereren we onze eigen specifieke voeding via diverse methoden. De eenvoudige oplossing is het gebruik van batterijen.
Batterijen worden doorgaans gebruikt om elektronische schakelingen en projecten te voeden, omdat ze gemakkelijk verkrijgbaar en te koppelen zijn. Maar ze raken snel leeg en moeten vervangen worden, ook leveren ze geen hoge stroom om een krachtige motor aan te drijven. Batterijen raken leeg, maken de schakeling voluminieus en worden warm bij langdurig of zwaar gebruik, en hun levensduur neemt af. Om dit op te lossen introduceren we een betere en efficiëntere oplossing die in elke schakeling gebruikt kan worden. In dit project laten we zien hoe we een Variabele Voeding vanuit Arduino UNO kunnen genereren.
Met dit project kunt u een variabele voeding verkrijgen volgens uw elektronische apparatuur zonder u zorgen te maken over opladen, ontladen, verhitting, etc. Er zijn veel methoden voor variabele voeding, maar dit is de eenvoudigste omdat het goedkope en gemakkelijk verkrijgbare componenten vereist. Laten we kijken naar de benodigde componenten.
- Gerelateerd: Automatische Deurbel met Objectdetectie door Arduino
Benodigde Componenten
- Arduino UNO
- 16×2 LCD Display
- 100 μF Condensators
- 1k Ω Weerstanden
- Jumper Draden
- 5 Volt Voeding
- 2N2222 Transistor
Software: Arduino Nightly of Atmel Studio 6.2
- Gerelateerd: Afstandsmeting met Arduino en Ultrasonische Sensor
Variabele Voeding Schakelingsschema
Voordat we in het project duiken, laten we een paar dingen weten.

Arduino UNO
Arduino UNO is een open-source platform voor het ontwikkelen van elektronische projecten. Het kan eenvoudig geprogrammeerd, gewist en herprogrammeerd worden op elk moment. Er zijn veel Arduino-borden beschikbaar: UNO, Nano, Mega, LilyPad, etc. met verschillende specificaties. In dit project gebruiken we Arduino UNO om huishoudelijke apparaten automatisch te besturen. Het heeft een ATmega328 microcontroller IC die op 16MHz kloksnelheid draait. Het is krachtig en werkt op USART, I2C en SPI communicatieprotocollen.
- Gerelateerd: Automatische Nachtlamp met Arduino
Dit bord wordt meestal geprogrammeerd met Arduino IDE via micro-USB kabel. De ATmega328 heeft een voorgeprogrammeerde on-board bootloader wat uploaden van code zonder externe hardware vergemakkelijkt. Het heeft veel toepassingen in elektronische projecten of producten. C en C++ worden gebruikt voor programmeren, wat gemakkelijk te leren is. Arduino IDE maakt programmeren veel eenvoudiger. Het scheidt de code in twee delen: void setup() en void loop(). Void setup() draait één keer en wordt gebruikt voor initialisatie, void loop() bevat de code die continu uitgevoerd moet worden.
Dit model heeft 6 analoge invoerpinnen en 14 digitale GPIO-pinnen die als in- of uitgang gebruikt kunnen worden, 6 daarvan leveren PWM-uitgang en analoge functionaliteit via pinMode(), digitalWrite(), digitalRead() en analogRead(). 6 analoge invoerkanalen van pin A0 tot A5 bieden 10-bit resolutie. Het bord kan gevoed worden via USB-kabel (5V) of DC-jack (7-20V).
Er is een on-board spanningsregelaar voor 3,3V voor laagvermogensapparaten. Omdat de ATmega328 op USART, SPI en I2C werkt, heeft het pinnen 0 (Rx) en 1 (Tx) voor USART, SDA (A4) en SCL (A5) voor I2C, en SS (10), MOSI (11), MISO (12) en SCK (13) voor SPI.
- Gerelateerd: Seriële Communicatie met Arduino
ADC op Arduino UNO
Arduino UNO heeft 6 on-board ADC-kanalen om analoge signalen van 0-5V te lezen. Wanneer we sensoren met microcontroller koppelen, genereert de sensor analoge uitgangswaarden die Arduino UNO als digitale waarden ziet. ADC helpt sensorwaarden om te zetten naar analoge waarden en voedt ze in de microcontroller. Toepassingen: temperatuursensing, afstandsmeting, snelheidsmeting en sensoren die analoge waarden genereren.
Arduino UNO heeft 10-bit ADC, wat betekent dat de waarde varieert van 0 tot 1023 per stap. Dit heet resolutie: het aantal discrete waarden over het bereik van analoge waarden.
Aangezien de maximale ADC-spanning 5V is, is elke stap van 0-1023 gelijk aan ongeveer 5mV. Er zijn 6 ADC-kanalen (A0-A5), wat betekent dat het tegelijkertijd 6 apparaten kan besturen die analoge waarden genereren.
Arduino IDE biedt de ingebouwde functie analogRead(pin) om analoge waarden te lezen. Door het pinnummer (A0-A5) op te geven, leest deze functie de analoge waarden.
- Gerelateerd: Wat is een Crowbar Schakeling? Ontwerp en Wer
PWM op Arduino UNO
Pulsbreedtemodulatie (PWM) is een techniek om analoge signalen te genereren met een digitale bron door de pulsbreedte te variëren bij constante frequentie. Twee belangrijke kenmerken: duty cycle en frequentie.
Duty Cycle van een Signaal:
De fractie waarin een signaal AAN is in een complete periode heet Duty Cycle.
Duty Cycle = 100 × Ton / (Ton + Toff)
Dit wordt gebruikt om het aan de belasting geleverde vermogen te regelen door het signaal AN/UIT te schakelen. Bijvoorbeeld voor lichtintensiteit of motortempo. Na een aanroep van analogWrite() genereert de pin een steady blokgolf met de gespecificeerde duty cycle tot de volgende aanroep van analogWrite() of digitalRead()/digitalWrite() op dezelfde pin.
- Gerelateerd: Eenvoudige Gevoelige Aanraakschakeling met 555 Timer & BC547 Transistor
Frequentie van een Signaal:
Frequentie geeft aan hoe snel een signaal zijn cyclus voltooit: hoe lang het duurt om van AAN naar UIT of vice versa te schakelen. Door dit te doen bij een bepaalde duty cycle gedraagt de uitgang zich als een constante analoge spanning. De PWM-frequentie op de meeste pinnen is ongeveer 490Hz. Op de Uno en vergelijkbare borden hebben pinnen 5 en 6 een frequentie van ~980Hz. Pinnen 3 en 11 op de Leonardo draaien ook op 980Hz.
Arduino UNO heeft 6 8-bit PWM-kanalen met ~ symbool. We kunnen analoge spanning verkrijgen met analogWrite functie in Arduino IDE:
analogWrite(pin, Duty Cycle)
Pin: De pin op Arduino UNO om analoge uitgang te genereren.
Duty Cycle: Waarde van 0 (min) tot 255 (max) om de Duty Cycle te veranderen.
- Gerelateerd: Eenvoudige Overbelasting Beveiligingsschakeling met Zener Diode
16×2 LCD Display
Het genereren van custom karakters op LCD is niet moeilijk. Het vereist kennis over custom gegenereerde random access memory (CG-RAM) van de LCD en de LCD-chipcontroller. Dit gaat over het koppelen van Arduino UNO aan 16×2 JHD162A LCD-module. De JHD162A is gebaseerd op de HD44780 driver van Hitachi. Het heeft 16 pinnen en kan in 4-bit modus (4 datalijnen) of 8-bit modus (alle 8 datalijnen) werken. In dit project gebruiken we 4-bit modus omdat het minder draden vereist.
Pin Beschrijving 16×2 LCD Module:
| Pin op LCD | Beschrijving |
|---|---|
| VSS | Aarde Pin |
| VCC | +5V voeding |
| VEE | Pin om contrast van LCD aan te passen |
| RS | Register Select: Data Modus of Commando Modus |
| RW | Lees of Schrijf Modus |
| E | Enable LCD |
| DB0-DB7 | Data en commando worden via deze pinnen ingevoerd |
| LED+ | Anode van de achtergrondverlichting LED |
| LED- | Kathode van de achtergrondverlichting LED |
- Gerelateerd: Automatische Badkamer Lichtschakeling Schema en Wer
Deze LCD heeft geen eigen licht, er zit een LED achter het scherm die als achtergrondverlichting fungeert. Het koppelen van deze LCD met Arduino UNO is eenvoudig omdat Arduino IDE een LiquidCrystal bibliotheek biedt met ingebouwde functies voor initialisatie en afdrukken. De LCD-functies die we voornamelijk gebruiken:
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
lcd.begin()
lcd.clear()
lcd.print()
- Gerelateerd: 12V naar 5V Converter Schakeling
Werking van Variabele Voeding met Arduino
Verbind de draden zoals in het schema. In dit project meten we de spanning aan de uitgangsterminal en geven deze als invoer aan een van de ADC-kanalen. De ADC geeft de digitale waarde die later op de 16×2 LCD wordt weergegeven. De knoppen in het project zijn voor in- en decrement van de spanning en verbonden met pin 4 en 5 van Arduino UNO. Omdat Arduino UNO 10-bit resolutie heeft (0-1023) en de maximale ADC-spanning 5V is, is één bit gelijk aan 5/1024 = 4,9mV (benadering). Bij in- en decrement varieert de digitale waarde van 0 tot 1023.
Nu lezen we de ADC-waarde op kanaal A0. Arduino IDE biedt analogRead(pin) om ADC-waarden te lezen, hier pin A0. Vervolgens gebruiken we pin 3 voor PWM van Arduino UNO. Arduino IDE biedt analogWrite(pin, Duty Cycle) om de gewenste uitgangsspanning met gegeven duty cycle op pin 3 te genereren.
Door op de twee knoppen te drukken veranderen we de duty cycle van het PWM-signaal, wat de uitgangsspanning verandert. Één knop verhoogt de duty cycle, de ander verlaagt deze. De PWM-waarde van Arduino Uno varieert van 0 tot 255 (0 voor 0V, 255 voor 5V). Pin 3 wordt verder naar een NPN-transistor geleid die een variabele spanning aan de emitter geeft en als schakelapparaat fungeert.
De basis van de transistor heeft een variabele duty-cycle PWM en dus verkrijgen we variabele uitgangsspanning aan de terminal. Omdat de spanning niet lineair is, koppelen we condensators om ruis in de variabele uitgangsspanning te filteren.
- Gerelateerd: Verkeerslicht Regeling Electronisch Project met IC 4017 & 555 Timer
Code Uitleg
Bibliotheken Includeren:
#include <LiquidCrystal.h>
Dit is de ingebouwde bibliotheek voor LCD-display. Het biedt functies die eenvoudig gebruikt kunnen worden om karakters op het LCD-display weer te geven.
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
int ref_volt = 125;
float flag = 0;
liquid crystal lcd neemt de pinnummers waar de datapinnen en RS, RW en E pinnen van het LCD-display verbonden zijn. Omdat we onze referentiespanning op 2,5V zetten, zetten we de duty cycle op 50% door ref_volt op 125 te zetten.
pinMode(3, OUTPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
Arduino UNO pin 3 ingesteld als PWM-uitgang, pin 4 en 5 als invoer voor in- en decrement van de spanning.
lcd.begin(16, 2);
delay(100);
lcd.setCursor(1, 0);
lcd.print("Variabele Spanning");
lcd.clear();
delay(1000);
lcd.begin stelt het aantal tekens van het LCD-display in. Aanvankelijk tonen we "Variabele Spanning" op het scherm.
float value = (analogRead(A0));
value = (value * 5) / 1024;
analogWrite(3, ref_volt);
Variabele value leest de digitale waarde van A0 ADC-kanaal en converteert deze naar spanningswaarde. AnalogWrite geeft PWM op pin 3 van Arduino UNO.
if (digitalRead(4) == LOW) {
if (ref_volt < 250) {
ref_volt = ref_volt + 1;
delay(100);
}
}
Dit controleert of de increment-knop ingedrukt is. Als iemand de increment-knop indrukt, verhoogt het ref_volt.
if (digitalRead(5) == LOW) {
if (ref_volt > 0) {
ref_volt = ref_volt - 1;
delay(100);
}
}
Dit controleert of de decrement-knop ingedrukt is. Bij indrukken verlaagt het ref_volt.
- Gerelateerd: Klapschakeling met IC 555 Timer & Zonder Timer
Op deze manier kunt u een 5 volt variabele voeding met Arduino UNO genereren zonder u zorgen te maken over batterijen en een voluminieuze schakeling.
Industriële technologie
- Een DTMF-decoder bouwen met alleen een Arduino – Geen extra IC's nodig
- Een slimme voltmeter bouwen met Arduino en smartphone – Eenvoudig DIY-project
- Arduino Uno WiFi Webserver: LED aan/uit schakelen via browser
- Python 3 naar Arduino UNO: Eenvoudige Commando Besturing en LED Demo
- Bouw een compacte FM-radio met Arduino Nano en RDA5807M
- Smartphone G-sensor gestuurde robotauto met Arduino en Bluetooth
- Real-time GPS-tracking met Helium, Azure IoT Hub en Power BI
- AI detecteert mensenhandel en wildhandel in mondiale supply chains
- Stroom, Vermogen En Koppel In Variabele Snelheidsaandrijvingen Onder De Knie Krijgen
- Dubbele ±12 VDC voeding vanuit 230 VAC – Schakelingsschema & handleiding
- Transformatorloze voedingen: Een bewezen oplossing om kosten en ruimte te besparen