Go Down

Topic: Programme ds18b20 avec lampe chauffante (Read 1 time) previous topic - next topic

Xopsssss

Bonjour les membres du forum

Je suis un étudiant terminal sti2d , nous avons un projet à moi et mon groupe ma tâche et réglons la température dans un terrarium avec une lampe chauffante le matin de 11 ° à 20 ° et le soir de 23 ° à 30 °.
J'ai un capteur ds18b20
Un arduino
écran LCD
Un relais
J'ai besoin d'aide pour avoir un programme sur ce projet je n'arrive pas au début, je voudrais que tu m'aides merci.

lesept

#1
Mar 31, 2018, 09:10 am Last Edit: Mar 31, 2018, 09:12 am by lesept
Le plus simple pour commencer, c'est de se renseigner : l'une des meilleurs sources est le tuto d'Eskimon, lis le, prépare un début de programme et reviens s'il ne fonctionne pas comme prévu...
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

infobarquee

tu vas inonder les forums combien de temps?
http://forum.arduino.cc/index.php?topic=397717.msg3670483#msg3670483
comme d'habitude, le prof est nul
je te cite
Quote
Bonsoir , je suis desolé je suis pas habituer a poster de sujet . Bah exactement j'ai rien je n'arrive pas a faire de programme arduino on ne m'a jamais appris, tous les gens de ma classe on trouvé leur programme déja fait sur internet et moi non (mon prof est nul ). Je dois trouver un programme arduino qui permet de reguler la température le jour et la nuit (pas tres facil pour un debutant )
le forum n'est pas là pour faire ton boulot

A LIRE
AUCUNE AIDE PAR MP

Aegnor1975

Bonjour,
Comme l'a signalé lesept,  on apprends pas à courir avant de savoir marcher...
Commence par quelques tutos simples pour apprendre à maîtriser les bases de l'arduino.
Pas de tracas pour le temps que ça prends, c'est rapide.

Ensuite pour ton projet il te manque un élément essentiel... un module RTC

Et comme le dit Infobarquee, si tu veux de l'aide, il faut un programme à corriger, personne ici ne fera un programme pour toi, sinon tu ne comprendras quand même rien au monde de l'arduino.

Saches juste qu'un DS18B20, avec un relais et un RTC,  il n'y a rien de trop complexe.

Xopsssss

#4
Mar 31, 2018, 04:12 pm Last Edit: Mar 31, 2018, 05:12 pm by Xopsssss
Code: [Select]

#include <OneWire.h> // Inclusion de la librairie OneWire
 
#include <Wire.h>
#include "RTClib.h"
 
RTC_DS1307 RTC;
#define DS18B20 0x28     // Adresse 1-Wire du DS18B20
#define BROCHE_ONEWIRE 7 // Broche utilisée pour le bus 1-Wire
#define RELAY 2
OneWire ds(BROCHE_ONEWIRE); // Création de l'objet OneWire ds
 
// Fonction récupérant la température depuis le DS18B20
// Retourne true si tout va bien, ou false en cas d'erreur
boolean getTemperature(float *temp){
 byte data[9], addr[8];
 // data : Données lues depuis le scratchpad
 // addr : adresse du module 1-Wire détecté
 
 if (!ds.search(addr)) { // Recherche un module 1-Wire
   ds.reset_search();    // Réinitialise la recherche de module
   return false;         // Retourne une erreur
 }
   
 if (OneWire::crc8(addr, 7) != addr[7]) // Vérifie que l'adresse a été correctement reçue
   return false;                        // Si le message est corrompu on retourne une erreur
 
 if (addr[0] != DS18B20) // Vérifie qu'il s'agit bien d'un DS18B20
   return false;         // Si ce n'est pas le cas on retourne une erreur
 
 ds.reset();             // On reset le bus 1-Wire
 ds.select(addr);        // On sélectionne le DS18B20
   
 ds.write(0x44, 1);      // On lance une prise de mesure de température
 delay(850);             // Et on attend la fin de la mesure
   
 ds.reset();             // On reset le bus 1-Wire
 ds.select(addr);        // On sélectionne le DS18B20
 ds.write(0xBE);         // On envoie une demande de lecture du scratchpad
 
 for (byte i = 0; i < 9; i++) // On lit le scratchpad
   data[i] = ds.read();       // Et on stock les octets reçus
   
 // Calcul de la température en degré Celsius
 *temp = ((data[1] << 8) | data[0]) * 0.0625;
   
 // Pas d'erreur
 return true;
}
 
// setup()
void setup() {
   Serial.begin(57600);
   Wire.begin();
   RTC.begin();
 pinMode(RELAY, OUTPUT);
 digitalWrite(RELAY, HIGH);
 Serial.begin(57600); // Initialisation du port série
 
  if (! RTC.isrunning()) {
   Serial.println("RTC is NOT running!");
   // following line sets the RTC to the date & time this sketch was compiled
   RTC.adjust(DateTime(__DATE__, __TIME__));}}
 
// loop()
void loop() {
  DateTime now = RTC.now();
float temp;
 // Lit la température ambiante à ~1Hz
 if(getTemperature(&temp)) {
     
   // Affiche la température
   Serial.print("Temperature : ");
   Serial.print(temp);
   Serial.write(176); // caractère °
   Serial.write('C');
   Serial.println();

Xopsssss

J'ai que sa .J'aimerais savoir mtn comment reguler la température du matin(8hà20h) entre 11° et 20°  et le soir (20hà8h) entre 20 °et 30° dans le programme grace a une lampe chauffante

hbachetti

Salut

Tu commences par éditer ton post et mettre ton code entre balises (bouton </> en haut à gauche).

Code: [Select]

// Cela évitera de voir des smileys dans ton code


@+
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

Aegnor1975

Pour ton DS18B20, utilise en plus de oneWire la librairie DallasTemperature, ça va te simplifier le programme et elle va faire beaucoup de choses pour toi !
Ton sketch en état va juste te donner l'heure et la température.
Dans ton loop tu dois ajouter des conditions
Du genre : "si il est entre x heures et x heures et que la température est inférieure à x degrés, allume le relais"

C'est un début, mais il faut apprendre par différents tutos comment utiliser le DS1307 et comment mettre une condition de temps et une condition de température

Xopsssss

#8
Mar 31, 2018, 07:11 pm Last Edit: Mar 31, 2018, 09:53 pm by Xopsssss
Code: [Select]

Serial.print(now.year(), DEC);
   Serial.print('/');
   Serial.print(now.month(), DEC);
   Serial.print('/');
   Serial.print(now.day(), DEC);
   Serial.print(' ');
   Serial.print(now.hour(), DEC);
   Serial.print(':');
   Serial.print(now.minute(), DEC);
   Serial.print(':');
   Serial.print(now.second(), DEC);
   Serial.println();


if( temp <= 11 && now.hour() >= 8 && now.hour() <= 20 && now.day() >= 1 && && now.day() <= 7 ){ // si on est entre 8h et 20h que la T° < 11°
   digitalWrite(RELAY,HIGH);
  ;
 }
 else if( temp >= 20 ){ // si T° dépasse 20° on coupe le relais
 digitalWrite(RELAY,LOW);
    delay(10000);
}
 
else  digitalWrite(RELAY,LOW); // sinon, les conditions ne sont pas réunis, on coupe le relais
 
}  }  }
if( temp <= 20 && now.hour() >= 20 && now.hour() <= 8 && now.day() >= 1 && && now.day() <= 7 ){ // si on est entre 20 et 8h que la T° < 17°
   digitalWrite(RELAY,HIGH);
  ;
 }
 else if( temp >= 30 ){ // si T° dépasse 30° on coupe le relais
 digitalWrite(RELAY,LOW);
    delay(10000);
}
 
else  digitalWrite(RELAY,LOW); // sinon, les conditions ne sont pas réunis, on coupe le relais
 
}  }  }

Comme sa ?

68tjs

#9
Mar 31, 2018, 07:23 pm Last Edit: Mar 31, 2018, 07:24 pm by 68tjs
Quote
nous avons un projet à moi et mon groupe ma tâche et réglons la température dans un terrarium
Quote
Comme sa ?
Je sais que sur ce forum il est interdit de critiquer le style et l'orthographe mais c'est un forum où on parle le français.
Pour un candidat au bac c'est atterrant.


Dis toi bien qu'un correcteur qui a plus de 200 copies à corriger ne passera pas plus d'une minute sur des copies où il est obligé de déchiffrer du début à la fin.
A sa place ce serait clair pour moi : 0,5 points par page écrite pour l'encre dépensée.

Est-ce que tu pourrai avoir la politesse de te relire avant de poster !
Si tu ne l'a pas encore vu il y a un bouton "PREVIEW" qui aide bien.

Aegnor1975

#10
Mar 31, 2018, 08:38 pm Last Edit: Mar 31, 2018, 08:38 pm by Aegnor1975
Tu commence à avancer,
Perso, je mettrais 2 conditions...
une pour les heures
et dedans une pour la température
du genre :
Code: [Select]

if(choix des heures){
  if(la température <= 11){
    digitalWrite(relais, HIGH);
  }
  if(la température >= 20){
    digitalWrite(relais, LOW);
  }
}


et pareil pour les heures de soirée

Xopsssss


Xopsssss

Code: [Select]

#include <OneWire.h> // Inclusion de la librairie OneWire
#include <DallasTemperature.h> //Librairie du capteur
#define DS18B20 0x28     // Adresse 1-Wire du DS18B20
#define BROCHE_ONEWIRE 7 // Broche utilisée pour le bus 1-Wire
 
OneWire ds(BROCHE_ONEWIRE); // Création de l'objet OneWire ds
 
// Fonction récupérant la température depuis le DS18B20
// Retourne true si tout va bien, ou false en cas d'erreur
boolean getTemperature(float *temp){
  byte data[9], addr[8];
  // data : Données lues depuis le scratchpad
  // addr : adresse du module 1-Wire détecté
 
  if (!ds.search(addr)) { // Recherche un module 1-Wire
    ds.reset_search();    // Réinitialise la recherche de module
    return false;         // Retourne une erreur
  }
   
  if (OneWire::crc8(addr, 7) != addr[7]) // Vérifie que l'adresse a été correctement reçue
    return false;                        // Si le message est corrompu on retourne une erreur
 
  if (addr[0] != DS18B20) // Vérifie qu'il s'agit bien d'un DS18B20
    return false;         // Si ce n'est pas le cas on retourne une erreur
 
  ds.reset();             // On reset le bus 1-Wire
  ds.select(addr);        // On sélectionne le DS18B20
   
  ds.write(0x44, 1);      // On lance une prise de mesure de température
  delay(1000);             // Et on attend la fin de la mesure
   
  ds.reset();             // On reset le bus 1-Wire
  ds.select(addr);        // On sélectionne le DS18B20
  ds.write(0xBE);         // On envoie une demande de lecture du scratchpad
 
  for (byte i = 0; i < 9; i++) // On lit le scratchpad
    data[i] = ds.read();       // Et on stock les octets reçus
   
  // Calcul de la température en degré Celsius
  *temp = ((data[1] << 8) | data[0]) * 0.0625;
   
  // Pas d'erreur
  return true;
}
 
// setup()
void setup() {
  Serial.begin(9600); // Initialisation du port série
}
 
// loop()
void loop() {
  float temp;
   
  // Lit la température ambiante à ~1Hz
  if(getTemperature(&temp)) {
     
    // Affiche la température
    Serial.print("Temperature : ");
    Serial.print(temp);
    Serial.write(176); // caractère °
    Serial.write('C');
    Serial.println();
  }
Serial.print(now.year(), DEC);
   Serial.print('/');
   Serial.print(now.month(), DEC);
   Serial.print('/');
   Serial.print(now.day(), DEC);
   Serial.print(' ');
   Serial.print(now.hour(), DEC);
   Serial.print(':');
   Serial.print(now.minute(), DEC);
   Serial.print(':');
   Serial.print(now.second(), DEC);
   Serial.println();


if( temp <= 11 && now.hour() >= 8 && now.hour() <= 20 && { // si on est entre 8h et 20h que la T° < 11°
   digitalWrite(RELAY,HIGH);
  ;
 }
 else if( temp >= 20 ){ // si T° dépasse 20° on coupe le relais
 digitalWrite(RELAY,LOW);
    delay(10000);
}
 
else  digitalWrite(RELAY,LOW); // sinon, les conditions ne sont pas réunis, on coupe le relais
 
}  }  }
if( temp <= 20 && now.hour() >= 20 && now.hour() <=8 { // si on est entre 20 et 8h que la T° < 17°
   digitalWrite(RELAY,HIGH);
  ;
 }
 else if( temp >= 30 ){ // si T° dépasse 30° on coupe le relais
 digitalWrite(RELAY,LOW);
    delay(10000);
}
 
else  digitalWrite(RELAY,LOW); // sinon, les conditions ne sont pas réunis, on coupe le relais
 
}  }  }

Comme ça?(vraiment mon premier programme arduino )

Aegnor1975

Bon... tu te complique la vie...
Utilise les exemples des différentes librairies, ça peut déjà t'éclairer beaucoup

Par exemple, pour ton DS18B20 (partie de code que j'utilise pour un des aquariums) :

Code: [Select]

#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 7

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress fish = { 0x28, 0xEE, 0xFA, 0xC3, 0x1D, 0x16, 0x01, 0xCC }; // cherche le code oneWire finder pour avoir l'adresse de ton capteur

void setup() {
  sensors.begin();
  sensors.setResolution(fish, 12); // de 9 à 12, plus la valeur est grande, plus de temps il faudra au capteur pour mesurer la température.
}

void loop() {
  sensors.requestTemperatures();
  Serial.print(sensors.getTempC(fish));
}


Pour le reste, la programmation c'est beaucoup de logique

Code: [Select]

if(now.hour() >= 8 && now.hour() <= 20){ // définition de la plage horaire
  if(sensors.getTempC(capteur) < 11){ // définition de la température minimum
    digitalWrite(RELAY, HIGH);
  }
  if(sensors.getTempC(capteur) >= 20){ // définition de la température maximum
    digitalWrite(RELAY, LOW);
  }
}



Bon, là tu as quasi tout le code, à toi de faire le nécessaire maintenant, et d'adapter selon tes besoins.
Compile ton code pour voir si tout est correct avant de poster aussi, les indications de l'IDE sont importantes.

Bonne soirée,

Aegnor


EGT59

Bonjour,

@ 68tjs

Quote
Est-ce que tu pourrai avoir la politesse de te relire avant de poster !
Certainement du à l'agacement .......

 ;D

Go Up