Une mini horloge qui donne la température à base des composants suivants:

  • un lcd
  • un shield Le Sablier
  • une Arduino Pro mini
  • un capteur de température LM35DZ

 

Programmation

 

/*
 MINI CLOCKT
 V1.0
 http://johnlenfr.1s.fr

/// LCD ///
 LCD1 VSS => Ground
 LCD2 VDD => +5V
 LCD3 V0  => digital pin 6 PWM Contrast
 LCD4 RS  => digital pin 4
 LCD5 RW  => digital pin 7
 LCD6 E   => digital pin 8
 LCD7 DB0 => not connected
 LCD8 DB1 => not connected
 LCD9 DB2 => not connected
 LCD10 DB3 => not connected
 LCD11 DB4 => digital pin 13
 LCD12 DB5 => digital pin 12
 LCD13 DB6 => digital pin 11
 LCD14 DB7 => digital pin 10
 LCD15 LED+ => digital pin 5 PWM Backlight
 LCD16 LED- => Ground
 
 /// LE SABLIER ///
 SDA => analog pin 4
 SCL => analog pin 5
 GRD => Ground
 VCC => +5V
 
*/

#include "LeSablier.h"
#include "LiquidCrystal.h"
#include "Wire.h"

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(4, 7, 8, 13, 12, 11, 10);
// RS, RW, Enable, 4,5,6,7 (Refer to the back of your LCD for details)
// variables for the LCD Screen these constants won't change.  But you can change the size of
// your LCD using them:
const int numRows = 2;
const int numCols = 16;

// Time interval [ms] for display updates:
const unsigned long DISPLAY_INTERVAL = 5000;
static unsigned long lastTime=0;  // in ms
unsigned long time=millis();      // in ms

// variables for LDR
int photocellPin = 1;     // the cell and 10K pulldown are connected to A1
int photocellReading;     // the analog reading from the sensor divider
// LCD Backlight
int LcdLedPin = 5;           // connect LCD +LED to digital pin 5 (PWM pin)
int LcdLedBrightness=255;
// LCD Contrast
int LcdContrastPin = 6;           // connect LCD Contrast to digital pin 3 (PWM pin)
int LcdContrast=80;

// make some custom characters:
byte degree[8] = {
  0b00100,
  0b01010,
  0b00100,
  0b00000,
  0b00000,
  0b00000,
  0b00000,
  0b00000
};

char buf[]={"XX.X"};
float reading=0;
  float voltage=0;
  float temperature=0;


void setup() {
    Serial.begin(9600);
    Wire.begin();
    LeSablier.begin();
    //LeSablier.setAll (6, 16, 2, 13, 19, 34, 00);
    pinMode(LcdLedPin,OUTPUT); // set digital pin 5 to pwm output 
    analogWrite(LcdLedPin, LcdLedBrightness);
    pinMode(LcdContrastPin,OUTPUT); // set digital pin 3 to pwm output 
    analogWrite(LcdContrastPin, LcdContrast);
    // create a new character
    lcd.createChar(0, degree);
  
    lcd.begin(numRows, numCols);// set up the LCD's number of rows and columns 
    lcd.clear(); // clear lcd screen
    lcd.setCursor(0,0); // set the cursor on top left hand corner of the lcd screen
    lcd.print("* MINI  CLOCKT *");
    delay(5000);
    lcd.clear(); 
   
    Temp(); 
    
     
}

void loop() {
  
DateHeure ();

time=millis();

  if (time-lastTime>DISPLAY_INTERVAL)  // if at least DISPLAY_INTERVAL ms have passed
  {
  Temp(); // print current temperature
  lastTime=time;
  }
  
BacklightControl();  
  
}



void DateHeure ()
{
    lcd.setCursor(0, 0);

    lcd.print(LeSablier.getDayStr());
    lcd.print(".  ");
    
    if (LeSablier.getDate() < 10)
    {
    lcd.print("0");
    }
    lcd.print(LeSablier.getDate());
    lcd.print("/");
    if (LeSablier.getMonth() < 10)
    {
    lcd.print("0");
    }
    lcd.print(LeSablier.getMonth());
    
    lcd.print("/");
    if (LeSablier.getYear() < 100)
    {
    lcd.print("20");
    }
    lcd.print(LeSablier.getYear());
    
    lcd.setCursor(0, 1);
    if (LeSablier.getHours() < 10)
    {
    lcd.print("0");
    }
    lcd.print(LeSablier.getHours());
    lcd.print(":");
    if (LeSablier.getMinutes() < 10)
    {
    lcd.print("0");
    }
    lcd.print(LeSablier.getMinutes());
    lcd.print(":");
    if (LeSablier.getSeconds() < 10)
    {
    lcd.print("0");
    }
    lcd.print(LeSablier.getSeconds());

    
    
}

void Temp()
{
    lcd.setCursor(8, 1);
    lcd.print("  ");
    //Serial.println("lm35DZ:");
    //Serial.println(lm35dz());
    dtostrf(lm35dz(), 3, 1, buf); //dtostrf(floatVar, minStringWidthIncDecimalPoint, numVarsAfterDecimal, charBuf);
    lcd.print(buf);
    //Serial.println("buffer:");
    //Serial.println(buf);
    lcd.write((byte)0x0);
    lcd.print("C");
}


float lm35dz(){
  
  analogRead(3);
  delay(10);
  reading = analogRead(3); //LM35DZ connect to Analog pin 3
  //convert the voltage into temperature because the LM35DZ is at 10mV per °C
  voltage = reading * 5.0 / 1024.0;
  temperature = voltage * 100 ;
  return temperature;
}

void BacklightControl()
{
      // gestion extinction LCD le soir à 20h30
    if (LeSablier.getHours()==20 && LeSablier.getMinutes()==30 && LeSablier.getSeconds()==00)
    {
      LcdLedBrightness=1;
      analogWrite(LcdLedPin, LcdLedBrightness);
    }
    
     // gestion allumage LCD le matin à 8h30
    if (LeSablier.getHours()==8 && LeSablier.getMinutes()==30 && LeSablier.getSeconds()==00)
    {
      LcdLedBrightness=255;
      analogWrite(LcdLedPin, LcdLedBrightness);
    }
}

 

Réalisation


 

[rokdownload menuitem="122" downloaditem="987" direct_download="false"]TELECHARGER ARDUINO IDE CODE[/rokdownload]