Un radar (acronyme de Radio Detection and Ranging) est un système de détection et de mesure de la distance d'un objet à l'aide d'ondes radio. Il émet des ondes électromagnétiques, qui se propagent dans l’air ou dans l’environnement. Lorsqu’elles rencontrent un objet, une partie de ces ondes est renvoyée vers l’émetteur (ce phénomène est appelé réflexion ou retour d'écho).
Le radar analyse le temps écoulé entre l'émission de l'onde et sa réception, ce qui permet de calculer la distance de l'objet détecté. En fonction de la fréquence de l’onde, il peut également déterminer la vitesse (par effet Doppler) et parfois même la forme de l'objet.
Principaux Composants d'un Radar
Émetteur : Il génère et envoie les ondes radio dans l’environnement.
Récepteur : Il capte les ondes radio réfléchies par les objets.
Antenne : L'antenne permet à la fois d’émettre les ondes et de capter les ondes réfléchies.
Système de traitement : Il analyse les signaux reçus pour déterminer la position, la vitesse et parfois la forme de l’objet détecté.
Fonctions Principales d’un Radar
Détection : Localisation d’objets (avions, bateaux, véhicules, etc.).
Mesure de la distance : Calcul de la distance entre l'émetteur et l'objet.
Mesure de la vitesse : Grâce à l’effet Doppler, il peut aussi mesurer la vitesse de déplacement de l’objet.
Suivi d'objet : Un radar peut suivre les objets en mouvement et fournir en temps réel des informations sur leur position et leur vitesse.
Applications du Radar
Aéronautique et aviation : Utilisé pour la navigation des avions et la surveillance du trafic aérien.
Militaire : Pour la détection des missiles, des navires, des sous-marins, etc.
Automobile : Les radars sont utilisés dans les systèmes d’assistance à la conduite (comme le régulateur de vitesse adaptatif et le freinage d'urgence).
Météorologie : Les radars météorologiques sont utilisés pour détecter les précipitations, les tempêtes et les phénomènes climatiques extrêmes.
Marine : Utilisé sur les navires pour éviter les collisions et surveiller la navigation.
Dans ce projet, nous allons utiliser une carte Micro:bit pour gérer l'ensemble du système de détection d'objets à l'aide d'un capteur ultrason HC-SR04, d'une carte GPIO pour contrôler les composants et d'un servomoteur pour orienter le radar.
Étape 1 : Mise en place du système
Le capteur HC-SR04 se compose de deux parties :
Le module émetteur (Trig) qui émet des ondes ultrasonores.
Le module récepteur (Echo) qui capte les ondes réfléchies par un objet.
Le Micro:bit va utiliser les broches GPIO pour communiquer avec ces composants :
Trig (Trigger) : Cette broche envoie une impulsion courte pour activer l'émission des ondes ultrasonores.
Echo : Cette broche capte l'écho des ondes ultrasonores et mesure le temps nécessaire pour qu'elles reviennent.
Le servomoteur est également contrôlé par une broche GPIO, et il sert à faire pivoter le capteur en modifiant son angle à chaque cycle de mesure.
Étape 2 : Mesure de la distance avec le capteur HC-SR04
Le capteur HC-SR04 fonctionne en envoyant une impulsion de 10 µs sur la broche Trig. Cette impulsion déclenche l'émission d'ondes ultrasonores.
Une fois l'onde émise, elle se propage dans l'air et se reflète sur les objets rencontrés. Le temps de retour de l'écho est mesuré via la broche Echo. En fonction de ce temps, le Micro:bit peut calculer la distance de l'objet.
Étape 3 : Rotation du capteur avec le servomoteur
Le servomoteur permet de faire tourner le capteur sur un axe (généralement de gauche à droite). À chaque position du servomoteur, le capteur ultrason mesure la distance.
Pour cela, le Micro:bit va envoyer un signal au servomoteur pour tourner d'un certain angle (par exemple, de 0 à 180 degrés). Le capteur HC-SR04 effectuera une mesure à chaque angle et enverra la distance mesurée à l’ordinateur ou à un autre dispositif de traitement des données.
Carte Micro:bit :
Elle agit comme le contrôleur central. Elle gère la communication avec le capteur ultrason HC-SR04 et le servomoteur.
Capteur Ultrason HC-SR04 :
Il mesure la distance en envoyant des ondes ultrasonores et en mesurant le temps que met l'écho à revenir.
Carte GPIO :
Elle permet de contrôler les différents composants électroniques (par exemple le servomoteur).
Servomoteur :
Il permet de faire tourner le capteur ultrason à différentes positions pour effectuer une couverture de détection.
Ordinateur :
Il reçoit les données via le port série ou Wi-Fi et affiche les résultats (par exemple, sur une interface graphique comme Processing ou Python).
Câbles Dupont
Câbles de connexion utilisés pour relier les différents composants sur une breadboard.
Breadboard
C'est une plateforme de prototypage utilisée pour connecter les composants électroniques sans soudure.
Voici comment connecter les différents composants entre eux :
Micro:bit -> Capteur HC-SR04 :
Pin 2 à la broche Trig du HC-SR04.
Pin 1 à la broche Echo du HC-SR04.
GND de la Micro:bit à GND du HC-SR04.
5V de la Micro:bit à VCC du HC-SR04.
Micro:bit -> Servomoteur :
Pin 2 (Servo) à la broche de contrôle du servomoteur (généralement le signal PWM).
GND de la Micro:bit à GND du servomoteur.
5V de la carte GPIO à VCC du servomoteur.
Suivez ces étapes pour ajouter le code nécessaire :
1- Ouvrez l'éditeur MakeCode pour Micro:bit sur le site https://makecode.microbit.org/.
2- Créez un nouveau projet.
3- Cliquer sur Extension
4- Rechercher et ajouter l'extension "sonar" pour le capteur ultrason HC-SR04
5- Cliquez sur "Broches"
6- Choisir l'instruction régler position servo broche P0 à 180 pour commander le servomoteur :
6- Cliquez sur "Communication Série" pour choisir l'instruction "série écrire ligne" pour échanger les données entre la carte Micro:bit et l'ordinateur.
Voici le programme qui permet de :
1- calculer la distance entre le capteur HC-SR04 et l’objet détecté
2- faire tourner le servomoteur
3 - envoyer des données (position du servomoteur et la distance) de la carte ESP32 vers l’ordinateur.
Voici le programme Processing pour lire les données série de la carte Micro:bit et afficher un graphique radar :
1- Les données (angle, distance) sont envoyées à l'ordinateur.
2- L'ordinateur trace un graphique en temps réel représentant les obstacles détectés dans l'arc balayé.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# Python + Microbit-based Radar Plotter # # ** Works with any motor that outputs angular rotation # ** and with any distance sensor (HC-SR04, VL53L0x,LIDAR) # import numpy as np import matplotlib matplotlib.use('TkAgg') import matplotlib.pyplot as plt from matplotlib.widgets import Button import serial,sys,glob import serial.tools.list_ports as COMs # # ############################################ # Find Microbit ports, select one, then start communication with it ############################################ # port1="COM19" ser = serial.Serial(port1,baudrate=115200) ser.flush() # clear the port # ############################################ # Start the interactive plotting tool and # plot 180 degrees with dummy data to start ############################################ # fig = plt.figure(facecolor='k') win = fig.canvas.manager.window # figure window screen_res = win.wm_maxsize() # used for window formatting later dpi = 150.0 # figure resolution fig.set_dpi(dpi) # set figure resolution # polar plot attributes and initial conditions ax = fig.add_subplot(111,polar=True,facecolor='#006d70') ax.set_position([-0.05,-0.05,1.1,1.05]) r_max = 100.0 # can change this based on range of sensor ax.set_ylim([0.0,r_max]) # range of distances to show ax.set_xlim([0.0,np.pi]) # limited by the servo span (0-180 deg) ax.tick_params(axis='both',colors='w') ax.grid(color='w',alpha=0.5) # grid color ax.set_rticks(np.linspace(0.0,r_max,5)) # show 5 different distances ax.set_thetagrids(np.linspace(0.0,180.0,10)) # show 10 angles angles = np.arange(0,181,1) # 0 - 180 degrees theta = angles*(np.pi/180.0) # to radians dists = np.ones((len(angles),)) # dummy distances until real data comes in pols, = ax.plot([],linestyle='',marker='o',markerfacecolor = 'w', markeredgecolor='#EFEFEF',markeredgewidth=1.0, markersize=10.0,alpha=0.9) # dots for radar points line1, = ax.plot([],color='w', linewidth=4.0) # sweeping arm plot # figure presentation adjustments fig.set_size_inches(0.96*(screen_res[0]/dpi),0.96*(screen_res[1]/dpi)) plot_res = fig.get_window_extent().bounds # window extent for centering win.wm_geometry('+{0:1.0f}+{1:1.0f}'.\ format((screen_res[0]/2.0)-(plot_res[2]/2.0), (screen_res[1]/2.0)-(plot_res[3]/2.0))) # centering plot fig.canvas.toolbar.pack_forget() # remove toolbar for clean presentation fig.canvas.set_window_title('Microbit Radar') fig.canvas.draw() # draw before loop axbackground = fig.canvas.copy_from_bbox(ax.bbox) # background to keep during loop ############################################ # button event to stop program ############################################ def stop_event(event): global stop_bool stop_bool = 1 prog_stop_ax = fig.add_axes([0.85,0.025,0.125,0.05]) pstop = Button(prog_stop_ax,'Stop Program',color='#FCFCFC',hovercolor='w') pstop.on_clicked(stop_event) # button to close window def close_event(event): global stop_bool,close_bool if stop_bool: plt.close('all') stop_bool = 1 close_bool = 1 close_ax = fig.add_axes([0.025,0.025,0.125,0.05]) close_but = Button(close_ax,'Close Plot',color='#FCFCFC',hovercolor='w') close_but.on_clicked(close_event) fig.show() ############################################ # inifinite loop, constantly updating the # 180deg radar with incoming Microbit data ############################################ # start_word,stop_bool,close_bool = True,False,False while True: try: if stop_bool: # stops program fig.canvas.toolbar.pack_configure() # show toolbar if close_bool: # closes radar window plt.close('all') break ser_bytes = ser.readline() # read Microbit serial data decoded_bytes = ser_bytes.decode('utf-8') # decode data to utf-8 #data =ser_bytes.decode('utf-8') #print(data.split(',')) data = (decoded_bytes.replace('\r','')).replace('\n','').replace(' ','') #print(data.split(',')) if start_word: vals = [float(ii) for ii in data.split(',')] print(vals) if len(vals)<2: continue angle,dist = vals # separate into angle and distance if dist>r_max: dist = 0.0 # measuring more than r_max, it's likely inaccurate dists[int(angle)] = dist if angle % 5 ==0: # update every 5 degrees pols.set_data(theta,dists) fig.canvas.restore_region(axbackground) ax.draw_artist(pols) line1.set_data(np.repeat((angle*(np.pi/180.0)),2), np.linspace(0.0,r_max,2)) ax.draw_artist(line1) fig.canvas.blit(ax.bbox) # replot only data fig.canvas.flush_events() # flush for next plot else: if data=='Radar Start': # stard word on Arduno start_word = True # wait for Microbit to output start word print('Radar Starting...') else: continue except KeyboardInterrupt: plt.close('all') print('Keyboard Interrupt') break |
La robotique éducative joue un rôle important dans l'éducation des enfants et des jeunes en les aidant à acquérir des compétences en science et technologie.
Dans ce cadre notre site web représente une excellente ressource pour les parents, les enseignants et les enfants qui souhaitent découvrir la robotique.
Zaouiet Kontech-Jemmel-Monastir-Tunisie
+216 92 886 231
medaliprof@gmail.com
Site robotique réalisé par Mohamed Ali-Prof Info