Horloge Ultrasons


Matériel :

* Carte Arduino UNO,

* Un afficheur à segments I2C TM1637,

* Un détecteur d’ultrasons de type SR04,

L’horloge est logicielle et ne nécessite pas d’autre matériel.

Principe :

En fonction de la détection de la proximité d’un objet ou d’un corps et en fonction de la distance augmente l’intensité de la luminosité de l’affichage.

Programmation :

Téléchargez la librairie de l’afficheur ici, celle du détecteur à ultrasons et celle nécessaire à l’horloge logicielle ici.

Le sketch .

 /*******************************************************************************/  
 /* Horloge à Ultrasons  
 /* Détecte la proximité d'un objet ou d'un corps et en fonction de la distance  
 /* augmente l'intensité de la luminosité de l'affichage  
 /*******************************************************************************/  
 #include <TimerOne.h>  //-- Librairie pour l'horloge  
 #include <Ultrasonic.h> //-- Librairie détection Ultrasons  
 #include "TM1637.h"   //-- Librairie pour l'afficheur  
 #define ON 1  
 #define OFF 0  
 int8_t TimeDisp[] = {0x00,0x00,0x00,0x00};  
 unsigned char ClockPoint = 1;  
 unsigned char Update;  
 unsigned char halfsecond = 0;  
 //-- Réglez ici l'heure d'initialisation de l'horloge  
 unsigned char second;  
 unsigned char minute = 04;  
 unsigned char hour = 19;  
 //-- Ultrasons  
 const int Trig = 3;   // pin "Trig" du HC-SR04 connectée à pin 3 de l'Arduino  
 const int Echo = 2;   // pin "Echo" du HC-SR04 connectée à pin 2 de l'Arduino  
 long cm;        // variable pour stocker la distance de l'objet en cm  
 Ultrasonic HCSR04(Trig,Echo);  
 //-- Afficheur TM1637  
 #define CLK 4      // pins pour le TM1637   
 #define DIO 5  
 TM1637 tm1637(CLK,DIO);  
 //-- Setup  
 void setup()  
 {  
  tm1637.set();  
  tm1637.init();  
  Timer1.initialize(500000);     //timing de 500ms  
  Timer1.attachInterrupt(TimingISR); //declaration de la routine d'interruption:TimingISR   
 }  
 //--  
 void loop()  
 { //-- Si l'interruption est levée  
  if(Update == ON)  
  { TimeUpdate();  
   tm1637.display(TimeDisp);  
   cm = HCSR04.convert(HCSR04.timing(), 1);  
   if(cm >0 && cm < 10)     // objet très proche  
   {tm1637.set(0x07);}  
   else if(cm >= 10 && cm < 20) // distance moyenne  
      {tm1637.set(0x00);}  
      else if (cm>=20)  
        {tm1637.set(8);}  //On efface l'afficheur (8 annule 88) !  
  }  
 }  
 //-- Routine d'interruption  
 void TimingISR()  
 { halfsecond ++;  
  Update = ON;  
  if(halfsecond == 2){  
   second ++;  
   if(second == 60)  
   {  
    minute ++;  
    if(minute == 60)  
    {  
     hour ++;  
     if(hour == 24)hour = 0;  
     minute = 0;  
    }  
    second = 0;  
   }  
   halfsecond = 0;   
  }  
  ClockPoint = (~ClockPoint) & 0x01;  
 }  
 //-- Mise à jour de l'affichage  
 void TimeUpdate(void)  
 { if(ClockPoint)tm1637.point(POINT_ON);  
  else tm1637.point(POINT_OFF);   
  TimeDisp[0] = hour / 10;  
  TimeDisp[1] = hour % 10;  
  TimeDisp[2] = minute / 10;  
  TimeDisp[3] = minute % 10;  
  Update = OFF;  
 }  

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

Articles récents
Commentaires récents
fatima dans Bienvenue !
AdminDroid dans Bienvenue !
fatima dans Bienvenue !
Archives
Catégories