Sommario:
- Forniture
- Passaggio 1: gli schemi
- Passaggio 2: calcolo del codice e del resistore
- Passaggio 3: testiamolo
Video: Voltmetro Arduino preciso e accurato (0-90 V CC): 3 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 09:59
In questo istruibile, ho costruito un voltmetro per misurare le alte tensioni DC (0-90v) con relativa precisione e accuratezza usando un Arduino Nano.
Le misurazioni di prova che ho effettuato erano abbastanza accurate, per lo più entro 0,3 V dalla tensione effettiva misurata con un voltmetro standard (ho usato un Astro AI DM6000AR). Questo è abbastanza vicino per l'uso previsto del dispositivo.
Per archiviare questo ho usato un riferimento di tensione (4.096v) e un partitore di tensione.
Per quanto riguarda il codice, ho usato, ovviamente, l'opzione "riferimento esterno" per Arduino Nano e l'esempio "Smoothing" nei tutorial di Arduino.
Forniture
1 x Arduino Nano - Collegamento
1 x display Oled (SSD 1306) - Link
1 x 1/4W 1% Resistenze - 1k ohm - Link
1 x 1/4W 1% Resistenze - 220k ohm - Link
1 x 1/4W 1% resistori - 10k ohm - Link
1 x 4.096v LM4040DIZ-4.1 Riferimento di tensione - Collegamento
Tagliere e fili - Link
Astro AI DM6000AR - Collegamento
USB Power Bank - Collegamento
Batterie 9V - Link
CanadianWinters partecipa all'Amazon Services LLC Associates Program, un programma pubblicitario di affiliazione progettato per fornire ai siti un mezzo per guadagnare commissioni collegandosi ad Amazon.com e ai siti affiliati. Utilizzando questi link, come Associato Amazon guadagno dagli acquisti idonei, anche se acquisti qualcos'altro, e non ti costerà nulla.
Passaggio 1: gli schemi
Ho collegato tutte le parti come da schema sopra. In particolare ho scelto il riferimento di tensione 4.096 per stare il più vicino possibile al segno 5v per evitare di perdere risoluzione.
Seguendo la scheda tecnica, ho scelto un resistore da 1K ohm per il riferimento di tensione anche se si poteva usare un valore diverso. La tensione per il riferimento è fornita dal pin Nano 5v.
L'idea del circuito è che la tensione CC da misurare passa attraverso un resistore di tensione. La tensione scalata quindi entra nel pin analogico dell'Arduino per essere campionata, livellata, ridimensionata e visualizzata sul display OLed.
Ho cercato di mantenere le cose semplici:)
Passaggio 2: calcolo del codice e del resistore
I valori dei resistori sono stati scelti in quanto è consigliabile (se non erro questo è sul datasheet di Arduino/Atmega) mantenere l'impedenza al di sotto dei 10k ohm.
Per semplificare le cose, ho realizzato un foglio di calcolo che automatizza i calcoli nel caso in cui si desideri utilizzare valori di resistori diversi: Link a Google Sheet
Ecco il codice che ho usato per questo progetto:
#includere
#include U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0);// (rotazione, [reset]) float voltage =0; // utilizzato per memorizzare il valore di tensione float Radjust = 0.043459459; //Fattore divisore di tensione (R2 / R1+R2) float vbat =0; //tensione finale dopo i calcoli- tensione del galleggiante della batteria Vref = 4.113; //Riferimento tensione - valore reale misurato. Valore nominale 4.096v const int numReadings = 50; // numero di campioni di lettura - aumenta per un maggiore livellamento. Diminuire per una lettura più veloce. int letture[numLetture]; // le letture dall'ingresso analogico int readIndex = 0; // l'indice della lettura corrente unsigned long total = 0; // il totale parziale int media = 0; //variabili per aggiornare lo schermo senza usare delay unsigned long previousMillis = 0; // memorizzerà l'ultima volta che lo schermo è stato aggiornato // le costanti non cambieranno: const long interval = 50; // intervallo di aggiornamento dello schermo (millisecondi) void setup(void) { analogReference(EXTERNAL); // usa AREF per la tensione di riferimento 4.096. La mia tensione reale di riferimento è 4.113v u8g2.begin(); for (int thisReading = 0; thisReading = numReadings) { // …torna all'inizio: readIndex = 0; } // calcola la media: media = (totale / numLetture); tensione = media * (Vref / 1023.0); //4.113 è Vref vbat = voltage/Radjust; // Imposta il ritardo per l'aggiornamento dello schermo usando Millis if (currentMillis - previousMillis >= interval) { // salva l'ultima volta che lo schermo è stato aggiornato previousMillis = currentMillis; u8g2.clearBuffer(); // cancella la memoria interna //Visualizza la tensione del pacchetto u8g2.setFont(u8g2_font_fub20_tr); // 20px carattere u8g2.setCursor (1, 20); u8g2.print(vbat, 2); u8g2.setFont(u8g2_font_8x13B_mr); // Carattere di 10 px u8g2.setCursor (76, 20); u8g2.print("Volt"); u8g2.setCursore (1, 40); u8g2.print("Inverni canadesi"); u8g2.setCursore (1, 60); u8g2.print("Tensione precisa"); } u8g2.sendBuffer(); // trasferisce la memoria interna al display delay(1); }
Nota che sono un po' arrugginito con la codifica Arduino, quindi se trovi qualche errore o un modo per migliorare il codice, sono aperto a suggerimenti:)
Passaggio 3: testiamolo
Per testare questo voltmetro ho usato batterie 8x 9v che ho acquistato in un negozio locale. Sto progettando di utilizzare questo voltmetro per misurare la tensione sui pacchi batteria delle mie biciclette elettriche (hanno tensioni che vanno da 24 a 60 V con quelle occasionali di 72 V).
Una volta che l'elettronica è confezionata in un pcb e una piccola scatola, questo farà un bel misuratore di batterie portatile. La grafica e i caratteri sull'OLED possono essere personalizzati in base alle proprie esigenze (ad es. caratteri più grandi per una facile lettura).
Il mio obiettivo era quello di avere una lettura della tensione sul misuratore Oled/Arduino non troppo lontano dal mio multimetro digitale. Stavo mirando a +/-0, 3v max delta. Come puoi vedere dal video, sono stato in grado di archiviarlo tranne nella parte superiore delle misurazioni.
Spero che questo Instructable ti sia piaciuto e fammi sapere i tuoi pensieri!
Consigliato:
Voltmetro preciso con display Waveshare E-ink (0-90 V CC) con Arduino Nano: 3 passaggi
Voltmetro preciso con display Waveshare E-ink (0-90 V CC) con Arduino Nano: in questo Instructable, utilizzo un display Waveshare E-Paper da 2,9 pollici con un Arduino Nano, un partitore di tensione e un ADS1115 per visualizzare tensioni precise fino a 90 volt DC sul display E-Paper. Questo istruibile combina questi due progetti precedenti: - Ardui
Reattore ad arco di Endgame stampato in 3D (film accurato e indossabile): 7 passaggi (con immagini)
Reattore ad arco di fine gioco stampato in 3D (film accurato e indossabile): tutorial completo di Youtube: non sono riuscito a trovare alcun file 3D particolarmente accurato per il film per il reattore ad arco Mark 50 / alloggiamento per nanoparticelle, quindi io e il mio amico ne abbiamo preparati alcuni dolci. Ci sono voluti un sacco di modifiche per far sembrare la cosa accurata e fantastica
Contatore di abbonati YouTube accurato: 4 passaggi
Contatore di abbonati YouTube accurato: ho iniziato a prepararmi per questo progetto circa un mese fa, ma poi sono stato deragliato da YouTube quando hanno annunciato che non forniranno più il numero reale di iscritti ma il numero arrotondato più vicino. Al momento, questo non è davvero un problema per
Un modello accurato di una stella variabile Cefeide: 5 passaggi (con immagini)
Un modello accurato di una stella variabile Cefeide: lo spazio è grande. Molto grande. Astronomicamente così, si potrebbe anche dire. Questo non ha alcuna attinenza con questo progetto, volevo solo usare il gioco di parole. Non sorprende che ci siano molte stelle nel cielo notturno. Tuttavia, potrebbe sorprendere alcuni che sono nuovi nella realtà
Come realizzare un sensore di portata d'aria accurato con Arduino per un ventilatore COVID-19 inferiore a £ 20: 7 passaggi
Come realizzare un sensore di portata d'aria accurato con Arduino per un ventilatore COVID-19 inferiore a £ 20: consultare questo rapporto per il design più recente di questo sensore di flusso dell'orifizio: https://drive.google.com/file/d/1TB7rhnxQ6q6C1cNb. ..Questo istruibile mostra come costruire un sensore di portata d'aria utilizzando un sensore di pressione differenziale a basso costo e facilmente un