• version 0.0
    06 Mars 2014
    rev 12/03/2014


    PIC 18F26K22 , Mesure de distance par ultrasons
    Afficheur Nokia et Module HC-SR04 ultrasonic sensor


    usage d'un PIC18F26K22 en DIP28 et du Pickit2 Microchip pour charger l'executable
    Environnemen t: MPLAB IDE V8.92 et C18 v3.45.00

    Testé avec oscillateur interne Fosc=16Mhz

    datasheet HCSR04

    images/HR_SR04_module_Connections.jpg images/HC_SR04_back.jpg images/HC-SR04_Timming.jpg
    Miniinthebox or others.. Back side timing


    Liaisons PIC <-> Module HC-SR04



    Un premier test avec Echo sur RB0 et mode pooling , sans interruption donne déja de bon resultats
    mais la solution USAGE du mode capture CCP1 est bien adaptée à ce cas de figure.

    Sur ce PIC18F26K22, l'entrée CCP1 est RC2
    Timer1 est associé au mode capture
    Initilalisé à 0, juste apres l'envoi de la pulse trigger ,qui doit durer 10µS
    suivit d'un envoi de 8 pulses à 40Khz par le transducteur Emetteur
    sitot apres, le signal Echo passe de suite à 1 ..
    le module se met en ecoute via le transducteur recepteur ...
    des reception de l'Echo par le recepteur, le signal de sortie Echo retombe à 0.
    Il faut donc armer la capture sur le front Descendant
    Ce qui donne le timming decrit ci dessus..
    Avec FOSC interne de 16MHZ le cycle de base est 4:/16 = 1/4 de µS (0,25µS)
    Timer1 16 bits utilisé en direct ( Prescaler=1) compte le nombre de cycles entre la fin de l'envoi des 8 pulses à 40Khz
    et le front descendant du signal ECHO, en effet il ne faudrait pas ecouter les pulses d'envoi!!
    Il est prevu de compter les eventuels debordement du timer1!
    On a alors la relation suivante : 5.88 µS / mm parcouru à 20°C (340M/sec)

    Rajout d'une mesure de temperature air ambiant , via un LM35DZ
    Entre ADC RA0 du PIC18F avec +Vref interne de 1,024V pour avoir 1mV=1point=0,1°C
    Mesure directe ADC/10 en degres celcius soit 1024 points pour 102,4°C
    La mesure est filtree exponentiellement avec un facteur de 0,1.(assez energique !)
    Car on utilise cette mesure pour modifier la valeur Vitesse du son dans l'air f(temperature)
    Excel me donne l'equation de parametrage à appliquer: y = 0,5803x + 328,39,
    et permet de reactualiser le coefficient de mise à l'echelle en fonction de la temperature.

    Rajout d'un filtrage arithmetique glissant sur les 8 dernieres mesures de distance.
    pour ameliorer la stabilité de mesure

    Delta maximal de 0,35% sur 1,7M (observé sur 1 minute de mesure ) 60 mesures

    fichier xls


    RB7 et RB6 reste libres pour l' ICSP
    Usage du Pickit2 (mon Pickit3 utilisé par ailleurs!)
    RC6 utilisé comme sortie Tx UART 19200,8,N,1-> module MAX3222 , alimenté en 3,3V!!-> PC COM2

    Resultat sur terminal RS232 :




    Running ...

    images/HC-SR04_Proto_140306.jpg images/Distance_Nokia.jpg
    prototype de test HC-SR504 affchage sur nokia 5110 (et UART !)

    Le programme:
    Initialisations :
    Hardware,UART,Nokia,Timer3,Timer1,mode Capture CCP1, ADC RA0
    Mesure initiale Temp Ambiante = init filtrage exponentiel
    Boucle:
    Mesure Temperature ambiante LM35DZ et ADC0
    Remplissage de la pile de mesure Distance FILO (First In,Last Out) = Init Filtrage Arithmetique
    Calcul vitesse du Son à cette temperature
    Armement trigger du HC-SR04
    Le Lancement de la salve de 8 pulses 40Khz se fiat en interne au module !
    Armement capture CCP1 sur front descendant Echo
    Empilage mesure brute dans la FILO
    Recuperation moyenne de la pile
    Tant que la Pile n'est pas pleine on n'affiche pas la mesure ..
    il faut attendre e 8 x150 mS = soit 1,2s au debut seulement du programme

    Recupere la moyenne des 8 dernieres mesures ( exprimees en Cycles)
    Calcule la duree en µS soit /8 (car 8 mesures) et /4 (car 1µS=4cycles) soit division par 32 ou 5 decalages à droite
    Distance= Duree x Vitesse reactualisée
    On divise par 2 car ALLER + RETOUR
    On divise encore par 1.000.000 car duree en en µS et non en Seconde, pour obtenir des Metres.
    Affichage sur le LCD de la Temp.Amb,de la vitesse son reactualisee et de la distance avec resolution de 1mm.
    De meme via l'UART RS232 !!!
    goto boucle

    Amelioration possible:
    Faire intervenir la pression atmospherique : delta maximum observale 980 à 1040hPa soit environ 6%
    L'ideal serait une position d'etalonnage : ex mesure à une distance de 1,000M et faire une mesure ratiometrique
    se qui eliminerait le besoin de corrections en fonction de la temperature et de la pression

    Projet complet en MPLAB IDE V8.92 et C18 v 3.45

    Liste des fichiers : 18F26K22_HC-SR04_Ultrasons.htm
    Zip du projet :_18F26K22_HC-SR04_Ultrasons_140307.zip
    Avec source documenté !

    modif du 12/03/2014
    Diminution du delai entre trigger et debut de comptage , passé de 195 à 100µS
    Mesure OK de 30mm à plus de 3900mm!!!

    Place aux jeunes avec cette tres interessante demo


    paulfjujo@free.fr


    Retour à l'index general