Datalogger de températures multi sondes

Parlez nous de vos projets et de vos idées, imaginez des applications

Datalogger de températures multi sondes

Message non lude alain_g » Sam 19 Nov 2011 15:43

Bonjour, je viens de terminer mon projet de datalogger multi sondes. L'utilisation que je vais en faire concerne une VMC double flux, il me fallait donc 4 sondes.

Les sondes sont des DS18B20.

Je me suis donc équipé du arduino uno, d'un shield mémoire et d'un shield deuligne.
Image

Le montage des trois cartes:
Image

Le test du système, les 4 sondes au même endroit et un contrôle par un thermomètre indépendant:
Image

Sur cette dernière photo la mesure n'est pas stabilisée et on arrive au final avec un écart entre +0 et +0.5 °C.

L'affichage sur le Deuligne comprend sur la 1ère ligne la date puis 2 sondes et sur la 2ème ligne l'heure et les deux autres sondes.

L'écran peut être allumé ou éteint par appui sur le bouton du Deuligne.

Les données sont enregistrées sur une carte SD par le shield mémoire.

Je viens donc de me mettre à la programmation pour Arduino et auparavant je n'avais jamais codé en C. Il y a certainement des améliorations à y apporter, je compte sur vous. L'utilisation de la mémoire vive est limite et m'a obligé à revoir à la baisse mes ambitions, je souhaitais pouvoir régler l'heure par le joystick du Deuligne et d'autres petits trucs comme ça... Si vous voyez des pistes pour baisser l'utilisation de mémoire n'hésitez pas à m'en faire part.

Voici le code:
Code: Tout sélectionner
#include <Wire.h>
#include <RTClib.h>
#include <SD.h>
#include <Deuligne.h>
#include <OneWire.h>
#include <avr/pgmspace.h>

#define NBRE_CAPTEUR 4 // nombre de capteur sur l'arduino
#define DELAI 60  //nombre de secondes entre deux mesures
#define DS1307_I2C_ADDRESS 0x68   // deuligne afficheur LCD

// *********** declararation des variables gestion des capteurs de temperature  *******************
typedef struct Temperature Temperature;
struct Temperature
{
  float valeur;               // temperature en Celsius, 1 chiffre apres la virgule
  byte addr[8];               // identifiant capteur
  byte pin;               // numero de pin a utiliser
  char mnemo[5];               // mnemonique de la variable
};

Temperature temperature[NBRE_CAPTEUR];      //creation des instances
const byte PIN_CAPTEUR = 8;      //Pin sur laquelle sont branchés les capteurs


// *********** fin declararation des variables gestion des capteurs de temperature  *******************

// autres variables
unsigned long temps, temps2;
byte i=0;
RTC_DS1307 RTC;
DateTime moment; //Création d'un objet contenant les données temporelles
File fichier;

// variables pour le Deuligne
Deuligne lcd;
byte a=0;
boolean b=0;
String second, minute, hour, day, month, year;

//pour le SD
const byte chipSelect = 10;
byte carte;

void setup(){

  Serial.begin(57600);            // initialisation de la liaison serie


  // *********** initialisation des variables gestion des capteurs de temperature  *******************


  temperature[0].addr[0]=       0x28;   // identifiant capteur
  temperature[0].addr[1]=   0xa3;
  temperature[0].addr[2]=   0x8e;
  temperature[0].addr[3]=   0xbf;
  temperature[0].addr[4]=   0x3;
  temperature[0].addr[5]=   0x0;
  temperature[0].addr[6]=   0x0;
  temperature[0].addr[7]=   0x9d;
  temperature[0].pin=PIN_CAPTEUR;
  temperature[0].valeur=0;         // temperature en °C, 1 chiffre apres la virgule
  strcpy(temperature[0].mnemo,"Int_E");   // intérieur entrant

  temperature[1].addr[0]=       0x28;   // identifiant capteur
  temperature[1].addr[1]=   0x36;
  temperature[1].addr[2]=   0xac;
  temperature[1].addr[3]=   0xbf;
  temperature[1].addr[4]=   0x03;
  temperature[1].addr[5]=   0x0;
  temperature[1].addr[6]=   0x0;
  temperature[1].addr[7]=   0xbc;
  temperature[1].pin=PIN_CAPTEUR;
  temperature[1].valeur=0;         // temperature en °C, 1 chiffre apres la virgule
  strcpy(temperature[1].mnemo,"Int_S");   // Intérieur sortant


  temperature[2].addr[0]=       0x28;   // identifiant capteur
  temperature[2].addr[1]=   0x5c;
  temperature[2].addr[2]=   0x86;
  temperature[2].addr[3]=   0xbf;
  temperature[2].addr[4]=   0x3;
  temperature[2].addr[5]=   0x0;
  temperature[2].addr[6]=   0x0;
  temperature[2].addr[7]=   0xf5;
  temperature[2].pin=PIN_CAPTEUR;
  temperature[2].valeur=0;         // temperature en °C, 1 chiffre apres la virgule
  strcpy(temperature[2].mnemo,"Ext_E");   // extérieur entrant


  temperature[3].addr[0]=       0x28;   // identifiant capteur
  temperature[3].addr[1]=   0xe6;
  temperature[3].addr[2]=   0xc6;
  temperature[3].addr[3]=   0xbf;
  temperature[3].addr[4]=   0x3;
  temperature[3].addr[5]=   0x0;
  temperature[3].addr[6]=   0x0;
  temperature[3].addr[7]=   0xd4;
  temperature[3].pin=PIN_CAPTEUR;
  temperature[3].valeur=0;         // temperature en °C, 1 chiffre apres la virgule
  strcpy(temperature[3].mnemo,"Ext_S");   // extérieur entrant

  // initialisation pour le deuligne       

  Wire.begin();
  lcd.init();

  // initialisation RTC et temps avec ordinateur si besoin
  RTC.begin();               
  if (! RTC.isrunning())
  {
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }

  // initialisation SD
  carte=1;
  pinMode(chipSelect, OUTPUT); // Mettre la pin en output
  if (!SD.begin(chipSelect))                           // Vérification de la présence de la SD card
  {                         
    lcd.backLight(1);
    lcd.print("Carte fausse");
    lcd.setCursor(5,1);
    lcd.print("ou absente");
    delay(4000);
    carte=0;
    lcd.backLight(0);
  }

  if (!SD.exists("Donnees.txt"))     // Si le fichier n'existe pas
  {                                                       
    fichier = SD.open("Donnees.txt", FILE_WRITE);  // Ouverture du fichier en mode Ecriture.
    fichier.print("Date");
    for (i=0 ; i<NBRE_CAPTEUR ; i++ )
    {
      fichier.print(";");
      fichier.print(temperature[i].mnemo);
    }
    fichier.println();
    fichier.close();
  }

}



void loop(){

  triDate();
  temps=(moment.unixtime() + DELAI);
  temps2 = moment.unixtime()+10;

  gestion_temperature();
  // affichage des températures sur le lcd
  lcd.setCursor(6,0);
  lcd.print(temperature[0].valeur,1);
  lcd.print(" "); //efface le 4ème caractère éventuel si < -10
  lcd.setCursor(11,0);
  if (temperature[1].valeur >= -10) //efface le 4ème caractère éventuel si < -10
  {
    lcd.print(" ");
  }
  lcd.print(temperature[1].valeur,1);
  lcd.setCursor(6,1);
  lcd.print(temperature[2].valeur,1);
  lcd.print(" ");    //efface le 4ème caractère éventuel si < -10
  lcd.setCursor(11,1);
  if (temperature[3].valeur >= -10) //efface le 4ème caractère éventuel si < -10
  {
    lcd.print(" ");
  }
  lcd.print(temperature[3].valeur,1);

  if (carte) // test si une carte SD est présente
  {
    enregistrement_sd();
  }

/*****************************************************
*  cree une boucle permettant d'intercepter un appui *
*  eventuel sur le bouton pour allumer le deuligne   *
*****************************************************/
  while (moment.unixtime() < temps)   //attente du délai
  {
    triDate();   //Init de l'objet temporel
    lcd.setCursor(0,0);
    lcd.print(day + '/' + month);
    lcd.setCursor(0,1);
    lcd.print(hour + 'h' + minute);   //+"/"+month;

    if (moment.unixtime() > (temps2))   //affichage des températures toutes les 10 secondes
    {
      temps2 = moment.unixtime()+10;
      gestion_temperature();
      // affichage des températures sur le lcd
      lcd.setCursor(6,0);
      lcd.print(temperature[0].valeur,1);
      lcd.print(" "); //efface le 4ème caractère éventuel si < -10
      lcd.setCursor(11,0);
      if (temperature[1].valeur >= -10) //efface le 4ème caractère éventuel si < -10
      {
        lcd.print(" ");
      }
      lcd.print(temperature[1].valeur,1);
      lcd.setCursor(6,1);
      lcd.print(temperature[2].valeur,1);
      lcd.print(" ");    //efface le 4ème caractère éventuel si < -10
      lcd.setCursor(11,1);
      if (temperature[3].valeur >= -10) //efface le 4ème caractère éventuel si < -10
      {
        lcd.print(" ");
      }
      lcd.print(temperature[3].valeur,1);
    }

    a=lcd.get_key();
    if (a==4) // someone pressed 'enter'
    {
      b=!b;
      lcd.backLight(b);  //on inverse l'allumage de l'écran
      delay(500);
    }

  }


}


void gestion_temperature()
{

  /********************************************************************************
   *    Cette fonction permet d'interroger tous les capteurs de temperature OneWire
   *    qui ont ete declare dans "temperature[i]"
   ********************************************************************************/

  for(i=0; i<NBRE_CAPTEUR; i++)
  {
    temperature[i].valeur =getStuff(temperature[i].addr,temperature[i].pin);
  }

}


float getStuff(byte addr[8], int pin) // indiquer le n� de pin � utiliser
{

  /********************************************************************************
   *    Cette fonction permet d'interroger le capteur de temperature OneWire
   *    qui a �t� d�clar� dans "temperature[i]"
   ********************************************************************************/

  byte j=0;
  OneWire  ds(pin);  // creation d'un objet OneWire avec le bon n� de pin

//  byte present = 0;
  byte data[12];

  float real_temp;
  float temp_count;
  float read_temp;

  ds.reset();
  ds.select(addr);
  ds.write(0x44,1); // start conversion, with parasite power off at the end (1=parasite mode)

  delay(1000);     // delay de 1s si mode parasite. 100ms en mode normal
  // we might do a ds.depower() here, but the reset will take care of it.

//  present = ds.reset();
  ds.reset();
  ds.select(addr);   
  ds.write(0xBE);         // Read Scratchpad


  for ( j = 0; j < 9; j++) {           // we need 9 bytes
    data[j] = ds.read();
  }

  read_temp=((data[1]<<8) | data[0]);
  real_temp=float(read_temp)*6.25;
  real_temp=real_temp/100;

  return real_temp;
}


void enregistrement_sd()
{

  fichier = SD.open("Donnees.txt", FILE_WRITE);  // Ouverture du fichier en mode Ecriture.

  triDate();

  fichier.print(year + "/" + month + "/" +
    day + " " + hour + ":" +
    minute + ":" + second);
  for (i=0 ; i<NBRE_CAPTEUR ; i++ )
  {
    fichier.print(";");
    if (i==NBRE_CAPTEUR-1)
    {
      fichier.println(temperature[i].valeur);
    }
    else
    {
      fichier.print(temperature[i].valeur);
    }

  }
  fichier.close();


//  Serial.println("\n[memCheck]");
  Serial.println(freeRam());


}

int freeRam () {
  extern int __heap_start, *__brkval;
  int v;
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}

void triDate()
{
   
  moment = RTC.now();
  year=moment.year();
  if (moment.month()<10)
  {
    month = "0"+String(moment.month(),DEC);
  }
  else
  {
    month = String(moment.month(),DEC);
  }
  if (moment.day()<10)
  {
    day = "0"+String(moment.day(),DEC);
  }
  else
  {
    day = String(moment.day(),DEC);
  }
  if (moment.hour()<10)
  {
    hour = "0"+String(moment.hour(),DEC);
  }
  else
  {
    hour = String(moment.hour(),DEC);
  }
  if (moment.minute()<10)
  {
    minute = "0"+String(moment.minute(),DEC);
  }
  else
  {
    minute = String(moment.minute(),DEC);
  }
  if (moment.second()<10)
  {
    second = "0"+String(moment.second(),DEC);
  }
  else
  {
    second = String(moment.second(),DEC);
  }
 
}
Dernière édition par alain_g le Lun 21 Nov 2011 19:43, édité 1 fois.
alain_g
 
Messages: 22
Inscription: Sam 29 Oct 2011 01:03

Re: Datalogger de températures multi sondes

Message non lude Lionel » Lun 21 Nov 2011 12:16

Bonjour,

félicitations pour avoir mené votre projet, sans expérience en C, c'est plutot bien

J'apporte juste une info au cas ou elle puisse vous servir,
le rédacteur de tronicstuff a fait une test de nos produits avec pour exemple le réglage de l'heure sur un deuligne (équipé avec une rtc externe... :) )
http://tronixstuff.wordpress.com/2011/1 ... no-shield/
Le code est assez léger, a voir si il est possible de l'intégrer ?
Image - Distributeur officiel Arduino - Conception de shields
Avatar de l’utilisateur
Lionel
 
Messages: 734
Inscription: Mar 21 Déc 2010 09:52
Localisation: Toulouse

Re: Datalogger de températures multi sondes

Message non lude SesechXP » Lun 21 Nov 2011 15:27

Salut,

Je plussoie avec Lionel, pour quelqu'un n'ayant jamais développé en C c'est plutôt pas mal ! Peut-être connaissais-tu d'autres langages ?

Après un rapide parcours, voir si le champ mnemo de la structure Temperature est vraiment utile : les chaînes de caractères sont relativement couteuses (1 octet par caractère). En plus il y a quelques strcpy...

Sinon ce qu'on fait assez couramment en embarqué et quand on n'a pas besoin d'une grande précision sur des mesures de température, c'est manipuler des valeurs exprimées en décidegrés. Ainsi on les fait tenir sur des entiers 8 ou 16 bits selon la plage de mesure.

++
SesechXP
 
Messages: 228
Inscription: Sam 28 Mai 2011 09:09
Localisation: 35

Re: Datalogger de températures multi sondes

Message non lude HenriLeopold » Lun 21 Nov 2011 20:00

Bonsoir, alain_g

Au début lorsque je me suis lancé dans le développement de ma station météo, j'avais trouvé ces librairies sur les Dallas Température sur Internet (ci-joint en zip). Dans ce zip, regarde dans le dossier arduino_ds18b20_tempearature_sensor, il y a un sketch pde qui fait appel à plusieurs sondes températures qui inclut les librairie <OneWire.h> et <DallasTemperature.h>.

A+
Henri
Fichiers joints
temperature.zip
(55.55 Kio) Téléchargé 377 fois
HenriLeopold
 
Messages: 32
Inscription: Mer 25 Mai 2011 19:19

Re: Datalogger de températures multi sondes

Message non lude alain_g » Lun 21 Nov 2011 22:53

Bonsoir et merci pour vos réponses.

@Lionel: j'ai bien entendu lu cet article et j'avais même commencé par la gestion de l'horloge car j'attendais d'avoir les DS18. Il me faudrait vraiment alléger le code pour pouvoir intégrer cette modification. Ce que j'envisageais de faire était un 1 appui sur le bouton, on allume l'écran, un 2ème on entre dans le mode réglage de l'horloge et on règle l'année puis le mois, le jour, l'heure et les minutes successivement en réglant par les flèches haut et bas (qui font respectivement + et -). Le code était celui ci:
Code: Tout sélectionner
    /*
        Alain G
        Application Shield Deuligne + SD : affichage de l'heure
        avec possibilité de mise à l'heure par joystick
    */

    #include <Wire.h>
    #include <RTClib.h>
    #include "Deuligne.h"

    // Declaration des pin utilisées
    const char pin_chipSelect = 8;                            //10 est la pin utilisée par le shield mémoire pour le signal ChipSelect

    // Declaration des variables générales
    Deuligne lcd;
    DateTime moment;                                           //Création d'un objet contenant les données temporelles
    RTC_Millis RTC;
    int temps1;
    int reglages;
    int a;
    int jour;
    int mois;
    int annee;
    int heure;
    int minute;
    String datastring;

    void setup()
    {
      Wire.begin(); // initialisation I2C (obligatoire)
      lcd.init(); // initialisation LCD (obligatoire)
      lcd.backLight(true); // on allume le retro eclairage

      Serial.begin(9600);                                     //Initialisation de la liaison série

      pinMode(pin_chipSelect, OUTPUT);                         // Mettre la pin en output

       RTC.begin(DateTime(__DATE__, __TIME__));                //Initialisation de l'horloge RTC avec les valeurs DATE et TEMPS de votre ordinateur
       lcd.backLight(true);  //allumage du Deuligne

    }
   
    // pour réglage de l'horlage si décalage temporel
    void setDateTime()
    {
      mois=moment.month();
      annee=moment.year();
      jour=moment.day();
      heure=moment.hour();
      minute=moment.minute();
     
       lcd.clear();
       lcd.setCursor(0,0);
       delay(5000);
       lcd.print("Reglage de l'annee");
       lcd.setCursor(0,1);
       lcd.print(annee);
       do
        {
          reglages=lcd.get_key();
          delay(100);
          if (reglages==1)
          {
            ++annee;
          }
          if (reglages==2)
          {
            --annee;
          }
          lcd.setCursor(0,1);
          lcd.print(annee);
        } while (reglages<4);
       
       reglages=0;
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("Reglage du mois");
       lcd.setCursor(0,1);
       lcd.print(mois);
       do
        {
          reglages=lcd.get_key();
          delay(100);
          if (reglages==1)
          {
            ++mois;
            if (mois>12)
            {
              mois=1;
            }
          }
          if (reglages==2)
          {
            --mois;
            if (mois==0)
            {
              mois=12;
            }
          }
          lcd.setCursor(0,1);
          if (mois<10)
          {
            lcd.print("0");
          }
          lcd.print(mois);
        } while (reglages<4);

       reglages=0;
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("Reglage de l'heure");
       lcd.setCursor(0,1);
       lcd.print(heure);
       do
        {
          reglages=lcd.get_key();
          delay(100);
          if (reglages==1)
          {
            ++heure;
            if (heure>24)
            {
              heure=0;
            }
          }
          if (reglages==2)
          {
            --heure;
            if (heure<0)
            {
              heure=24;
            }
          }
          lcd.setCursor(0,1);
          if (heure<10)
          {
            lcd.print("0");
          }
          lcd.print(heure);
        } while (reglages<4);

       reglages=0;
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("Reglage des minutes");
       lcd.setCursor(0,1);
       lcd.print(minute);
       do
        {
          reglages=lcd.get_key();
          delay(100);
          if (reglages==1)
          {
            ++minute;
            if (minute>59)
            {
              minute=0;
            }
          }
          if (reglages==2)
          {
            --minute;
            if (minute<0)
            {
              minute=59;
            }
          }
          lcd.setCursor(0,1);
          if (minute<10)
          {
            lcd.print("0");
          }
          lcd.print(minute);
        } while (reglages<4);

        reglages=0;
        RTC.begin(DateTime(annee,mois,jour,heure,minute,0));
        moment = RTC.now();
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Nouveaux reglages:");
        datastring=String(moment.day(),DEC)+'/'+String(moment.month(),DEC)+'/'+String(moment.year(),DEC)
      +' '+String(moment.hour(),DEC)+':'+String(moment.minute(),DEC)+':'+String(moment.second(),DEC);
        lcd.setCursor(0,1);
        lcd.print(datastring);
        delay(5000);
        lcd.clear();
    }
   
    void loop()
    {
      moment = RTC.now();                                      //Init de l'objet temporel
      a=0;
      datastring=String(moment.day(),DEC)+'/'+String(moment.month(),DEC)+'/'+String(moment.year(),DEC)
      +' '+String(moment.hour(),DEC)+':'+String(moment.minute(),DEC)+':'+String(moment.second(),DEC);
      lcd.setCursor(0,0);
      lcd.print("Date et heure");
      lcd.setCursor(0,1);
      lcd.print(datastring);
      a=lcd.get_key();
     
      if (a==4) // quelqu'un a pressé 'enter'
      {
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Pour reglages");
        lcd.setCursor(0,1);
        lcd.print("Re cliquer");
        delay(500);
        temps1=int(millis);
        do
        {
          a=lcd.get_key();
          if (a==4)
          {
            delay(100);
            setDateTime();
          }
        } while (a<4);
       
      }
      delay(100);

     lcd.setCursor(0,0);
//     lcd.print("21/05 11h38 -28.9");
  //   lcd.setCursor(0,1);
    // lcd.print("-12.3 -15.6 -14.8");
    }




Il y avait encore des trucs à terminer mais c'était bien parti ;)

@SesechXp: en effet j'ai un peu programmé en basic (il y a très longtemps), en Delphi et en VBA pour Excel. Je me pose aussi la question pour le champ mnemo mais au départ j'ai récupéré un embryon de code et j'ai voulu rendre le mien utilisable par d'autres. cette idée de nommer les capteurs était intéressante et parlante... Je ne comprends pas trop le sens de "et puis il y a quelques strcpy..." ça prend de la mémoire? Je viens de vérifier et ils ne sont que pour mettre les valeurs dans les mnemos. ou alors tu veux dire qu'il serait souhaitable d'utiliser plus de strcpy? Par contre je retiens ton idée de décidegrés, je ferai une division ensuite pour retrouver la valeur. Par contre pour l'affichage sur le deuligne ça va être bizarre.

@HenriLeopold: merci pour l'info, je l'avais trouvé aussi mais je ne l'avais pas exploité (oublié dans un recoin de mon ordi)... J'avais vu ces librairies sur ce lien: http://www.frduino.com/module/dfr0024.html c'est compatible avec des sondes seules?

Merci à vous tous encore pour vos pistes de réflexions.

Alain
alain_g
 
Messages: 22
Inscription: Sam 29 Oct 2011 01:03

Re: Datalogger de températures multi sondes

Message non lude SesechXP » Mar 22 Nov 2011 08:07

Pour le strcpy, je voulais en effet dire que c'est assez consommateur, comme à peu près tout ce qui touche aux chaînes de caractères. Après c'est peut-être négligeable par rapport au reste du logiciel, à voir...

Pour l'affichage de la température sur le Deuligne, il suffira de jouer avec des divisions par 10 et des modulos 10 pour obtenir quelque chose de lisible et exprimé en degrés.

++
SesechXP
 
Messages: 228
Inscription: Sam 28 Mai 2011 09:09
Localisation: 35

Re: Datalogger de températures multi sondes

Message non lude HenriLeopold » Mar 22 Nov 2011 09:00

Bonjour, alain_g,

Le petit programme "arduino_ds18b20_temperature_sensor.pde" utilise 3 sondes thermométriques :
.............
- DeviceAddress insideThermometer = { 0x28, 0x94, 0xE2, 0xDF, 0x02, 0x00, 0x00, 0xFE };
- DeviceAddress outsideThermometer = { 0x28, 0x6B, 0xDF, 0xDF, 0x02, 0x00, 0x00, 0xC0 };
- DeviceAddress dogHouseThermometer = { 0x28, 0x59, 0xBE, 0xDF, 0x02, 0x00, 0x00, 0x9F };
...............

A+
Henri
HenriLeopold
 
Messages: 32
Inscription: Mer 25 Mai 2011 19:19

Re: Datalogger de températures multi sondes

Message non lude alain_g » Mar 22 Nov 2011 17:19

SesechXP a écrit:Pour l'affichage de la température sur le Deuligne, il suffira de jouer avec des divisions par 10 et des modulos 10 pour obtenir quelque chose de lisible et exprimé en degrés.

++


Ok, je vais voir ce qu'il est possible de faire ;)

HenriLeopold a écrit:Le petit programme "arduino_ds18b20_temperature_sensor.pde" utilise 3 sondes thermométriques :


Merci, après il faut rajouter la gestion du Deuligne et du stockage sur SD. J'ai essayé ce code hier, rapidement et sans le mettre sur l'arduino qui est en fonctionnement, et j'ai plus d'utilisation de la mémoire flash. Je pense qu'il met aussi toute la librairie en flash? Pour gagner un peu de place, le mieux ne serait il pas de récupérer juste la fonction qui nous intéresse dans la librairie et de l'incorporer au code? Cela permettrait il de gagner en mémoire vive?

++

Alain
alain_g
 
Messages: 22
Inscription: Sam 29 Oct 2011 01:03

Re: Datalogger de températures multi sondes

Message non lude poncin » Jeu 31 Jan 2013 11:59

Bonjour

Nouvellement converti à Arduino... je progresse. Pour autant auriez vous le plan de cablage des ds18b20 sur le protoshield ? Vous remerciant d'avance.

Cordialement

Jean Luc P
poncin
 
Messages: 1
Inscription: Jeu 31 Jan 2013 11:47

Re: Datalogger de températures multi sondes

Message non lude alain_g » Jeu 31 Jan 2013 20:21

Bonsoir, le schéma dont je me suis inspiré pour raccorder les DS18B20 est sur ce site:

http://www.mon-club-elec.fr/pmwiki_mon_ ... S18B20Test

++

Alain
alain_g
 
Messages: 22
Inscription: Sam 29 Oct 2011 01:03


Retourner vers Vos projets, vos idées

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron