Rezumat în limba engleză [302381]

[anonimizat], representing a substantial factor in evolution of mankind and everything that surrounds it.

[anonimizat], providing a better and safety living.

The importance of technology is widely recognized for its impact on economic success and its progress in creating a higher standard of living.

[anonimizat] a [anonimizat] a small scale by a [anonimizat] a mobile application.

Figure 1. 3D [anonimizat] 2 [anonimizat].

Figure 2. The block scheme

In the middle of the diagram is placed the ATmega1284P-[anonimizat], [anonimizat].

The ATmega1284P-[anonimizat], [anonimizat]’ drivers and LCD.

Communication between the microcontroller and the smartphone is realised via Bluetooth connection.

ATmega1284P-Pu (figure 3) is a high-[anonimizat] a 128 [anonimizat]-time writing and reading using an EEPROM of 4 KB and SRAM of 16 KB memory.

Figure 3. ATmega1284P-[anonimizat] 17 (42BYGHW609) is a [anonimizat] (figure 4).

Specifications for the 42BYGHW609 stepper are the following:

• Step Accuracy: ± 5%;

• Temperature: 80 ° C maximum;

• Ambient temperature: -20 ~ + 50 ° C;

• Insulation resistance: 100MΩMin 500V DC;

• Step angle: 1.8 °;

• Voltage: 2.55V;

• Current: 1.7A;

• Resistance: 1.5Ω on coil;

• Inductance: 2.8mH;

• Weight: 260g.

Figure 4. 42BYGHW609 [anonimizat] A4988 (Figure 4) drivers that receive the same command from the microcontroller at the same time. The drivers’ connecting is done as in figure 5.

Figure 5. Connecting the drivers

The 28BYJ-48 (Figure 6) [anonimizat]. [anonimizat] 28BYJ-48 stepper motors controlled by two ULN2003 drivers were used. 28BYJ-48 are unipolar motors and the connection with the driver and the microcontroller is done as in figure 7.

Figure 6. 28BYJ-48 Stepper

Figure 7. 28BYJ-48 Drivers

LCD (Liquid Crystal Display) (Figure 8) is an electronic display module found in a wide range of applications. An 16×2 LCD is a very simple module. It can be connected through I2C [anonimizat] (data line), these being often analogue pins and SCL (clock line).

LCD specifications are the following:

Number of characters: 16 characters × 2 lines;

Module size: 80 × 36 × 13,2 ;

Visibility area: 66 × 16 ;

Active area: 56.2 × 11.5 ;

Backlight: White LED;

Supply voltage: 4.5-5.5V.

Figure 8. [anonimizat], [anonimizat] 5 pins, 4 pins S0-S3 for selecting the desired channel, and one SIG pin that provides information to microcontroller about the selected channel. The Enable pin is connected to GND to activate only the input mode. Each channel is assigned to a sensor. When a channel is selected, the pin becomes active and the SIG pin reads the sensor, being finished very quickly.

For the practical part, 12 obstacle detection sensors have been used, which are positioned above the designated parking space. They are also connected to MUX to reduce the number of pins used by the microcontroller. There also have been used infrared transmission and reception LEDs, LM358 amplifiers, resistors and potentiometer, for creating object detection sensors.

For each sensor was realized a layout and several printed circuit boards (Figure 9). The size of the boards measures 3.3cm x 2.3cm and the track thickness 1.3mm.

Moving on, the HC06 (Figure 9) works by serial communication. The Android App is designed to send serial data to Bluetooth modules when a button is pressed. The Bluetooth module at the other end receives the data and sends it to the microcontroller via the TX pin of the Bluetooth module (RX pin of the microcontroller). The code checks the received data and compares it. If the received data is assigned to the parking space, the engines receive the command to bring the object to the intended place.

Figure 9. Infrared sensor

After making the electrical scheme in Altium, this will be exported to the PCB project. Each component has a footprint with its dimensions. The arrangement of the components is made according to some pre-defined rules. Altium designer can provide the function of arranging and creating 3D components (figure 10 and figure 11), being hepful in reducing the design dimensions.

Figure 10. 3D Projection motherboard

Figure 11. Motherboard

At last but not least, with MIT App Inventor 2, a program was created to select the desired parking spaces, thus the final application interface can be observed in figure 12. By touching the "Bluetooth" button, the connection to the associated Bluetooth module can be selected from the phone list.

Figure 12. Android App

Planificarea activității

Stadiul actual

Odată cu îmbunătățirea tehnologiei, sistemele inteligente de parcare reprezintă una dintre cele mai mari inovații ale societății actuale, acestea oferind un confort incontestabil șoferilor de automobile.

Aglomerarea străzilor atrage după sine nu doar un trafic intens, ci și lipsa locurilor de parcare. În medie, șoferii parcurg câțiva kilometri în căutarea unui loc de parcare, implicând timp pierdut, carburant și stres. Astfel, Smart Parking-ul a venit în ajutorul conducătorilor auto cu o idee revoluționară.

Smart Parking este un sistem mecanizat, eficient din punct de vedere al spațiului și ale costurilor. Acest sistem poate mări capacitatea parcării cu până la 8 ori. Sistemul este bazat pe o tehnologie care extinde capacitatea parcării pe verticală pentru eliberarea terenului scump și insuficient.

Sistemul poate fi controlat de la distanță fără a fi nevoie de prezența omului, datorită software-ului său de proiectare și administrare avansat.

În România există doar câteva parcări inteligente. Din 2009 și până acum, Primăria Sectorului 6 București a construit 70 de parcări inteligente pe verticală, fiecare dintre ele ridicându-se la niște costuri de aproximativ 200.000 de euro. Parcările smart ocupă la sol locul a doar două mașini, iar autoturismele sunt protejate de hoți.

În fiecare parcare inteligentă încap 12 mașini, șoferii plătind o chirie lunară de 115 lei. În total, primăria administrează 672 de locuri de parcare „inteligente", ocupate în totalitate.

Sistemele Smart Parking sunt silențioase și funcționează cu ajutorul unui lift acționat electric, pe baza unui card personalizat cu cod de acces. Practic, sistemul electronic identifică locul autoturismului, îl ridică pe platformă și îl așază la locul plătit. Operațiunea durează aproximativ două minute. [1]

În Germania se află cea mai mare și mai rapidă parcare inteligentă din lume, Autostadt Car Towers a intrat Cartea Recordurilor în anul 2014 ca fiind "cel mai rapid sistem de parcare automată din lume". AutoStadt (Car City) este un muzeu de mașini a fabricii Volkswagen din Wolfsburg, Germania.

Una dintre atracțiile majore ale AutoStadt sunt cele două turnuri de parcare strălucitoare. Acestea sunt folosite pentru a parca temporar noile mașini Volkswagen, care sunt mutate automat de la uzina din Wolfsburg după fabricare.

Turnurile cu 16 etaje sunt realizate din sticlă și oțel zincat. Fiecare parcare este înaltă de 48 de metri și poate adăposti până la 400 de mașini. Ambele turnuri sunt conectate cu fabrica Volkswagen printr-un tunel subteran de 700 de metri. Vehiculele fabricate de la uzina de producție sunt rulate prin subsolul acestor turnuri, folosind un sistem robotizat de paleți montat pe șine de cale ferată.

Odată ce o mașină ajunge la subsolul parcării, este ridicată de un braț mecanic și se plasează într-un loc de parcare. Fiecare ascensor asigură o rotație de 180 ° și se deplasează cu o viteză de 2 metri pe secundă. Acest sistem face ca parcarea să fie cea mai rapidă din lume.

Atunci când un client achiziționează o mașină de la Autostadt, mașina este preluată de o platformă de transfer și este adusă la client, fără a fi condusă nici măcar un singur metru, kilometrajul mașinii fiind 0. [2]

Beneficiile generale ale sistemului Smart Parking sunt:

Oferă o soluție permanentă la problema de parcare;

Evitarea tamponărilor;

Împiedicarea furturilor din mașini;

Sistemul este foarte sigur;

Intrarea și ieșirea este sigură și rapidă;

Nivelul de poluare este scăzut.

Fundamentare teoretică

Schema bloc a sistemului

Figura 1 este reprezentată de schema bloc a întregului sistem, aceasta fiind formată din mai multe blocuri funcționale care comunică între ele. În mijlocul schemei este poziționat microcontrollerul ATmega1284P-Pu care primește informații de la senzorii optici, RFID și Bluetooth, iar pe baza acestora transmite date către celelalte blocuri din schemă. Fiecare dintre aceste blocuri vor fi descrise în cele ce urmează într-o formă mai amplă.

Figura 1. Schema bloc a sistemului

Microcontroler ATmega1284P-Pu

AVR este o familie de microcontrollere dezvoltată de Atmel începând cu anul 1996. Acestea sunt microcontrolere de tip single-chip RISC pe arhitectură Harvard modificate pe 8 biți. AVR a fost una dintre primele familii de microcontrollere care utilizează memoria flash on-chip pentru stocarea programelor, spre deosebire de ROM-ul, EPROM-ul sau EEPROM-ul programabil unic, utilizat de alte microcontrollere la momentul respectiv.

Flash, EEPROM și SRAM sunt integrate pe un singur chip, eliminând nevoia de memorie externă în majoritatea aplicațiilor. Unele dispozitive au o opțiune de comunicație externă paralelă pentru a permite adăugarea de memorie suplimentară de date sau de dispozitive mapate pe memorie. Aproape toate dispozitivele (cu excepția celor mai mici cipuri TinyAVR) au interfețe seriale, care pot fi utilizate pentru a conecta mai mari serii EEPROM sau cipuri flash.

Instrucțiunile de program sunt stocate în memorie flash non-volatile. Deși MCU-urile sunt pe 8 biți, fiecare instrucțiune are una sau două cuvinte pe 16 biți.

Figura 1.1. Diagrama bloc a microcontroller-ului ATmega1284P-Pu

Microcontroller-ul ATmega1284P-Pu este elementul central al întregului sistem, acesta facilitând preluarea și prelucrarea informației primite de la senzori, Bluetooth și RFID, dar și transmiterea semnalelor către driverele motoarelor și a LCD-ului. Comunicarea între microcontroller și smartphone se realizează prin conexiune bluetooth.

ATmega1284P-Pu (Figura1.2) este un microcontroller de înaltă performanță realizat de firma Microchip, având o memorie flash de 128 KB ISP cu capacitate de scriere și citire în timp real, folosindu-se de memoria EEPROM de 4 KB și memoria SRAM de 16 KB (Figura 1.1).

În componența microcontroler-ului se găsesc 8 convertoare A/D pe 10 biți și 22 de pini de intrare / ieșire, iar ca și comunicare serial întâlnim: 2-UART, 3-SPI, 1-I2C. Acesta dispune de un cosum foarte mic de current, de 0.4mA și funcționează la o tensiune între 1.8V-5.5V. [3]

Figura 1.2. Atmega1284

Driver A4988

Modelul A4988 (Figura 1.4) este un driver complet cu microstepping, cu traductor încorporat, pentru o operare ușoară. Acesta este proiectat pentru a acționa motoarele pas cu pas bipolare în moduri full-, half-, quarter-, eighth-, and sixteenth-(Tabel 1.1) cu o tensiune de ieșire de până la 35 V și ± 2 A.

A4988 are un regulator de curent care are capacitatea de a funcționa într-un mod de operare lent sau mixt.

Traductorul reprezintă cheia implementării ușoare a modelului A4988. Introducerea unui impuls pe intrarea STEP va conduce motorul cu un microstep. Nu există tabele de secvențe de faze, linii de control de înaltă frecvență sau interfețe complexe pentru programare. Interfața A4988 este potrivită pentru aplicații în care un microprocesor complex nu este disponibil sau este supraîncărcat.

În timpul funcționării, comanda de tăiere din A4988 selectează automat modul de operare actual, Slow sau Mixed. Controlul combinat al curentului de operare are ca rezultat reducerea zgomotului sonor al motorului, precizia pasului sporită și disiparea redusă a puterii.

Sistemele de control intern de rectificare sincronă sunt furnizate pentru a îmbunătăți disiparea de putere în timpul funcționării PWM. Protecția circuitului intern include: întreruperea termică cu histereză, blocarea subtensiunii (UVLO) și protecția curentului încrucișat. Nu este necesară o secvențiere specială de pornire. [4]

Figura 1.1 Tabel pentru selectarea modurilor microstepping

Figura 1.4. Diagrama bloc a drivereului A4988

Caracteristici tehnice:

Tensiune motor: 8V – 35V;

Tensiune circuite logice: 3V – 5.5V;

Curent: 2A (MAX);

5 moduri pentru pași: full, 1/2, 1/4, 1/8 și 1/16;

Protecție la: subtensiune, supracurent și supratemperatură;

Rs = 0.1 Ω.

Driver ULN2003

ULN2003 este un circuit integrat de înaltă tensiune și curent ridicat, folosind tranzistori Darlington. Conține șapte perechi de colectori darlington cu emițători comuni. O pereche de tranzistoare Darlington este un aranjament de două tranzistoare bipolare. ULN2003 este potrivit pentru dispozitivele logice care funcționează TTL sau CMOS.

Un tranzistor Darlington (cunoscut și ca pereche Darlington) realizează o amplificare foarte ridicată a curentului prin conectarea a două tranzistoare bipolare în cuplaj DC direct, astfel încât curentul amplificat de primul tranzistor este amplificat în continuare de cel de-al doilea. Câștigul de curent rezultat este produsul celor ale tranzistorilor (1):

(1)

Cele șapte perechi Darlington din ULN2003 (Figura 1.5) pot funcționa independent, cu excepția diodelor catodice comune care se conectează la colectorii lor.

Acesta este utilizat în mod obișnuit pentru a controla motoarele pas cu pas. Fiecare canal sau pereche Darlington din ULN2003 funcționează la un curent de 500mA și poate rezista la un curent de maxim 600mA. [5]

Fiecare intrare a driverului conține o diodă Zener și o rezistență în serie pentru a controla curentul de intrare. Funționează la o tensiune cuprinsă între 3V și 5.5V iar motorul poate fi alimentat la o tensiune cuprinsă între 5V și 15V

Figura 1.5. Diagrama bloc pentru driverul ULN2003

Motorul pas cu pas

Motoarele pas cu pas sunt acele motoare de curent continuu care se mișcă în trepte discrete. Acestea dispun de bobine multiple care sunt organizate în grupuri numite "faze". Prin acționarea fiecărei faze în succesiune, motorul se va roti cu câte un pas.

Cu ajutorul driver-ului se poate obține o poziționare și un control foarte precise ale vitezei. Din acest motiv, motorul pas cu pas este motorul preferat pentru multe aplicații de control ale mișcării de precizie. [6]

Motoarele pas cu pas sunt utilizate în imprimante 3D, mașini CNC, mașini de prototipare, telescop de precizie, mașini de poziționare, actuatoare liniare, instrumente analitice și medicale etc.

Există două aranjamente de bază pentru bobinele electromagnetice într-un motor pas cu pas în două faze: unipolar și bipolar. Motorul stepper unipolar conține o bobină cu alimentare central pe fază (figura 1.6). Motoarele bipolare au o singură înfășurare pe fază. Curentul dintr-o înfășurare trebuie inversat pentru a inversa un pol magnetic, astfel circuitul de comandă trebuind să fie mai complicat, de obicei cu un aranjament de punte H (figura 1.7).

Motoarele stepper nu oferă o forță de cuplu sau de exploatare la fel ca servomotoarele sau motoarele DC. Avantajul lor față de aceste motoare este unul de control pozițional. [7]

Figura 1.6. Schema internă motor stepper unipolar Figura 1.7 Schema internă stepper bipolar

Motorul pas cu pas Nema 17 (42BYGHW609)

Nema 17 este cel mai popular din familia de motoare pas cu pas hibride. Pe piață se găsesc 27 de modele cu diferite dimensiuni, cuplul motoarelor fiind de la 11Ncm la 65Ncm. De asemenea, acestea mai pot fi deosebite prin gradele realizate într-un pas: 0,9 grade (400 pași/ revoluție) și 1,8 grade (200 pași / rotație) (figura 1.8). Motoarele furnizează curent pentru două bobine care vor da astfel o creștere de temperatură de 80 ° C.

Nema 17 (42BYGHW609) este un motor stepper bipolar, foarte ușor de folosit în diverse aplicații, fiind de asemenea și foarte precis. [9]

Specificații pentru 42BYGHW609:

Acuratețea pasului: ±5%;

Temperatură: 80 °C maxim;

Unghi pas: 1.8°;

Tensiune: 2.55V;

Curent: 1.7A;

Rezistență: 1.5Ω pe bobină;

Inductanță: 2.8mH.

Figura 1.8. Motor Stepper 42BYGHW609

Motorul pas cu pas (28BYJ-48)

28BYJ-48 (Figura 1.9) constituie un motor pas cu pas unipolar, foarte puternic, deși are dimensiuni reduse, costul acestuia fiind unul redus. Motorul dispune de un raport de transmisie de 64, iar unghiul pasului de 5.625°, permițând astfel o rotație completă în 4096 de pași. Dezavantajul constă însă în viteza mică de rotație (2). [8]

(2)

Figura 1.9. Schema internă și conectarea motorului stepper 28BYJ-48

Specificații pentru 28BYJ-48:

Tensiune: 5V;

Curent: 500mA;

Număr de faze: 4;

Frecvență: 100MHz;

Cuplu: 300 gf.cm;

Unghiul pasului: 5.625° /64.

Ecranul LCD

Ecranul LCD (Ecran cu cristale lichide) este un modul electronic de afișare ce se găsește într-o gamă largă de aplicații. Un afișaj LCD 16×2 este un modul foarte simplu. Un ecran LCD de 16×2 (Figura 1.10) indică faptul că poate afișa 16 caractere pe 2 linii. În acest LCD fiecare caracter este afișat în matrice de 5×7 pixeli, având două registre: Command și Data. Registrul de comandă stochează instrucțiunile de comandă date pe ecranul LCD.

O comandă constituie o instrucțiune dată LCD-ului pentru a face o sarcină predefinită, cum ar fi: inițializarea acesteia, ștergerea ecranului, setarea poziției cursorului, controlul afișajului etc.

Registrul de date stochează datele care urmează a fi afișate pe ecranul LCD. Datele sunt afișate în codul ASCII al caracterului ce trebuie afișat pe ecranul LCD. De asemenea, sunt utilizați 8 biți pentru citirea și scrierea comenzilor și a datelor. Pinul R/W în starea 'High' asigură comanda de citire, iar în starea 'Low' pe cea de scriere.

Mai mult decât atât, LCD-ul dispune de un un modul I2C  (PCF8574A) (Figura 1.11), permițând conectarea serial la microcontroller, doar prin utilizarea a două fire, SDA (data line) și SCL (clock line). Ca urmare, acest lucru permite folosirea eficientă a pinilor din microcontroller (Tabel 1.2)

Specificațiile LCD-ului sunt următoarele:

Număr de caractere: 16 caractere 2 linii;

Dimensiunea modului: 80 36 13,2 ;

Aria de vizibilitate: 66 16 ;

Aria activă: 56,2 11,5 ;

Tensiunea de alimentare: 4,5 – 5,5.

Tabel 1.2 Pinii ecranului LCD

Figura 1.10. Ecranul LCD Figura 1.11. Conectare ecran prin I2C PCF8574

Senzor infraroșu

Senzorii infraroșii funcționează transmițând o lumină infraroșie cu o anumită frecvență, detectând dacă o parte din lumină s-a reflectat înapoi la senzor.

Led-ul infraroșu funcționează între 940-950nm și este utilizat pentru sistemele generice de IR, inclusiv pentru controlul la distanță și detectarea obiectului fără atingere.

Aspectul LED-ului IR este însă identic cu un LED comun. Deoarece ochiul uman nu poate detecta luminile infraroșii, este imposibil pentru o persoană să identifice dacă un LED IR funcționează sau nu, camera telefonului mobil reprezentând soluția acestei probleme.

Un senzor de detectare al obiectelor cuprinde în principal un transmițător cu infraroșu, un receptor infraroșu, un amplificator și un potențiometru. În funcție de caracterul reflectorizant al unui obiect, dacă nu există niciun obstacol, razele infraroșii emise nu se vor întoarce la receptor. Dacă acest obstacol va exista însă, razele vor fi reflectate înapoi la receptorul infraroșu. Apoi, receptorul detectează semnalul și confirmă că există un obstacol în față. (Figura 1.12)

Figura 1.12. Senzor pentru detectarea obstacolelor

RFID (Radio-Frequency Identification)

RFID utilizează câmpuri electromagnetice pentru a identifica și a urmări automat etichetele atașate la obiecte, acestea conținând informații stocate electronic. Etichetele active au o sursă locală de alimentare, spre exemplu o baterie, putând funcționa la sute de metri de cititorul RFID. Spre deosebire codul de bare, eticheta nu trebuie să se afle în linia de vedere a cititorului, deci poate fi încorporată în obiectul urmărit. RFID este o metodă eficientă pentru identificarea automată și captarea datelor. [10]

Figura 1.13. RFID

Etichetele RFID sunt utilizate pe scară largă în ecusoane de identificare, înlocuind cardurile magnetice anterioare cu bandă magnetică. Aceste insigne trebuie să fie ținute la o anumită distanță de cititor pentru a putea autentifica titularul.

RC522 (Figura 1.13) funcționează la o tensiune de 3.3V și o frecvență de 13.56MHz. Conectarea cu microcontrolerul are loc prin comunicare serial SPI.

Modul Bluetooth (HC-06)

Bluetooth-ul reprezintă un modul standard pentru tehnologia wireless. Acesta este benefic pentru schimbul de date pe distanțe scurte de la dispozitivele fixe și mobile și construirea rețelelor personale. Bluetooth folosește undele radio UHF cu lungime de undă scurtă în bandă de la 2,4 la 2,485 GHz.

Transmiterea datelor dintre microcontroler și un dispozitiv echipat cu Bluetooth, spre exemplu un smartphone sau tabletă Android, se realizează foarte ușor cu ajutorul modulelor HC-06 (Figura 1.14). [11]

Bluetooth-ul funcționează prin comunicarea serial, iar datele sunt transmise pe pinul TX, fiind recepționate de pinul RX.

Figura 1.14. Bluetooth

Specificatii tehnice:

Tensiune de alimentare: 3.6 ~ 6V DC;

5V-tolerant: I / O;

Raza variază de la câțiva metri până la aproximativ douăzeci în aer liber;

Rata baud: 9600 bps;

Frecvență: 2,4 GHz.

Multiplexor

Multiplexor-ul sau MUX este un switch digital, denumit și selector de date. Acesta constă într-un circuit combinațional cu mai mult de o linie de intrare, o linie de ieșire și mai multe linii de selectare, permițând totodată informațiilor binare din mai multe linii sau surse de intrare să funcționeze la setul de linii selectate, linia de intrare fiind direcționată către o singură linie de ieșire.

Figura 1.15. MUX 16:2 Figura 1.16. Modul mux cu c.i. CD74HC4067

Un multiplexor de la 16 la 2 (Figura 1.15) are în componeța sa 16 intrări de date D0 până la D16, patru linii de selectare a intrărilor S3 până la S0 și o linie de ieșire. În funcție de combinațiile de linii selectate, multiplexorul decodează intrările.

Dispozitivele CD74HC4067 (Figura 1.16) sunt comutatoare analogice controlate digital care utilizează tehnologia cu un consum redus de energie.

Aceste multiplexoare / demultiplexoare analogice controlează tensiunile analogice care pot varia în intervalul de alimentare. Acestea sunt bidirecționale, iar pentru activarea ieșirilor se folosește tabelul de adevăr (Tabel 2). [14]

Tabel 2. Selectare canal din MUX

3. Implementarea soluției adoptate

Schema electrică

Schema electrică (Figura 2.8) împreună cu layout PCB-ul au fost create în programul Altium Designer. Acesta este un software de proiectare PCB, cu un pachet de automatizare a proiectării electronice pentru plăci și circuite imprimate, design FPGA și software, fiind dezvoltat și comercializat de Altium Limited din Australia.

Modulul de alimentare

Alimentarea microcontroller-ului și celorlalte componente are loc cu ajutorul unui Buck convertor. Acesta (convertor step-down) este un convertor de putere DC-to-DC care scade tensiunea de la intrarea din 12V, la ieșirea în 5V. Este o sursă în comutație (SMPS), conținând în mod obișnuit cel puțin doi semiconductori (o diodă și un tranzistor, deși convertoarele moderne de buck înlocuiesc frecvent dioda cu un al doilea tranzistor) și cel puțin un element de stocare al energiei, un condensator, un inductor sau cele două în combinație. [13]

Schema convertorului a fost creată prin intermediul circuitului integrat LM2576HVT-ADJ (Figura 2.7), capabil să conducă în sarcină până la 3A cu o stabilitate excelentă. Aceste dispozitive sunt disponibile în tensiuni de ieșire fixe de 3,3 V, 5 V, 12 V, 15 V sau o versiune cu ieșire reglabilă.

Seria LM2576 oferă un înlocuitor de înaltă eficiență pentru regulatoarele liniare cu trei terminale, reducând în mod substanțial dimensiunea radiatorului și, în unele cazuri, nefiind necesar un astfel de radiator.[12]

Figura 2.7. Schema pentru Buck Convertor

Figura 2.8. Schema electrică a plăcii de bază

LM2576HVT-ADJ este un circuit integrat la care se poate modifica tensiunea de ieșire cu ajutorul unui potențiometru sau din calcul cu ajutorul a două rezistențe (3):

(3)

, unde Vref =1.23V iar R1 și R2 trebuie sa fie între 1k si 5K

Pentru crearea circuitului (Figura 2.9) s-au folosit, de asemenea, următoarele: condensatoare electrolitice C1= 100uF, C2 = 1000uF, o diodă redresoare 1N5408 care rezistă până la 3A și o bobină toroidală de 100uH la 4.4A.

Figura 2.9. Schema 3D (Altium) Buck Convertor

RFID-ul, singura componentă din schema electrică care are nevoie de o tensiune de alimentare de 3.3V, a fost construită cu ajutorul unui circuit integrat, stabilizator de tensiune, LF33CV.

Seria LF00 este disponibilă în pachete PENTAWATT, TO-220, TO-220FP, DPAK și PPAK și într-o gamă largă de tensiuni de ieșire. Aceasta suportă un curent de maxim 1A, tensiune maximă de 16V, iar temperatura crește odată cu intensificarea puterii, 3°/W. Pentru circuit s-au folosit două condesatoare, și anume C3=0,1uF și C4= 22uF (Figura 2.10).

Figura 2.10. Circuit LF33CV

Microcontroller Atmega1284

Pentru a putea rula microcontroller-ul la parametrii optimi, este necesar un crystal de 16MHz și două condesatoare de 22pF, conectați la pinii XTAL1 și XTAL 2, după cum se observă în figura 2.11.

Figura 2.11. Atmega1284 conectare crystal 16Mhz

Tensiunea de alimentare a microcontroller-ului trebuie sa fie cuprinsă între 1.8V și 5.5V, iar consumul este de 40mA.

Figura 2.12. Atmega1284 harta pinilor

Programarea microcontroller-ului are loc prin intermediul unui adaptor USB la TTL, PL2303, pinul TX din TTL conectându-se la pinul PD0, iar RX-ul din TTL la pinul PD1 al microcontroller-ului (Figura 2.12).

Interconectarea blocurilor funcționale la microcontroller

RFID se conectează la microcontroller prin SPI prin intermediul următorilor pini (figura1.13):

SDA––––––––Digital pin PB4

SCK––––––––Digital pin PB7

MOSI–––––––- Digital pin PB6

MISO–––––––- Digital pin PB6

IRQ–––––––– Neconectat

GND––––––––GND

RST–––––––– Digital pin PD1

3.3V––––––––3.3V

Fiecare cartelă (tag) conține o memorie de aproximatv 1024 bytes și un cod unic de forma BD 31 15 2B, cu ajutorul instrucțiunilor, microcontrollerul salvând astfel codul în memorie, iar la apropierea tag-ului de cititor, acesta permite sau nu accesul.

Figura 2.13. Conectare RFID la micrcocontroller

LCD-ul se conectează prin comunicare serială I2C, folosind doi pini SDA (data line), aceștia pin fiind de cele mai multe ori pini analogici și SCL (clock line).

Cei 16 pini ai LCD-ului sunt conectați într-un modul, care folosește un circuit integrat PCF8574A, aparținând companiei Texas Instruments, reprezentând totodată un Bus bidirecțional de 8 biți. Acestuia îi este atribuită o adresă prin care are loc recunoașterea de către microcontroler.

I2C-ul este utilizat în mod obișnuit pentru atașarea circuitelor integrate periferice de viteză mică la procesoare și microcontrolere în comunicații pe distanțe scurte.

Pinii pentru transmisia serială ai microcontroller-ului se află în PC0 (SCL) și PC1 (SDA) (Figura 2.14).

Figura 2.14. Conectare MUX și LCD

MUX-ul este conectat prin 5 pini, 4 pini S0-S3 de selectare al canalului dorit și un pin SIG care oferă informații microcontroler-ului despre canalul selectat.

Pinul Enable este conectat la GND pentru a activa modul de intrare. Fiecare canal este atribuit unui senzor.

Prin selectarea unui canal pinul devine activ, iar prin intermediul pinului SIG are loc citirea senzorului, acest lucru realizeazându-se foarte repede.

În partea practică au fost utilizați 12 senzori de detectare a obstacolelor, care sunt poziționați deasupra locului de parcare destinat. Aceștia sunt conectați la MUX pentru a reduce numărul de pini utilizați de microcontroller.

MUX-ul citește astfel fiecare senzor în parte și transmite microcontroller-ului informații digitale de 0 sau 1. Microcontroler-ul primește aceste informații, iar printr-un calcul simplu de scădere transmite LCD-ului numărul exact de locuri disponibile, respectiv locuri ocupate.

Realizarea senzorilor de detecție a obiectelor are loc cu ajutorul următoarelor componente: leduri infraroșii de transmisie și recepție, amplificatoare LM358, rezistențe și potențiometre.

Schema electrică a senzorilor se poate observa mai jos în figura 2.15. Ledul L1 este ledul de transmisie a luminii infraroșii, iar L2 este ledul receptor. Pentru funcționare, L2 împreună cu

rezistența de 10K formează un divizor de tensiune care intră în amplificator, iar potențiometrul are rolul de a regla sensibilitatea.

Figura 2.15. Schemă electrică senzor infraroșu

De asemenea, pentru fiecare senzor au fost create un layout și plăcuțe cu circuite imprimate (Figura 2.16). Dimensiunea plăcuțelor este de 3.3cm x 2.3cm, iar grosimea traseelor măsoară 1.3mm.

Figura 2.16. Realizarea practică a senzorilor infraroși

Bluetooth-ul se conectează la microcontroller prin intermediul pinilor speciali de transmisie TX și recepție RX.

HC06 (Figura 2.17) funcționează prin comunicare serial. Aplicația Android este proiectată cu scopul transmiterii datelor seriale modulelor Bluetooth în momentul în care se apasă un anumit buton. Modulul Bluetooth de la celălalt capăt primește aceste date și le trimite către microcontroller prin pinul TX al modulului Bluetooth (pinul RX al microcontroller-ului). Codul verifică datele primite și le compară, astfel: dacă datele primite sunt cele atribuite locului de parcare, motoarele primesc comanda de aducere a obiectului în locul destinat.

Figura 2.17. Conectare Bluetooth la microcontroller

Motoarele sunt conectate prin drivere la microcontroller astfel:

Cele două motoare stepper 42BYGHW609 pentru sistemul de ridicare sunt controlate de două drivere A4988, care primesc simultan aceeași comandă din microcontroller. Conectarea driverelor se realizează astfel la fel ca în figura 2.18.

Figura 2.18. Conectare A4988 la motorul pas cu pas

Pinul VMOT și GND se conectează la o sursă în comutație de 12V, iar pentru a funcționa corect, se plasează un condesator electrolitc între GND și VCC de 100uF. Pentru partea de alimentare a modulului, pinii VDD și GND sunt conectați la partea de alimentare a microcontroller-ului, adică la 5V.

42BYGHW609 este un motor pas cu pas bipolar, ce conține 2 bobine interne, fiecare bobină fiind conectată la driver. Bobina 1 este conectată la un capăt în pinul 1A, iar celălalt capăt la 1B, iar bobina 2 la pinii 2A și 2B.

Comanda driver-ului este dată de pinii STEP, DIRECTION și ENABLE care sunt conectați prin microcontroller la PB1, PB2 și PB3. Dacă pe pinul ENABLE se aplică 1 logic, motoarele sunt pornite. Pinul DIR primește informații referitoare la direcția de rotire, iar pinul STEP primește informații referitoare la numărul de pași pe care motorul trebuie să-i execute.

Figura 2.19. Drivere A4988 lipite pe plăcuță de test

Sistemul de învârtire și plasarea obiectului în locul de parcare destinat sunt realizate cu ajutorul a două motoare pas cu pas 28BYJ-48, controlate de două drivere ULN2003.

28BYJ-48 sunt motoare unipolare, iar conectarea cu driver-ul și microcontroller-ul se realizează precum în figura 2.20.

Figura 2.20. Schema bloc driver 28BYJ-48

Motorul stepper 28BYJ-48 poate fi alimentat la o tensiune de 5V pe intrarea comună a bobinelor. Driverul este conectat la microcontroller prin intermediul a 4 pini de comandă. În figura 2.21 este prezentată conectarea motorului la driver-ul ULN2003.

Figura 2.21. Driverul ULN2003 împreună cu motorul 28BYJ-48

Implementarea PCB-ului

După realizarea schemei electrice în Altium, aceasta se exportă în proiectul PCB-ului. Fiecare componentă conține un footprint cu dimensiunile acesteia, aranjarea componentelor făcându-se după niște reguli predefinte.

Fiecare fir se trasează manual, existând o opțiune pentru aranjarea automată și trasare, însă aceasta nu este foarte precisă.

Partea de alimentare este constituită cu ajutorul unor trasee de 0.8mm, iar conectarea între componente cu ajutorul altor trasee, având grosimea de 0.5mm. Fiecare componentă este legată la placa centrală printr-un conector de tip ”tată”. Alimentarea este furnizată printr-un conector cu șurub ce dispune de două intrări. Fiecare senzor conține un pin care se conectează la MUX și 2 pini care se conectează la alimentare.

Figura 2.22. Proiectare 2D PCB

Programul Altium Designer oferă totodată și funcția de aranjare și creare a componentelor 3D (Figura 2.23), ajutând astfel utilizatorul în reducerea dimensiunilor de proiectare.

Figura 2.23. Proiectare 3D placă de baza

În plus, pentru o mai bună conectare a componentelor la GND și pentru a reduce numărul traseelor, s-a utilizat un plan de masă. Tot în figura 2.23 se poate observa acest plan cu albastru. Cablarea a fost realizată pe BOTTOM, iar printarea pe un singur strat, reducând astfel costurile plăcii.

Figura 2.24 este reprezentată de cablajul final imprimat și lipirea componentelor pe placă. Lipiturile s-au realizat la o temperatură de 300 de grade a stației de lipit, pentru protejarea componetelor.

Figura 2.24. Realizarea practică a plăcii de bază

Construcția platformei

Schema 3D a platformei a fost realizată cu ajutorul programului SketchUp. Acesta este un program de modelare 3D, acoperind o gamă largă de aplicații de desen precum: arhitectură, design interior, arhitectura peisajului, inginerie civilă și mecanică, design de jocuri video, etc.

Schema principială a platformei

Figura 2.1. Platforma privită din lateral

Figura 2.1 ilustrează platforma privită din unghiul lateral, de unde reiese poziționarea mașinilor în locurile destinate de parcare. În partea practică a fost utilizat plexiglas cu grosimea de 1 cm, tăiat în formă circulară cu diametrul de 60 cm, în mijloc diametrul găurii fiind de 30 cm.

Figura 2.2. Sistemul de ridicare

Pentru susținerea plăcilor de Plexiglas etajate s-au folosit bări filetante cu diametrul de 5.5 mm care sunt prinse cu piulițe de tip hexagon, iar pentru o stabilitate mai mare au fost aplicate tuburi de plastic.

Figura 2.2 ilustrează ansamblul de ridicare al obiectului de la un nivel la celălalt prin intermediul a două bări filetante, cu grosimea de 8 mm, spațierea dintre zimți fiind de 2mm (Figura 2.3), iar pentru prinderea și învârtirea bării s-au folosit prinderi cu rulmenti (Figura 2.4). Între cele două bări așezate paralel este poziționată o placă de Plexiglas, dreptunghiulară, cu dimensiunea de 10cm X 27 cm și cu grosimea de 4mm, fiind prinsă de bări cu piulițe (Figura 2.3).

În partea inferioară a platformei se poziționează cele două motoare stepper, care fac posibilă ridicarea prin învârtirea bărilor, de care se fixează cuplaje flexibile.

Figura 2.3. Bară filetantă Figura 2.4. Prindere cu rulment

Cu roșu (Figura 2.5) este reprezentată platoforma care vine așezată pe sistemul de ridicare, construită tot din Plexiglas, în formă circulară, rotirea acesteia fiind realizată cu ajutorul unui motor

pas cu pas 28BYJ-48, care este prins de axul platformei rotunde cu o curea din cauciuc, luată dintr-o imprimantă și adaptată acestui sistem.

Figura 2.5. Sistemul de rotire

Pentru a duce obiectul de pe sistemul de învârtire și ridicare, s-a creat un ansamblu CNC controlat de un motor stepper cu rotiță zimțată și curea (Figura 2.6) de care este prins, pe două bări rigide de aluminiu, două ghidaje cu rulment de 8 mm (Figura 2.7) și o bucată dreptunghiulară de plexiglas cu rol de deplasare față-spate.

Figura 2.6. Sistemul de poziționat mașina în locul de parcare

În partea inferioară a bucății de plexiglas este prins un ghidaj în forma literei L, intrând între roțile mașinii și permițând totodată un transport ușor către locul de parcare destinat.

Figura 2.7. Ghidaj cu rulment 8mm

Aplicația pentru Smartphone cu sistem de operare Android

App Inventor Android este o aplicație Web Open Source, furnizată inițial de Google și actualizată mai apoi de Institutul de Tehnologie din Massachusetts (MIT).

Aceasta permite utilizatorilor nou-programatori să creeze aplicații software pentru sistemul de operare Android (OS). App Inventor utilizează o interfață grafică, foarte asemănătoare cu interfața Scratch și StarLogo TNG, care permite utilizatorilor să creeze o aplicație ce poate funcționa pe dispozitive Android. În crearea aplicației, Google a atras atenția asupra unor cercetări importante în domeniul educațional, precum și asupra muncii efectuate în cadrul Google în mediile de dezvoltare online.

Cu ajutorul programului MIT App Inventor 2, s-a reușit realizarea unui program pentru a selecta locurile de parcare dorite, în figura 2.25 fiind ilustrată interfața finală a aplicației. Prin atingerea butonului ”Bluetooth” se selectează din lista telefonului conexiunea cu modulul Bluetooth asociat.

Figura 2.25. Aplicația pentru telefoane mobile cu sistem de operare Android

Programul are două funcții, astfel: o funcție de designe (Figura 2.26) – adică se construiește interfața – și o funcție cu blocuri, pentru realizarea comenzii software.

Pentru crearea design-ului aplicației au fost utilizate blocuri de tip Button and Label, fiecărui loc de parcare atribuindu-i-se un buton. [15]

Figura 2.26. Creare aplicație Android

Figura 2.27 este reprezentată de blocurile pentru controlul aplicației. Primele două blocuri reprezintă inițializarea Bluetooth, astfel, când butonul Bluetooth este apăsat, se va deschide lista de selectare a terminalelor Bluetooth.

În blocurile următoare sunt inițializate butoanele pentru fiecare loc de parcare, spre exemplu când se apasă butonul 1 prin Bluetooth se transmite mesajul 1 la microcontroller, iar microcontroller-ul se va ocup de comanda primită.

Figura 2.27. Blocuri pentru controlul aplicației

Rezultate experimentale

Atât testarea sistemului, cât și funcționarea acestuia sunt evidențiate prin rezultate practice. Majoritatea rezultatelor se observă de către utilizator direct pe LCD, precum locurile disponibile ale parcării și locurile ocupate. (Figura 4.1)

Figura 4.1 Afișare LCD

Pe fiecare loc de parcare se află un senzor infraroșu care detectează aflarea mașinii în locul destinat, microcontroller-ul preluând informația și operând un calcul de scădere.

Inițial sunt specificate 12 locuri de parcare în codul microcontroller-ului, dar pe parcursul ocupării locurilor de parcare acest număr scade.

Figura 4.2 Senzor infraroșu

În figura 4.3 se află placa de bază unde se conectează fiecare senzor, motor și circuit de comandă.

Figura 4.3 Placa de bază

Pentru a controla platforma să transporte mașinile în diferitele locuri de parcare se folosește ca și comandă aplicația mobilă și RFID-ul.

RFID-ul (Figura 4.4) citește cartelele pe care sunt memorate locurile de parcare și transmite comandă microcontroller-ului. Când RFID-ul citește o cartelă incorectă, acesta o va ignora.

Figura 4.4 RFID

Motoarele sunt controlate prin număr de pași, în tabelul 3.1 fiind notați pașii parcuși de platformă. Se preia mașina de la nivelul 1 locul 1 și se ridică la nivelul 3 la locul 2.

Figura 4.5 Stepper pentru poziționarea mașinii

Tabelul 4.1 Numărul de pași parcurși de fiecare motor.

Figura 4.6 Sistemul cu motor stepper pentru rotire

Figura 4.7 Stepper pentru ridicarea mașinii

Calculul pentru consumul plăcii de bază se găsește în tabelul 4.2, iar în figura 4.8 este prezentată măsurarea curentului cu ajutorul unui ampermetru.

Tabel 4.2 Consumul plăcii de bază

Figura 4.8 Măsurare consumului de curent a placă de bază

Pentru motoare cosumul de curent este trecut mai jos în tabelul 4.3

Tabel 4.3 Consumul de curent al motorelor

În figura 4.9 se poate observa măsurarea tensiunii de intrare, care este de 11.9V.

Figura 4.9 Tensiunea de alimentare pentru placa de bază

Fiecare componentă de pe placa de bază este alimentată la o tensiune măsurată de 5.23V (Figura 4.10), aproximativ tensiunea calculată din formula buck a convertorului: (4)

(4)

, unde Vref =1.23V iar R1 și R2 trebuie sa fie între 1k si 5K

Figura 4.10 Tensiunea de alimentare pentru fiecare componentă de pe placa de bază

RFID-ul este singurul modul care necesită o tensiune mai mică, de 3.3V, iar în figura 4.11 este măsurată tensiunea de pe acest modul:

Figura 4.11 Tensiunea de alimentare măsurată pentru RFID

În figurile de mai jos sunt prezentate poze cu mașina în diferite zone ale platformei, astfel:

Figura 4.12 Mașina se află poziționată în locul de parcare destinat

Figura 4.13 Mașina este preluată de sistemul de poziționare

Concluzii

În concluzie, sistemul Smart Parking reprezintă un sistem inovator de ultimă generație, care deși nu este încă răspândit în multe țări, reprezintă un interes internațional deosebit, fiind în curs de dezvoltare.

Pe lângă tehnologia avansată de care dispune în construirea acestuia, Autostadt Car Towers din Germania fiind renumit în acest sens (considerată cea mai mare și mai rapidă parcare inteligentă din lume, intrată în Cartea Recordurilor în anul 2014), sistemul oferă numeroase avantaje atât conducătorilor auto, prin: economisirea timpului, banilor și a carburantului, protejarea împotriva furturilor și a tamponărilor, oferind un mediu sigur și lipsit de stres, cât și mediului înconjurător, prin economisirea spațiului, modului silențios de funcționare și implicarea unui nivel scăzut de poluare.

Mai mult decât atât, senzorii reprezintă unele dintre cele mai importante componente din cuprinsul sistemului Smart Parking și de mare interes pentru șoferii auto. Astfel, o rețea de senzori poate monitoriza în mod constant spațiul de parcare și raportează starea de ocupare a sloturilor de parcare unui centru de control al parcării.

Ceea ce este atât de special în această inovație este că software-ul funcționează cu sisteme adaptive. Acesta apoi poate elabora previziuni pentru utilizatorii rutieri, de exemplu în ceea ce privește situația așteptată a locului de parcare la destinație sau rutele alternative prin zone cu volum mai mic de trafic.

O soluție RFID poate fi adăugată de asemenea sistemului de senzori. Autorizațiile legate de utilizator, cum ar fi permisele de parcare pentru rezidenți sau persoanele cu handicap, pot fi recunoscute automat în vehicule echipate cu etichete RFID.

Conducătorul auto poate, în final, să ajungă la destinație printr-un smartphone sau alt dispozitiv de navigație și să primească informații în timp real despre situația spațiului de parcare respectiv. [16]

Toți acești factori au contribuit în motivarea alegerii prezentei lucrări de diplomă, aceasta fiind destinată a pune în valoare aspectele benefice ale sistemului Smart Parking asupra societății contemporane, precum și a conferi o serie de informații despre realizarea acestuia, prin intermediul a trei aspecte esențiale:

fundamentarea teoretică, în cuprinsul căreia se află schema bloc a întregului sistem, unde sunt descrise pe larg toate componentele acestuia ( microcontroller, RFID, MUX, LCD, Bluetooth, senzor optic, drivere, motoare stepper, buck converter și smartphone-ul);

implementarea, funcționarea componentelor (construcția platformei, partea de alimentare, conectarea componentelor la microcontroller, realizarea PCB-ului și aplicația pentru smartphone cu sistem de operare Android)

prezentarea rezultatelor experimentale cu ajutorul pozelor din partea practică finală.

Bibliografie

Parcări în București http://www.digi24.ro/stiri/actualitate/evenimente/parcari-inteligente-in-sectorul-6-al-capitalei-dar-administrate-prost-484082

VW Smart parking http://www.industrytap.com/pick-new-car-worlds-fastest-automatic-parkingsystem/17745

Atmega https://en.wikipedia.org/wiki/Atmel_AVR

A4988 driver motor https://www.pololu.com/a4988_DMOS_microstepping_driver_with_translator

ULN2003 driver motor http://www.ti.com/lit/ds/symlink/ulq2003a.pdf

Stepper motor https://en.wikipedia.org/wiki/Stepper_motor

Stepper motor http://reprap.org/wiki/Stepper_motor

28BYj-48 motor stepper http://robocraft.ru/files/datasheet/28BYJ-48.pdf

Nema 17 motor stepper http://reprap.org/wiki/NEMA_17_Stepper_motor

RFID https://en.wikipedia.org/wiki/Radio-frequency_identification

Bluetooth https://www.olimex.com/Products/Components/RF/BLUETOOTH-SERIAL-HC-06/resources/hc06.pdf

LM2576 buck convertor http://www.ti.com/lit/ds/symlink/lm2576.pdf

Buck convertor https://en.wikipedia.org/wiki/Buck_converter

MUX http://www.ti.com/lit/ds/symlink/cd74hc4067.pdf

MIT invetor https://en.wikipedia.org/wiki/App_Inventor_for_Android

Smart Parking: A System that Could Help: Cities Rethink Parking
https://www.siemens.com/press/pool/de/events/2015/corporate/2015-09-iaa/background-smart-parking-e.pdf

Anexe

// codul pentru control al sistemului

#include <Wire.h>

#include <LCD.h>

#include <LiquidCrystal_I2C.h>

#include <AccelStepper.h>

#include <RFID.h>

#include <SPI.h>

#define SS_PIN 4

#define RST_PIN 10

#define I2C_ADDR 0x3F // adresa pentru LCD

#define Rs_pin 0 // Configurare pini pentru LCD

#define Rw_pin 1

#define En_pin 2

#define BACKLIGHT_PIN 3

#define D4_pin 4

#define D5_pin 5

#define D6_pin 6

#define D7_pin 7

// declarare pini motor stepper 1

#define HALFSTEP 8

#define motorPin1 24

#define motorPin2 25

#define motorPin3 26

#define motorPin4 27

// declarare pini motor stepper 1

#define motorPin11 11

#define motorPin22 12

#define motorPin33 13

#define motorPin44 14

int ena=2; // pin pentru activarea stepper 3

LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

AccelStepper stepper3(1, 0,1); // configurare pini stepper 3

AccelStepper stepper2(HALFSTEP, motorPin11, motorPin33, motorPin22, motorPin44);

AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);

//declarare pini pentru MUX

int s0 = 21;

int s1 = 20;

int s2 = 19;

int s3 = 18;

int SIG = 15;

int data='S'; // pentru a incepe in bucla S

int sum=0;

int loc=0;

int ocu=12; // 12 locuri

int val1=0;

RFID rfid(SS_PIN,RST_PIN); // RFID-ul

int serNum[5];

int cards[][5] = {

{224, 176, 25, 131, 202} // Adresa cardului memorat pentru RFID

};

bool access = false;

int MUX() // initializare RFID

{

readMux(0);readMux(1);readMux(2);readMux(3);readMux(4);readMux(5);readMux(6);readMux(7); readMux(8);readMux(9);readMux(10);readMux(11);

loc=ocu-sum; // se face scaderea pentru a vedea cate locuri de parcare mai sunt disponibile

}

void setup(){

lcd.begin (16,4); // Setare LCD

lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE); // aprindere led LCD

lcd.setBacklight(HIGH);

pinMode(s0, OUTPUT);

pinMode(s1, OUTPUT);

pinMode(s2, OUTPUT);

pinMode(s3, OUTPUT);

pinMode(24, OUTPUT);

pinMode(25, OUTPUT);

pinMode(26, OUTPUT);

pinMode(27, OUTPUT);

digitalWrite(s0, LOW);

digitalWrite(s1, LOW);

digitalWrite(s2, LOW);

digitalWrite(s3, LOW);

digitalWrite(24, LOW);

digitalWrite(25, LOW);

digitalWrite(26, LOW);

digitalWrite(27, LOW);

Serial.begin(9600);

stepper1.setMaxSpeed(700.0); //setare viteza motor

stepper1.setAcceleration(150.0);// setare accelerare motor

stepper2.setMaxSpeed(700.0);

stepper2.setAcceleration(150.0);

stepper3.setMaxSpeed(500);

stepper3.setAcceleration(120);

SPI.begin();

rfid.init();

pinMode(ena, OUTPUT);

digitalWrite(ena, HIGH);

Serial.begin(9600); // Baud rate pentru Bluetooth

}

void loop(){

if(rfid.isCard()){

if(rfid.readCardSerial()){

for(int x = 0; x < sizeof(cards); x++){

for(int i = 0; i < sizeof(rfid.serNum); i++ ){

if(rfid.serNum[i] != cards[x][i]) {

access = false;

break;

} else {

access = true;

}

}

if(access) break;

}

}

}

if(Serial.available() > 0)

{

data = Serial.read();

}

if (data=='2') // daca din aplicatie este selectat locul 2, parter loc 2

{

stepper1.enableOutputs (); // se activeaza motor 1, motorul pentru pozitionare

stepper1.runToNewPosition(13000); // motorul executa 13000 pasi

stepper1.disableOutputs (); // se dezactiveaza motorul

delay(3000); // asteapta 3 secunde

digitalWrite(ena, LOW); // se activeaza motor 3, motorul pentru ridicare

stepper3.runToNewPosition(400); // parcurge 400 de pasi

digitalWrite(ena, HIGH); // se dezactiveaza

delay(3000);

stepper1.enableOutputs ();

stepper1.runToNewPosition(0);

stepper1.disableOutputs ();

delay(3000);

stepper2.enableOutputs ();

stepper2.runToNewPosition(5300);

stepper2.disableOutputs ();

delay(3000);

stepper1.enableOutputs ();

stepper1.runToNewPosition(13000);

stepper1.disableOutputs ();

delay(3000);

digitalWrite(ena, LOW);

stepper3.runToNewPosition(0);

digitalWrite(ena, HIGH);

delay(3000);

stepper1.enableOutputs ();

stepper1.runToNewPosition(0);

stepper1.disableOutputs ();

delay(3000);

stepper2.enableOutputs ();

stepper2.runToNewPosition(0);

stepper2.disableOutputs ();

delay(3000);

data='S'; // la finalul buclei variabila se schimba in S(stop) pentru a iesi din bucla

}

if (data=='3') // parter locul 3

{

stepper1.enableOutputs ();

stepper1.runToNewPosition(13000);

stepper1.disableOutputs ();

delay(3000);

digitalWrite(ena, LOW);

stepper3.runToNewPosition(400);

digitalWrite(ena, HIGH);

delay(3000);

stepper1.enableOutputs ();

stepper1.runToNewPosition(0);

stepper1.disableOutputs ();

delay(3000);

stepper2.enableOutputs ();

stepper2.runToNewPosition(10400);

stepper2.disableOutputs ();

delay(3000);

stepper1.enableOutputs ();

stepper1.runToNewPosition(13000);

stepper1.disableOutputs ();

delay(3000);

digitalWrite(ena, LOW);

stepper3.runToNewPosition(0);

digitalWrite(ena, HIGH);

delay(3000);

stepper1.enableOutputs ();

stepper1.runToNewPosition(0);

stepper1.disableOutputs ();

delay(3000);

stepper2.enableOutputs ();

stepper2.runToNewPosition(0);

stepper2.disableOutputs ();

delay(3000);

data='S';

}

if (data=='6') // etajul 2 locul 2

{

stepper1.enableOutputs ();

stepper1.runToNewPosition(13000);

stepper1.disableOutputs ();

delay(3000);

digitalWrite(ena, LOW);

stepper3.runToNewPosition(400);

digitalWrite(ena, HIGH);

delay(3000);

stepper1.enableOutputs ();

stepper1.runToNewPosition(0);

stepper1.disableOutputs ();

delay(3000);

stepper3.enableOutputs ();

stepper3.runToNewPosition(3600);

stepper3.disableOutputs ();

delay(3000);

stepper2.enableOutputs ();

stepper2.runToNewPosition(5300);

stepper2.disableOutputs ();

delay(3000);

stepper1.enableOutputs ();

stepper1.runToNewPosition(13000);

stepper1.disableOutputs ();

delay(3000);

digitalWrite(ena, LOW);

stepper3.runToNewPosition(-400);

digitalWrite(ena, HIGH);

delay(3000);

stepper1.enableOutputs ();

stepper1.runToNewPosition(0);

stepper1.disableOutputs ();

delay(3000);

stepper2.enableOutputs ();

stepper2.runToNewPosition(0);

stepper2.disableOutputs ();

delay(3000);

stepper3.enableOutputs ();

stepper3.runToNewPosition(-3600);

stepper3.disableOutputs ();

delay(3000);

data='S';

}

if (data=='b') // etajul 3 locul 2

{

stepper1.enableOutputs ();

stepper1.runToNewPosition(13000);

stepper1.disableOutputs ();

delay(3000);

digitalWrite(ena, LOW);

stepper3.runToNewPosition(400);

digitalWrite(ena, HIGH);

delay(3000);

stepper1.enableOutputs ();

stepper1.runToNewPosition(0);

stepper1.disableOutputs ();

delay(3000);

stepper3.enableOutputs ();

stepper3.runToNewPosition(7900);

stepper3.disableOutputs ();

delay(3000);

stepper2.enableOutputs ();

stepper2.runToNewPosition(5300);

stepper2.disableOutputs ();

delay(3000);

stepper1.enableOutputs ();

stepper1.runToNewPosition(13000);

stepper1.disableOutputs ();

delay(3000);

digitalWrite(ena, LOW);

stepper3.runToNewPosition(-400);

digitalWrite(ena, HIGH);

delay(3000);

stepper1.enableOutputs ();

stepper1.runToNewPosition(0);

stepper1.disableOutputs ();

delay(3000);

stepper2.enableOutputs ();

stepper2.runToNewPosition(0);

stepper2.disableOutputs ();

delay(3000);

stepper3.enableOutputs ();

stepper3.runToNewPosition(-7900);

stepper3.disableOutputs ();

delay(3000);

data='S';

}

if(data=='S') // pentru bucla S

{

for(int i = 0; i < 12; i++ ){ // se citesc de pe mux 12 canale

lcd.setCursor (0,0); // se scrie pe LCD pe linia 0 caracterul 0

MUX();

lcd.print("LIBERE ");

lcd.print(sum);

lcd.setCursor (0,1);

lcd.print("OCUPATE ");

lcd.print(loc);

delay(500 );

sum=0;

loc=0;

lcd.setCursor (9,0);

lcd.print(" ");

delay(1);

}

}

}

int readMux(int channel){ // se initalizeaza mux-ul, fiecare canal in parte

int controlPin[] = {s0, s1, s2, s3};

int muxChannel[16][4]={

{0,0,0,0}, //channel 0

{1,0,0,0}, //channel 1

{0,1,0,0}, //channel 2

{1,1,0,0}, //channel 3

{0,0,1,0}, //channel 4

{1,0,1,0}, //channel 5

{0,1,1,0}, //channel 6

{1,1,1,0}, //channel 7

{0,0,0,1}, //channel 8

{1,0,0,1}, //channel 9

{0,1,0,1}, //channel 10

{1,1,0,1}, //channel 11

{0,0,1,1}, //channel 12

{1,0,1,1}, //channel 13

{0,1,1,1}, //channel 14

{1,1,1,1} //channel 15

};

for(int i = 0; i < 4; i ++)

{

digitalWrite(controlPin[i], muxChannel[channel][i]);

}

int val = digitalRead(SIG);

sum+=digitalRead(SIG);

return val;

}

Similar Posts