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:

  • SCK – 13
  • MISO – 12
  • MOSI – 11
  • SS – 10
  • VCC – 5V
  • GND – GND

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:

  • VCC – 5V
  • GND – GND
  • PWM – 9

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ă:

  • R1 – 8
  • R2 – 7
  • R3 – 6
  • R4 – 5
  • C1 – 4
  • C2 – 3
  • C3 – 2

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:

  • SDA – A4
  • SCL – A5
  • VCC – 5V
  • GND – GND

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

  • Keypad.h: Am folosit biblioteca Keypad.h pentru gestionarea intrărilor de la tastatură. Aceasta oferă funcții utile pentru a detecta apăsările butoanelor pe o tastatură matriceală și pentru a interpreta valorile apăsate.
  • Wire.h: Bibliotecă standard în Arduino, folosită pentru a comunica cu dispozitive periferice care utilizează protocolul I2C.
  • LiquidCrystal_I2C.h: Aceasta simplifică utilizarea ecranului LCD cu interfață I2C, permițându-mi să comunic cu ușurință cu ecranul fără a fi nevoie să implementez manual protocolul I2C.
  • Adafruit_PN532.h: Am folosit această bibliotecă pentru a comunica prin SPI cu modulul PN532.
  • Servo.h: Pentru controlul motorului servo, am ales biblioteca Servo.h, pentru că permite poziționarea acestuia la un anumit unghi cu ușurință și precizie.

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

  • Citirea și maparea intrărilor de la keypad pentru selectarea unui program.
  • Afișarea mesajelor pe ecranul LCD.
  • Autentificarea și citirea datelor de pe un card Mifare Classic.
  • Controlul unui motor servo pentru a simula mișcarea unui mecanism de spălare.

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

  • Flexibilitatea și comoditatea utilizării: Spălătoria automată integrată într-un lanț de benzinării oferă utilizatorilor flexibilitate și comoditate, permițându-le să își spele mașinile în orice moment, fără să fie restricționați de programul redus al spălătoriilor convenționale sau să depună efort la spălătoriile self-wash.
  • Sistem de plată inovator: Utilizarea unui sistem de plată bazat pe puncte acumulate în urma alimentării autovehiculului, gestionate prin intermediul unui card de fidelitate.
  • Interacțiunea utilizatorului prin intermediul unui display: Permite utilizatorilor să vadă instrucțiuni și opțiuni și să fie informați în timp real legat de starea programului de spălare.

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

Download

Bibliografie/Resurse

pm/prj2024/mdinica/iulia.chesches.txt · Last modified: 2024/05/27 13:51 by iulia.chesches
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