Proiectul propune realizarea unui sistem automatizat de cartografiere a suprafețelor, folosind un microprocesor Arduino, un senzor de distanță și un mecanism de scanare pe două axe. Măsurătorile realizate sunt afișate real-time prin intermediul unui ecran LCD, iar la final o aplicație specializată realizează un heat-map și o replică 3D a terenului scanat.
Scopul principal este de a construi un instrument portabil și intuitiv pentru analiza formelor de relief la scară mică, combinând vizualizarea imediată cu interpretarea detaliată pe calculator.
Ideea este inspirată dintr-o demonstrație văzută pe Internet, ce implica o hartă din nisip cu diferite forme de relief și un proiector care colora nisipul în diferite culori pentru a distinge între înălțimile terenului. Această aplicație era folosită pentru a învăța copiii să citească hărțile bazate pe înălțimi și adâncimi prin vizualizarea schimbărilor în timp real.
Consider că un astfel de proiect ar fi util atât pentru scopul prezentat mai sus, de prezentare interactivă a creării unei hărți, dar și pentru observarea imperfecțiunilor sau a diferențelor de nivel de pe o suprafață de dimensiuni reduse.
Componente hardware:
Interacțiune hardware - software
+------------------------------------+ | Sistem de scanare | | (axe Ox/Oy + motoare pas cu pas)| +----------------+-------------------+ | v +--------------+--------------+ | Senzor de distanță | | HC-SR04 | +--------------+--------------+ | v +----------+-----------+ | Microprocesor | | Arduino Uno R3 | +----------+------------+ | +---------------------+----------------------+ | | v v +-----------------------------+ +----------------------------+ | Ecran LCD | | Conexiune | | (LCD 1602 I2C) | | Serială cu Laptop | | Afișare poziție și distanță| +------------+---------------+ +-----------------------------+ | v +------------------+------------------+ | Laptop cu Python GUI | | - Citire date serial | | - Salvare fișier .txt | | - Generare heatmap 2D și 3D | +------------------+------------------+ | v +-----------------------------+ | Vizualizare grafică | | - Heatmap (matplotlib) | | - 3D Surface (plotly) | +-----------------------------+
Listă de componente:
Descrierea sistemului mecanic
Sistemul este proiectat pentru a realiza o scanare pe suprafața unei zone plane, utilizând un senzor de distanță ultrasonic montat pe o platformă mobilă în două direcții (Ox și Oy). Mișcarea bidimensională este asigurată de două motoare pas cu pas 28BYJ-48, fiecare fiind responsabil pentru deplasarea senzorului pe una dintre axe.
Mecanismul de transmisie pentru fiecare axă este realizat din roți dințate (gear train), integrate într-un cadru imprimat 3D. Axele au o lungime de aproximativ 30 cm. Axa Oy este fixată pe un suport din carton, astfel încât capetele axei rămân staționare, iar motorul de pe această axă deplasează întregul ansamblu mobil (slider) de-a lungul direcției verticale (în planul scanării).
Pe acest slider este montată și axa Ox, permițând astfel deplasarea senzorului și în direcția orizontală. Ansamblul funcționează ca un sistem de coordonate cartezian, în care senzorul este poziționat succesiv deasupra fiecărui punct dintr-o matrice 2D, în scopul măsurării distanței față de suprafață.
Modul de funcționare
Senzorul parcurge o matrice de 20×20 puncte de măsurare, urmând o traiectorie „linie cu linie”, similară cu următoarea ordine:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
La fiecare punct, senzorul măsoară distanța față de suprafață, iar valorile sunt afișate în timp real pe un ecran LCD și transmise prin portul serial către un computer, unde pot fi salvate sub formă de fișier și ulterior prelucrate (de exemplu, pentru generarea unei hărți de înălțime).
Estetică și stabilitatea mecanică
Un aspect important întâmpinat în timpul realizării sistemului a fost dezechilibrul axei Ox la extindere maximă, cauzat de greutatea motoarelor. Inițial, masa motoarelor afecta distribuția forței, determinând înclinarea platformei mobile. Problema a fost rezolvată prin reconfigurarea poziționării:
Pentru a menține axa Ox cât mai paralelă cu suprafața de scanat, a fost adăugat un element de sprijin din carton, care funcționează ca o bară de susținere orizontală.
Componentele electronice, precum placa Arduino și breadboard-ul, au fost ascunse în spatele unui panou de carton , pe care este montat și afișajul LCD. Acest design asigură un aspect ordonat, oferind totodată protecție componentelor. Placa de dezvoltare este montată într-o carcasă de plexiglas pentru siguranță și vizibilitate parțială.
Software-ul proiectului este împărțit în două componente:
Arduino
Biblioteci utilizate
Variabile globale și inițializare
Funcția setup()
Funcția loop()
Parcurgerea matricei:
for (int y = currentY; y < gridSize; y++) {
for (int x = (y == currentY ? currentX : 0); x < gridSize; x++) {
Măsurarea distanței:
do {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
real_distance = 8 - distance;
if (lastDistance != 0) {
if (real_distance - lastDistance < 2 && real_distance - lastDistance > -2)
real_distance = lastDistance;
}
Afișarea și trimiterea de date:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(“X:”); lcd.print(x);
lcd.print(” Y:”); lcd.print(y);
lcd.setCursor(0, 1);
lcd.print(“Dist: ”); lcd.print(real_distance); lcd.print(” cm”);
Serial.print(x); Serial.print(” ”);
Serial.print(y); Serial.print(” ”);
Serial.println(real_distance);
Salvarea progresului în EEPROM:
EEPROM.put(0, x + 1);
EEPROM.put(sizeof(int), y);
Mișcarea senzorului:
La final de rând:
Finalizarea scanării
După finalizarea completă a gridului, se șterg datele salvate în EEPROM și se mută senzorul înapoi în poziția de start (0, 0).
Python
Configurarea serială
SERIAL_PORT = 'COM5'
BAUD_RATE = 9600
GRID_SIZE = 20
Inițializare matrice și conexiune serială
Colectarea datelor de la Arduino
Salvarea datelor într-un fișier
Vizualizare – Heatmap
Vizualizare - Reprezentare 3D interactivă
În final, după scanarea terenului, programul afișează automat cele două grafice ce prezintă schimbările de formă ale terenului țintă.
În urma implementării și testării sistemului de scanare, rezultatele au fost în concordanță cu obiectivele stabilite. Dispozitivul a fost capabil să scaneze o suprafață plană discretizată într-o matrice de 20×20 de puncte, colectând în total 400 de valori de distanță cu ajutorul senzorului HC-SR04. Aceste valori au fost prelucrate și afișate atât local, pe un ecran LCD, cât și transmise prin port serial către un laptop pentru analiză și vizualizare.
Din datele colectate, s-a generat o hartă 2D care reflectă variațiile de înălțime relativă pe suprafața scanată, precum și o reprezentare tridimensională interactivă a terenului. Aceste vizualizări au permis observarea rapidă a eventualelor denivelări, dovedind astfel utilitatea sistemului în reprezentarea spațială a unei suprafețe scanate.
Pe parcursul testării, sistemul a demonstrat o repetabilitate satisfăcătoare a măsurătorilor, iar algoritmul de reluare automată a scanării (prin EEPROM) a funcționat conform așteptărilor, permițând reluarea scanării de la ultimul punct în cazul unei întreruperi neprevăzute. Astfel, s-a confirmat că proiectul nu doar captează date relevante, ci și le structurează eficient pentru prelucrare ulterioară.
Proiectul se remarcă printr-o integrare eficientă a componentelor hardware și software, reușind să automatizeze complet procesul de scanare a unei suprafețe printr-un sistem de axe coordonat de motoare pas cu pas. Utilizarea senzorului de distanță HC-SR04 permite măsurători precise la fiecare punct al grilei, iar afișajul LCD oferă feedback vizual în timp real asupra poziției și distanței măsurate. Persistența datelor este asigurată prin salvarea poziției curente în EEPROM, astfel încât întreruperile neașteptate ale alimentării nu afectează progresul scanării. Partea software dezvoltată în Python aduce o valoare adăugată semnificativă prin vizualizările generate. Datele colectate sunt convertite într-un heatmap 2D și o reprezentare 3D interactivă a reliefului, ceea ce face analiza datelor intuitivă și estetică.
Limitări ale proiectului
Cu toate aceste realizări, proiectul întâmpină și unele limitări. Senzorul HC-SR04, deși accesibil și ușor de folosit, are o precizie relativă scăzută în medii instabile sau la suprafețe neregulate, ceea ce poate duce la fluctuații nedorite în măsurători. Algoritmul de filtrare implementat este simplu și nu elimină complet erorile, fiind loc pentru îmbunătățiri prin metode mai avansate. Viteza de scanare este limitată de caracteristicile hardware și de dimensiunea gridului, ceea ce face dificilă extinderea proiectului pe suprafețe mai mari fără optimizări suplimentare.
Pentru ca scriptul din Python să poate prelua datele din Serial Monitor trebuie ca, imediat după încărcarea codului pe plăcuță, să fie pornit si fișierul cu cod Python.
În această secțiune voi enumera problemele întâmpinate pe parcursul proiectului, dar și soluțiile găsite în cazul în care problema a fost rezolvată: