Modifications

Cestpasidiot

98 octets ajoutés, 16 septembre 2015 à 13:26
récepteur pour capteur DHT + luxmètre : + détecteur de mouvement
Le dispositif sera présenté dans le cadre de ces deux évènements :
* Le FESTIVAL D les 26 et 27 septembre* (encadrement Laurent Neyssensas & Arnaud LE ROI)
* Le Boot camp design Make de l’IRT JV le jeudi 8 octobre* (encadrement Laurent Neyssensas)
Utilisation de la librairie [https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library NeoPixel].
Exemple en français sur le site de [http://mchobby.be/wiki/index.php?title=NeoPixel-UserGuide McHobby.be]
 
* Ajouter un condensateur 1000uF en parallèle entre le pôle - et le pole +
* Ajouter une résistance 470Ohm (jaune violetmarron) en série sur la ligne + (fil rouge)
==assemblage de code fonctionnel==
=== récepteur émetteur pour capteur DHT + luxmètre + télémètre ===
<pre>
#include <VirtualWire.h> // Vous devez télécharger et installer la librairie VirtualWire.h dans votre dossier "/libraries" !
#include <Adafruit_Sensor.h>
#include <Adafruit_TSL2561_U.h>
#include <NewPing.h> // pour le télémètre DYP-ME007
 
// les broches et paramètre du télémètre
#define TRIGGER_PIN 12 // broche reliée au trigger du télémètre.
#define ECHO_PIN 11 // broche reliée à l'echo du télémètre.
#define MAX_DISTANCE 99 // distance maximale évaluée (en centimeters).
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
 
// les broches des capteurs
float tempValue=2000; // variable de température
float humidityValue=6000; // variable % hygrométrie de l'air
unsigned int luxValue=48; unsigned int distanceValue=10;
// unsigned int sensLight = 0 ; // variable dédiée au niveau lumièe en lux
// unsigned int sensProx = 0 ; // variable de distance
{
time = millis();
getTemp(time);// temp & humidité
getLux(time);
//getMsgContent(time); //on l'imprime
getDistance(time);
sendMsg(time); // on doit assembler les valeurs en tableau de char
}
}
latestSensingMillis = time;
return;
}
}
 
void getDistance(long time)
{
if (time - latestDHTSensingMillis > i2cSensingIntervalMillis){
unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS).
if ((uS / US_ROUNDTRIP_CM)>10){ // pour filtrer les valeurs < à 10 et ne pas décaler le registre d'envoi
distanceValue=(uS / US_ROUNDTRIP_CM);
};
return;
}
void getTemp(long time)
{
if (time - latestDHTSensingMillis latestSensingMillis > sensingDHTIntervalMillis){
//Serial.println("get");
tempValue = dht.readTemperature();
}
}
 
void sendMsg(long time)
msg[4]=(buildMyValue(luxValue))[0];
msg[5]=(buildMyValue(luxValue))[1]; // ne marche que pour lux >= 10 et < 100
msg[6]=(buildMyValue(distanceValue))[0]; msg[7]=(buildMyValue(distanceValue))[1]; // ne marche que pour lux >= 10 et < 100 msg[8]='\0';
for (i = 0; i < strlen(msg); i++)
{
//============== fonctions du capteur de luminosité TSL2561 ===================================
 
void getRightValues(int value){
// fonction à écrire qui doit ajouter les 0 manquants dans l'array
return ;
}
</pre>
===récepteur pour capteur DHT seul===
=== récepteur pour capteur DHT + luxmètre + télémètre + détecteur de mouvement ===
<pre>
#include <VirtualWire.h> // librairie radio
#define RADIO_PIN 3 // broche DATA du récepteur RF
 
// message reçu.
float tempValue = 0;
float humidityValue = 0;
int luxValue = 0;
float distanceValue = 0;
 
 
void setup() {
Serial.begin(9600);
vw_setup(2000); // Bits par seconde
vw_set_rx_pin(RADIO_PIN); // broche DATA du récepteur
vw_rx_start();
Serial.println("Virtual wire started");
}
 
void loop() {
// Get current button state.
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
String ficelle="";
if (vw_get_message(buf, &buflen)) // On test afin de savoir si un message est reçu.
{
int i;
int nombre;
//Serial.println("nouveau msg");
for (i = 0; i <= buflen; i++)
{
ficelle+=char(buf[i]); // msg lettre par lettre. buf[4] == 5ème lettre envoyée
}
ficelle[buflen] = '\0';
Serial.print("ficelle : ");
Serial.println(ficelle);
tempValue=(ficelle.substring(0,2).toInt());
humidityValue=(ficelle.substring(2,4).toInt());
luxValue=(ficelle.substring(4,6).toInt());
distanceValue=(ficelle.substring(6,8).toInt());
motionValue=(ficelle.substring(8,9).toInt());
 
//Serial.print(luxValue);
//Serial.println(" lux");
}
}
 
//============== FIN DU LOOP ==============================
 
//============== emplacements de vos fonctions ==============================
 
 
//============== fonctions à ne pas modifier ==============================
 
 
 
</pre>
=== récepteur pour capteur DHT + luxmètre ===
<pre>
// This is a demonstration on how to use an input device to trigger changes on your neo pixels.
Serial.print("ficelle : ");
Serial.println(ficelle);
//juste après commence l'appel de fonction qui ajuste les variables
//on récupère une sous-partie du message ficelle.substring(0,2)
// qu'on convertit en entier .toInt()
tempValue=(ficelle.substring(0,2).toInt());
humidityValue=(ficelle.substring(2,4).toInt());
luxValue=(ficelle.substring(4,6).toInt());
//Serial.print(luxValue);
//Serial.println(" lux");
 
// ici vous pouvez appeler vos propres fonctions destinées à tirer partie des variables récupérées juste avant
 
 
}
}
//============== emplacements de vos fonctions ==============================
 
// ici toute la logique de votre programme
//============== fonctions à ne pas modifier ==============================
// ajouter ici les fonctions Adafruit pour Neopixel par exemple
</pre>
===émetteur récepteur pour capteur DHT seul=== Ce code est à mettre du côté émetteur. A utiliser avec le schéma de câblage afin de reproduire le dispositif au labo.
<pre>
#include <VirtualWire// This is a demonstration on how to use an input device to trigger changes on your neo pixels.h> // Vous devez télécharger et installer la librairie VirtualWireYou should wire a momentary push button to connect from ground to a digital IO pin.h dans votre dossier " When you/libraries" !#include "DHT/ press the button it will change to a new pixel animation.h" Note that you need to press the#include<stdlib.h>// button once to start the first animation!
// 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 capteurDHT dht(SENSDHTPIN, DHTTYPE);include <VirtualWire.h>
// les capteurs I2C // attention au #define RADIO_PIN 3,3V vs 5v//#DEFINE SENSLIGHTPIN = 5 ; // la broche dédiée au luxmètre => I2C//#DEFINE SENSPROXPIN = 6 ; // la broche dédiée au télémètreDATA du récepteur RF
// interrupteurmessage reçu.#define SWITCHPIN 2float tempValue = 0; float humidityValue = 0;// le compteur à incrémenterint luxValue = 0;int truc float hygrometryValue = 0;
// le tableau des valeurs
#define NUMVALUES 12
float sensValues[NUMVALUES];
//////////////////////////////////////////////// //message à envoyer.const char *msg="abcdefghijih"; // ses élements : les valeurs des capteurschar *tempValue; // variable de températurechar *humidityValue; // variable % hygrométrie de l'airchar *luxValue; unsigned int sensSwitch = 0 ; // variable de l'interrupteur // 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 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 latestSendingMillis = millis(); // la dernière fois qu'on a envoyé les valeurs unsigned long sensingIntervalMillis = 500; // intervalle de temps avant une nouvelle interrogation des capteurs unsigned long sensingDHTIntervalMillis = 2500; // intervalle de temps avant nouvelle interrogation capteur DHT unsigned long sendingIntervalMillis = 1500; // intervalle de temps avant nouvel envoi de valeurs unsigned long time; ///////////////////////////////////////////////////////////// void setup(){ Serial.begin(9600); // capteurs & inter pinMode(SWITCHPIN, INPUT_PULLUP); // pour l'interrupteur // la communication radio vw_setup(2000); // Bits par seconde (2000 = bonne portée. Si augmente, portée diminue vw_set_tx_pin vw_set_rx_pin(3RADIO_PIN); // La broche 3 pour transmettre la DATAdu récepteur vw_rx_start(); // on lance le capteur de temp + hygro Serial.println("DHTxx test!Virtual wire started"); dht.begin();
}
void loop() { //Get current button state. uint8_t buf[VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN; String ficelle=""; if (vw_get_message(buf, &buflen)) //On test afin de savoir si un message est reçu. { int i; int nombre; ////////////////////// le loooooooop /////////////////////////////////////// Serial.println("nouveau msg");void loop for (i = 0; i <= buflen; i++) { time ficelle+= millischar(buf[i]); // msg lettre par lettre. buf[4] == 5ème lettre envoyée } ficelle[buflen] = '\0'; getTemp Serial.print(time"ficelle : "); //getMsgContent Serial.println(timeficelle); //on juste après commence l'imprimeappel de fonction qui ajuste les variables sendMsg //on récupère une sous-partie du message ficelle.substring(time0,2); // qu'on doit assembler les valeurs convertit en tableau de charentier .toInt() tempValue=(ficelle.substring(0,2).toInt()); humidityValue=(ficelle.substring(2,4).toInt()); }
}
////////////////////////// les fonctions ///////////////////////////////////////============== FIN DU LOOP ==============================
void getTemp(long time) { float t; float h; if (time - latestDHTSensingMillis > sensingDHTIntervalMillis){ //Serial.println("get"); t = dht.readTemperature(); h = dht.readHumidity(); if (isnan(t) || isnan(h)) Serial.println("capteur DHT injoignable!"); else itoa(t, tempValue, 5); itoa(h, humidityValue, 5); latestDHTSensingMillis = time; return; Serial.println(" "); Serial.print("Temperature : "); Serial.println(t); Serial.print("Humidity : "); Serial.println(h); Serial.println(" "); latestDHTSensingMillis = time; return; }}========== emplacements de vos fonctions ==============================
void sendMsg(long time)
{
if (time - latestSendingMillis > sendingIntervalMillis){
//Serial.println("Msg");
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // On attend la fin de l'envoi du msg.
latestSendingMillis = time;
delay(25);
}
}
char buildMyTempValue(char tempValue){ return;}//============== fonctions à ne pas modifier ==============================
char charCipher(char entier)
{
char lettre='a';
switch(entier){
case '0':
break;
case '1':
lettre = 'b';
break;
case '2':
lettre = 'b';
break;
case '3':
lettre = 'b';
break;
case '4':
lettre = 'b';
break;
case '5':
lettre = 'b';
break;
case '6':
lettre = 'b';
break;
case '7':
lettre = 'b';
break;
case '8':
lettre = 'b';
break;
case '9':
lettre = 'b';
break;
}
return char(lettre);
}
</pre>
[[Catégorie:Projets]]=== code d'exmple pour le PIR (détecteur de mouvement infrarouge ===[[Catégorie:Edna]][[Catégoriehttps:Workshops]]//learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/using-a-pir
Emailconfirmed
471
modifications