A l’IUT nous testons de nombreux éclairages de véhicules.
Les résultats de ces mesures poule velo sont sur ce lien
Un post sur la gestion d’éclairage avec Arduino est en cours
« Eclairage à led de vélo (7.5W à l’avant et 3 W à l’arrière) avec Arduino »
https://forum.arduino.cc/index.php?topic=591180.0
Nous mesurons l’éclairage sur un mur. Avec ces données, les valeurs sur le sol peuvent être estimées.
Mais, à la place de faire une estimation mathématique.
Ce banc d’essai permet de mesurer la distribution de l’éclairage sur un sol. En effet, 16 capteurs TEMT6000 (0.53€) ont été placé sur une réglette de 3m de long (écart de 16cm) et mémorise les mesures via le connecteur USB sur un PC tous les mètres à chaque fois que l’on appuie sur le bouton 1 comme on peut l’observer sur la figure suivante qui nous a permis de tester notre programme.
Les valeurs seront traitées dans Excel via un fichier CSV en copiant toutes les données du terminal.
Toutes les valeurs doivent etre divisé par 1.021 mais ce sera fait dans Excel.
Le schéma de simulation d’ISIS peut etre telechargé sur ce lien
Le programme est le suivant
#include <LiquidCrystal.h>
#include <SoftwareSerial.h>
#include <TimerOne.h>
#include <avr/wdt.h> //chien de garde
#define Led 13 // 13 pour la led jaune sur la carte
#define BP1 30 // 30 BP1
#define BP2 31 // 31 BP2
#define BP3 32 // 32 BP3
#define BP4 26 // 32 BP3
#define LEDV 33 // 33 led
#define LEDJ 34 // 34 led
#define LEDR 35 // 35 led
#define relay1 8 // relay1 B1
#define relay2 9 // relay2 B2
LiquidCrystal lcd(27, 28, 25, 24, 23, 22); // RS=27, Enable=28, D4=25, D5=24, D6= 23, D7=22, BPpoussoir=30
// Configuration des variables
unsigned int temps = 0;
unsigned int S0[16]; // variable to store the value coming from the sensor
void setup() {
pinMode(Led, OUTPUT); //led carte arduino
pinMode(LEDV, OUTPUT);
pinMode(LEDR, OUTPUT);
pinMode(LEDJ, OUTPUT);
Timer1.initialize(100000); // initialize timer1, and set a 0,1 second period => 100 000
Timer1.attachInterrupt(callback); // attaches callback() as a timer overflow interrupt
lcd.begin(20, 4);
// Serial1.begin(9600);
wdt_enable(WDTO_15MS);
wdt_enable(WDTO_1S); // declenche le chien de garde
Serial.begin(9600);
interrupts();
}
// Interruptions tous les 0.1s
void callback() {
temps++;
//toogle state ledv for check
wdt_reset(); // remise à zero du chein de garde
//************************
if (temps>=1 ) { //
if ( digitalRead(LEDV)== 1 ) {digitalWrite(LEDV,LOW);} else {digitalWrite(LEDV,HIGH);}
S0[0]=analogRead(A0); //
lcd.setCursor(0,0);
lcd.print(S0[0]);
lcd.print(".");
S0[1]=analogRead(A1); //
lcd.print(S0[1]);
lcd.print(".");
S0[2]=analogRead(A2); //
lcd.print(S0[2]);
lcd.print(".");
S0[3]=analogRead(A3); //
lcd.print(S0[3]);
lcd.print(" ");
lcd.setCursor(0,1);
S0[4]=analogRead(A4);
lcd.print(S0[4]);
lcd.print(".");
S0[5]=analogRead(A5); //
lcd.print(S0[5]);
lcd.print(".");
S0[6]=analogRead(A6); //
lcd.print(S0[6]);
lcd.print(".");
S0[7]=analogRead(A7); //
lcd.print(S0[7]);
lcd.print(" ");
lcd.setCursor(0,2);
S0[8]=analogRead(A8);
lcd.print(S0[8]);
lcd.print(".");
S0[9]=analogRead(A9); //
lcd.print(S0[9]);
S0[10]=analogRead(A10);
lcd.print(".");
lcd.print(S0[10]);
S0[11]=analogRead(A11);
lcd.print(".");
lcd.print(S0[11]);
lcd.print(" ");
lcd.setCursor(0,3);
S0[12]=analogRead(A12);
lcd.print(S0[12]);
lcd.print(".");
S0[13]=analogRead(A13); //
lcd.print(S0[13]);
S0[14]=analogRead(A14);
lcd.print(".");
lcd.print(S0[14]);
S0[15]=analogRead(A15);
lcd.print(".");
lcd.print(S0[15]);
lcd.print(" ");
temps=0;
} // fin temps
}//fin routine interruption
// Boucle correspondant à la fonction main
void loop() {
if ((digitalRead(BP1))==1) { //envoie des données de la ligne mesurée sur le PC
int i; // puis enregistrement des mesures dans un fichier CSV pouvant etre traité dans excel
for (i = 0; i <= 15; i = i + 1) {
Serial.print(S0[i]);
Serial.print(";");
}
Serial.println("\t");
delay(1000);
}
} // fin loop
pour minimiser le nombre de fil A la place de prendre un capteur analogique, des capteurs numeriques d’éclairages avec communications tel que I2C existent (BH1750 0,8€., TSL2561 3,8€.) utilisant des photodiodes
I2C est un bus série synchrone bidirectionnel ou plusieurs maîtres ou esclaves pouvant utiliser jusqu’à 128 périphériques. La plage de mesure du BH1750 est sur 16 bits avec une précision possible à 0,5lux
Mais, le BH1750 n’a que 2 adresses possibles. Par contre, le TSL2561 est configurable mais cher.
Perspectives
Il serait intéressant d’enregistrer toutes les mesures en interne ou sur une carte SD puis de les transférer sur le PC