Sistem Radar

Introducere

Proiectul consta in realizarea unui mini turn radar format dintr-un senzor ultrasonic amplasat pe servomotor care se va roti in permanenta. Acesta va detecta obiecte straine aflate la distante aflate intre anumite valori. Cand se vor detecta obiecte, sistemul radar va emite semnale luminoase si semnale sonore pentru a anunta prezenta acestora.

Scopul proiectului este de a oferi un punct de start in programarea cu microcontroller care presupune cateva tehnologii relevante de dificultate medie care isi poate gasi si utilizare in viata reala.

Ideea proiectului mi-a venit incercand sa gasesc un dispozitiv care sa interactioneze cu mediul inconjurator si care ar putea semana si intr-o forma bare metal cu ceva ce am intalni, astfel un mic turn radar.

Consider ca este util pentru ca proiectul reprezinta o combinatie realistica intre hardware si software care poate fi usor avansata si transformata intr-un ansamblu complex de dispozitive si sisteme.

Descriere generală

Schema PM.html

Tot ansamblul se bazeaza pe senzorul ultrasonic care sta pe servomotor. El primeste informatii pe care le trimite catre microcontroller. El mai departe trimite aceste informatii la buzzer, led si LCD in functie de situatie, in acelasi timp actionand servomotorul pentru a muta senzorul.

Hardware Design

Componente utilizate:

  • Arduino Nano
  • Breadboard Large
  • Sensor ultrasonic HC-SR04
  • Servo motor SG90
  • LCD 1602 IIC/I2C
  • Buzzer pasiv
  • LED
  • Buton

Arduino Nano:

  • Alimentat de la laptop prin USB.
  • Placuța Arduino Nano cu microcontroller ATmega 328P.

Servo motor - SG-90:

 
 *Alimentare 5V.
 *E folosit pentru a misca senzorul in jurul axei OZ.
 *Va primi de la microcontroller semnale, generate in mod PWM, pentru a da sweep de la 0 la 180 de grade si inapoi.

Senzor ultrasonic - HC-SR04

  • Alimentare 5V, senzor digital.
  • Range: 2cm - 400cm, precizie 3mm
  • Pus intr-un suport pe servo motor, simuleaza un turn radar desi in realitate functioneaza ca sonar.

Ecran LCD

  • Funcționeaza pe interfata I2C.
  • Folosit pentru a afisa distanta de la senzor la obiectele detectate si durata in ms pe care a parcurs-o semnalul.

Buzzer pasiv

  • Alimentat la 5V
  • Folosesc un port digital si trimit semnale generate in mod PWM la frecvente mari pentru a genera un ping.

LED

  • LED simplu de culoare verde alimentat la 5V, rezista la maxim 20 mA.
  • In serie cu o rezistenta de 330 Ohm pentru a asigura un curent mai mic decat cel maxim.

Buton simplu

  • Folosit pentru a intrerupe conexiunea unui pin digital.
  • Folosit pentru a pune pe pauza functia de ping sweep a senzorului, buzzerului si LED-ului.

Ansamblu de piese:

  • Senzor fata / spate

  • Ansamblu final

Software Design

Descrierea codului aplicaţiei (firmware):

  • mediu de dezvoltare: PlatformIO
  • librării şi surse 3rd-party: <delay.h>, <avr/interrupt.h>, <avr/io.h>

Pentru realizarea proiectului am avut de realizat urmatoarele functionalitati:

  • Afisarea de text pe LCD comunicand cu modulul I2C
  • Generarea de semnale PWM, folosind Timer0, pentru a realiza ping-urile de la buzzer
  • Generarea de semnale PWM, folosind Timer1, pentru a realiza miscarea de sweep a servo motorului
  • Functiile de masurare a timpului si distantei pentru senzorul ultrasonic
  • Realizarea unei intreruperi folosind un buton pentru a pune pe pauza senzorul

Functiile LCD:

  • Pentru a controla LCD-ul mai intai am avut nevoie de functile two wire/I2C
  • Cu acele functii am trimis comenzi si date catre modulul I2C al LED-ului

Functiile buzzer-ului:

  • Pentru a face buzzer-ul sa scoata un ping a trebuit sa generez semnale PWM
  • Am configurat prescaler-ul 64 si valoarea de compare 250 pentru a genera semnale la 1kHz

Functiile servo-ului:

  • Pentru servo motor este recomandat un semnal de 50 Hz.
  • Mai apoi experimental am determinat niste valori intre care sa fac sa oscileze acesta.

Functiile senzorului:

  • Pentru implementarea senzorului a trebuit sa dau semnalul TRIG si apoi sa ascult ECHO
  • Am calculat folosind _delay_ms durata semnalului pe care am convertit-o in cm

Intreruperea pe buton:

  • Butonul are o intrerupere simpla de tip PINChange.
  • In momentul in care acesta este apasat o variabila care blocheaza senzorul se schimba.

Rezultate Obţinute

Proiectul este in cea mai mare parte un succes. LCD-ul functioneaza, Buzzer-ul si LED-ul se activeaza cu succes cand un obiect este identificat.

Desi servo motorul se misca putin sacadat si se opreste timp de cateva ms cand senzorul simte un obiect, realizeaza sweep-uri cu succes.

O problema a proiectului pe care nu am reusit sa o rezolv: probabil din cauza unei metode de debounce eficienta butonul nu functioneaza la fiecare apasare. In plus, probabil din cauza locatiei in care intreruperea este chemata, este posibil ca atunci cand se pune pauza pe senzor sa se opreasca si servo motorul, dupa aceea nu mai reporneste daca nu dam restart.

Download

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2024/vstoica/calin.carcan.txt · Last modified: 2024/05/25 17:16 by calin.carcan
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