(Ce montage donne un affichage sur 3 LED de la distance qui le sépare d'un obstacle.) |
(→Code) |
||
Ligne 18 : | Ligne 18 : | ||
===Explication=== | ===Explication=== | ||
===Schéma Fritzing=== | ===Schéma Fritzing=== | ||
- | === | + | |
- | + | // definition des pins | |
- | + | int led1 = 8; | |
- | // | + | int led2 = 12; |
- | </ | + | int led3 = 13; |
+ | int commande = 7; | ||
+ | int echo = 4; | ||
+ | |||
+ | // Fonction de setup, affectations en entree ou sortie des pins I/O | ||
+ | void setup() { | ||
+ | pinMode(led1, OUTPUT); | ||
+ | pinMode(led2, OUTPUT); | ||
+ | pinMode(led3, OUTPUT); | ||
+ | pinMode(commande, OUTPUT); | ||
+ | pinMode(echo, INPUT); | ||
+ | } | ||
+ | |||
+ | /* Fonction de chenillard, parametrable en rentrant un entier | ||
+ | correspondant au temps d'attente en millisecondes entre chaque | ||
+ | decalage de led */ | ||
+ | void chenillard(int tempo) | ||
+ | { | ||
+ | unsigned int cheni=0; | ||
+ | do | ||
+ | { | ||
+ | if(cheni==0) | ||
+ | { | ||
+ | digitalWrite(led1, LOW); | ||
+ | digitalWrite(led2, HIGH); | ||
+ | digitalWrite(led3, HIGH); | ||
+ | }else if(cheni==1) | ||
+ | { | ||
+ | digitalWrite(led1, HIGH); | ||
+ | digitalWrite(led2, LOW); | ||
+ | digitalWrite(led3, HIGH); | ||
+ | }else if(cheni==2) | ||
+ | { | ||
+ | digitalWrite(led1, HIGH); | ||
+ | digitalWrite(led2, HIGH); | ||
+ | digitalWrite(led3, LOW); | ||
+ | |||
+ | } | ||
+ | delay(tempo); | ||
+ | cheni++; | ||
+ | }while(cheni!=3); | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | // ******* MAIN ******* | ||
+ | |||
+ | |||
+ | |||
+ | // declaration initalisation des variables internes compteur et temps. | ||
+ | unsigned int ctr=0, time=0; | ||
+ | |||
+ | |||
+ | |||
+ | // Tache de fond | ||
+ | |||
+ | void loop() { | ||
+ | |||
+ | // EMMISION ECHO | ||
+ | /* Tant que le capteur ne retoune pas d'echo, on envoie une trame | ||
+ | d'ultrasons toutes les 65ms, un intervalle inferieur causerai des | ||
+ | interferences entres deux trames successives */ | ||
+ | |||
+ | while(digitalRead(echo)==LOW) | ||
+ | { | ||
+ | if(time==65) //emmission test toutes les 65ms | ||
+ | { | ||
+ | digitalWrite(commande, HIGH); | ||
+ | delay(1); //impulsion 1 ms | ||
+ | digitalWrite(commande, LOW); | ||
+ | time=0; | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | time++; | ||
+ | delay(1); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // CALCUL TEMPS ECHO EN MS | ||
+ | /*Comptage des millisecondes durant lesquelles le signal | ||
+ | d'echo reste a l'etat haut. C'est l'image du temps que mets | ||
+ | la trame d'ultrasons pour faire l'aller-retour entre | ||
+ | l'emetteur/capteur et l'obstacle */ | ||
+ | |||
+ | if(digitalRead(echo)==HIGH) | ||
+ | { | ||
+ | while(digitalRead(echo)==HIGH) | ||
+ | { | ||
+ | ctr++; | ||
+ | delay(1); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /* En fonction du temps d'echo, donc de la distance de l'objet, | ||
+ | affichage de différentes combinaisons avec les leds, actives sur | ||
+ | etat bas : digitalWrite(led,LOW) allume la led */ | ||
+ | |||
+ | if(ctr<=1) // affichage pour 0 ou 1ms | ||
+ | { | ||
+ | chenillard(70); | ||
+ | } | ||
+ | else if((ctr>1)&&(ctr<=2)) //affichage pour 2ms | ||
+ | { | ||
+ | chenillard(200); | ||
+ | }else if((ctr>2)&&(ctr<=3)) //affichage pour 3ms | ||
+ | { | ||
+ | digitalWrite(led1,LOW); | ||
+ | digitalWrite(led2, LOW); | ||
+ | digitalWrite(led3, LOW); | ||
+ | } | ||
+ | else if((ctr>3) && (ctr<=4)) //affichage pour 4ms | ||
+ | { | ||
+ | digitalWrite(led1, LOW); | ||
+ | digitalWrite(led2, LOW); | ||
+ | digitalWrite(led3, HIGH); | ||
+ | } | ||
+ | else if((ctr>4) && (ctr<=5)) //affichage pour 5ms | ||
+ | { | ||
+ | digitalWrite(led1, LOW); | ||
+ | digitalWrite(led2, HIGH); | ||
+ | digitalWrite(led3, HIGH); | ||
+ | }else if(ctr>5) // //affichage pour plus de 5ms | ||
+ | { | ||
+ | digitalWrite(led1, HIGH); | ||
+ | digitalWrite(led2, HIGH); | ||
+ | digitalWrite(led3, HIGH); | ||
+ | } | ||
+ | |||
+ | ctr=0; // initialistation compteur pour mesure suivante | ||
+ | } | ||
==Liens avec d'autres projets arduino== | ==Liens avec d'autres projets arduino== |
Sommaire |
Évaluation de la distance entre un obstacle et le capteur a ultrason.
// definition des pins int led1 = 8; int led2 = 12; int led3 = 13; int commande = 7; int echo = 4;
// Fonction de setup, affectations en entree ou sortie des pins I/O void setup() {
pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(commande, OUTPUT); pinMode(echo, INPUT);
}
/* Fonction de chenillard, parametrable en rentrant un entier correspondant au temps d'attente en millisecondes entre chaque decalage de led */ void chenillard(int tempo) {
unsigned int cheni=0; do { if(cheni==0) { digitalWrite(led1, LOW); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); }else if(cheni==1) { digitalWrite(led1, HIGH); digitalWrite(led2, LOW); digitalWrite(led3, HIGH); }else if(cheni==2) { digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, LOW); } delay(tempo); cheni++; }while(cheni!=3);
}
// ******* MAIN *******
// declaration initalisation des variables internes compteur et temps.
unsigned int ctr=0, time=0;
// Tache de fond
void loop() {
// EMMISION ECHO /* Tant que le capteur ne retoune pas d'echo, on envoie une trame d'ultrasons toutes les 65ms, un intervalle inferieur causerai des interferences entres deux trames successives */
while(digitalRead(echo)==LOW) { if(time==65) //emmission test toutes les 65ms { digitalWrite(commande, HIGH); delay(1); //impulsion 1 ms digitalWrite(commande, LOW); time=0; } else { time++; delay(1); } }
// CALCUL TEMPS ECHO EN MS /*Comptage des millisecondes durant lesquelles le signal d'echo reste a l'etat haut. C'est l'image du temps que mets la trame d'ultrasons pour faire l'aller-retour entre l'emetteur/capteur et l'obstacle */
if(digitalRead(echo)==HIGH) { while(digitalRead(echo)==HIGH) { ctr++; delay(1); } }
/* En fonction du temps d'echo, donc de la distance de l'objet, affichage de différentes combinaisons avec les leds, actives sur etat bas : digitalWrite(led,LOW) allume la led */
if(ctr<=1) // affichage pour 0 ou 1ms { chenillard(70); } else if((ctr>1)&&(ctr<=2)) //affichage pour 2ms { chenillard(200); }else if((ctr>2)&&(ctr<=3)) //affichage pour 3ms { digitalWrite(led1,LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); } else if((ctr>3) && (ctr<=4)) //affichage pour 4ms { digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, HIGH); } else if((ctr>4) && (ctr<=5)) //affichage pour 5ms { digitalWrite(led1, LOW); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); }else if(ctr>5) // //affichage pour plus de 5ms { digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); } ctr=0; // initialistation compteur pour mesure suivante
}
chercher ici : http://wikidebrouillard.org/index.php/Catégorie:Arduino
quelles peuvent être les applications technologiques de ce montage, ou est-ce qu'on retrouve des programmes qui y ressemble ?
© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique