en cours de création va évoluer petit à petit, suis preneur de toute remarquebonjour a tous:
j'aimerai créer un tuto sur une petit projet que je viens de finir dans le but de redonner l'assistance que beaucoup d'entre vous m'ont fournis de maniérés passive ou active.
Je ne donnerai pas tous les noms de peur d'en oublier et de les frustrer. Vous reconnaîtrez vos lignes, astuce...
Bon voici le projet, simple mais efficace, un thermostat utilisant:
-des sonde DS18
S20:

-un afficheur de chez sparkfun:

-un arduino de type uno

bon je lâche le code à l'arrache je reviendrai sur le tuto petit à petit:
#include <stdio.h> //intégration de la bibliothéque STRING
#include <OneWire.h> //intégration de la bibliothéque ONE WIRE
#define ONE_WIRE_BUS 6 //définition de la pin pour le ONE WIRE
OneWire oneWire(ONE_WIRE_BUS); //déclaration du bus ONE WIRE
#include <DallasTemperature.h> //intégration de la bibliothéque sonde de température DALLAS 18S20
DallasTemperature sensors(&oneWire); //spécification du ONE WIRE capteur de température DALLAS
#include <ColorLCDShield.h> //intégration de la bibliothéque pour l'écran LCD
LCDShield lcd; //à éclaircir, je n'ai pas regardé exactement ce que c'est
int buttonPins[3] = { 3, 4, 5}; //déclaration des boutons pour le LCD
float tempi; //variable à virgule (flottante) de la température intérieur
float tempe; //variable à virgule (flottante) de la température extérieur
int THA=10; // pin relai thermostat arudino
float VTAmax=25; // temperature max de l'ambiance
float VTAmin=15; // temperature min de l'ambiance
float VTAC=21; // variable température recherchée pour l'ambiance
float VTACO=21; // variable température de base recherchée pour l'ambiance
float HSTA=0.75; // variable Hysteresys ambiance
//configuration début
void setup(void)
{
lcd.init(PHILLIPS); //réglage de l'écran LCD sur la marque phillips (nokia par défaut, mais ça n'affiche pas)
lcd.contrast(40); //réglage du taux de contraste
lcd.clear(SLATE); //réglage de couleur de fond d'écran, "slate" oui ça existe
pinMode(THA,OUTPUT); // réglage de pin THA sur SORTIE
Serial.begin(9600); //démarrage du port série et réglage à 9600k
sensors.begin(); // démarrage du bus ONE WIRE (capteur de température dans notre cas)
for (int i=0; i<3; i++) // pour les boutons 0, 1 et 2
{
pinMode(buttonPins[i], INPUT); // réglage des pins sur entrées
digitalWrite(buttonPins[i], HIGH); // réglage des pins par détection positive (+5v)
}
}
//configuration fin
//boucle permante (PRG) début
void loop(void)
{
sensors.requestTemperatures(); //envoie la requette au bus ONE WIRE, "donnes les température sur les sondes"
tempi=((sensors.getTempCByIndex(0))); // stockage de la valeur de la premiére sonde
tempe=((sensors.getTempCByIndex(1))); // stockage de la valeur de la seconde sonde
char tempic[4]; //création d'un bloc de stockage pour une chaine de caratére
int temp1 = (tempi - (int)tempi) * 100; //convertion du CHAR en STRING étape 1, à dévelloper j'ai pas tous compris
sprintf(tempic," %0d.%d", (int)tempi, temp1); //convertion du CHAR en STRING étape 2, à dévelloper j'ai pas tous compris
lcd.setStr("interieur:", 2 ,5, WHITE, SLATE); //affiche sur le LCD le mot "intérieur" ,Y,X,couleur de texte,couleur de derriére de texte
lcd.setStr(tempic, 20 ,5, WHITE, SLATE); //affiche sur le LCD la valeur de la sonde "intérieur" ,Y,X,couleur de texte,couleur de derriére de texte
Serial.println(tempi); //affichage sur le port série de la valeur de la sonde intérieur
char tempec[4]; //création d'un bloc de stockage pour une chaine de caratére
int temp2 = (tempe - (int)tempe) * 100; //convertion du CHAR en STRING étape 1, à dévelloper j'ai pas tous compris
sprintf(tempec," %0d.%d", (int)tempe, temp2); //convertion du CHAR en STRING étape 2, à dévelloper j'ai pas tous compris
lcd.setStr("exterieur:", 36 ,5, WHITE, SLATE); //affiche sur le LCD le mot "exterieur" ,Y,X,couleur de texte,couleur de derriére de texte
lcd.setStr(tempec, 54 ,5, WHITE, SLATE); //affiche sur le LCD la valeur de la sonde "exterieur" ,Y,X,couleur de texte,couleur de derriére de texte
char cons[4]; //création d'un bloc de stockage pour une chaine de caratére
int cons1 = (VTAC - (int)VTAC) * 100; //convertion du CHAR en STRING étape 1, à dévelloper j'ai pas tous compris
sprintf(cons," %0d.%d", (int)VTAC, cons1); //convertion du CHAR en STRING étape 2, à dévelloper j'ai pas tous compris
lcd.setStr("consigne:", 72 ,5, WHITE, SLATE); //affiche sur le LCD le mot "consigne" ,Y,X,couleur de texte,couleur de derriére de texte
lcd.setStr(cons, 88 ,5, WHITE, SLATE); //affiche sur le LCD la valeur de la "consigne" ,Y,X,couleur de texte,couleur de derriére de texte
if ((!digitalRead(buttonPins[0]))&&(VTAC<VTAmax)) //si l'on appuie sur le bouton 0 et que la température consigne et inférieur au max autorisé
{
VTAC=VTAC+0.5; //on augmente + 0,5
}
if ((!digitalRead(buttonPins[1]))&&(VTAC>VTAmin)) //si l'on appuie sur le bouton 1 et que la température consigne et supérieur au mini autorisé
{
VTAC=VTAC-0.5; //on diminue la consigne - 0,5
}
if (!digitalRead(buttonPins[2])) //si l'on appuie sur le bouton 2
{
VTAC=VTACO; //on remet la consigne à la valeur par défaut
}
if ((tempi<=(VTAC-HSTA))) // si la températeure intérieur est inférieur à la consigne-le décallage autorisé
{
digitalWrite (THA,HIGH); //on active la sortie de chauffage
lcd.setRect(100,100,110,110,1,BLUE); // et on affiche un carré Ydébut,Xdébut,Yfin,Xfin,couleur,remplissage oui
}
else if ((tempi>=VTAC)) //si la température intérieur et supérieur ou égale à la consigne
{
digitalWrite (THA,LOW); //on désactive la sortie de chauffage
lcd.setRect(100,100,110,110,1,RED); // et on affiche un carré Ydébut,Xdébut,Yfin,Xfin,couleur,remplissage oui
}
}
//boucle permante (PRG) fin