Bogdan FOLEA (25270) - Ultrasonic RADAR System

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Proiectul functioneaza ca o instalatie RADAR la scara mica - detecteaza existenta si pozitia relativa fata de aceasta a obiectelor (in plan orizontal), folosind insa ultrasunete in loc de unde radio. Ideea proiectului este de a-l integra la o data ulterioara intr-un proiect mai mare - utilitatea realizarii sale consta tocmai in posibilitatile extinse de folosire a sistemelor de ecolocatie pentru imbunatatirea functionarii altor dispozitive.

Descriere generală

<WRAP column 46%>

Arduino Nano

Proiectul foloseste Arduino Nano 3.0, o placa de dezvoltare bazata pe microcontrollerul Atmel ATmega328p. Aceasta contine un modul convertor serial TTL-USB (CH340G);

Utilitarul gnuplot

Interfata grafica a proiectului este realizata prin intermediul utilitarului grafic gnuplot.

Modul de functionare

Placa Arduino comanda rotatia servomotorului, de care este atasat un senzor de distanta ultrasonic. Acesta primeste un scurt impuls (trigger) si trimite inapoi placii un impuls de durata mai lunga (echo), egala cu cea a propagarii sunetului in linie dreapta pana la cel mai apropiat obstacol si inapoi. Placa face prelucrarile necesare si apoi trimite serial (prin USB) calculatorului o pereche formata din distanta calculata si unghiul atasat acesteia. Pe calculator ruleaza o interfata grafica care afiseaza datele primite. </WRAP>

<WRAP column 49%>

Schema bloc:

</WRAP>

Hardware Design

<WRAP column 19%>

Module folosite:

  • placa de dezvoltare Arduino Nano 3.0 (ATMega328p)
  • micro-servomotor SG90 cu deschidere 180°
  • senzor de distanta ultrasonic HC-SR04
  • regulator/stabilizator de tensiune LM7805

Alte piese:

  • suport plastic pentru senzor
  • breadboard
  • conectori mata-tata, tata-tata
  • colier, surub si suporti plastic
  • cablu USB - miniUSB
  • 4 baterii AA + suport

Observatie

Modulul convertor serial USB-TTL (CH340G) este integrat in Arduino! </WRAP>

<WRAP column 76%> </WRAP>

Software Design

Software-ul proiectului se constituie din doua parti:

I. Programul Arduino

Placa este folosita pentru a comanda miscarea servomotorului prin PWM (folosindu-se de biblioteca Servo din Arduino), pentru a transmite si receptiona semnale (de) la senzorul de distanta si pentru a transmite serial (asincron) datele prelucrate la calculator.

Servomotorul functioneaza in pasi care corespund unghiului facut cu pozitia initiala. Se porneste de la 0 si apoi se deplaseaza progresiv pana la pasul corespunzator unghiului de 180 (nu a fost posibila implementarea rotatiei complete, intrucat deschiderea servomotorului nu este decat de 180 de grade). La fiecare pas se efectueaza o masuratoare de distanta, apoi se trimite rezultatul acesteia, impreuna cu unghiul asociat, catre calculator. Se garanteaza ca fiecare astfel de ciclu dureaza o un timp constant (20ms), pentru ca afisarea la interfata grafica sa se faca uniform si sa nu fie deranjant pentru utilizator. O data ce servomotorul a efectuat o semirotatie completa, va reveni in pozitia initiala si va incepe masuratorile de la inceput. Din considerente ce urmeaza a fi clarificate in cele ce urmeaza, intre doua semirotatii se va trimite pe serial 'reset'.

II. Interfata grafica pentru utilizator

Interfata grafica este rulata de catre utilizator pe Linux, in urma conectarii la placa prin USB. Din cauza prelucrarilor CPU-intensive si mai ales a timpului relativ scurt disponibil, aceasta va rula 3 threaduri:

  1. cel principal, care 'asculta' pe portul serial si realizeaza comunicatia cu placa, apoi permite accesul la datele citite thread-ului 2
  2. unul asociat interfetei grafice, care primeste datele citite de pe portul serial si le trimite mai departe (printr-un pipe) la un proces gnuplot ce le afiseaza pe ecran pe masura ce sunt citite
  3. un thread secundar ce se ocupa de shell - unica functie a acestuia este terminarea programului la primirea comenzii 'q' pe standard input

Sincronizarea se realizeaza initial prin asteptarea unui 'reset' pe portul serial, pentru a putea incepe afisarea din pozitia 0. Acest lucru poate fi util si in etapele ulterioare ale rularii programului, in cazul unor erori aparute de comunicare prin serial sau sincronizare. In acest caz, urmatorul 'reset' va garanta ca urmatorul set de date nu va fi afectat de erorile precedente. De asemenea, thread-ul principal comunica printr-un flag celui grafic cand este cazul sa inceapa prelucrarea datelor (cand in buffer se afla o noua citire). Ca o consecinta a duratei fixe a unui ciclu de scriere-citire (suficient de mare), timpul necesar afisarii pe ecran nu va depasi timpul intre doua citiri consecutive.

La initializare se trimit (prin pipe) procesului gnuplot setarile necesare: lucrul in coordonate polare (intrucat sistemul proiectat este asemanator unui RADAR), distanta maxima admisa (4m - provenita din limitarile hardware ale senzorului), legenda si setarile de aspect. De asemenea, interfata afiseaza un cursor ce are semnificatia unghiului curent al sistemului si se folosesc 2 culori pentru a diferentia masuratorile cele mai recente de vechiul set de date (primit in cursul ultimei semirotatii).

<WRAP column 45%>

Interfata grafica (shell):

</WRAP>

<WRAP column 51%>

Interfata grafica (gnuplot):

</WRAP>

Rezultat

<WRAP column 45%> Functionarea sistemului a fost testata in mod repetat si se incadreaza in parametri.

Observatii

  • Atunci cand este detectat un obiect, conturul acestuia apare concav, chiar daca fata detectata este perfect dreapta. Faptul se datoreaza deschiderii de ±15° a senzorului cu ultrasunete: acesta detecteaza cel mai apropiat punct aflat la ±15° fata de unghiul sau curent, ceea ce inseamna ca se inregistreaza relativ putine masuratori distincte corespunzatoare unei fete netede, de unde rezulta si aspectul concav. Limitarea in acest caz este una fizica a senzorului si nu poate fi compensata in alte moduri. Eroarea, insa, este admisibila, in special la distante mai mari de un metru.
  • Alte erori pot surveni din considerente de reflexie: nu toate materialele se comporta in acelasi fel la reflexia ultrasunetelor. Un bun exemplu sunt materialele textile, care tind sa 'absoarba' complet sau partial semnalul acustic, ceea ce se traduce printr-o masuratoare eronata sau chiar prin 'invizibilitatea' completa a obiectului pe care il acopera. Precizia sistemului este optima pentru suprafete plane, netede si tari.

</WRAP>

<WRAP column 50%> </WRAP>

Download

<WRAP center round download 90%> Arhiva proiectului (sursa Arduino, sursele C si Makefile pentru Linux):

BogdanFOLEA-335CC-ProiectPM2016 </WRAP>

Bibliografie

Resurse Hardware

Resurse Software

pm/prj2016/anitu/bogdan.folea.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0