Go Down

Topic: cherche solution capteur de température NTC=10K B3435 (Read 314 times) previous topic - next topic

APOSETREP

Bonjour je n'arrive pas a programmer mon arduino pour qu'il m'affiche la température à tel endroit de mon ecran  TFT 2.4

 je dispose : arduino mega 2560, ecran tft 2.4"



d'une sonde NTC= 10K B3435 (à deux fils) , resistance 10 Kmon cablâge est :

5v-------------------Res 10 K---------------------------------ANALOG
                                                     \--------------------------------0V


j'ai essayer plusieurs façon de programmer depuis plus d'une semaine mais toujours rien


j'ai aussi une sonde (ce qui est noter sur l'emballage) SKU234450 2M EVU

hameau

Salut,

Il faudrait ton code arduino afin de pouvoir t'aider ?, a tu fait un programme de base afin de verifier le bon fonctionnement de la sonde de T° ?.

@+

APOSETREP

voici le code
info : entrée du capteur en pin analogique 8

il y a peut être des choses qui ne servent a rien dans le code car je suis parti sur une base d'une horloge numérique

mon projet est simplement d'afficher la température intérieur et extérieur
pour le moment je dispose que d'une seul sonde de temperature

Code: [Select]


/*
  thermomètre numerique  et Afficheur TFT LCD Tactile 2.4 inch
                Arduino
 
CI DS3232
VDD  3VCC ou 5VCC 
SDA  A4
SCL  A5
*/

#include <thermistor.h>
Thermistor temp(A8);
#include <SPFD5408_Adafruit_GFX.h>    // Core graphics library
#include <SPFD5408_Adafruit_TFTLCD.h> // Hardware-specific library
#include <math.h>
///////////////////  Afficheur ///////////////////////////

#define YP A3
#define XM A2
#define YM 9
#define XP 8
#define TS_MINX 150
#define TS_MINY 120
#define TS_MAXX 950
#define TS_MAXY 940
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4
#define  BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
#define MINPRESSURE 10
#define MAXPRESSURE 1000
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
////////////////////////////////////////////////////////////

//DS3232


//////////////////////////////////////////////////
int I2C_DS3232 = 0xD0 >> 1;
byte DS3232control = 0b00011100, DS3232status = 0b11001000 , DS3232aging , DS3232Msb , DS3232Lsb;
//////////////////////////////////////////////////
uint16_t startAddr = 0x0000;       // Adresse de démarrage Start dans  NV-RAM
uint16_t lastAddr;                 // Nelle addresse des stockage NV-RAM
uint16_t TimeIsSet = 0xaa55;       // Prévient qu'il n'y a pas de remise à l'heure

// DDS/Arduino Connections
#define DDS_LOAD  12  //FQ_UD
#define DDS_CLOCK 3
#define DDS_DATA  2
/*
  CI DS3231 sur Arduino Mega
  VDD  3VCC ou 5VCC
  SDA  21
  SCL  20
*/
///////////////////////////////////////////////////////////////////////////////////////

void setup () {
 
  tft.begin(0x9341); // SDFP5408
  tft.fillScreen(BLACK);

  tft.setRotation(3);

  //tft.setCursor(120, 0);
  tft.setTextColor(WHITE);  tft.setTextSize(3);
  tft.setCursor(35,5);
  tft.println("RENAULT MEGANE");
  tft.setCursor(0,100);
  tft.println("Temp Int");
  Serial.begin(9600);
  tft.setCursor(300, 100);
  tft.begin(9600);
  tft.setCursor(0, 200);
  tft.println("Temp Ext");
  tft.setCursor(300, 200);
  tft.println("C");
}

void Marche()
{
  }


  //--------------------------------------------------------------------
void loop() {
    int temperature = temp.getTemp(8);
  Serial.print("Temperatura: ");
  Serial.print(temperature);
  Serial.println("*C");
  delay(1000);
}


hameau

salut,
Peux tu donner plus d'informations concernant ton problème, car la c'est pas clair.

- l'affichage du LCD est il Ok, programme de test ?
- la gestion de la sonde de T° fonctionne t'elle bien, la boucle loop, affiche bien la T°
- que cheches tu exactement à obtenir sur LCD.

@+

APOSETREP

la le programme en lui meme fonctionne pour l'affichage simple

se qu'il ne vas pas c'est que lorsque je veut le televersé il me dit erreur de compilation

hameau

Tu a quoi comme message d'erreur lors du téléversement ? et a quelle(s) ligne(s).

APOSETREP

voici le message d'erreur :
Code: [Select]
Arduino : 1.8.4 (Windows 7), Carte : "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

afficheur_renault:14: error: 'Thermistor' does not name a type

 Thermistor temp(A8);

 ^

C:\Users\Alexis-Anais\Desktop\Ren_Meg\afficheur_renault\afficheur_renault.ino: In function 'void loop()':

afficheur_renault:98: error: 'temp' was not declared in this scope

     int temperature = temp.getTemp(8);

                       ^

Plusieurs bibliothèque trouvées pour "SPFD5408_Adafruit_GFX.h"
Utilisé : C:\Program Files\Arduino\libraries\SPFD5408_Adafruit_GFX
Non utilisé : C:\Program Files\Arduino\libraries\SPFD5408-master
exit status 1
'Thermistor' does not name a type

Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.

68tjs

Le capteur de température est une thermistance .
La loi de variation de la valeur de la thermistance en fonction de la température est complexe et visiblement tu utilise la bibliothèque  "thermistor" pour la gérer.
Cette bibliothèque est-elle correctement installée ?

APOSETREP

voila je me suis tourner vers :
Code: [Select]

/*
  Horloge  CI DS3231 et Afficheur TFT LCD Tactile 2.4 inch
                Arduino
 
CI DS3232
VDD  3VCC ou 5VCC 
SDA  A4
SCL  A5
             

  Mon site http://f5mna .free.fr

  Mai 2016
*/


#include <SPFD5408_Adafruit_GFX.h>    // Core graphics library
#include <SPFD5408_Adafruit_TFTLCD.h> // Hardware-specific library
#include <TouchScreen.h>
#include <math.h>
///////////////////  Afficheur ///////////////////////////

#define YP A3
#define XM A2
#define YM 9
#define XP 8
#define TS_MINX 150
#define TS_MINY 120
#define TS_MAXX 950
#define TS_MAXY 940
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4
#define  BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
#define MINPRESSURE 10
#define MAXPRESSURE 1000
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
////////////////////////////////////////////////////////////

//DS3232


//////////////////////////////////////////////////
int I2C_DS3232 = 0xD0 >> 1;
byte DS3232control = 0b00011100, DS3232status = 0b11001000 , DS3232aging , DS3232Msb , DS3232Lsb;
//////////////////////////////////////////////////
uint16_t startAddr = 0x0000;       // Adresse de démarrage Start dans  NV-RAM
uint16_t lastAddr;                 // Nelle addresse des stockage NV-RAM
uint16_t TimeIsSet = 0xaa55;       // Prévient qu'il n'y a pas de remise à l'heure

// DDS/Arduino Connections
#define DDS_LOAD  12  //FQ_UD
#define DDS_CLOCK 3
#define DDS_DATA  2
/*
  CI DS3231 sur Arduino Mega
  VDD  3VCC ou 5VCC
  SDA  21
  SCL  20
*/
///////////////////////////////////////////////////////////////////////////////////////
int a, angles, anglem, angleh, Xs, Ys, Xs1, Ys1, Xs2, Ys2, Xm, Ym, Xm1, Ym1,
    Xm2, Ym2, Xh, Yh, Xh1, Yh1, Xh2, Yh2, Reg, Sort, second1, minute1, hour1, jour1;
float rad;
int Heure;
int Minute;
int Seconde;
int Jour;
int Annee;
int JourSem;


///////////////////////////////////////////////////
// the value of the 'other' resistor
#define SERIESRESISTOR 10000   
 
// What pin to connect the sensor to
#define THERMISTORPIN A8
// which analog pin to connect
#define THERMISTORPIN A8         
// resistance at 25 degrees C
#define THERMISTORNOMINAL 10000     
// temp. for nominal resistance (almost always 25 C)
#define TEMPERATURENOMINAL 25   
// how many samples to take and average, more takes longer
// but is more 'smooth'
#define NUMSAMPLES 5
// The beta coefficient of the thermistor (usually 3000-4000)
#define BCOEFFICIENT 3950
// the value of the 'other' resistor
#define SERIESRESISTOR 25   
 
uint16_t samples[NUMSAMPLES];
///////////////////////////////////////////////////
void setup () {

  Serial.begin(9600);
  Serial.println("http://f5mna.free.fr");

  // pinMode(2, INPUT);                    // Test  SQW pin, D2 = INPUT
  // digitalWrite(2, HIGH);                // Test  SQW pin, D2 = Pullup on


  ///// Cadran ////////////
 
  tft.begin(0x9341); // SDFP5408
  tft.fillScreen(BLACK);

  tft.setRotation(3);


  //tft.setCursor(120, 0);
  tft.setTextColor(WHITE);  tft.setTextSize(3);
  tft.setCursor(25,5);
  tft.println("RENAULT MEGANE");
  tft.setCursor(0,100);
  tft.println("Temp Int");
  tft.setCursor(300, 100);
  tft.println("C");
  tft.setCursor(0, 200);
  tft.println("Temp Ext");
  tft.setCursor(300, 200);
  tft.println("C");
  Reg = 2;
}

void Marche()
{
  }


  //--------------------------------------------------------------------
void loop(void) {
 
  float reading;
 
  reading = analogRead(A8);
 
  Serial.print("Analog reading ");
  Serial.println(reading);
 
  // convert the value to resistance
  reading = (1023 / reading)  - 1;     // (1023/ADC - 1)
  reading = SERIESRESISTOR / reading;  // 10K / (1023/ADC - 1)
  Serial.print("Temperature ");
  Serial.println(reading);
  Serial.begin(9600);
  tft.setCursor(180, 200);
  tft.print(reading);
 
  delay(200);
}



qui fonctionne mai mon afficheur un peu de mal voila le problème :

on a l'impression qu'il ne se rafraîchit pas corectement se qui rend la lecture impossible

y a t'il une fonction tft.refresh a programmer tous les deux seconde ??

hameau

Salut,

Il se passe quoi exactement avec affichage du LCD, si tu met un delais de 0.5 s ou 1 s dans le loop, cela améliore t'il la lisibilité, car il faut un peut de temps à la carde arduino pour faire acquisition et affichage des valeurs.


fdufnews

Bon tes explications sont tout sauf claires.
Un coup ça marche pas
Ensuite c'est un problème de téléchargement
Après tu nous sors une erreur de compilation
Et maintenant un problème de rafraîchissement d'écran.

Il faudrait traiter les problèmes un par un sinon dans un an on y est encore.

Tu pourrais commencer par apprendre à gérer ta sonde de température en envoyant la mesure vers la console.
Et quand cette partie fonctionnera tu pourras passer au problème de l'affichage.

Donc pour commencer d'où vient ta librairie thermistor? Et comment l'as-tu installée?

APOSETREP

#11
Jul 14, 2018, 04:52 pm Last Edit: Jul 14, 2018, 04:54 pm by APOSETREP
Voila problème résolu j'ai même rajouter une seconde sonde pour avoir température intérieur et extérieur

je vous joins mon code
Code: [Select]


/*
TEMPERATURE et Afficheur TFT LCD Tactile 2.4 inch
                Arduino
 
CI DS3232
VDD  3VCC ou 5VCC 
SDA  A4
SCL  A5
             

  Mon site http://f5mna .free.fr

  Mai 2016
*/


#include <SPFD5408_Adafruit_GFX.h>    // Core graphics library
#include <SPFD5408_Adafruit_TFTLCD.h> // Hardware-specific library
#include <TouchScreen.h>
#include <math.h>
///////////////////  Afficheur ///////////////////////////

#define YP A3
#define XM A2
#define YM 9
#define XP 8
#define TS_MINX 150
#define TS_MINY 120
#define TS_MAXX 950
#define TS_MAXY 940
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4
#define  BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
#define MINPRESSURE 10
#define MAXPRESSURE 1000
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
////////////////////////////////////////////////////////////

//DS3232


//////////////////////////////////////////////////
int I2C_DS3232 = 0xD0 >> 1;
byte DS3232control = 0b00011100, DS3232status = 0b11001000 , DS3232aging , DS3232Msb , DS3232Lsb;
//////////////////////////////////////////////////
uint16_t startAddr = 0x0000;       // Adresse de démarrage Start dans  NV-RAM
uint16_t lastAddr;                 // Nelle addresse des stockage NV-RAM
uint16_t TimeIsSet = 0xaa55;       // Prévient qu'il n'y a pas de remise à l'heure

// DDS/Arduino Connections
#define DDS_LOAD  12  //FQ_UD
#define DDS_CLOCK 3
#define DDS_DATA  2
/*
  CI DS3231 sur Arduino Mega
  VDD  3VCC ou 5VCC
  SDA  21
  SCL  20
*/
///////////////////////////////////////////////////////////////////////////////////////
int a, angles, anglem, angleh, Xs, Ys, Xs1, Ys1, Xs2, Ys2, Xm, Ym, Xm1, Ym1,
    Xm2, Ym2, Xh, Yh, Xh1, Yh1, Xh2, Yh2, Reg, Sort, second1, minute1, hour1, jour1;
float rad;
int Heure;
int Minute;
int Seconde;
int Jour;
int Annee;
int JourSem;


///////////////////////////////////////////////////
// the value of the 'other' resistor

#include <math.h>
#define PIN_NTCEXT A9

double Rrefext = 10000; //Résistance de référence à 25°C
double V_INext = 5.0; //Alimentation électrique

//Information de la thermistance
double A_1ext = 3.354016E-3;
double B_1ext = 2.569850E-4;
double C_1ext = 2.620131E-6;
double D_1ext = 6.383091E-8;

double SteinhartHartext(double Rext)
{
  //Division de l'équation en 4 parties. La premiere est
  //uniquement A1
  double equationB1ext = B_1ext * log(Rext/Rrefext);
  double equationC1ext = C_1ext * pow(log(Rext/Rrefext), 2);
  double equationD1ext = D_1ext * pow(log(Rext/Rrefext), 3);
  double equationext = A_1ext + equationB1ext + equationC1ext + equationD1ext;
  return pow(equationext, -1);

}
#define PIN_NTCINT A8

double Rrefint = 10000; //Résistance de référence à 25°C
double V_INint = 5.0; //Alimentation électrique

//Information de la thermistance
double A_1int = 3.354016E-3;
double B_1int = 2.569850E-4;
double C_1int = 2.620131E-6;
double D_1int = 6.383091E-8;

double SteinhartHartint(double Rint)
{
  //Division de l'équation en 4 parties. La premiere est
  //uniquement A1
  double equationB1int = B_1int * log(Rint/Rrefint);
  double equationC1int = C_1int * pow(log(Rint/Rrefint), 2);
  double equationD1int = D_1int * pow(log(Rint/Rrefint), 3);
  double equationint = A_1int + equationB1int + equationC1int + equationD1int;
  return pow(equationint, -1);

}
///////////////////////////////////////////////////
void setup () {

  Serial.begin(9600);
  Serial.println("Temperature extérieur");

  // pinMode(2, INPUT);                    // Test  SQW pin, D2 = INPUT
  // digitalWrite(2, HIGH);                // Test  SQW pin, D2 = Pullup on


  ///// Cadran ////////////
 
  tft.begin(0x9341); // SDFP5408
  tft.fillScreen(BLACK);

  tft.setRotation(3);


  //tft.setCursor(120, 0);
  tft.setTextColor(WHITE);  tft.setTextSize(3);
  tft.setCursor(25,5);
  tft.println("TEMPERATURES");
  tft.setCursor(0,100);
  tft.println("Temp Int");
  tft.setCursor(300, 100);
  tft.println("C");
  tft.setCursor(0, 200);
  tft.println("Temp Ext");
  tft.setCursor(300, 200);
  tft.println("C");
  Reg = 2;
}

  //--------------------------------------------------------------------
void loop(){
  double valeurAnalogint = analogRead(PIN_NTCINT);//Calcul de la tension sur la borne analogique interieur
  double Vint =  valeurAnalogint / 1023 * V_INint;
  double valeurAnalogext = analogRead(PIN_NTCEXT);//Calcul de la tension sur la borne analogique enterieur
  double Vext =  valeurAnalogext / 1023 * V_INext;
  double Rthint = (Rrefint * Vint ) / (V_INint - Vint);//Calcul de la résistance de la thermistance interieur
  Serial.print("Rthint = ");
  Serial.print(Rthint);
  double Rthext = (Rrefext * Vext ) / (V_INext - Vext);//Calcul de la résistance de la thermistance exterieur
  Serial.print("Rthext = ");
  Serial.print(Rthext);
  double kelvinint = SteinhartHartint(Rthint);//Calcul de la température en kelvin( Steinhart and Hart)interieur
  double celsiusint = kelvinint - 273.15; //Conversion en celsius
  Serial.print("Ohmint  -  Tint = ");
  Serial.print(celsiusint);
  Serial.print("C\n");
  double kelvinext = SteinhartHartext(Rthext);//Calcul de la température en kelvin( Steinhart and Hart)exterieur
  double celsiusext = kelvinext - 273.15; //Conversion en celsius
  Serial.print("Ohmext  -  Text = ");
  Serial.print(celsiusext);
  Serial.print("C\n");
   
  tft.setTextColor(WHITE);  tft.setTextSize(3);// afficheur temperature interieur
  tft.setCursor(200, 100);
  tft.println(celsiusint);
  tft.setTextColor(WHITE);  tft.setTextSize(3); // afficheur temperature exterieur
  tft.setCursor(200, 200);
  tft.println(celsiusext);
  delay(1000);

  tft.setTextColor(BLACK);  tft.setTextSize(3);
  tft.setCursor(200, 100);
  tft.println(celsiusint);
  tft.setTextColor(BLACK);  tft.setTextSize(3);
  tft.setCursor(200, 200);
  tft.println(celsiusext);
  delay(1);
 
}


PS : Merci à tous je vais re posté un autre sujet car je vais rajouter un RTC puis fichier BMP

Go Up