Télémètre Ultra-son 3 dimensions Vers

Programme: Télémètre Ultra-son 3 dimensions. Version: 3.0. Auteur: ADMEL ... LiquidCrystal LCD(2,3,4,5,6,7);//création de l'objet LCD char boutMode=8 ...
42KB taille 0 téléchargements 47 vues
/* ************************************************************************* Programme: Télémètre Ultra-son 3 dimensions Version: 3.0 Auteur: ADMEL Date: 03/10/2016 Description: Télémètre US 3 modes de fonctionnement ->mesure distance ->mesure aire ->mesure volume Mode choisi en appuyant sur un bouton Prise de la mesure en appuyant sur un autre bouton ************************************************************************** */ #include LiquidCrystal LCD(2,3,4,5,6,7);//création de l'objet LCD char boutMode=8;//déclaration et initialisation du bouton pour le mode char boutMesure=9;//déclaration et initialiation du bouton pour la mesure char pinUStrigger=10; //Déclencheur module US sur le pin 2 char pinUSecho=11; //Echo module US sur le pin 3 char char char char

menu=0;//variable de configuration du mode menuDistance=0;//variable pour les sous-menus menuSurface=0; menuVolume=0;

boolean affichageDistance=0;//affichage fait ou non boolean affichageSurface=0; boolean affichageVolume=0; boolean mesureDistance=0;//mesure réalisée ou non char mesureSurface=0; char mesureVolume=0; float float float float float

resultatS1;//variable pour stockage résultat mesure resultatS2; resultatV1; resultatV2; resultatV3;

void setup() { Serial.begin(9600); pinMode(boutMode,INPUT_PULLUP);//bouton NC en pull-up pinMode(boutMesure,INPUT_PULLUP); pinMode(pinUStrigger,OUTPUT); //Définition des pins en sortie et entrée pinMode(pinUSecho,INPUT); digitalWrite(pinUStrigger,LOW); //Mettre la sortie trigger à l'état bas LCD.begin(16,2);//initialisaion de la communication LCD.clear();//efface l'affichage LCD.setCursor(0,0);//Message d'intro LCD.print("Telemetre U-Son"); LCD.setCursor(0,1); LCD.print("Tridimensionnel"); delay(2500); LCD.clear();//efface l'affichage LCD.setCursor(0,0);//Message d'intro LCD.print("Selection Mode"); LCD.setCursor(0,1); LCD.print("Appuyer sur BLEU"); } void loop() { boolean etatBoutMode=digitalRead(boutMode);//Lecture de l'état du bouton Mode menu=menu-etatBoutMode+1;//en mode INPUT_PULLUP état à l'état haut au repos 1

if(menu==1)//condition pour mode DISTANCE { if(!affichageDistance)//si affichage pas fait { LCD.setCursor(0,0);//séquence pour afficher message LCD.clear(); LCD.print("Mesure Distance"); LCD.setCursor(0,1); LCD.print("Appuyer ROUGE"); affichageDistance=1; } boolean etatBoutMesure=digitalRead(boutMesure);//Lecture état bouton Mesure menuDistance=menuDistance-etatBoutMesure+1;//en mode INPUT_PULLUP état à l'état haut au repos if(menuDistance==1 & mesureDistance==0)//condition pour réaliser la mesure { float resultat=mesure();//appel du résultat de la fonction mesure LCD.clear(); LCD.print("Mesure Distance"); LCD.setCursor(0,1); LCD.print(resultat); LCD.setCursor(5,1); LCD.print("cm"); mesureDistance=1; } if(menuDistance>1) { mesureDistance=0;//séqence pour une nouvelle mesure menuDistance=0; affichageDistance=0; } } if(menu==2)//condition pour mode SURFACE { if(!affichageSurface)//si affichage pas fait { LCD.setCursor(0,0);//séquence pour afficher message LCD.clear(); LCD.print("Mesure Surface"); LCD.setCursor(0,1); LCD.print("Appuyer ROUGE"); affichageSurface=1; } boolean etatBoutMesure=digitalRead(boutMesure);//Lecture état bouton Mesure menuSurface=menuSurface-etatBoutMesure+1;//en mode INPUT_PULLUP état à l'état haut au repos if(menuSurface==1 & mesureSurface==0)//condition pour réaliser la mesure { resultatS1=mesure();//appel du résultat de la fonction mesure LCD.clear(); LCD.print(resultatS1); LCD.setCursor(6,0); LCD.print("cm"); LCD.setCursor(0,1); LCD.print("Appuyer ROUGE"); mesureSurface=1; } if(menuSurface==2 & mesureSurface==1)//condition pour réaliser la mesure { resultatS2=mesure();//appel du résultat de la fonction mesure LCD.clear(); LCD.print(resultatS1); LCD.setCursor(5,0); LCD.print("X"); LCD.setCursor(6,0); 2

LCD.print(resultatS2); LCD.setCursor(11,0); LCD.print("cm"); delay(1000); LCD.setCursor(0,1); LCD.print(resultatS1*resultatS2/10000); LCD.setCursor(5,1); LCD.print("m^2"); mesureSurface=2; } if(menuSurface>2) { mesureSurface=0;//séqence pour une nouvelle mesure menuSurface=0; affichageSurface=0; } } if(menu==3)//condition pour mode VOLUME { if(!affichageVolume)//si affichage pas fait { LCD.setCursor(0,0);//séquence pour afficher message LCD.clear(); LCD.print("Mesure Volume"); LCD.setCursor(0,1); LCD.print("Appuyer ROUGE"); affichageVolume=1; } boolean etatBoutMesure=digitalRead(boutMesure);//Lecture état bouton Mesure menuVolume=menuVolume-etatBoutMesure+1;//en mode INPUT_PULLUP état à l'état haut au repos if(menuVolume==1 & mesureVolume==0)//condition pour réaliser la mesure { resultatV1=mesure();//appel du résultat de la fonction mesure LCD.clear(); LCD.print(resultatV1); LCD.setCursor(5,0); LCD.print("cm"); LCD.setCursor(0,1); LCD.print("Appuyer ROUGE"); mesureVolume=1; } if(menuVolume==2 & mesureVolume==1)//condition pour réaliser la mesure { resultatV2=mesure();//appel du résultat de la fonction mesure LCD.clear(); LCD.print(resultatV1); LCD.setCursor(6,0); LCD.print("X"); LCD.setCursor(8,0); LCD.print(resultatV2); LCD.setCursor(13,0); LCD.print("cm"); LCD.setCursor(0,1); LCD.print("Appuyer ROUGE"); mesureVolume=2; } if(menuVolume==3 & mesureVolume==2)//condition pour réaliser la mesure { resultatV3=mesure();//appel du résultat de la fonction mesure LCD.setCursor(15,0); LCD.print("x "); LCD.setCursor(0,1); ");//efface ligne 2 uniquement LCD.print(" LCD.setCursor(0,1); LCD.print(resultatV3); 3

LCD.setCursor(7,1); LCD.print("="); delay(1000); LCD.setCursor(9,1); LCD.print(resultatV1*resultatV2*resultatV3/1000000); LCD.setCursor(13,1); LCD.print("m^3"); mesureVolume=3; } if(menuVolume>3) { mesureVolume=0;//séqence pour une nouvelle mesure menuVolume=0; affichageVolume=0; } } if(menu>3)//condiion pour mode 3 { menu=1;//séquence pour retour au mode distance affichageDistance=0; affichageSurface=0; affichageVolume=0; mesureDistance=0;//permet une nouvelle mesure menuDistance=0; mesureSurface=0; menuSurface=0; mesureVolume=0; menuVolume=0; } delay(200); } float mesure()//fonction de type float pour renvoyer un décimal { unsigned long duration; //Déclaration varaible de durée const int VITESSE=340; //Constante de la vitesse du son dans l'air float facteurCorrectif=1.00; //facteur correctif de distance digitalWrite(pinUStrigger,HIGH);//envoie de l'impulsion delayMicroseconds(10);//délai de 10µs digitalWrite(pinUStrigger,LOW);//retour à l'état bas duration=pulseIn(pinUSecho,HIGH);//Lecture du temps à l'état haut en microsecondes duration=duration/2;//temps divisé par deux pour trajet simple float temps=duration/1000000.0;//converti en seconde float distance=temps*VITESSE*100;//Calcul de la distance en cm distance=(distance+10.95)*facteurCorrectif; //correction de la distance return distance; }

4