Étape 7: Makeing le Circuit
Pour le calcul de puissance et d’énergie, il faut deux paramètres. Tension d’alimentation et de charge actuel. Nos offres utilitaire est 220V AC et suffisant pour un choc électrique. La mesure peut être effectuée en toute sécurité (ne nécessitant aucun travail de haute tension) à l’aide d’un transformateur ou adaptateur d’alimentation AC pour l’AC. Le transformateur permet d’isoler la haute et basse tension.
Capteur de tension (transformateur AC/AC)
Adaptateurs de courant à C.A. ou transformateur peut provenir de nombreuses différentes tensions nominales. La première chose qui est important à connaître est la tension nominale de votre adaptateur. J’ai utilisé un 220V à 12V transformateur pour mesure de tension.
Le signal de sortie du transformateur est une forme d’onde sinusoïdale près. Si vous avez un 12V adapteur de puissance (RMS) le pic de signal positif doit avoir lieu au + 16.97V et le pic de signal négatif doivent avoir lieu au - 16.97V. Cependant en raison de la régulation de tension faible avec ce type d’adaptateur lorsque l’adaptateur est non chargé (comme en l’espèce) la sortie est souvent autour de 14V-16V (RMS), ce qui donne une tension de crête d’environ 19V-23V. La tension de sortie du transformateur est proportionnelle à la tension d’entrée ca.
Le signal électronique (Arduino, Edison) de conditionnement doit convertir la sortie de l’adaptateur à une forme d’onde qui possède une crête positive inférieure à 5V et une crête négative qui est supérieure à 0 v et nous devons donc
- 1) échelle vers le bas de la forme d’onde et
- 2) ajoute un offset afin qu’il n’y a aucune composante négative.
La forme d’onde peut être réduit à l’aide d’un diviseur de tension connecté aux bornes des adaptateurs et l’offset (ZAC) peut être ajouté à l’aide d’une source de tension créée par un autre diviseur de tension connecté à travers l’approvisionnement de l’Arduino, illustré à la figure suivante.
Résistances R2 et R1 forment le diviseur de tension capable d’évoluer vers le bas de l’adaptateur de courant tension et résistances R3 et R4 fournissent la partialité de la tension. Condensateur C1 fournit un chemin de faible impédance à la masse du signal de courant alternatif. R1 et R2 ont besoin d’être choisi pour donner une-tension-puissance de crête d’autour de 1V, pour un adaptateur C.A. / avec un 9V AC sortie RMS, qu'une combinaison de résistance de 10k 100k pour R2 et R1 donnerait un signal de sortie :
#include <IoTkit.h> // include IoTkit.h to use the Intel IoT Kit #include <Ethernet.h> // must be included to use IoTkit #include <aJSON.h> #include <LiquidCrystal.h> // create an object of the IoTkit class IoTkit iotkit; const int vSensorPin = A0; const int cSensorPin = A1; const int numberOfSamples = 3000; int sampleV, sampleC; float voltageV, voltageC; float instVoltage, instCurrent; float sumI, sumV, sumP; float realPower, apparentPower,reactivePower; float powerFactor, voltageRMS, currentRMS; unsigned long last_kWhTime, kWhTime; float kiloWattHour = 0.0; // RS, EN, D4, D5, D6, D7 LiquidCrystal lcd(7, 6, 2, 3, 4, 5); void setup() { // put your setup code here, to run once: pinMode(7, OUTPUT); // not needed for arduino pinMode(6, OUTPUT); // but must set as output for Edison LCD library pinMode(5, OUTPUT); pinMode(4, OUTPUT); pinMode(3, OUTPUT); pinMode(2, OUTPUT); iotkit.begin(); lcd.begin(20, 4); lcd.setCursor(0, 1); } void loop() { // put your main code here, to run repeatedly: calculatePower(); displayPower(); sendToCloud(); delay(2000); } void calculatePower(){ for(int i=0; i<numberOfSamples; i++){ sampleV = analogRead(vSensorPin); sampleC = analogRead(cSensorPin); voltageC = sampleC*5.0/1023.0; voltageV = sampleV*5.0/1023.0; instCurrent = (voltageC-2.5)/0.66; instVoltage = (voltageV-2.46)*7.8; sumV += instVoltage * instVoltage; sumI += instCurrent * instCurrent; sumP += abs(instVoltage * instCurrent); } voltageRMS = sqrt(sumV / numberOfSamples); currentRMS = sqrt(sumI / numberOfSamples); realPower = sumP / numberOfSamples; apparentPower = voltageRMS * currentRMS; powerFactor = realPower / apparentPower; reactivePower = sqrt(apparentPower * apparentPower - realPower * realPower); last_kWhTime = kWhTime; kWhTime = millis(); kiloWattHour += (realPower / 1000) * ((kWhTime - last_kWhTime) / 3600000.0); sumV = 0; sumI = 0; sumP = 0; } void displayPower(){ lcd.clear(); lcd.setCursor(0,0); //col,row lcd.print("Voltage: "); lcd.print((int)voltageRMS); lcd.print("V "); lcd.print("Current: "); lcd.print(currentRMS); lcd.print("A"); lcd.setCursor(0,1); lcd.print("Power: "); lcd.print(realPower); lcd.print("W "); lcd.print("pf: "); lcd.print(powerFactor); lcd.setCursor(0,2); lcd.print("VAR: "); lcd.print(reactivePower); lcd.print("VAR "); lcd.print("VA: "); lcd.print(apparentPower); lcd.print("VA"); lcd.setCursor(0,3); lcd.print("Energy used: "); lcd.print(kiloWattHour); lcd.print("KWH"); } void sendToCloud(){ iotkit.send("voltage", voltageRMS); iotkit.send("current", currentRMS); iotkit.send("realpower", realPower); iotkit.send("powerfactor", powerFactor); iotkit.send("reactivepower", reactivePower); iotkit.send("apparentpower", apparentPower); iotkit.send("energy", kiloWattHour); }
Le biais de la tension fourni par R3 et R4 doit être la moitié de l’Arduino tension d’alimentation et donc R3 et R4 doivent être égales. Une résistance plus élevée réduit la consommation d’énergie. J’ai utilisé des résistances k 100 pour les R3 et R4.
Comme l’Edison à 5V tourne l’onde résultante du circuit a une crête positive de 2, 5V + 1,15 v = 3.65V et crête négative de 1.35V satisfaisant aux exigences de la tension d’entrée analogique de Edison et laissant beaucoup de place pour qu’il n’y a pas de risque de sur ou sous tension.
Si vous désirez des informations détaillées sur la façon de calculer les valeurs optimales pour les composants prenant les tolérances des composants en compte, alors cette page pourrait vous aider.
Capteur de courant
Il existe diverses méthodes pour la détection des flux de courant dans un système. L’utilisation de résistances, transformateurs de courant et l’utilisation de capteurs effet Hall sont certaines des méthodes disponibles. Dans ce instructable j’ai utilisé ACS712 Allegro capteur mesure du courant. Allegro ACS712 capteur fonctionne selon le principe de l’effet Hall, et il peut être utilisé pour la mesure de courant AC et DC. Il n’y a aucun besoin de circuits auxiliaires pour ce capteur, c’est un immense avantage sur les autres méthodes disponibles.
Il s’agit d’un appareil de mesure bidirectionnelle et donc cela peut être utilisé pour la détection courant AC et DC. Le capteur ACS712 est conçu pour trois cours gammes 5 a, 20 a et 30 a. Le capteur est constitué d’un circuit intégré qui fonctionne selon le principe de l’effet Hall. Cette IC génère une tension proportionnelle au courant qui circule dans le circuit. Carte de dérivation de capteurs de courant basé sur cet appareil également disponible sur le marché et ils vous faciliter la vie.
Interfaçage avec Edison Arduino Breakout
Figure suivante montre le raccordement de la sonde de ACS712 à la Base d’Arduino Edison.
Schéma de câblage complet, maquette connexion, fichiers projet fritzing et feuille de données de capteur sont attachés. Connecter tous les composants en conséquence.
Connexion de l’écran LCD
Brancher LCD à Edison selon schéma. Le schéma de connexion est donné ci-dessous. Connecter une résistance de 330 ohms à la broche LED + du LCD. Broche de vo du LCD doit se connecter à une résistance variable si vous souhaitez contrôler le contraste de l’écran LCD ou pouvez se connecter à la terre pour un contraste maximal.
Prochaine