Table des matières:

Voltmètre Arduino (0-100V DC) - Version 2 (meilleur): 3 étapes
Voltmètre Arduino (0-100V DC) - Version 2 (meilleur): 3 étapes

Vidéo: Voltmètre Arduino (0-100V DC) - Version 2 (meilleur): 3 étapes

Vidéo: Voltmètre Arduino (0-100V DC) - Version 2 (meilleur): 3 étapes
Vidéo: Display input voltage as bargraph on LCD using Arduino and potentiometer 2024, Juin
Anonim
Image
Image
Étape 1: les schémas
Étape 1: les schémas

Dans ce instructable, j'ai construit un voltmètre pour mesurer les hautes tensions DC (0-100v) avec une précision et une exactitude relatives à l'aide d'un Arduino Nano et d'un ADS 1115 ADC.

Il s'agit d'une deuxième version du voltmètre utilisé mon précédent instructable ici:

Les mesures de test que j'ai prises étaient précises, principalement à moins de 0,1 V de la tension réelle mesurée avec un voltmètre standard (j'ai utilisé un Astro AI DM6000AR).

C'est bien mieux et plus facile à mon avis que d'utiliser une référence de tension externe sur l'Arduino.

Fournitures

1 x Arduino Nano - Lien

1 x écran Oled (SSD 1306) - Lien

1 x ADS 1115 - ADC 16 bits - Lien

1 x 1/4W (je suggère cependant d'utiliser des résistances de 1W) Résistances 1% - 220k ohm - Lien

1 x 1/4W (je suggère cependant d'utiliser des résistances de 1W) Résistances 1% - 10k ohm - Lien

Planche à pain et fils - Lien

Astro AI DM6000AR - Lien

Banque d'alimentation USB - Lien

Piles 9V - Lien

CanadianWinters participe au programme d'associés d'Amazon Services LLC, un programme de publicité d'affiliation conçu pour permettre aux sites de gagner des frais en se connectant à Amazon.com et aux sites affiliés. En utilisant ces liens, en tant qu'associé Amazon, je gagne des achats éligibles, même si vous achetez autre chose, et cela ne vous coûtera rien.

Étape 1: Étape 1: les schémas

Étape 1: les schémas
Étape 1: les schémas

J'ai connecté toutes les pièces selon les schémas ci-dessus.

J'ai attaché la broche ADDR de l'ADC1115 à la terre. Cela définit l'adresse de l'ADC sur 0x48.

Étape 2: Étape 2: les calculs de code et de résistance

Étape 2: les calculs de code et de résistance
Étape 2: les calculs de code et de résistance

Comme dans l'instructable précédent, l'idée du circuit est que la tension continue à mesurer passe par une résistance de tension. La tension mise à l'échelle pénètre ensuite dans la broche analogique du convertisseur ADC pour être lue, puis transmise à l'Arduino via I2C, puis redimensionnée et affichée sur l'écran OLed.

Je n'ai pas utilisé de moyenne ni de lissage dans le code dans ce cas, car les lectures semblent assez exactes et précises. Pour réduire le bruit, vous voudrez peut-être ajouter un petit condensateur entre A0 (sur l'ADC) et la masse. Ce n'était pas nécessaire pour mon test cependant.

Une chose que j'ai remarquée, c'était un peu de bruit lorsqu'il n'y avait pas de batterie connectée (0 volt). J'ai utilisé le moniteur série de l'Arduino pour afficher la valeur ADC et la corriger/ajuster via le code.

Comme dans l'instructable précédent, j'ai fait une feuille de calcul qui automatise les calculs au cas où vous voudriez utiliser différentes valeurs de résistance dans le diviseur de tension: Lien vers Google Sheet

Voici le code que j'ai utilisé pour ce projet:

#comprendre

#include #include #include Adafruit_ADS1115 annonces (0x48); //Adresse du CAN U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0);// (rotation, [reset]) int calib = 7; // Valeur d'étalonnage de l'ADS1115 pour réduire l'erreur float voltage = 0; // utilisé pour stocker la valeur de tension float Radjust = 0.043421905; // Facteur diviseur de tension (R2 / R1+R2) float vbat = 0; //tension finale après calculs- tension de la batterie //variables pour rafraîchir l'écran sans utiliser de délai long non signé précédentMillis = 0; // stockera la dernière fois que l'écran a été rafraîchi // les constantes ne changeront pas: const long interval = 250; // intervalle d'actualisation de l'écran (millisecondes) void setup(void) { Serial.begin(9600); u8g2.begin(); ads.begin(); } boucle vide (void) { int16_t adc0; // 16 bits ADC lecture de l'entrée A0 adc0 = ads.readADC_SingleEnded(0); tension = ((adc0 + calib) * 0,1875)/1000; non signé long currentMillis = millis(); vbat = tension/Réglage; //Empêcher l'affichage d'une tension négative lorsque la batterie est déconnectée if (vbat = intervalle) { previousMillis = currentMillis; u8g2.clearBuffer(); // efface la mémoire interne // Affichage de la tension du pack - Polices sur cette page: https://github.com/olikraus/u8g2/wiki/fntlistall // u8g2.setFont(u8g2_font_fub20_tr); // Police 20px u8g2.setFont(u8g2_font_fub35_tr); // police 35px u8g2.setCursor (1, 42); u8g2.print(vbat, 2); u8g2.setFont(u8g2_font_8x13B_mr); // police 10 px u8g2.setCursor (1, 60); u8g2.print("Volts"); } u8g2.sendBuffer(); // transfert de la mémoire interne vers l'affichage delay(1); }

Étape 3: Étape 3: Testons-le

Étape 3: Testons-le !
Étape 3: Testons-le !

Pour tester ce voltmètre, j'ai utilisé des piles 10x 9v que j'ai achetées dans un magasin local. Cette fois, j'ai pu mesurer jusqu'à 97 volts ! Je prévois d'utiliser ce voltmètre pour mesurer la tension sur les batteries de mes vélos électriques (ils ont des tensions allant de 24-60v avec des 72v occasionnelles).

Une fois que l'électronique est emballée dans un circuit imprimé et une petite boîte, cela fera un compteur de batterie agréable et portable. Les graphiques et les polices de l'OLED peuvent être personnalisés pour répondre à vos besoins (par exemple, une police plus grande pour une lecture facile). Mon objectif était d'avoir une lecture de tension sur le compteur Oled/Arduino pas trop loin de mon multimètre numérique. Je visais +/-0, 3v max delta.

Comme vous pouvez le voir sur la vidéo au début de l'Instructable, j'ai pu archiver cela ! La plupart des lectures étaient parfaites!

J'espère que vous avez apprécié ce Instructable et laissez-moi savoir vos pensées !

Conseillé: