Étape 4: La magie de la rétroaction
Le film ci-joint vous montrera la rétroaction en action. Regardez le voyant sur la SSR clignote sur et en dehors. Vous pouvez aussi chauffer la vitesse du ventilateur répondant à la charge électrique que le chauffage se met en marche.
Avec le 595 AD, ce processus est juste une question de fait quelques calculs sur une
entrée analogique
//
Merci à Karl Gruenewald pour la formule de conversion
Tous les code publié sous
Creative Commons Attribution-Noncommercial-Share Alike 3.0
Cette version actuelle repose sur la détection de la température avec
un AD595 et un thermocouple via une broche A/D. N’importe quel autre
capteur pourrait être employé en remplaçant cette un fonction.
n’hésitez pas à utiliser les degrés C aussi bien, il va juste donner un autre
PID tuning que ceux de F.
//
#define TEMP_SENSOR_PIN 0
#define SSD_PIN 2
Si vous attachez la vRef de l’Arduino à l’alimentation 3,3 volts, changez ce à 3.3
#define ANALOG_VOTLAGE_REFERENCE 5
flotteur currentTemperature ;
float highTargetTemperature = 100 ;
float lowTargetTemperature = 95 ;
void setup() {}
Serial.Begin(115200) ;
pinMode (SSD_PIN, sortie) ;
}
void loop() {}
imprime la température perçoivent avec 1 place après la virgule
currentTemperature = getTemperature() ;
printFloat (currentTemperature, 1) ;
imprimer un retour chariot
Serial.println() ;
Si (currentTemperature < lowTargetTemperature) {}
digitalWrite (SSD_PIN, élevé) ;
}
Si (currentTemperature > highTargetTemperature) {}
digitalWrite (SSD_PIN, basse) ;
}
reste 100 millisecondes
Delay(100) ;
}
flotteur CtoF(float c) {}
convertir éventuellement de Celsius en Fahrenheit si vous êtes dans cette chose sorta
retour de c * 9,0 / 5,0 + 32.0 ;
}
flotteur analogInToDegreesC(int inputValue) {}
Division par 1023, la valeur d’entrée maximale possible, capable d’évoluer à l’entrée entre 0 - 1
puis multiplier par la tension de référence, qui agrandit 0-1 à 0 - vREF (valeur par défaut est de 5 v)
Enfin, multipliez par 100 à échelle à 10 s de millivolts ou degrés
Retour à inputValue / 1023.0 * ANALOG_VOTLAGE_REFERENCE * 100,0 ;
}
flotteur getTemperature() {}
lire l’entrée analogique, convertir en degrés C et covert à F
Return CtoF(analogInToDegreesC(analogRead(TEMP_SENSOR_PIN))) ;
}
Capteur de température de fin
printFloat imprime le flotteur « valeur » arrondie à « lieux préférés » décimales après la virgule
void printFloat (valeur float, int places) {}
Il sert à monter les chiffres
int chiffre ;
flottent des dizaines = 0,1 ;
int tenscount = 0 ;
int i ;
float tempfloat = value ;
Veillez à ce que nous rond correctement. Cela pourrait utiliser pow de < math.h >, mais ne semble pas d’une valeur de l’importation
Si cette étape arrondie n’est pas ici, la valeur 54.321 imprime en 54.3209
calculer l’arrondi terme d: 0.5/pow(10,places)
flotteur d = 0,5 ;
Si (valeur 0 <)
d * = -1,0 ;
diviser par dix pour chaque décimale
pour (i = 0; i < places; i ++)
d / = 10,0 ;
ce petit rajout, combiné avec troncature viendront compléter nos valeurs correctement
tempfloat += d ;
obtenez d’abord la valeur des dizaines à être la grande puissance de dix de moins que la valeur
tenscount n’est pas nécessaire, mais il serait utile que vous avez voulu savoir après ce comment de nombreux caractères le nombre aura
Si (valeur 0 <)
tempfloat * = -1,0 ;
tandis que ((tens * 10.0) < = tempfloat) {}
des dizaines * = 10,0 ;
tenscount += 1 ;
}
écrire le négatif si nécessaire
Si (valeur 0 <)
Serial.Print('-') ;
Si (tenscount == 0)
Serial.Print (0, DEC) ;
pour (i = 0; i < tenscount; i ++) {}
chiffres = (int) (tempfloat / RTE) ;
Serial.Print (chiffre, DEC) ;
tempfloat = tempfloat - (chiffre (flotteur) * dizaines) ;
des dizaines / = 10,0 ;
}
Si aucun chiffres après la décimale, arrêter maintenant et retour
Si (place < = 0)
retour ;
Sinon, écrivez le point et continuer sur
Serial.Print('.') ;
maintenant écrire chaque décimale en déplaçant des chiffres un à un dans les lieu et en écrit la valeur tronquée
pour (i = 0; i < places; i ++) {
tempfloat * = 10,0 ;
chiffres = (int) tempfloat ;
Serial.Print(digit,DEC) ;
une fois écrit, soustraire au large de ce chiffre
tempfloat = tempfloat - chiffre (float) ;
}
}