Voltmètre précis pour Arduino. Voltmètre Bluetooth basé sur Arduino

Les assemblages Arduino multifonctionnels présentent un grand intérêt pour les fans d'appareils programmables électroniquement faits maison, leur permettant de donner vie à des idées intéressantes.

Le principal avantage des circuits Arduino prêts à l'emploi est le principe bloc-modulaire unique : chaque carte peut être ajoutée avec des interfaces supplémentaires, élargissant ainsi à l'infini les possibilités de création de différents projets.

Modules Arduino sont construits sur un microcontrôleur universel avec son propre chargeur de démarrage, ce qui permet de le flasher facilement avec le code de programme nécessaire, sans utiliser de périphériques supplémentaires. La programmation est réalisée en langage standard C++.

L'un des exemples les plus simples d'utilisation d'Arduino peut être la mise en œuvre, à partir de cet assemblage, d'un voltmètre DC de haute précision avec une plage de mesure de 0 à 30 V.

Les entrées analogiques Arduino sont conçues pour une tension constante ne dépassant pas cinq volts. Il est donc possible de les utiliser à des tensions dépassant cette valeur avec un diviseur de tension.


Schéma de connexion de l'Areduino via diviseur de tension

Un diviseur de tension est constitué de deux résistances connectées en série. Il est calculé à l'aide de la formule :

Connecteur USB externe dans l'autoradio

Un diagramme utile est présenté pour ceux qui aiment expérimenter avec Arduino. Il s'agit d'un simple voltmètre numérique qui peut mesurer de manière fiable la tension continue dans la plage 0 à 30 V. La carte Arduino, comme d'habitude, peut être alimentée par une pile 9V.

Comme vous le savez probablement, les entrées analogiques d'Arduino peuvent être utilisées pour mesurer une tension continue dans la plage de 0 à 5 V et cette plage peut être augmentée,
en utilisant deux résistances comme diviseur de tension. Le diviseur réduira la tension mesurée au niveau des entrées analogiques Arduino. Et puis le programme calculera la valeur réelle de la tension.

Le capteur analogique de la carte Arduino détecte la présence de tension à l'entrée analogique et la convertit sous forme numérique pour un traitement ultérieur par le microcontrôleur. Sur la figure, la tension est fournie à l'entrée analogique (A0) via un simple diviseur de tension composé de résistances R1 (100 kOhm) et R2 (10 kOhm).

Avec ces valeurs de diviseur, la carte Arduino peut être alimentée avec une tension de 0 à
55V. A l'entrée A0 on a la tension mesurée divisée par 11, soit 55V / 11=5V. En d’autres termes, lors de la mesure de 55 V à l’entrée Arduino, nous avons une valeur maximale autorisée de 5 V. En pratique, mieux vaut inscrire la plage « 0 - ​​30V » sur ce voltmètre pour qu'elle reste
Marge de sécurité !

Remarques

Si les lectures affichées ne coïncident pas avec les lectures d'un voltmètre industriel (de laboratoire), il est alors nécessaire de mesurer les valeurs de résistance R1 et R2 avec un instrument précis et d'insérer ces valeurs au lieu de R1=100000,0 et R2= 10000.0 dans le code du programme. Ensuite, vous devez mesurer la tension réelle entre les broches 5 V et « Terre » de la carte Arduino avec un voltmètre de laboratoire. Le résultat sera une valeur inférieure à 5V, par exemple ce sera 4,95V. Cette valeur réelle doit être insérée dans la ligne de code
vout = (valeur * 5,0) / 1024,0 au lieu de 5,0.
Essayez également d'utiliser des résistances de précision avec une tolérance de 1%.

Les résistances R1 et R2 offrent une certaine protection contre l'augmentation des tensions d'entrée. Cependant, n'oubliez pas que toute tension supérieure à 55 V peut endommager la carte Arduino. De plus, cette conception n'offre pas d'autres types de protection (contre les surtensions, contre l'inversion de polarité ou les surtensions).

Programme de voltmètre numérique

/*
Voltmètre CC
Un DVM Arduino basé sur le concept de diviseur de tension
T.K. Hareendran
*/
#inclure
Écran LCD LiquidCrystal (7, 8, 9, 10, 11, 12);
int entréeanalogique = 0 ;
flotter vout = 0,0 ;
vin flottant = 0,0 ;
flottant R1 = 100 000,0 ; // résistance de R1 (100K) -voir texte !
flottant R2 = 10 000,0 ; // résistance de R2 (10K) – voir texte !
valeur entière = 0 ;
configuration vide())(
pinMode(analogInput, INPUT);
lcd.begin(16, 2);
lcd.print(« VOLTMÈTRE CC »);
}
boucle vide()
// lit la valeur sur l'entrée analogique
valeur = analogRead (analogInput);
vout = (valeur * 5,0) / 1024,0 ; // voir le texte
vin = vout / (R2/(R1+R2));
si (vin<0.09) {
vin=0.0;//instruction pour annuler la lecture indésirable !
}
lcd.setCursor(0, 1);
lcd.print("ENTRÉE V= ");
lcd.print(vin);
retard (500);
}

Schéma schématique du voltmètre Arduino

Liste des composants

Carte Arduino Uno
Résistance de 100 kOhms
Résistance de 10 kOhms
résistance de 100 ohms
Résistance ajustable de 10 kOhm
Écran LCD 16?2 (Hitachi HD44780)

Il y a des moments où vous souhaitez vérifier la tension ou un point d’un circuit, mais vous n’avez pas de voltmètre ou de multimètre à portée de main ? Courir pour acheter ? C'est long et cher. Avant de faire cela, que diriez-vous de construire vous-même un voltmètre ? En fait, avec des ingrédients simples, vous pouvez le préparer vous-même.

  • Dans la leçon, nous avons utilisé une carte compatible avec Arduino - SunFounder Uno / Mars (http://bit.ly/2tkaMba)
  • Câble de données USB
  • 2 potentiomètres (50k)
  • LCD1602 - http://bit.ly/2ubNEfi
  • Carte de développement - http://bit.ly/2slvfrB
  • Plusieurs cavaliers

Avant de nous connecter, comprenons d'abord comment cela fonctionne.

Utilisez la carte SunFounder Uno pour la partie principale du traitement des données du voltmètre, le LCD1602 comme écran, un potentiomètre pour régler le contraste de l'écran LCD et un autre pour diviser la tension.

Lorsque vous faites tourner le potentiomètre connecté à la carte Uno, la résistance du potentiomètre change, modifiant ainsi la tension à ses bornes. Le signal de tension sera envoyé à la carte Uno via la broche A0, et l'Uno convertira le signal analogique reçu en forme numérique et l'enregistrera sur l'écran LCD. De cette façon, vous pouvez voir la valeur de tension au niveau de la résistance de capacité actuelle.

Le LCD1602 dispose de deux modes de fonctionnement : 4 bits et 8 bits. Lorsque MCU IO est insuffisant, vous pouvez choisir le mode 4 bits, qui utilise uniquement les broches D4 ~ D7.

Suivez le tableau pour les connecter.

Étape 4 : Connectez le potentiomètre au LCD1602

Connectez la broche centrale du potentiomètre à la broche Vo du LCD1602 et l'une des autres broches à GND.

Connectez la broche centrale du potentiomètre à la broche A0 du SunFounder Uno, et l'une des autres au 5V tandis que l'autre à GND.

Étape 6 : Téléchargez le code

Ce code :

#inclure /*********************************************** ******* *****/ const int analogIn = A0 ;//le potentiomètre se fixe à l'écran LCD A0 LiquidCrystal (4, 6, 10, 11, 12, 13) ;//lcd (RS, E, D4 ,D5,D6.D7) float val = 0;// définir la variable comme valeur=0 /****************************** ******* *****************/ void setup() ( Serial.begin(9600);//Initialiser la série lcd.begin(16, 2) ;//définit la position des caractères sur l'écran LCD comme Ligne 2, Colonne 16 lcd.print("Voltage Value:");//print "Voltage Value:" ) /*********** ******* **********************************/ void loop() ( val = analogRead (A0);//Lire la valeur du potentiomètre à val val = val/1024*5.0;//Convertir les données en valeur de tension correspondante de manière mathématique Serial.print(val);//Imprimer le nombre de val sur le moniteur série Serial.print ("V"); // imprime l'unité sous la forme V, abréviation de tension sur le moniteur série lcd.setCursor(6,1);//Placez le curseur sur la ligne 1, colonne 6. De ici, les caractères doivent être affichés lcd.print(val);//Imprimez le numéro de val sur l'écran LCD lcd.print("V");//Imprimez ensuite l'unité en tant que V, raccourci pour tension sur le délai LCD ( 200); //Attendez 200 ms)

Faites tourner le potentiomètre pour vérifier la tension sur le LCD1602 en temps réel.

Voici une chose délicate. Après avoir exécuté le code, l'écran LCD a affiché des caractères. J'ai ensuite réglé le contraste de l'écran (passage progressif du noir au blanc) en tournant le potentiomètre dans le sens des aiguilles d'une montre ou dans le sens inverse jusqu'à ce que l'écran affiche clairement les caractères.

Prenez deux piles pour mesurer leur tension : 1,5 V et 3,7 V. Décrochez la connexion du deuxième potentiomètre aux broches A0 et GND, ce qui revient à retirer le potentiomètre du circuit. Fixez l'extrémité du fil A0 à l'anode de la batterie et le circuit GND à la cathode. Ne les rebranchez PAS, sinon vous court-circuiterez la batterie. Une valeur de 0 V est une connexion inversée.

Ainsi, la tension de la batterie est affichée sur l'écran LCD. Il peut y avoir une erreur entre la valeur et la valeur nominale car la batterie n'est pas complètement chargée. Et c'est pourquoi je dois mesurer la tension pour comprendre si je peux utiliser la batterie ou non.

PS : Si vous rencontrez des problèmes d'affichage sur votre écran, consultez cette FAQ pour les écrans LCD - http://wiki.sunfounder.cc/index.php?title=LCD1602/I2C_LCD1602_FAQ.

Données initiales et révision

Nous avons donc à ce stade un voltmètre à tension constante avec une limite de 0 à 20 V (voir partie précédente). Maintenant, nous y ajoutons un ampèremètre de 0,5 A. Pour ce faire, nous modifions légèrement le circuit - il deviendra un circuit pass-through, c'est-à-dire qu'il aura à la fois une entrée et une sortie.

J'ai supprimé la partie concernant l'affichage sur l'écran LCD - cela ne changera pas. En principe, la principale nouveauté est un shunt Rx de 0,1 Ohm. La chaîne R1-C1-VD1 sert à protéger l'entrée analogique. Il est logique d'installer la même chose à l'entrée A0. Puisque nous supposons des courants assez importants, il existe des exigences d'installation - les lignes électriques doivent être réalisées avec un fil assez épais et connectées directement aux bornes de dérivation (en d'autres termes, soudées), sinon les lectures seront loin de la réalité. Il y a aussi une note sur le courant - en principe, une tension de référence de 1,1V permet de l'enregistrer sur le shunt Courant de 0,1 Ohm jusqu'à 11 ampères avec une précision légèrement inférieure à 0,01a, mais lorsqu'une telle tension chute aux bornes de Rx, la puissance libérée dépassera 10 W, ce qui n'est pas amusant du tout. Pour résoudre le problème, vous pouvez utiliser un amplificateur avec un gain de 11 en utilisant un ampli opérationnel de haute qualité et un shunt de 10 mOhm (0,01 Ohm). Mais pour l'instant nous ne allons pas nous compliquer la vie et simplement limiter le courant à 5A (dans ce cas, la puissance Rx peut être sélectionnée de l'ordre de 3-5 W).

À ce stade, une surprise m'attendait - il s'est avéré que l'ADC du contrôleur avait un décalage zéro assez important - environ -3 mV. Autrement dit, l'ADC ne voit tout simplement pas les signaux inférieurs à 3 mV et des signaux d'un niveau légèrement supérieur sont visibles avec une imprécision caractéristique de -3 mV, ce qui gâche la linéarité au début de la plage. Une recherche rapide n'a donné aucune référence évidente à un tel problème (un décalage du zéro est normal, mais il devrait être nettement plus petit), il est donc fort possible qu'il s'agisse d'un problème avec une instance spécifique de l'Atmega 328. La solution que j'ai Le choix a été double - en termes de tension - une étape logicielle en début de plage (l'affichage démarre à 0,06 volts), pour le courant - une résistance de rappel vers le bus 5V. La résistance est indiquée par une ligne pointillée.

Code source

La version complète de ce voltampèremètre (en version I2C) peut être téléchargée à partir du lien en fin d'article. Ensuite, je montrerai les modifications apportées au code source. Ajout de la lecture de l'entrée analogique A1 avec la même moyenne que pour le voltmètre. Essentiellement, il s’agit du même voltmètre, mais sans diviseur, et nous obtenons les ampères en utilisant la formule d’Ohm : I = U/Rx (par exemple, si la tension chute aux bornes de Rx = 0,01 V, alors le courant est de 0,1 A). J'ai également introduit la constante de gain actuelle AmpMult - pour l'avenir. La constante AmpRx avec la résistance shunt devra probablement être adaptée pour prendre en compte l'imprécision de la résistance shunt. Eh bien, comme il s'agit déjà d'un voltampèremètre et qu'il reste encore de la place sur l'écran 1602, il reste à afficher la consommation électrique actuelle en watts, obtenant ainsi des fonctionnalités supplémentaires simples.

.... // Entrée analogique #define PIN_VOLT A0 #define PIN_AMP A1 // Tension de référence interne (sélection) const float VRef = 1.10; // Entrée du coefficient diviseur résistif (Rh + Rl) / Rl. DANS 0,2) InVolt += 3 ;

// Convertir en volts (In : 0..1023 -> (0..VRef) mis à l'échelle par Mult) float Volt = InVolt * VoltMult * VRef / 1023 ;



Des questions ?

Signaler une faute de frappe

Texte qui sera envoyé à nos rédacteurs :