Table des matières:
- Étape 1: Composants requis
- Étape 2: Diagramme schématique
- Étape 3: Comprendre le circuit
- Étape 4: Calcul de la fréquence et de la tension
- Étape 5: Code Arduino
- Étape 6: Conclusion
Vidéo: Mesure de la fréquence et de la tension d'alimentation à l'aide d'Arduino : 6 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:05
Introduction:
L'objectif de ce projet est de mesurer la fréquence et la tension d'alimentation, qui se situent entre 220 à 240 volts et 50 Hz ici en Inde. J'ai utilisé un Arduino pour capturer le signal et calculer la fréquence et la tension, vous pouvez utiliser n'importe quel autre microcontrôleur ou carte que vous possédez. Le circuit nécessite une poignée de composants et est assez précis à toutes fins pratiques.
Étape 1: Composants requis
- Arduino Uno
- CI LM358
- Transformateur abaisseur (220V à 12V)
-
Condensateurs:
- 0.1uF
- 2 x 1uF
-
Résistances:
- 3 x 1kOhm
- 2 x 100kOhm
- 1.5kOhm
- 3.3kOhm
- 6.8kOhm
- 3 diodes 1N4148
- Planche à pain et fil de cavalier (facultatif)
Étape 2: Diagramme schématique
Dans le circuit ci-dessus, le primaire du transformateur est connecté au réseau d'alimentation et le primaire est connecté à notre circuit de mesure
Étape 3: Comprendre le circuit
Selon la fonctionnalité, ce circuit peut être divisé en quatre parties:
A: Le circuit du détecteur de passage à zéro
Ce circuit génère une impulsion carrée de 5 V chaque fois que l'onde sinusoïdale passe du positif au négatif. La résistance R1 combinée avec D1 et D2 limite l'oscillation de la tension d'entrée à la jonction de la diode à -0,6 V à +5,6 V (en supposant que la tension directe de la diode soit de 0,6 V). De plus, vous pouvez augmenter la plage de tension d'entrée du circuit en augmentant la valeur de R1.
Les résistances R2 et R3 forment un diviseur de tension pour limiter l'oscillation de tension négative à -0,24 volts car la tension de mode commun d'entrée du LM358 est limitée à -0,3 volts.
La résistance R4, R5, le condensateur C1 et l'amplificateur opérationnel (ici utilisé comme comparateur) forment le circuit de déclenchement de Schmitt où les résistances R4 et R5 définissent l'hystérésis à l'entrée +49,5 mV au-dessus du sol. La sortie du Schmitt Trigger est transmise à l'Arduino PIN2 pour un traitement ultérieur.
B: Isolement et abaissement de tension
Comme son nom l'indique, cette partie isole et abaisse la tension à environ 12 Vrms. La tension abaissée est en outre fournie au circuit d'instrumentation.
C: Circuit de détection de crête
Ce circuit détermine la tension de crête maximale du signal d'entrée. Les diviseurs de résistance R6 et R7 réduisent la tension d'entrée d'un facteur de 0,23 (12Vrms est réduit à 2,76Vrms). La diode D3 ne conduit que l'alternance positive du signal. La tension aux bornes de C2 augmente jusqu'à la valeur de crête du signal redressé, qui est transmis à la broche analogique Arduino A0 pour calculer davantage la tension.
De plus, vous pouvez remplacer ce circuit par un circuit détecteur de crête de précision comme ceux mentionnés ici. Mais pour mes fins de démonstration, le circuit ci-dessus sera suffisant.
D: Arduino
Dans cette partie, l'Arduino capture les impulsions carrées générées par le circuit Schmitt Trigger et lit la tension analogique du circuit détecteur de crête. Les données sont ensuite traitées pour déterminer la période de temps (donc la fréquence) de l'impulsion carrée (qui est égale au temps d'alimentation ca personne) et la tension de l'alimentation.
Étape 4: Calcul de la fréquence et de la tension
Calcul de la fréquence:
Avec l'aide d'Arduino, nous pouvons mesurer la période de temps T du signal. Les impulsions carrées du détecteur de passage par zéro sont transmises à la broche 2, à partir de là, nous pouvons mesurer la période de temps de chaque impulsion. Nous pouvons utiliser la minuterie interne d'Arduino (en particulier Timer1) pour calculer la période de temps entre deux fronts montants de l'impulsion carrée à l'aide d'interruptions. Le temporisateur incrémente de 1 par cycle d'horloge (sans prescaler = 1) et la valeur est stockée dans le registre TCNT1. Ainsi, l'horloge 16Mhz incrémente le compteur de 16 toutes les microsecondes. De même pour prescaler = 8, la minuterie est incrémentée de 2 toutes les microsecondes. D'où l'intervalle de temps entre deux fronts montants
T = (valeur TCNT1) / temps pris pour chaque comptage
Où, temps pris pour chaque compte = prescaler / (vitesse d'horloge Arduino (16MHz)
Par conséquent, la fréquence f = 1/T = (vitesse d'horloge Arduino (16MHz) / (valeur Prescaler * TCNT!)
Par conséquent, la vitesse de la minuterie (Hz) est donnée par = (vitesse d'horloge Arduino (16MHz)) / prescaler
et la fréquence du signal est donnée par = (vitesse d'horloge Arduino
Corrélativement, nous pouvons calculer la fréquence f à partir de la relation f = 1/T.
Calcul de la tension:
L'ADC intégré d'Arduino a une résolution de 10 bits (valeurs possibles = 2^10 = 1024), renvoyant des valeurs comprises entre 0 et 1023. Pour calculer la tension analogique correspondante V, nous devons utiliser la relation suivante
V = (lecture ADC) * 5/1023
Pour calculer la tension d'alimentation Vs(rms), nous devons prendre en compte le rapport du transformateur, le diviseur de résistance R6R7 et le circuit détecteur de crête. Nous pouvons simplement mettre ensemble les différents facteurs/ratio comme:
Rapport du transformateur = 12/230 = 0,052
Diviseur de résistance = R7/(R6 + R7) = 0,23
Au circuit de détection de crête = 1,414
Vs(rms) = V/(1.414*0.052*0.23) = (lecture ADC) * 0.289
Il convient de noter que cette valeur est loin de la valeur réelle, principalement en raison d'une erreur dans le rapport réel du transformateur et de la chute de tension directe de la diode. Une façon de contourner cela est de déterminer le facteur après avoir assemblé le circuit. C'est-à-dire en mesurant la tension d'alimentation et la tension aux bornes du condensateur C2 séparément avec un multimètre, puis en calculant Vs(rms) comme suit:
Vs(rms) = ((Tension d'alimentation * 5)/(Tension aux bornes de C2 *1023))*(Lecture ADC)
dans mon cas, Vs (rms) = 0,33 * (lecture ADC)
Étape 5: Code Arduino
#define volt_in A0 // broche de lecture de tension analogique
volatile uint16_t t_period; uint16_t ADC_value = 0; volt flottant, fréq; void isr() { t_period = TCNT1; //stocker la valeur TCNT1 dans t_period TCNT1 = 0; //réinitialiser Timer1 ADC_value = analogRead(volt_in); //lire la tension analogique } float get_freq() { uint16_t timer = t_period; if(timer==0) renvoie 0; // pour éviter la division par zéro else return 16000000.0/(8UL*timer); // la fréquence est donnée par f = clk_freq/(prescaler*timeperiod)} void setup() { TCCR1A = 0; TCCR1B = bit(CS11); //définir le pré-échelonneur sur 8 TCNT1 = 0; //réinitialiser la valeur Timer1 TIMSK1 = bit(TOIE1); //activer l'interruption de débordement Timer1 EIFR |= bit(INTF0); // efface l'indicateur d'interruption INT0 Serial.begin(9600); } boucle vide() { attachInterrupt(0, isr, RISING); //activer le délai d'interruption externe (INT0) (1000); détacherInterruption(0); freq = get_freq(); volt = valeur_ADC*0.33; Buff de cordes; buf += String(freq, 3); buf += F("Hz\t"); buf += Chaîne(volt); buf += F("Volts"); Serial.println(buf); }
Étape 6: Conclusion
Vous pouvez assembler le circuit dans une maquette, modifier le code et ajouter une carte SD pour stocker les données, qui pourront ensuite être analysées. Par exemple, vous pouvez analyser la tension et la fréquence aux heures de pointe.
Le circuit que j'ai assemblé dans la maquette utilisait LM324 (quad opamp) au lieu de LM358 (double opamp) car je n'avais pas ce circuit intégré à ce moment-là et le verrouillage national en raison de la pandémie de COVID-19 m'a rendu difficile l'obtention d'un nouveau circuit intégré.. Néanmoins, cela n'affecterait pas le fonctionnement du circuit.
N'hésitez pas à commenter ci-dessous pour toutes suggestions et questions.
Conseillé:
Mesure de tension continue à l'aide d'Arduino : 5 étapes
Mesure de la tension continue à l'aide d'Arduino : dans ce projet, je vais vous montrer comment mesurer la tension continue jusqu'à 50 v à l'aide d'arduino et l'affichage sur la partie du module d'affichage OLED nécessite un affichage arduino UNOoledRésistance de 10 k ohms
Alimentation CC à tension réglable à l'aide du régulateur de tension LM317 : 10 étapes
Alimentation CC à tension réglable à l'aide du régulateur de tension LM317 : Dans ce projet, j'ai conçu une simple alimentation CC à tension réglable à l'aide du circuit intégré LM317 avec un schéma de circuit d'alimentation LM317. Comme ce circuit a un pont redresseur intégré, nous pouvons donc connecter directement une alimentation 220V/110V AC à l'entrée
Mesurer votre fréquence cardiaque au bout de votre doigt : Approche photopléthysmographique pour déterminer la fréquence cardiaque : 7 étapes
Mesurer votre fréquence cardiaque au bout de votre doigt : Approche de la photopléthysmographie pour déterminer la fréquence cardiaque : Un photopléthysmographe (PPG) est une technique optique simple et peu coûteuse qui est souvent utilisée pour détecter les changements de volume sanguin dans un lit microvasculaire de tissu. Il est principalement utilisé de manière non invasive pour effectuer des mesures à la surface de la peau, généralement
Mesure de tension à l'aide d'Arduino : 5 étapes
Mesure de tension à l'aide d'Arduino : La mesure de la tension est assez facile à l'aide de n'importe quel microcontrôleur par rapport à la mesure du courant. La mesure des tensions devient nécessaire si vous travaillez avec des batteries ou si vous souhaitez créer votre propre alimentation électrique réglable. Bien que cette méthode s'applique
Mesure de la tension continue avec Arduino et Node-RED : 8 étapes (avec photos)
Mesure de la tension continue avec Arduino et Node-RED : il existe de nombreux tutoriels Mesure de la tension continue avec Arduino, dans ce cas, j'ai trouvé un tutoriel que je considère comme la meilleure méthode fonctionnelle pour mesurer le courant continu sans nécessiter de valeurs d'entrée de résistance, ne nécessite qu'une certaine résistance et un multimètre