Dans le cadre de ce PFE, prototyper un montage incluant: capteur de distance à ultrason, capteur de luminosité, capteur de pression atmosphérique, capteur de flexion, thermistance en tous cas le plus de capteurs possibles en rapport avec votre projet.
Trouver une représentation graphique abstraite cohérente avec le type d’informations fournies par le capteur, mise en forme avec Processing.
Code Arduino
//digital
const int sonar = 6; //analog
const int lux = 0;
const int temp = 1;
long cm;
long pulse;
float val_sonar;
float val_lux;
float val_temp;
float tab_temp[] = {450,450,450,450,450,450,450,450,450,450};
float moy_temp = 0;
if (message != null){ //si le message n’est pas nul
String[] data = message.split(« , »); //on divise le message par rapport aux « , »
//récupération des données
if (data[0].charAt(0) == HEADERSONAR){
sonar = float(data[1]);
}else if(data[0].charAt(0) == HEADERLUX){
lux = float(data[1]);
}else if(data[0].charAt(0) == HEADERTEMP){
temp = float(data[1]);
}
}
}
//itération
void draw(){
diametre = int(sonar); //le diamètre des billes dépend du capteur sonar
fill(0, 0, 0, 20); //couleur pour le rectangle (noir avec un alpha de 20/255)
rect(0, 0, largeur, hauteur); //on dessine un rectangle (pour effacer les billes)
if (random(0, 100) < (lux/1024 * 50)) { //fréquence d’apparition des billes
int l = int(random(rayon, largeur-rayon)); //position x//d’une bille
int h = int(random(rayon, hauteur-rayon)); //position y d’une bille
if (temp > 0) {
fill(170+((temp-450)*3), 255, 255, 255); //couleur en fonction de la température
noStroke(); //sans contour
ellipse(l, h, diametre, diametre); //on dessine la bille
Syhamo
Cédric Lanoir et Antonin Segault
Dans le cadre de ce PFE, prototyper un montage incluant:
capteur de distance à ultrason, capteur de luminosité,
capteur de pression atmosphérique,capteur de flexion, thermistance en tous cas le plus de capteurs possibles en rapport avec votre projet.Trouver une représentation graphique abstraite cohérente avec le type d’informations fournies par le capteur, mise en forme avec Processing.
Code Arduino
//digital
const int sonar = 6;
//analog
const int lux = 0;
const int temp = 1;
long cm;
long pulse;
float val_sonar;
float val_lux;
float val_temp;
float tab_temp[] = {450,450,450,450,450,450,450,450,450,450};
float moy_temp = 0;
void setup() {
Serial.begin(9600);
pinMode(sonar, INPUT);
}
void loop() {
pulse = pulseIn(sonar, HIGH);
cm = (pulse / 147) * 2.54;
val_sonar = cm;
val_lux = analogRead(lux);
val_temp = analogRead(temp);
for(int i = 0; i < 9; i++){
tab_temp[i] = tab_temp[i+1];
}
tab_temp[9] = val_temp;
moy_temp = 0;
for(int i = 0; i < 9; i++){
moy_temp += tab_temp[i];
}
moy_temp /= 10;
Serial.print(« S »);
Serial.print(« , »);
Serial.print(val_sonar);
Serial.print(« , »);
Serial.println();
Serial.print(« L »);
Serial.print(« , »);
Serial.print(val_lux);
Serial.print(« , »);
Serial.println();
Serial.print(« T »);
Serial.print(« , »);
Serial.print(moy_temp);
Serial.print(« , »);
Serial.println();
delay(100);
}
Code Processing
import processing.serial.*; //librairie pour le port série
Serial myPort; //instance port série
int diametre = 20; //init du diamètre des billes
int rayon = int(diametre / 2); //rayon des billes
int hauteur = 768; //hauteur de l’écran
int largeur = 1366; //largeur de l’écran
float sonar = 0; //init valeur du sonar
float lux = 0; //init valeur de la photoresistance
float temp = 450; //init valeur de la thermistance
//entêtes
char HEADERSONAR = ‘S';
char HEADERLUX = ‘L';
char HEADERTEMP = ‘T';
short LF = 10; //saut
//au lancement
void setup() {
size(largeur, hauteur); //résolution
colorMode(HSB, 255, 255, 255, 255); //mode colorimétrique
background(0); //couleur de fond (noir)
myPort = new Serial(this, « COM3″, 9600); //init port série
}
//quand on a un évènement série
void serialEvent(Serial p){
String message = myPort.readStringUntil(LF); //lecture jusqu’à saut
if (message != null){ //si le message n’est pas nul
String[] data = message.split(« , »); //on divise le message par rapport aux « , »
//récupération des données
if (data[0].charAt(0) == HEADERSONAR){
sonar = float(data[1]);
}else if(data[0].charAt(0) == HEADERLUX){
lux = float(data[1]);
}else if(data[0].charAt(0) == HEADERTEMP){
temp = float(data[1]);
}
}
}
//itération
void draw(){
diametre = int(sonar); //le diamètre des billes dépend du capteur sonar
fill(0, 0, 0, 20); //couleur pour le rectangle (noir avec un alpha de 20/255)
rect(0, 0, largeur, hauteur); //on dessine un rectangle (pour effacer les billes)
if (random(0, 100) < (lux/1024 * 50)) { //fréquence d’apparition des billes
int l = int(random(rayon, largeur-rayon)); //position x //d’une bille
int h = int(random(rayon, hauteur-rayon)); //position y d’une bille
if (temp > 0) {
fill(170+((temp-450)*3), 255, 255, 255); //couleur en fonction de la température
noStroke(); //sans contour
ellipse(l, h, diametre, diametre); //on dessine la bille
}
}
}