Ce montage consiste à réaliser un capteur/détecteur de distance/obstacle à ultrason à base de PIC16F628 avec une portée qui peut atteindre les 2 mètres.
Les ultrasons sont couramment employés en robotique et ce, afin d’effectuer des mesures de distance et/ou de détecter des objets quelconques en état statique ou en mouvement.
Programme
Télechargement :
Schéma + Routage
Programme en mikropascal
Les ultrasons sont couramment employés en robotique et ce, afin d’effectuer des mesures de distance et/ou de détecter des objets quelconques en état statique ou en mouvement.
Dans le but d’assurer un cycle autonome à notre robot nous avons eu recours à cette qualité des ultrasons tel que :
- Détection indépendante du matériau, de la couleur, de la surface et de la taille.
- Fonctionnement en environnement poussiéreux, sale, brumeux, fortement éclairé.
- Détection des objets brillants ou transparents.
- Large gamme de mesure de quelques mm à plus de 5 mètres.
Principes de fonctionnement des ultrasons :
Les
capteurs ultrasons fonctionnent en mesurant le temps de retour d’une
onde sonore inaudible par l’homme émise par le capteur. La vitesse du
son étant à peu près stable, on en déduit la distance à l’obstacle.
Les ultrasons sont des ondes infra-acoustique, qui oscillent à des fréquences supérieures au seuil acoustique.
Ceci est important à plusieurs niveaux :
- Le premier est que cette fréquence n’interfère pas avec le bruit audible produit par la majorité des corps physiques de notre environnement.
- La deuxième est que ces fréquences sont très précises, rapides et peuvent être personnalisées.
Les capteurs fournis ont souvent la forme d’une paire car il y a deux parties essentielles :
- L’émetteur
- Le récepteur
L’émetteur
émet un son à une fréquence définie et le récepteur collecte le son
répercuté par les obstacles. La distance aux objets est calculée par le
temps mis par le son pour revenir au récepteur
- Première partie : l’émission
La
fréquence du signal de l’émetteur couramment utilisé est égale à 40
KHz, sa production nécessite l’un des TIMER du microcontrôleur.
Cette fréquence n’est efficace que si l’émetteur ultrason est alimenté par une tension au moins égale à 12 V.
- Deuxième partie : la réception
- Le capteur transforme les variations de pression acoustique en signal électrique.
- Ce signal électrique analogique de quelques millivolts est amplifié.
- Le signal amplifié est mis en forme pour pouvoir être traité par microcontrôleur, le fonctionnement est signalé par un Led et un Buzzeur.
Le signal fourni par le capteur a une amplitude de l'ordre de 10 mV, celle ci diminue avec la distance.
Son
exploitation au niveau du microcontrôleur nécessite une amplitude de
quelques volts qui varie de 0 à 5 V donc nécessite son amplification.
Réalisation pratique Programme
////////////////////////////////////////////////////////////////////////////////
//****************** http://www.technologuepro.com **************************//
// ISET Nabeul --------+------- //
////////////////////////////////////////////////////////////////////////////////program ultrason;///Variables globales
// distancevar distance_H : byte;var distance_L : byte;/// flag obstaclevar obstacle: byte;Var distance : longint;/// RS232var dat : array[3] of char; // buffer for receving/sending messages
////////////////////////////////////////////////////////////////////////////////
//////////////////////////// RS232 //// /////////////////////////
////////////////////////////////////////////////////////////////////////////////procedure RS232;begin
if dat[0] = 'D' then
begindat[0] := '=' ;
dat[1]:=distance_H;
dat[2]:=distance_L;
UART1_Write_Text(dat);end;end;////////////////////////////////////////////////////////////////////////////////
//////////////////////////// Interruption //// /////////////////////////
////////////////////////////////////////////////////////////////////////////////procedure interrupt;begin
if PIR1.CCP1IF = 1 then begin obstacle:=1; end;if PIR1.RCIF =1 then begin dat[0]:=UART1_Read(); RS232; end;
PIR1:=0;end;////////////////////////////////////////////////////////////////////////////////
//////////////////////////// Initialisation //// /////////////////////////
////////////////////////////////////////////////////////////////////////////////procedure Initialisation;beginobstacle:=0;
trisb.7:=0;
portb.7:=0;
trisa:=0;
sound_init(porta,7);
UART1_Init(9600); // initialize UART1 moduledelay_ms(100);
porta:=0;
CMCON:=$07;
CCP1CON:=$05;
CCPR1L:=0;
CCPR1H:=0;
TMR1L:=0;
TMR1H:=0;
T1CON:=010100; // division par 2 horloge interne/2
// 1 ----> 4usINTCON:=$C0;
PIE1:=$24;end;////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Envoi Signal ultrason ///////////////////////////
////////////////////////////////////////////////////////////////////////////////procedure envoi_ultrason;beginT1CON.TMR1ON:=0;// desactivation timerTMR1L:=0;
TMR1H:=0;
CCP1CON:=$05;
T1CON.TMR1ON:=1;// demarrage timerportb.7:=1;delay_us(12);
portb.7:=0;delay_us(12);
portb.7:=1;delay_us(12);
portb.7:=0;delay_us(12);
portb.7:=1;delay_us(12);
portb.7:=0;delay_us(12);
portb.7:=1;delay_us(12);
portb.7:=0;delay_us(12);
portb.7:=1;delay_us(12);
portb.7:=0;delay_us(12);
portb.7:=1;delay_us(12);
portb.7:=0;delay_us(12);
portb.7:=1;delay_us(12);
portb.7:=0;delay_us(12);
portb.7:=1;delay_us(12);
portb.7:=0;delay_us(12);end;////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Reception echo ///////////////////////////
////////////////////////////////////////////////////////////////////////////////Var temp : longint;procedure lecture_echo;begin if obstacle=1 then begin distance_H := CCPR1H; distance_L := CCPR1L; porta:=$FF; distance:= 50*distance_H;
if distance < 100 then temp := 50; if distance > 100 then temp := 150; if distance > 150 then temp := 400; if distance > 200 then temp := 600; if distance > 300 then temp := 900; if distance > 400 then temp := 1200; if distance > 2000 then distance := 2000; sound_play(1000,15); vdelay_ms(temp); porta:=$00; end;end;////////////////////////////////////////////////////////////////////////////////
/////////////////////////// enclenchement ///////////////////////////
////////////////////////////////////////////////////////////////////////////////procedure Enclenchement;begin obstacle:=0; distance_H := 0; distance_L := 0; PIE1:=$24;end;////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Declenchement ///////////////////////////
////////////////////////////////////////////////////////////////////////////////procedure Declenchement;begin PIE1:=$20; T1CON.TMR1ON:=0;// desactivation timerend;////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Process ///////////////////////////
////////////////////////////////////////////////////////////////////////////////procedure Process;var i : byte ;begin for i:=0 to 3 do begin porta.i:=1; Enclenchement; envoi_ultrason; delay_ms(20); Declenchement; lecture_echo; delay_ms(20); end; for i:=0 to 3 do begin porta.i:=0; Enclenchement; envoi_ultrason; delay_ms(20); Declenchement; lecture_echo; delay_ms(20); end;end;
////////////////////////////////////////////////////////////////////////////////
//////////////////////////// Programme principal ////////////////////////////
////////////////////////////////////////////////////////////////////////////////begin Initialisation; while true do begin Process; end;end.
Télechargement :
Schéma + Routage
Programme en mikropascal
Aucun commentaire:
Enregistrer un commentaire