Table of Contents

Automatic Car Wash

Autor: Cheșcheș Iulia-Ștefana

Grupă: 332CA

Email: iulia.chesches@stud.acs.upb.ro

Introducere

Obiectivul acestui proiect constă în realizarea unei spălătorii automate de mașini.

Aceasta este menită să fie o alternativă flexibilă pentru cei care nu doresc să fie restricționați de programul redus de funcționare al unei spălătorii convenționale, dar și o opțiune mult mai comodă față de spălătoriile self-wash, care, deși sunt deschise non-stop, implică un efort fizic din partea posesorului.

Încă de la început am gândit acest concept ca fiind asociat unui lanț de benzinării. Astfel, modalitatea de plată se poate baza pe puncte achiziționate sau acumulate în urma alimentării autovehiculului, pe care fiecare client le poate gestiona printr-un card de fidelitate.

Descriere generală

Interacțiunea cu sistemul este realizată prin intermediul unui display, care afișează instrucțiuni și opțiunile disponibile ale utilizatorului. Acesta poate introduce durata dorită a programului, după care urmează etapa de plată, unde se va folosi de cardul de fidelitate. Dacă plata este realizată cu succes, programul de spălare începe și periile rotative sunt puse în funcțiune de un servo motor.

Îmi propun să încorporez în proiectul meu întreruperi, timere și trei protocoale de comunicație: SPI pentru modulul RFID, I2C pentru display și PWM pentru servo motor.

Hardware Design

Componente folosite

Conexiunea pinilor

Modulul NFC/RFID PN532 dispune de interfețe I2C, UART și SPI. Eu am decis să folosesc SPI, pe care l-am selectat prin switch-urile de pe modul, primul pe HIGH, al doilea pe LOW. Acesta se ocupă de plata spălării în funcție de programul selectat prin consumarea creditului acumulat de client pe cardul de fidelitate. Tag-urile folosite sunt de tipul Mifare Classic, care au avantajul securizării datelor stocate prin autentificare. Eu voi folosi cheia de acces default, dar pe viitor se poate folosi o cheie specifică, astfel încât modificările cardurilor de fidelitate să poată fi făcute doar de personalul spălătoriei.

Conexiunile pinilor pentru modulul NFC/RFID PN532:

Motorul servo SG90 este folosit pentru mișcarea periilor rotative. Controlul este realizat cu ajutorul unui semnal de tip PWM. Pinii care pot genera acest tip de semnal de pe o placă de dezvoltare Arduino sunt 3, 5, 7, 9, 10, 11, A0 - A5, dintre care am ales să folosesc pinul 9.

Conexiunile pinilor pentru motorul servo SG90:

Tastatura membrană pe care o folosesc are 12 taste conectate în formă matriceală 3×4, ceea ce reduce numărul de pini necesari de la 12 la 7. Primii 4 pini conectează liniile, iar următorii 3 conectează coloanele. Toți trebuie să fie pini digitali pe Arduino, așa că am ales să folosesc pinii de la 2 la 8. Cu ajutorul tastaturii, clienții pot selecta tipul programului de spălare a mașinii dorit.

Conexiunile pinilor pentru tastatură:

LCD-ul are un adaptor pentru interfață I2C, care are nevoie doar de două conexiuni, SDA, SCL și conexiunea la masă. Acesta funcționează drept o interfață pentru utilizator: afișează instrucțiuni și oferă informații legate de starea automatului, cum ar fi prețul programului ales sau timpul rămas de funcționare.

Conexiunile pinilor pentru LCD:

Schema electrică

Am realizat simbolurile și footprint-urile componentelor pe care le folosesc în Fusion, după care am adăugat label-uri pentru a evidenția conexiunile dintre ele.

Testare individuală

Inițial, am conectat fizic fiecare componentă individual și am testat funcționalitatea prin câte un mic exemplu. Am făcut motorul servo să se rotească timp de 2 secunde, am afișat textul ‘Hello, World!’ pe ecran, am configurat cele două tag-uri să aibă câte un utilizator și un credit de 200 de puncte și am afișat în Serial Monitor fiecare tastă apăsată a tastaturii ca să mă asigur că liniile și coloanele sunt conectate corespunzător.

carwashdemolcdiuliachesches.jpeg

Mai apoi, le-am aranjat împreună astfel încât fiecare să poată folosi pinii necesari. Am avut nevoie și de un mini breadboard pentru a pune la dispoziție alimentarea de 5V de pe Arduino către toate componentele.

carwashdemoiuliachesches.jpeg

Software Design

Mediu de dezvoltare

Arduino IDE

Librării și surse 3rd-party

Prin utilizarea acestor biblioteci, m-am folosit de resursele existente pentru a implementa funcționalitățile dorite în proiectul meu, economisind timp și beneficiind de funcționalități deja testate și bine documentate.

Algoritmi și structuri implementate

Flow firmware

Initial, utilizatorul este rugat să apese tasta * pentru a începe interacțiunea cu aparatul.

Mai apoi, este așteptat să introducă numărul programului, urmat de tasta #. Momentan numărul introdus este numărul de secunde al programului și suma ce trebuie plătită, dar acest aspect poate fi customizat în viitor în funcție de fiecare spălătorie în parte.

Clientul este așteptat să apropie cardul, iar dacă plata este efectuată cu succes, periile rotative încep să se rotească iar LCD-ul afișează numărul de secunde rămase până la finalizarea programului. În același timp, creditul de pe cardul de fidelitate al acestuia scade.

După finalizarea programului, automatul revine la starea inițială de repaus.

Flow-ul programului poate fi vizualizat și în următoarea diagramă:

Optimizări

Starea aplicației este gestionată utilizând variabile booleene: choose_program, pay, start_wash. La un moment dat de timp, maxim două dintre ele sunt active, ceea ce permite utilizatorului să treacă la următorul pas, dar și să rectifice anumite erori precum selectarea greșită a programului sau folosirea unui card cu fonduri insuficiente. De asemenea, evită busy waiting-ul, adică nu verifică dacă se detectează un card sau o apăsare de keypad decât când este momentul, și evită efectuarea unor acțiuni nedorite, precum selectarea unui alt program când unul este deja în execuție.

Elemente de noutate

Elemente de laborator

Proiectul meu încorporează trei elemente principale din laborator: protocolul SPI pentru modulul RFID, protocolul I2C pentru display și PWM pentru servo motor. De asemenea, am folosit UART pentru comunicarea serială pentru debug și afișarea mesajelor în consola serială.

Rezultate Obţinute

Demo proiect

finalpmautomaticcarwash.jpeg

Download

Github repo

Bibliografie/Resurse

Export to PDF