Modifications

Cestpasidiot

7 330 octets ajoutés, 14 septembre 2015 à 05:44
récepteur pour capteur DHT + lux
==assemblage de code fonctionnel==
=== récepteur pour capteur DHT + luxmètre ===
<pre>
#include <VirtualWire.h> // Vous devez télécharger et installer la librairie VirtualWire.h dans votre dossier "/libraries" !
#include "DHT.h"
#include<stdlib.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_TSL2561_U.h>
 
// les broches des capteurs
#define SENSDHTPIN 4 // la broche dédiée au capteur de température & hygrométrie de l'air
#define DHTTYPE DHT22 // DHT 22 (AM2302) le modèle du capteur
DHT dht(SENSDHTPIN, DHTTYPE);
 
// les capteurs I2C sont branchés en série
// attention au 3,3V vs 5v
Adafruit_TSL2561_Unified tsl = Adafruit_TSL2561_Unified(TSL2561_ADDR_FLOAT, 12345);
////////////////////////////////////////////////
 
//message à envoyer.
char msg[40];
 
// ses élements : les valeurs des capteurs
float tempValue=2000; // variable de température
float humidityValue=6000; // variable % hygrométrie de l'air
unsigned int luxValue=48;
// unsigned int sensLight = 0 ; // variable dédiée au niveau lumièe en lux
// unsigned int sensProx = 0 ; // variable de distance
// unsigned int sensBend = 0; // variable du capteur de flexion
// unsigned int sensSwitch = 0; // l'interrupteur
 
/////////////////////////////////////////////////////////////
 
// les variables temporelles
unsigned long latestSendingMillis = millis(); // mémorise la dernière fois qu'on a envoyé les valeurs
unsigned long latestSensingMillis = millis(); // mémorise la dernière fois qu'on a interogé les capteurs
unsigned long latestDHTSensingMillis = millis(); // la dernière fois qu'on a interogé le capteur temp+hygro
unsigned long i2cSensingIntervalMillis = 1000; // intervalle de temps avant une nouvelle interrogation des capteurs
unsigned long sensingDHTIntervalMillis = 2500; // intervalle de temps avant nouvelle interrogation capteur DHT
unsigned long sendingIntervalMillis = 1000; // intervalle de temps avant nouvel envoi de valeurs
unsigned long time;
 
/////////////////////////////////////////////////////////////
 
void setup()
{
Serial.begin(9600);
// la communication radio
vw_setup(2000); // Bits par seconde (2000 = bonne portée. Si augmente, portée diminue
vw_set_tx_pin(3); // La broche 3 pour transmettre la DATA
// on lance le capteur de temp + hygro
Serial.println("DHTxx test!");
dht.begin();
Serial.println("Light Sensor Test"); Serial.println("");
/* Initialise le capteur TSL2561 */
if(!tsl.begin())
{
/* There was a problem detecting the ADXL345 ... check your connections */
Serial.print("Ooops, no TSL2561 detected ... Check your wiring or I2C ADDR!");
while(1);
}
/* Display some basic information on this sensor */
displaySensorDetails();
/* Setup the sensor gain and integration time */
configureSensor();
Serial.println("");
}
 
////////////////////////// le loooooooop ///////////////////////////////////////
 
 
void loop()
{
time = millis();
getTemp(time);
getLux(time);
//getMsgContent(time); //on l'imprime
sendMsg(time); // on doit assembler les valeurs en tableau de char
}
 
////////////////////////// les fonctions ///////////////////////////////////////
 
void getLux(long time)
{
if (time - latestSensingMillis > i2cSensingIntervalMillis){
//Serial.println("getting Lux value..");
sensors_event_t event;
tsl.getEvent(&event);
if (event.light)
{
luxValue=event.light;
// Serial.print(luxValue); Serial.println(" luxValue");
 
}
else
{
/* If event.light = 0 lux the sensor is probably saturated
and no reliable data could be generated! */
Serial.println("Lux Sensor overload");
}
latestSensingMillis = time;
return;
}
}
 
void getTemp(long time)
{
if (time - latestDHTSensingMillis > sensingDHTIntervalMillis){
//Serial.println("get");
tempValue = dht.readTemperature();
humidityValue = dht.readHumidity();
if (isnan(tempValue) || isnan(humidityValue))
Serial.println("capteur DHT injoignable!");
latestDHTSensingMillis = time;
return;
}
}
 
void sendMsg(long time)
{
int i=0;
if (time - latestSendingMillis > sendingIntervalMillis){
msg[0]=(buildMyValue(tempValue))[0];
msg[1]=(buildMyValue(tempValue))[1]; // ne marche que pour temp >= 10°C
msg[2]=(buildMyValue(humidityValue))[0];
msg[3]=(buildMyValue(humidityValue))[1]; // ne marche que pour humidité >= 10%
msg[4]=(buildMyValue(luxValue))[0];
msg[5]=(buildMyValue(luxValue))[1]; // ne marche que pour lux >= 10 et < 100
msg[6]='\0';
for (i = 0; i < strlen(msg); i++)
{
Serial.print(msg[i], HEX);
Serial.print(' ');
}
Serial.println();
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // On attend la fin de l'envoi du msg.
latestSendingMillis = time;
//delay(25);
}
}
 
char *buildMyValue(float value)
{
char buffer[40];
itoa(value, buffer, 10);
return buffer;
}
 
//============== fonctions du capteur de luminosité TSL2561 ===================================
 
void getRightValues(int value){
// fonction à écrire qui doit ajouter les 0 manquants dans l'array
return ;
}
 
 
// ============= by ADAFRUIT ==============
 
void displaySensorDetails(void)
{
sensor_t sensor;
tsl.getSensor(&sensor);
Serial.println("------------------------------------");
Serial.print ("Sensor: "); Serial.println(sensor.name);
Serial.print ("Driver Ver: "); Serial.println(sensor.version);
Serial.print ("Unique ID: "); Serial.println(sensor.sensor_id);
Serial.print ("Max Value: "); Serial.print(sensor.max_value); Serial.println(" lux");
Serial.print ("Min Value: "); Serial.print(sensor.min_value); Serial.println(" lux");
Serial.print ("Resolution: "); Serial.print(sensor.resolution); Serial.println(" lux");
Serial.println("------------------------------------");
Serial.println("");
delay(500);
}
 
/**************************************************************************/
/*
Configures the gain and integration time for the TSL2561
*/
/**************************************************************************/
void configureSensor(void)
{
/* You can also manually set the gain or enable auto-gain support */
// tsl.setGain(TSL2561_GAIN_1X); /* No gain ... use in bright light to avoid sensor saturation */
// tsl.setGain(TSL2561_GAIN_16X); /* 16x gain ... use in low light to boost sensitivity */
tsl.enableAutoRange(true); /* Auto-gain ... switches automatically between 1x and 16x */
/* Changing the integration time gives you better sensor resolution (402ms = 16-bit data) */
//tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_13MS); /* fast but low resolution */
tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_101MS); /* medium resolution and speed */
// tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_402MS); /* 16-bit data but slowest conversions */
 
/* Update these values depending on what you've set above! */
Serial.println("------------------------------------");
Serial.print ("Gain: "); Serial.println("Auto");
Serial.print ("Timing: "); Serial.println("101 ms");
Serial.println("------------------------------------");
}
 
</pre>
===récepteur pour capteur DHT seul===
Emailconfirmed
471
modifications