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
/* 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();
}