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

}

}

}