sonde température KY 013

Bonjour

Sur un oed 128x64 j'essaie de faire fonctionner une sonde KY-013.
Elle fonctionne mais la température est erronée.

Il fait 27° et la sonde affiche -4°.
Les branchements sont bons, la sonde est sur A1
ScreenShot015.jpg

/* utilisation de  A0 pour le voltage                 A3 volt avec resistance en //
             A1 pour AIR (KY-013)                        A2 pour la voiture bateau
             des A4 et A5 pour l'écran                   A4 et A5 pour l'écran
             du  pin 2 pour l'eau DS18b20EAU          Pin 4  pour la voiture bateau

  AO   récupère l’information du voltage avec GND fil direct à la batterie mais avec resistance en parallèle !!
  A1   récupère l’information de la température  Thermo résistance (modèle Keyes KY-013)
  pin 2 récupère l’information de la température de la sonde étanche 1m  DS18B20
  A4 et A5 affichage de l'écran

    "5 Volt c'est la tension de la référence de tension de l'ADC.
    J'espère que tu n'as pas raccordé directement le 12V à A0 ?
    Il faut placer un pont diviseur à deux résistances pour que la tension sur A0 soit inférieure à 12V".
*/
#include <math.h>                  //KY-013 pour température de l'air
#include <OneWire.h>               //DS18B20 pour température de l'eau
#include <DallasTemperature.h>     //DS18B20 pour température de l'eau
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>


/* Essai affichage voltage, température air et eau
  // http://www.instructables.com/id/Arduino-OLED-Voltage-Meter/  le voltmètre
  //              A0 et GND entre les deux mettre resistance ( voir le lien)ici A0 pour le voltage
  //              A0 est lié à la batterie et GND à l'autre  pôle de la batterie

  // http://edu.mrpigg.ca/termo.html     thermo resistor  Keyes KY-013  pour l'air
  // https://letmeknow.fr/blog/2016/08/10/le-capteur-de-temperature-ds18b20/

  //les librairies de l'écran
  //https://github.com/adafruit/Adafruit_SSD1306
  //https://github.com/adafruit/Adafruit-GFX-Library


  //les librairies de la sonde étanche DS18B20
  //https://github.com/PaulStoffregen/OneWire
*/

// les branchements

//  L'écran OLED
#define OLED_RESET 8          // pin 8 'virtuel' ?                                  
Adafruit_SSD1306 display(OLED_RESET);

//définition de la taille de l'écran
#define SSD1306_128_64 // à modifier dans le dossier Liraries / dossier Adafruit_SSD1306.h avec 
// éditeur de texte  #define SSD1306_128_64 et pour les autres définitions d'écran
// écrire //#define SSD1306_128_32  #define SSD1306_128_16

// Température de l'eau DS18B20
#define EAU_TEMPERATURE_PIN 2 //***********************************************************pin 4 pour voiture bateau
OneWire oneWire(EAU_TEMPERATURE_PIN);
DallasTemperature sensors(&oneWire);






/*-------------------------------------------------------------------------------------
   Template file for 4-pin I2C OLED display, e.g. from Geekcreit
   using Adafruit SSD1306 driver and GFX libraries.
   Tutorial:
   https://startingelectronics.org/tutorials/arduino/modules/OLED-128x64-I2C-display/
  -------------------------------------------------------------------------------------*/
// OLED display TWI address
#define OLED_ADDR   0x3C // C avant a modifier peut-etre

//------------------------------------------
//------------------------------------------

// Déclaration et calcul de Température de l'air KY-013
int sensorPin = A1;// KY-013 Déclaration de la broche d'entrée  AIR *************************A2 pour la voiture bateau
// fonction convertit la valeur analogique lue en température en °C
double Thermistor(int RawADC)
{
  double Temp;
  Temp = log(10000.0 * ((1024.0 / RawADC - 1)));
  Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp )) * Temp );
  Temp = Temp - 273.15;            // conversion de degrés Kelvin en °C  Temp - 273.15;
  return Temp;                     // le nom de la variable de la températur AIR


}


void setup() {
  // initialize and clear display
  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);//   programme scanner
  display.clearDisplay();
  display.display();

  // start serial port
  Serial.begin(115200);
  Serial.println("Dallas Temperature IC Control Library Demo");

  // Start up the library
  sensors.begin();
}


void loop() {

  // Déclaration  de calcul de la température de l'eau
  sensors.requestTemperatures();
  double dTempWater = sensors.getTempCByIndex(0);//nom de la variable de la températur EAU
  // mesure de la valeur de tension continue à la CTN et convertion en °C
  int readVal = analogRead(2);//************************************************************* Pin 4  pour la voiture bateau
  double temp =  Thermistor(readVal);

  // long temp = 1040 ;// pour affichage d'exemple à supprimer après montage
  //------------------------------------------
  //------------------------------------------


  //Affichage sur l'écran
  delay(1);//delay time 1 milli second
  display.clearDisplay();

  display.setTextSize(1);//text size
  display.setTextColor(WHITE);//text color
  display.setCursor(0, 0);
  display.println("NIVEAU BATTERIE");//affiche texte 1ere ligne 8 pixels
  //*****************************
  //display.setTextColor(BLACK, WHITE);
  //display.println(); // affiche une ligne noire
  //*****************************
  /*
    display.setTextSize(1);
    display.println("A0");//define analog pin  16 pixels "A0"
    display.setTextColor(WHITE);//text color
    display.setCursor(0, 16);
    //*****************************
  */

  /* display.setTextSize(1);                 //text size
    display.setTextColor(WHITE);            //text color
    display.setCursor(0, 32);               // position du curseur
    display.println("TEMP. AIR / EAU");//affiche texte 1ere ligne 8 pixels
  */
  // Affichage sur la même ligne des 2 températures Air et Eau
  display.setTextSize(1);//text size        // mettre 2 pour 16 pixels
  display.setCursor(0, 42);                 // position du curseur
  display.print("TEMP. AIR   ");//affiche texte 1ere ligne 8 pixels
  display.print( temp );                    // ici on met la 1° température ( Keyes KY-013)  AIR
  display.print("'");                       //Affichage du symbole <C>
  display.print("C");                       //Affichage du symbole <C>

  display.setTextSize(1);//text size        // mettre 2 pour 16 pixels
  display.setCursor(0, 57);                 // position du curseur
  display.print("TEMP. EAU   ");//affiche texte 1ere ligne 8 pixels
  display.print(dTempWater);                // ici on met la 2° température eau (sonde étanche)(pin2)(Pin4 pour la voiture bateau)
  display.print("'");                       //Affichage du symbole <C>
  display.print("C");                       //Affichage du symbole <C>
  delay(500);                               // Attente 0,5 sec pour réactualiser


  // pour le voltage de la batterie
  // Conversion du signal (which goes from 0 - 1023) to a voltage (0 - (V):
  int sensorValue = analogRead(A0);//*******************************************************  A3 pour la voiture bateau
  // écrit la valeur lue
  float voltage = sensorValue * (5.0 / 1023.0);
  display.setTextSize(1);//text size         // mettre 2 pour 16 pixels
  display.setCursor(0, 16);
  display.print(voltage);
  display.print(" V");
  display.display();


}

Tu dis que la sonde est sur A1 et tu déclares
int sensorPin = A1;// KY-013 Déclaration de la broche d'entrée  AIRmais tu mesures avec

  int readVal = analogRead(2);
  double temp =  Thermistor(readVal);

Je pense que ton problème vient de là.

Au passage n'oublies pas que la première mesure analogique n'est jamais bonne. Il faut en faire une "à blanc" dans le setup, que tu n'utiliseras pas.

Malheureusement pour moi, toutes mes recherches sur le net me donne un code avec cette valeur

  int readVal = analogRead(2);
  double temp =  Thermistor(readVal);

Du coup je ne sais pas comment modifier ce code :confused:

site du code

Et tous les autres tuto parle d'un écran bcp plus grand

lesept:
Au passage n'oublies pas que la première mesure analogique n'est jamais bonne. Il faut en faire une "à blanc" dans le setup, que tu n'utiliseras pas.

si j'ai compris dans setup je mets

temps = 0;

Non, si tu as branché ta sonde sur la broche A1, tu changes
  int readVal = analogRead(2);en  int readVal = analogRead(A1);et tu recopies cette ligne à la fin du setup pour la mesure à blanc.

Il faut aussi déclarer la pin A1 en input dans le setup :

pinMode(A1, INPUT);

et bien sûr si tu as déclaré auparavant
int sensorPin = A1;// KY-013 Déclaration de la broche d'entrée  AIRtu peux changer A1 en sensorPin partout dans ces lignes

Mais tout dépend de quelle broche est reliée au capteur

Salut

Je ne peux pas tester , je le ferais ce soir.
Est-ce que le code est bon ?

/* utilisation de  A0 pour le voltage                 A3 volt avec resistance en //
             A1 pour AIR (KY-013)                     A2 pour la voiture bateau
             des A4 et A5 pour l'écran            A4 et A5 pour l'écran
             du  pin 2 pour l'eau DS18b20EAU          Pin 4  pour la voiture bateau

  AO   récupère l’information du voltage avec GND fil direct à la batterie mais avec resistance en parallèle !!
  A1   récupère l’information de la température  Thermo résistance (modèle Keyes KY-013)
  pin 2 récupère l’information de la température de la sonde étanche 1m  DS18B20
  A4 et A5 affichage de l'écran

    "5 Volt c'est la tension de la référence de tension de l'ADC.
    J'espère que tu n'as pas raccordé directement le 12V à A0 ?
    Il faut placer un pont diviseur à deux résistances pour que la tension sur A0 soit inférieure à 12V".
*/
#include <math.h>                  //KY-013 pour température de l'air
#include <OneWire.h>               //DS18B20 pour température de l'eau
#include <DallasTemperature.h>     //DS18B20 pour température de l'eau
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>


/* Essai affichage voltage, température air et eau
  // http://www.instructables.com/id/Arduino-OLED-Voltage-Meter/  le voltmètre
  //              A0 et GND entre les deux mettre resistance ( voir le lien)ici A0 pour le voltage
  //              A0 est lié à la batterie et GND à l'autre  pôle de la batterie

  // http://edu.mrpigg.ca/termo.html     thermo resistor  Keyes KY-013  pour l'air
  // https://letmeknow.fr/blog/2016/08/10/le-capteur-de-temperature-ds18b20/

  //les librairies de l'écran
  //https://github.com/adafruit/Adafruit_SSD1306
  //https://github.com/adafruit/Adafruit-GFX-Library


  //les librairies de la sonde étanche DS18B20
  //https://github.com/PaulStoffregen/OneWire
*/

// les branchements

//  L'écran OLED
#define OLED_RESET 8          // pin 8 'virtuel' ?                                  
Adafruit_SSD1306 display(OLED_RESET);

//définition de la taille de l'écran
#define SSD1306_128_64 // à modifier dans le dossier Liraries / dossier Adafruit_SSD1306.h avec 
// éditeur de texte  #define SSD1306_128_64 et pour les autres définitions d'écran
// écrire //#define SSD1306_128_32  #define SSD1306_128_16

// Température de l'eau DS18B20
#define EAU_TEMPERATURE_PIN 2 //***********************************************************pin 4 pour voiture bateau
OneWire oneWire(EAU_TEMPERATURE_PIN);
DallasTemperature sensors(&oneWire);

/*-------------------------------------------------------------------------------------
   Template file for 4-pin I2C OLED display, e.g. from Geekcreit
   using Adafruit SSD1306 driver and GFX libraries.
   Tutorial:
   https://startingelectronics.org/tutorials/arduino/modules/OLED-128x64-I2C-display/
  -------------------------------------------------------------------------------------*/
// OLED display TWI address
#define OLED_ADDR   0x3C // C avant a modifier peut-etre

//------------------------------------------
//------------------------------------------

// Déclaration et calcul de Température de l'air KY-013
int sensorPin = A1;// KY-013 Déclaration de la broche d'entrée  AIR *************************A2 pour la voiture bateau
// fonction convertit la valeur analogique lue en température en °C
double Thermistor(int RawADC)
{
  double Temp;
  Temp = log(10000.0 * ((1024.0 / RawADC - 1)));
  Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp )) * Temp );
  Temp = Temp - 273.15;            // conversion de degrés Kelvin en °C  Temp - 273.15;
  return Temp;                     // le nom de la variable de la températur AIR


}


void setup() {
  // initialize and clear display
  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);//   programme scanner
  display.clearDisplay();
  display.display();

  // start serial port
  Serial.begin(115200);
  Serial.println("Dallas Temperature IC Control Library Demo");

  // Start up the library
  sensors.begin();

  // déclaration de la pin A1
  pinMode(A1, INPUT);

  int readVal = analogRead(A1);// met à zéro la sonde
}


void loop() {

  // Déclaration  de calcul de la température de l'eau
  sensors.requestTemperatures();
  double dTempWater = sensors.getTempCByIndex(0);//nom de la variable de la températur EAU
  // mesure de la valeur de tension continue à la CTN et convertion en °C
  int readVal = analogRead(A1);//************************************************************* Pin 4  pour la voiture bateau
  double temp =  Thermistor(readVal);

  // long temp = 1040 ;// pour affichage d'exemple à supprimer après montage
  //------------------------------------------
  //------------------------------------------


  //Affichage sur l'écran
  delay(1);//delay time 1 milli second
  display.clearDisplay();

  display.setTextSize(1);//text size
  display.setTextColor(WHITE);//text color
  display.setCursor(0, 0);
  display.println("NIVEAU BATTERIE");//affiche texte 1ere ligne 8 pixels
  //*****************************
  //display.setTextColor(BLACK, WHITE);
  //display.println(); // affiche une ligne noire
  //*****************************
  /*
    display.setTextSize(1);
    display.println("A0");//define analog pin  16 pixels "A0"
    display.setTextColor(WHITE);//text color
    display.setCursor(0, 16);
    //*****************************
  */

  /* display.setTextSize(1);                 //text size
    display.setTextColor(WHITE);            //text color
    display.setCursor(0, 32);               // position du curseur
    display.println("TEMP. AIR / EAU");//affiche texte 1ere ligne 8 pixels
  */
  // Affichage sur la même ligne des 2 températures Air et Eau
  display.setTextSize(1);//text size        // mettre 2 pour 16 pixels
  display.setCursor(0, 42);                 // position du curseur
  display.print("TEMP. AIR   ");//affiche texte 1ere ligne 8 pixels
  display.print( temp );                    // ici on met la 1° température ( Keyes KY-013)  AIR
  display.print("'");                       //Affichage du symbole <C>
  display.print("C");                       //Affichage du symbole <C>

  display.setTextSize(1);//text size        // mettre 2 pour 16 pixels
  display.setCursor(0, 57);                 // position du curseur
  display.print("TEMP. EAU   ");//affiche texte 1ere ligne 8 pixels
  display.print(dTempWater);                // ici on met la 2° température eau (sonde étanche)(pin2)(Pin4 pour la voiture bateau)
  display.print("'");                       //Affichage du symbole <C>
  display.print("C");                       //Affichage du symbole <C>
  delay(500);                               // Attente 0,5 sec pour réactualiser


  // pour le voltage de la batterie
  // Conversion du signal (which goes from 0 - 1023) to a voltage (0 - (V):
  int sensorValue = analogRead(A0);//*******************************************************  A3 pour la voiture bateau
  // écrit la valeur lue
  float voltage = sensorValue * (5.0 / 1023.0);
  display.setTextSize(1);//text size         // mettre 2 pour 16 pixels
  display.setCursor(0, 16);
  display.print(voltage);
  display.print(" V");
  display.display();


}

ça a l'air bon...

Merci