Table of Contents

Roooombaaaa

Introducere

Roooombaaaa este o masina care va naviga printr-o cladire dezinfectand podelele. Scopul sau este de a se plimba in imprejurul unei camere, plecand din exteriorul camerei pana in interiorul sau, dezinfectand podeaua cu o solutie speciala.
Ideea de la care am pornit: In liceu, pe timpul Covid-19 profesorul meu de Fizica a venit la grupul nostru de studenti si ne-a spus: “M-a contactat un milionar din China si mi-a cerut sa facem un prototip de robot de dezinfectare a parchetului. Vreau sa faceti unul pana la sfarsitul semestrului.”. Nu am reusit sa facem nimic, fiind clasa a 12, dar ideea a ramas, iar acum va fi PUSA IN PRACTICA!!!!.
Acest robot este util, deoarece o buna parte din virusi si bacterii se afla pe jos. Mergand prin zona in care se afla aceste bacterii, oamenii le pot aduce in casele lor, astfel imbolnavindu-se.

Descriere generală

In acest robot se vor regasi 4 motoare, care vor avea ca scop deplasarea robotului. Voi avea un servomotor, care va pulveriza pe jos cu dezinfectant (va apasa pe un recipient care contine dezinfectantul). Voi avea un senzor ultrasonic pentru a detecta cand robotul se aproprie de un obstacol pentru a il evita.
Voi avea si un senzor de detectie a liniei, pentru a putea sa se intoarca la baza: La un moment dat, robotul va ramane fara dezinfectant. Dupa o perioada de timp, robotul va incepe sa se deplaseze in linie dreapta pana cand detecteaza ca a ajuns intr-un capat al camerei pe care o dezinfecta. Camera respectiva va avea un material reflectiv pe margini, iar cand robotul va ajunge acolo va stii sa se opreasca, pentru a fi colectat ulterior.
O alimentare de 7.4V (pentru motoare)
O alimentare de 9V (pentru arduino)
1 punte H dubla pentru controlul motoarelor
Senzorii vor detecta cand se aproprie de un obstacol/a gasit drumul spre casa, si vor trimite un semnal la arduino, care va lua decizia cum sa intoarca robotul si in ce directie sa porneasca sa mearga. Modulele software vor fi doar programul arduino si biblioteciile arduino.

Hardware Design

Listă de piese pentru proiect:

To Note: am decis in final sa folosesc 2 baterii, una pentru alimentarea Arduino-ului (9V) si una pentru alimentarea Motoarelor (7.4V), deoarece nu era recomandata alimentarea motoarelor cu mai mult de 6V.

Software Design

Pentru programarea plăcii am folosit Arduino IDE, evitând bibliotecile specifice Arduino și implementând funcții manual, folosind doar <avr/io.h> și <util/delay.h>. Proiectul este axat pe integrarea și controlul senzorilor și motoarelor, utilizând tehnici de programare la nivel scăzut pentru a optimiza spațiul și eficiența. Am urmat principii și tehnici învățate în laboratoarele de GPIO și PWM pentru a asigura funcționarea corectă și eficientă a sistemului.

Implementarea functionalitatilor

Senzorul de linie

Pentru senzorul de linie, am utilizat manipularea directa a registrelor pentru a initializa si citi starea senzorului:

Am setat pinul corespunzator ca intrare si am activat rezistenta pull-up interna. Citirea starii pinului se face prin verificarea valorii in registrul PIN.

Senzorul ultrasonic

Senzorul ultrasonic a fost initializat si utilizat fara biblioteci Arduino, prin manipulari directe ale registrelor si prin functii de delay:

Am setat pinul de declansare (TRIG) ca iesire si pinul de ecou (ECHO) ca intrare. Am implementat functii pentru trimiterea unui puls de declansare si pentru masurarea duratei raspunsului, calculand astfel distanta.

Controlul motoarelor

Controlul motoarelor se realizeaza prin setarea directa a pinilor de control si utilizarea PWM pentru ajustarea vitezei:

Am definit pinul de control pentru fiecare motor si am implementat functii pentru miscarea inainte, inapoi, rotirea la stanga si la dreapta, si oprirea motoarelor. PWM este utilizat pentru a controla viteza motoarelor prin pinii de enable.

Controlul servomotorului

Pentru servomotor, am folosit functii de manipulare directa a pinilor pentru a genera semnalul PWM necesar:

Am implementat o functie care roteste servomotorul intre 0 si 180 de grade, ajustand incrementul si delay-ul pentru a controla viteza rotatiei.

Intrerupere bucla principala

De asemenea, pentru a nu folosi delay() in bucla principala, am ales sa folosesc o intrerupere. For performance reasons.

Logica principala

Codul principal include:

Initializarea componentelor (senzori, motoare, servomotor). Citirea si afisarea distantei masurate de senzorul ultrasonic la intervale regulate. Verificarea senzorului de linie si numararea detectarilor consecutive. Implementarea unei miscari alternative dupa 10 minute de functionare initiala. Controlul miscarilor robotului pentru a evita obstacolele si a detecta linii. Aceste implementari au fost realizate pentru a optimiza utilizarea resurselor si a imbunatati eficienta codului, oferind in acelasi timp un control precis asupra hardware-ului. Design-ul software urmeaza principiile de programare la nivel scazut pentru a maximiza performanta si a minimiza utilizarea memoriei.

In concluzie, am folosit doar GPIO, PWM si Intreruperi pentru controlul senzorilor si motoarelor.

Rezultate Obţinute

In final am obtinut un robot care se descurca cu deplasarea printr-o incapere. Un rezultat negativ este faptul ca am un container pentru dezinfectant cu un arc prea puternic, si servomotorul nu poate de fiecare data sa pulverizeze eficient.

Concluzii

Proiectul isi atinge majoritatea obiectivelor. Robotul se poate deplasa printr-o cladire fara a se lovi de obstacole, iar in cazul unei blocari, acesta isi poate reveni de unul singur. De asemenea, dupa terminarea curateniei, robotul nu va stationa in mijlocul drumului pentru a incurca trecatorii. O functionalitate la care inca trebuie lucrat ar fi modul de pulverizare cu solutie dezinfectanta. Solutia ar fi gasirea unui recipient cu un pulverizator mai fin, pentru a fi operat de servomotor. Proiectul a fost facut si cu intentia de a lucra cu functionalitati low-level ale arduino-ului, lucru care a fost obtinut prin controlul senzorilor si servomotorului in acest mod.

Download

ionescu_serban.zip

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

https://ocw.cs.pub.ro/courses/pm/lab/lab2-2023

https://ocw.cs.pub.ro/courses/pm/lab/lab3-2023-2024

https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf