Platforma Mobila cu Control de la Distanta Prin Intermediul Unui Smartphone
Platforma mobila cu control de la distanta prin intermediul unui smartphone
Capitolul 1
Introducere
1.1 Prezentare generală
Dezvoltarea rapidă a electronicii în ultimii 20 de ani, prin apariția acesteia in toate domeniile industriei cât si in bunurile de larg consum se datorează faptului dorinței omului de a automatiza toate procesele tehnologice și de a ușura munca oamenilor. Încapsularea componentelor în circuite integrate digitale a produs o explozie in ceea ce priveste progresul electronic fiid posibilă aplicarea lor în orice domeniu (industrial, medicină, casnic, militar etc.) Având la bază ideile de flexibilitate în implementare și testare, parametrizare, posibilitatea de reutilizare, abstractizare structurală și funcțională a structurilor digitale, s-au născut începând de prin 1980 limbajele de descriere hardware și software.
Lucrarea de față își propune să prezinte folosirea acestor circuite integrate pentru a realiza o mașină cu control de la distanță sau în regim autonom prin ocolirea obstacolelor. Această mașină poate fi folosită (în cazul conectării unei camere video) la analiza unor găuri de dimensiuni mici în care omul nu poate pătrunde sau ca o jucărie pentru copii.
Mașina poate fi controlată de la distanță foarte usor prin intermediul PC-ului sau al unui smartphone prin intermediul unei interfețe pentru comunicații wireless(în cazul nostru Bluetooth). Am ales acest proiect deoarece mi-a plăcut ideea de a face o mașină autonomă care de asemenea să aiba posibilitatea de a fi controlată de la distanță. Este foarte potrivită pentru copii de asemenea cu puține modificări poate fi folosită si în alte scopuri, cum ar fi măsurarea suprafeței unei încaperi, analiza unor grote în care nu are acces omul, măsurarea distanței parcurse etc.
Proiectul este structurat în trei capitole, fiecare având subcapitole, care sunt urmate la rândul lor de o serie de concluzii si referințe bibliografice.
Primul capitol este unul introductiv, în care sunt prezentate scopul lucrarii, câteva date despre mașină precum și schema bloc.
În capitolul doi este prezentat părțile componente și descrierea acestora.
În capitolul trei este prezentată construcția și programarea mașinii parcurgând toate etapele necesare finalizării părții practice, realizarea structurii mecanice si a celei electrice și de control / programarea circuitului.
1.2 Schema bloc
Capitolul 2
Proiectare și implementare
2.1 Unitatea electronică de control (Arduino Mega 2560)
Pentru implementarea acestui proiect se va folosi platforma Arduino. Aceasta este o placă ce ajuta calculatoarele să examineze și să controleze mult mai mult lumea fizică decât un computer. Arduino este o placa de circuit mic cu un microcontroler Atmel, oscilator, alimentare etc. Poate fi utilizat atît de persoane cu experiență de programare cât și începători. Arduino a fost dezvoltat în Italia de către Massimo Banzi și un grup de oameni care au crezut că software-ul și hardul trebuie să fie „Open Source” și disponibil pentru toată lumea.
Arduino Mega 2650 (Figura 2.1) este o placă de dezvoltare cu microcontroler integrat ATmega 2560. Are 54 pini digitali de intrare/ieșire (din care 15 pot fi utilizați ca ieșiri PWM ), 16 intrări analogice, 4 UART (porturi seriale hardware), un oscilator de cristal de 16 MHz, o conexiune USB, un conectror de putere, mufă ICSP și un buton de resetare.
Figura 2.1 Arduino Mega 2560
2.1.1 Microcontrolerul Mega 2560
Elementul principal al platformei este Atmel AVR Atmega 2560, bloc negru, pătratic având pe toate laturile a câte 25 pini proeminenți.
Considerat și mircocalculator, acesta conține o unitate centrală de procesare (CPU), memorie RAM/ROM, EEPROM, clock și periferice într-un singur pachet.
Figura 2.2 Schema bloc a microcontrolerului
ATmega 2560 face parte din familia de microcontrolere “AVR” pe 8 biți.
Familia de microcontrolere AVR pe 8 biți prezintă următoarele caracteristici:
• Are memorie Flash programabilă integrată, folosită ca memorie de program. Toate procesoarele AVR au memorie de program integrată. Asta înseamnă că nu ai nevoie de memorii EPROM sau ROM externe pentru a stoca codul programelor. Programarea se poate face în două moduri: serial și paralel.
• Are 32 de regiștri de lucru de 8 biți fiecare (acest lucru este specific procesoarelor RISC). Numărul mare de regiștri de lucru permite stocarea variabilelor în interiorul procesorului, în loc să fie stocate în memorie, lucru care necesită un timp mai lung pentru accesare. În acest fel crește viteza de execuție a programului (deci va rula mai repede).
• Are memorie de date integrată de tip EEPROM (Electrically Erasable Programmable Read-Only Memory) și memorie RAM integrată. Unitatea centrală de prelucrare are arhitectură Harvard, iar memoriile de tip RAM și EEPROM ale microcontrolerului sunt memorii de date, fiind folosite pentru a stoca variabile, respectiv constante.
• Are frecvența de lucru care poate fi controlată prin software de la 0 la 16 MHz. Cele mai multe instrucțiuni sunt executate într-un singur ciclu de tact, ceea ce duce la îmbunătățirea performanței de 10 ori față de procesoarele convenționale care operează la aceeași frecvență (de exemplu: Intel 8051).
• Realizează funcția de RESET fără decuplarea circuitului.
• Are un timer programabil încorporat cu circuit de prescalare separat, care este folosit pentru sincronizarea aplicațiilor.
• Surse interne și externe de întrerupere.
• Are un timer watchdog cu oscilator independent, care este folosit pentru recuperarea informațiilor în caz de apariția unei erori software, dar mai poate fi folosit și în alte aplicații.
• Are 6 moduri de operare pentru economisirea energiei. Poate lucra în modurile de operare SLEEP și POWER DOWN, moduri ce economisesc energie, atunci când procesorul nu lucrează.
• Multe cipuri au oscilator integrat RC, care micșorează și mai mult numărul componentelor în cazul microcontrolerelor care-l conțin.
• Sunt prevăzute cu o gamă largă de dispozitive de I/O și de periferice încorporate.
• Beneficiază de existența unui set unitar de instrumente software pentru dezvoltarea aplicațiilor.
• Are o compatibilitate mare, pornind de la procesoare mici cu 8 pini și ajungând la procesoare cu 68 de pini.
Microcontrolerele din familia AVR prezintă o organizare de tip RISC din punctul de vedere al execuției unei instrucțiuni pe ciclu mașină. Prezența unor blocuri interne precum: oscilator intern, timere, unitate UART (Universal asynchronous receiver/transmitter), interfață SPI, rezistoare pull-up, PWM (pulse width modulation), convertoare analog-digitale, comparatoare analogice determină utilizarea acestor microcontrolere într-o gamă foarte largă de aplicații.
Specific arhitecturii Harvard, microcontrolerele AVR folosesc spații de memorie și magistrale de acces separate pentru coduri și pentru date. Memoria de program care este de tip FLASH integrată, poate fi programată fără scoaterea din sistem, ceea ce permie efectuarea rapidă de upgrade-uri în programe. Instrucțiunile acestei familii de microcontrolere au fost proiectate pentru a reduce dimensiunea unui program scris în limbaj C sau în limbaj de asamblare. Posibilitatea programării memoriei FLASH și a memoriei EEPROM, determină ca aceste microcontrolere să aibă o largă utilizare datorată costului mic de dezvoltare a unei aplicații (au timpul de proiectare scurt).
Aceste microcontrolere au consum redus de energie. Domeniul tensiunilor de alimentare este cuprins între 1,8V și 5V. Prezintă 6 moduri diferite de operare cu consum redus de energie, ceea ce ne asigură că aceste microcontrolere nu vor consuma energie decât atunci când este nevoie. Controlul software al frecvenței de tact garantează o viteză maximă de execuție atunci când este nevoie, iar în restul timpului microcontrolerul poate trece în modul STANDBY, unde consumul de energie este minim. Utilizarea acestor microcontrolere poate reduce semnificativ timpul de dezvoltare a unei aplicații datorită prezenței unui bloc de depanare în timp real, circuitul aflându-se chiar pe placă.
2.1.2 Blocul de alimentare
Pinii de alimentare:
• Vin – tensiunea de intrare la placa Arduino când folosește o sursă de alimentare externă (spre deosebire de 5 V la alimentarea prin USB). Se alimentează cu tensiune prin intermediul acestui pin sau in cazul alimentarii prin mufa de alimentare conexiunea se face de asemenea prin pinul Vin.
• 5V – sursa de alimentare regulată care alimentează microcontrolerul și celelalte componente de pe placa. Aceasta tensiune poate proveni fie de la pinul Vin printr-un regulator de pe placă, fie de la conexiunea USB sau alte surse regulate de 5 V.
• 3.3 V – tensiunea generată din interiorul placuței. Curentul maxim suportat este de 50 mA.
• GND – masa (pinul alimentare).
• IOREF – acest pin de pe placa Arduino furnizează tensiunea cu care functioneaza microcontroler-ul. Este situat langă pinul de reset, pentru a indica viitoarelor versiuni de shield-uri cu cât sunt alimentate 5 V sau 3.3 V. Definirea portului ca Output va schimba starea lui din pin digital de intrare in pin digital de iesire. Starea lui in modul High va determina controlerul sa aplice o tensiune constanta de 5V pe pin.
O categorie specială de pini digitali sunt pinii PWM (Pulse Width Modulation). Pe acești pini se pot aplica tensiuni variabile, ceea ce nu este posibil in cazul pinilor digitali normali care pot scoate fie 0V, fie 5V. Pentru a aplica tensiunea dorită, controlerul va scoate pe port 5V de multe ori pe secundă, astfel încât media rezultantă să fie cea cerută. Doar câțiva pini suportă funcția PWM. In cazul Arduino UNO acestia sunt: pinii digitali 3, 5, 6, 9, 10, 11.
Putem grupa multitudinea de senzori ce pot fi cuplați la Arduino în două mari clase și anume:
• fără logică;
• cu logică.
Fără logică:
În această categorie intră ledurile, butoanele, potențiometrele, releele, senzorii de lumină, temperatură, umiditate, îndoire, fum etc. Aceste produse au două sau trei fire:
• Gnd – acest fir este masa și va fi cuplat în portul Gnd din Arduino.
• Vcc – acest fir este alimentarea și va fi conectat la portul Arduino Vin de +3.3V sau +5V, în funcție de tipul de alimentare cerut de senzor.
• Out/Analog Out – doar în cazul deficiturilor de intrare. Prin acest fir vom citi datele de la senzorul nostru, aceste date sunt tensiuni cuprinse între 0 și 5V. În general acest fir se cuplează la porturile analogice A0->A5.
• Data/Digital – doar în cazul deficiturilor de ieșire (Ex: relee, leduri). Acest pin poate fi conectat la porturile digitale D0->D13. Portul digital conectat va fi setat ca Output iar atunci când se va scrie valoarea 'High' pe acest port, Arduino va genera 5V iar device-ul cuplat se va activa.
Cu logică:
În această categorie intră LCD-urile, modulele infraroșu, modulele Bluetooth, modul ceas, display-uri etc.
Conectarea pinilor se face la fel, cu mențiunea că nu se folosesc pinii analogici. Pentru comunicare se folosesc diverse protocoale de comunicație pentru care se găsesc librării software deja scrise.
2.1.3 Comunicarea
Tendința în electronica zilelor noastre este, evident, minimizarea. Orice circuit integrat, pentru protecție și o bună funcționare, este încapsulat. Cea mai mare problemă a circuitelor integrate este comunicarea cu exteriorul. Cea mai mare parte din capsulă este ocupată de pinii circuitului. Pentru a reduce cât mai mult și numărul lor, proiectanții au dezvoltat protocoale de comunicare.
Comunicarea serială este o comunicare de tip digital, în sensul că pe fir se transmit biți (la fel cum se întâmplă într-o rețea de calculatoare, doar că folosind un protocol mult simplificat). Această comunicare serială are loc întotdeauna între Arduino și calculator, atunci când Arduino este programat. O comunicare serială are loc întotdeauna la o anumită rata de transfer, care determină viteza cu care se transmit bitii pe fir. Rate comune de transfer sunt 9600, 19200, 57600, 115200.
SoftwareSerial este tot o modalitate de comunicare serială, doar că, în loc de a utiliza pinii RX si TX ai microcontroller-ului (care sunt dedicați pentru o astfel de comunicare), utilizăm o librărie software care emuleaza comunicarea folosind (aproape) oricare doi Pini digitali ai plăcii Arduino. Avantajul imediat este faptul că în acest mod putem conecta placă Arduino cu mult mai multe dispozitive seriale.
Cel mai simplu protocol de comunicare pentru circuite integrate digitale este SPI (Serial Peripheral Interface), o modalitate de a comunica cu dispozitive de tipul master – slave. Un dispozitiv este master (de obicei Arduino) și celelalte dispozitive sunt slave. Comunicarea SPI se face folosind 4 semnale (fire de conexiune). Aceste semnale sunt SS (53), MOSI (51), MISO (50) și SCK (52):
Semnalul select SS (slave select) este activ pe 0 logic. Atunci când valoarea din acest canal este LOW adică 0 logic, dispozitivul slave comunica cu master-ul. Când valoarea SS este HIGH, atunci dispozitivul ignora comunicarea SPI. În acest mod se pot conecta pe același canal SPI oricât de multe dispozitive, cu condiția ca fiecărui dispozitiv să i se atașeze un canal Slave Select. Pentru a inițializa o transmisie trebuie să avem un front negativ pe SS iar pentru a încheia o transmise un front pozitiv pe SS. Semnalul are rolul de a selecta circuitul slave pentru comunicare.
MOSI este semnalul master out, slave in. Masterul are în componență un registru de 8 sau mai mulți biți. În funcție de modul în care funcționează magistrala (buss-ul) SPI, pe front de SCK este transmis câte un bit din registrul intern, primul bit fiind MSB (Most significant bit). MOSI este conectat la LSB-ul (least significant bit) registrului intern al slave-ului. Cu alte cuvinte este firul prin care dispozitivele master trimit date către slave.
MISO este semnalul master in, slave out. Slave-ul are în componență un registru de 8 sau mai mulți biți (egal cu numărul de biți din master). Identic cu funcționarea MOSI, pe fiecare front de SCK este transmisă informația din registrul intern al slave-ului, primul bit fiind MSB. MISO este conectat la LSB-ul masterului. Cu alte cuvinte este firul prin care dispozitivele slave trimit date către master.
Semnalul SCK este semnalul de tact al buss-ului SPI. Este stabilit de alte 2 semnale ce determina 4 moduri de funcționare ale buss-ului. Primul determină polaritatea ceasului (dacă semnalul este activ pe 0 sau 1 logic) , iar al doilea faza ceasului (dacă transmiterea biților pe MOSI și MISO se face pe front pozitiv sau negativ). Cu alte cuvinte este firul prin care este transmis clock-ul. Practic, protocolul SPI este un protocol de interschimbare a datelor intre master și slave. Nu poate avea loc transfer de date fără interschimbare.În cazul în care avem mai multe circuite de tip slave, acestea pot fi ori selectate de același semnal, caz în care MOȘI și MISO sunt indentice, ori selectate de semnale SS diferite (număr de semnale egal cu numărul de circuite de tip slave), caz în care informația este interschimbată între circuitele slave și master în lanț.
Comunicarea prin SPI se face pentru fiecare dispozitiv diferit. Acest lucru înseamnă că trebuie acordată o atenție sporită datasheet-ului atunci când se scrie codul.
Comunicarea I2C (Inter Integrated Circuits) este un mod interesant de comunicare, în sensul că necesită doar două fire de comunicare și permite conectarea a oricât de mult dispozitive (cu adrese diferite). Fiecare dispozitiv I2C are o adresă (care se poate sau nu modifica). De obicei, se întâlnesc dispozitive I2C cu adresa fixă (care nu se poate modifica), sau dispozitive la care se poate alege adresa I2C dintr-o listă de câteva adrese prestabilite, lucru care de obicei se face prin conectarea unui pin de adresa – marcat de obicei ADDR– la pinul GND, sau VCC, sau SDA (Serial Data line), sau SCL (Serial Clock Line).
Ca și în cazul SPI, a înțelege modul de comunicare citind datasheet-ul dispozitivului I2C nu este facil. Primul lucru care se face atunci când este nevoie să se comunice cu un dispozitiv I2C este căutarea unei librării deja scrise pentru dispozitivul respectiv. În acest mod, singurul lucru de care trebuie de ținut cont este adresa dispozitivului. Mai departe, modul concret de comunicare este realizat în întregime de librărie, accesul fiind doar la informația utilă.
În cazul Arduino MEGA, pinii I2C pentru Arduino sunt pinul digital 20 (care este pinul SDA), și respectiv 21 (care este pinul SCL). Pentru a folosi un dispozitiv I2C, se conectează pinul SDA al dispozitivului cu pinul SDA al Arduino, pinul SCL al dispozitivului cu pinul SCL al Arduino. În plus, în funcție de dispozitiv, s-ar putea să fie necesar de a conecta și pinul de adresa la GND sau la VCC (în cele mai multe cazuri, pinul de adresa este deja conectat, dar nu întotdeauna).
Figura 2.3 Pinii de comunicare
2.1.4 Programarea microcontrolerului
Partea de software a platformei este integrată într-o interfață grafică de tip IDE bazată pe limbajul de programare Processing . Programarea controlerului de pe platforma fizică se face folosind limbajul de programare Arduino. Cu platformele fizice Arduino calculatorul poate fi transformat într-un instrument de măsură complex sau într-un dispozitiv inteligent de testare și evaluare a prototipurilor.
Soft-ul împreună cu driverele sunt disponibile și se pot descărca de la adresa https://www.arduino.cc/en/Main/Software. Înainte de a putea programa placa Arduino trebuie instalate driver-ele pe PC. În cazul în care se rulează pe Linux, nu este nevoie de instalarea acestora. În final, în Device Manager, în secțiunea Ports (COM & LPT) se găsește o intrare numită în cazul de fata “Arduino Mega 2560(COM13)”.
2.1.4.1 Mediul integrat de dezvoltare (IDE) Arduino
Mediul integrat de dezvoltare Arduino (Figura 2.4) este destinat scrierii programelor ce pot fi încărcate pe platformele fizice Arduino. Interfața este scrisă în Java și mediul de programare folosește limbaje de programare de tip open source precum Processing. Interfața este multiplatformă, putând rula în Windows și Linux. Programul poate fi obținut atât ca executabil specific platformei de lucru existente dar și sub formă de cod sursă care se poate compila într-un mod destul de accesibil.
Orice program Arduino are 2 secțiuni. Secțiunea “setup”, care este rulată doar o singură dată, atunci când placa este alimentată (sau este apăsat butonul “Reset”) și secțiunea “loop”, care este rulata în ciclu atât timp cât este alimentată placă. Astfel, în rutină “setup” se pune de obicei cod de inițializare, iar în rutină “loop”, se scrie partea principală a programului care urmează rulat.
După instalare interfața principală a programului arată ca în captură de ecran de mai jos:
Figura 2.4 Mediul de programare Arduino
În care:
Verifică. Verifică corectitudinea codului scris.
Încarcă. Compilează și încarcă la I/O placa Arduino.
Nou. Creează o schiță nouă.
Deschide. Deschide un proiect.
Salvează. Salvează proiectul curent.
Monitorizare serială. Comunicarea prin portul serial cu calculatorul.
ARDUINO IDE permite scrierea programului pe calculator, care este format dintr-un set de instrucțiuni pas cu pas pe care le încarci apoi în ARDUINO. După încărcarea programului propriu-zis pe placa de dezvoltare, ARDUINO va efectua instrucțiunile date și va interacționa cu mediul. ARDUINO numește aceste programe “Sketches” (schițe).
2.2 Comanda motoarelor cu ajutorul shield-ului L293D
Pentru comanda motoarelor se folosește shield-ul L293D (Figura 2.5). Pe această placă se găsesc 2 circuite integrate L293D (1) care permite dirijarea motoarelor de putere mică cu un consum de curent de până la 600 mA pe canal. Două blocuri terminale (2) a câte cinci pini pot fi observați 4 conectori pentru motoare (M1, M2, M3, M4), pinul central al blocurilor este tras la masă și servește pentru comoditate la conectarea motorlui treptat cu 5 fire. Utilizarea a doua intrgrate L293D permite conectarea a patru motoare DC sau 2 servomotoare sau două motoare DC si un servomotor. Pentru controlul direct al ieșirilor integratelor L293D (IN1, IN2, IN3, IN4) răspunzătoare de direcția de rotație, este nevoie de 4 ieșiri iar în cazul nostrum pentru cele doua vom folosi 8. Pentru a reduce cât mai mult numărul de terminale de control intră în joc registrul de deplasare 74HC595 (3). Datorită registrului se reduc pinii de la 8 la 4. De asemenea pe placă se găsesc 2 conectrori pentru servomotoare (4) . Alimentarea shield-ului este efectuată fie de un terminal din exterior (5) sau printr-un jumper (5) (+M este conectat la ieșirea Vin de la arduino sau de la o sursă separată). Tensiunea de alimentare optimă este de 6-12 V.
Figura 2.5 Schema de comanda a motoarelor
2.2.1 Circuitul integrat L293D
L293D poate controla simultan două motoare de putere mică în orice direcție utizând 4 pini ai microcontrolerului.
Putem enumera următoarele caracteristici:
Limita curentului de ieșire pe canal este de 600mA, limita maximă a curentului de ieșire însă poate fi 1.2A (non-repetitiv). Acest lucru semnifică faptul ca nu pot fi controlate motoare mari.
Tensiunea de alimentare poate ajunge până la 36V.
Catalogul menționează „o temperatură de protecție” încorporată în IC. Acest lucru înseamnă un sensor intern ce măsoară temperatura și oprește motoarele dacă temperature depășește o valoare setată.
O altă caracteristică importantă o reprezintă diodele interne. Aceste diode protejează motoarele de supratensiunile care pot să apară.
Acest circuit integrat conduce nu numai motoare de curent continuu ci poate fi folosit și pentru controlul servomotoarelor
Figura 2.6 Schema bloc al integratului L293
2.3 Motoarele
Un motor electric (sau electromotor) este un dispozitiv electromecanic ce transformă energia electrică în energie mecanică. Transformarea în sens invers, a energiei mecanice în energie electrică, este realizată de un generator electric.
Majoritatea motoarelor electrice funcționează pe baza forțelor electromagnetice ce acționează asupra unui conductor parcurs de curent electric aflat în câmp magnetic. Există însă și motoare electrostatice construite pe baza forței Coulomb și motoare piezoelectrice.
Fiind construite într-o gamă extinsă de puteri, motoarele electrice sunt folosite la foarte multe aplicații: de la motoare pentru componente electronice (hard disc, imprimantă) până la acționări electrice de puteri foarte mari (pompe, locomotive, macarale).
Motoarele electrice pot fi clasificate după tipul curentului electric ce le parcurge: motoare de curent continuu și motoare de curent alternativ. În funcție de numărul fazelor curentului cu care funcționează, motoarele electrice pot fi motoare monofazate sau motoare polifazate (cu mai multe faze).
Motorul de curent continuu a fost inventat în 1873 de Zénobe Gramme prin conectarea unui generator de curent continuu la un generator asemănător. Astfel, a putut observa că mașina se rotește, realizând conversia energiei electrice absorbite de la generator. Astfel el a constatat, că generatorul "inițial" era de fapt o mașină electrică reversibilă, care putea lucra ca un convertizor de energie bidirecțional.
Motorul de curent continuu are pe stator polii magnetici și bobinele polare concentrate care creează câmpul magnetic de excitație. Pe axul motorului este situat un colector ce schimbă sensul curentului prin înfășurarea rotorică astfel încât câmpul magnetic de excitație să exercite în permanență o forță față de rotor.
Motoarele de curent alternativ funcționează pe baza principiului câmpului magnetic învârtitor. Acest principiu a fost identificat de Nikola Tesla în 1882. În anul următor a proiectat un motor de inducție bifazat, punând bazele mașinilor electrice ce funcționează pe baza câmpului magnetic învârtitor. Ulterior, sisteme de transmisie prin curent alternativ au fost folosite la generarea și transmisia eficientă la distanță a energiei electrice, marcând cea de-a doua Revoluție industrială. Un alt punct important în istoria motorului de curent alternativ a fost inventarea de către Michael von Dolivo-Dobrowlsky în anul 1890 a rotorului în colivie de veveriță.
2.3.1 Motoarele de curent continuu
Motorul de curent continuu a fost inventat în 1873 de Zénobe Gramme prin conectarea unui generator de curent continuu la un generator asemănător. Astfel, a putut observa că mașina se rotește, realizând conversia energiei electrice absorbite de la generator. Astfel el a constatat, că generatorul "inițial" era de fapt o mașină electrică reversibilă, care putea lucra ca un convertizor de energie bidirecțional.
Motorul de curent continuu are pe stator polii magnetici și bobinele polare concentrate care creează câmpul magnetic de excitație. Pe axul motorului este situat un colector ce schimbă sensul curentului prin înfășurarea rotorică astfel încât câmpul magnetic de excitație să exercite în permanență o forță față de rotor. În cazul proiectului acesta va fi conectat ca în figura 2.6
Figura 2.6 Conectarea motoarelor cu shield-ul
2.3.2 Servomotorul
Servomotoarele sunt dispozitive mici electro-mecanice în formă de cutie care conțin un motor de curent continuu. Sunt mecanisme de acționare rotativă, care permit un control precis al poziției unghiulare, vitezei și accelerației.
Servomotoarele nu sunt o clasă specifică a motoarelor, deși termenul de servomotor este adesea folosit pentru a desemna un motor adecvat pentru utilizarea într-un sistem de control în buclă închisă
Servomotoarele sunt ultilizate în aplicații cum ar fi robotica, utilaje CNC, mașini automatizate.
Acum, toate servomotoarele RC au un conector cu trei fire. Un fir furnizează tensiune pozitivă DC – de obicei 5-6V, al doilea fir este de masă iar al treilea de semnal. Se poate roti cu aproximativ 180° (90° în fiecare direcție). Viteza de rotație se măsoară în funcție de timp, acest lucru fiind standardizat în majoritatea specificațiilor la 60°. Astfel vom avea la o mișcare a brațului la 60° într-o perioadă de 0.12 sec.
În cazul nostru vom folosi servomotorul de tip SG90 care este prezentat și în fighura de mai jos:
Figura 2.7 Servomotorul SG90
Specificațiile acestuia sunt:
Temperatura de lucru: 0°C – 55°C
Viteza de lucru: 0.1 s/60°
Tensiunea de lucru: 4.8V (~5V)
2.4 Senzorii cu ultrasunete
Ultrasunetele ca și sunetele, sunt oscilații elastice cu frecvențe cuprinse între 15kHz … 100GHz. Sunt caracterizate de o intensitate redusă. Ultrasunetele cu intensitate mare se obțin prin procedee electromecanice care se bazează pe fenomenul piezoelectric și efectul piezomagnetic.
Importanța practică a ultrasunetelor este legată de lungimea de undă mică a acestora. Din această cauză, de exemplu, ultrasunetele pot fi emise și se propagă ca și razele de lumină sub formă de fascicule, spre deosebire de sunetele obișnuite care se împrăștie în toate direcțiile. În afară de aceasta, datorită lungimii de undă mici, fenomenul de difracție nu apare decât pentru obstacolele de dimensiuni foarte mici în timp ce sunetele obișnuite ocolesc practic aproape orice obstacol întâlnit în cale.
Proprietățile ultrasunetelor:
nu pot fi percepute de organul auditiv uman;
pot transporta cantități mari de energie;
sunt absorbite de substanțe în stare gazoasă;
Aplicatiile ultrasunetelor:
pe baza fenomenului de cavitație se pot curăți piese metalice, cazane, se pot perfora sau tăia metale;
având în vedere că ultrasunetele pot distruge microorganisme, ele se utilizează la prepararea serurilor și vaccinelor, la sterilizarea și conservarea alimentelor;
datorită încalzirii locale pe care o produc când cad pe țesuturile organismului ele se pot folosi pentru tratamentul unor nevralgii.
2.4.1 Senzorul HC-SR04
HC-SR04 (figura 2.8 a) este un senzor cu ultrasunete care utilizează un sonar pentru a determina distanța până la un obiect. Acesta oferă o detecție de mare precizie a unui obstacol aflat în fața sa fără a intra în contact direct cu acesta. Distanța limită de funcționare este de 2cm – 400cm, cu o precizie de până la 3mm Senzorul nu este afectat de lumină solară sau de obiecte întrunecate. De asemenea el este prevăzut cu un emițător de ultrasunete și un receptor. Tensiunea de lucru este de 5V la o frecvență de 40kHz
Figura 2.8 a)Senzorul HC-SR04 b) Modul de transmisie al unsei
Modul de funcționare
Pentru a începe măsurarea distanței sensorul trimite un semnal de 10μs (figura 2.9), după care o serie de opt impulsuri de 40kHz. Receptorul așteaptă ecoul: dacă răspunsul este între 150μs-25ms se detectează un obstacol, dacă timpul este de 38ms nu se detectează nimic. Întârzierea semnalului recepționat față de cel emis reprezintă distanța T în milisecunde de la sensor la obstacol.
Distanța este calculată folosind următoarea relație:
L= C * T/2
unde:
L – distanța de la obstacol la sensor
C – viteza sunetului în aer (344 m/s la temperatura ambiantă de 20 °C)
T – diferența de timp de la transmitere până la recepție
Figura 2.9 Reprezentarea variației semnalelor de control în funcție de timp
2.5 LCD ( Liquid Crystal Display) 16×02
Figura 2.10 a) LCD 16×02 b) modul I2C
LCD-ul (Figura 2.10) este un modul de afișare electronică fiind utilizat într-o gamă largă de aplicații precum telefoane celulare, fotocopiatoare, calculatoare aparate medicale etc. Un afișaj de formă matriceală de dimensiuni (16×02) ce inseamnă că poate afișa 16 caractere pe linie, fiind dispoibile 2 linii. Pe fiecare locație (Figura 2.12) de dimensiune 5×8 pixeli se pot reprezenta orice caracter din codul ASCII de la 0 la 225 (Figura 2.11).
Acest LCD are două registre, și anume, de comandă și de date.
Figura 2.11 Tipurile de caractere acceptate
Registrul de comandă stochează instrucțiunile de comandă transmise către LCD. O comandă este o instrucțiune dată LCD-ului pentru a face o sarcină predefinită ca de exemplu: inițializarea acestuia, stabilirea poziției cursorului, controlul de afișare;
Registrul de date stochează temporar datele ce urmează a fi afișate pe LCD. Acestea fiind codificate în codul ASCII;
Figura 2.12 Reprezentarea caracterelor pe LCD
Modulul I2C (Figura 2.10 b). Costurile și complexitaea de conectare a tuturor dispozitivelor împreună trebuie să fie reduse la minim. Sistemul trebuie să fie proiectat în așa fel încât dispozitivele mai lente să poată comunica cu sistemul fără a le încetini pe cele mai rapide.
Pentru a realiza aceste condiții avem nevoie de o magistrală serială. Acest lucru este exact ceea ce definește specificațiile modulului I2C. Acesta a fost proiectat de compania Philips în anii 1980 pentru a permite comunicarea mai ușoară între componentele de pe aceeași placă (în cazul nostru microcontroler și display). Modulul I2C utilizează două fire: de date seriale (SDA) și de ceas serial (SCL). Toate dispozitivele de master și sclav I2C sunt conectate cu numai două fire. Fiecare dispozitiv poate fi un emițător, receptor sau ambele. Unele dispozitive master – generează clock-ul de magistrală și inițializează comunicația, dispozitivele de tip sclav trebuie să aibă o adresă unică pe magistrală. Dispozitivele de master I2C nu au nevoie de nici o adresă de la nici un alt dispozitiv (sclav).
Ambele semnale (SCL și SDA) sunt bidirecționale. Acestea sunt conectate printr-o rezistență la o tensiune pozitivă de alimentare. Acest lucru înseamnă că atunci când nu există comunicație pe magistrală semnalele sunt trecute în 1 logic. Numărul de dispozitive pe o magistrală este aproape nelimitată. Singura cerință este ca capacitatea de pe magistrală să nu depășească 400pF. Deoarece nivelul de 1 logic depinde de tensiunea de alimentare, nu există nici o tensiune standard de magistrală.
Pentru fiecare impuls de clock este transferat un bit de date. Semnalul SDA (Figura 2.13) se poate schimba doar când semnalul SCL este scăzut (în cazul în care frecvența de clock este mare datele trebuie să fie stabile).
Figura 2.13 Transferul de date seriale
Fiecare comandă I2C inițiată de dispozitivul master începe cu o condiție de START (Figura 2.14) și se termină cu o condiție de STOP. Pentru ambele condiții SCL trebuie să fie mare. Tranziția de la nivelul 1 logic la 0 a semnalului SDA este considerată START iar tranziția inversă STOP.
Dupa condiția de START magistrala este considerată ocupată și poate fi utilizată de un alt dispozitiv master doar după ce condiția de STOP a fost detectată. După condiția de start dispozitivul master poate genera un START repetat. Această condiție este echivalentă cu START-ul normal.
Figura 2.14 Condițiile de START și STOP
Date privind magistrala I2C (Figura 2.15) este transferată în pachete de 8 biți. Nu există nici o limitare a numărului de biți, cu toate acestea, fiecatre octet trebuie să fie urmat de un bit de confirmare (ACK). Acest bit semnalează dacă dispozitivul este gata pentru a continua cu următorul octet. Pentru toți biții de date, inclusiv cei de confirmare, dispozitivul master trebuie să genereze impulsuri de clock. Dacă dispozitivul sclav nu recunoaște transferul acest lucru inseamnă ca nu există mai multe date sau dispozitivul încă nu este gata de transfer. Dispozitivul master trebuie să gentereze contiția de STOP sau cea ce repetare START.
Figura 2.15 Transfer de date I2C
Figura 2.16 Conectorii modulului I2C
2.6 Bluetooth-ul
Suntem cu toții utilizatori de comunicații fără fir, chiar dacă ne dăm sau nu seama întotdeauna. Receptoarele radio și televizoarele captează prin aer undele radio de la sute sau chiar mii de kilometri. Telefoanele fără fir folosesc tehnologii similare pentru a transmite apeluri de la un telefon la o stație centrală. În cazul utilizării wi-fi (internet wireless), computerul trimite și primește un flux de date constant de pe internet către și de la un router. Toate aceste tehnologii implică transmiterea de informații prin unde radio invizibile și pe distanțe mari.
Bluetooth-ul este o tehnologie radio similară, dar este proiectată în principiu pentru comunicarea pe distanțe scurte de aproximativ 10m. Puterea emițătorului reglementează domeniul pe care un dispozitiv Bluetooth poate funcționa și, în general, dispozitivele se încadrează în una din cele trei clase: clasa 1 sunt cele mai puternice și poate funcționa până la 100m, clasa 2 ( cel mai frecvent tip) operează până la 10m, și clasa 3 sunt cel mai puțin puternici și să nu meargă mult dincolo de 1m.
Bluetooth-ul trimite și primește unde radio într-o bandă de 79 de frecvențe diferite (canale) centrate pe 2,45 GHz, stabilite să nu coincidă cu undele radio, televiziune, telefoane mobile rezervate pentru utilizarea de către gadget-uri industriale, știintifice si medicale. Emițătoarele Bluetooth cu rază scurtă sunt în avatnaj față de celelalte. Ele nu folosesc practic nici o putere și pentru că nu au o rază de lucru mare, sunt teoretic mai sigure decât rețelele fără fir care operează pe intervale mai lungi, cum ar fi Wi-Fi. (În practică, există unele probleme de securitate.)
Dispozitivele Bluetooth sunt detectate automat și conectate între ele pot comunica la un moment dat 8 dispozitive. Ele nu interferează între ele, deoarece fiecare pereche de dispozitive folosește una dintre cele 79 canale disponibile. Dacă două dispozitive vor să comunice, ele aleg un canal aleator și, în cazul în care este deja luat, trece aleatoriu la unul din celelalte (o tehnică cunoscută sub numele de frecvență extinsă cu spectru hopping). Pentru a minimiza riscurile de interferență de la alte aparate electrice (și, de asemenea, pentru a îmbunătăți securitatea), perechi de dispozitive modifică constant frecvența pe care o folosesc de mii de ori pe secunda.
Atunci când un grup de două sau mai multe dispozitive Bluetooth fac schimbul de informații, între ele, formează un fel de ad-hoc, rețea de mini-calculatoare numită piconet. Alte dispozitive se pot alătura sau părasi un piconet existent în orice moment. Un dispozitiv (cunoscut sub numele de master), acționează ca controler general al rețelei, în timp ce ceilalți (cunoscuți sub numele de sclavi) ascultă instrucțiunile master-ului. Două sau mai multe piconets separate pot, de asemenea, se se alăture și să realizeze schimb de informații care formează ceea ce se numește o rețea dispersată.
2.6.1 Interfața microcontroler-bluetooth SCI (Interfață de comunicație serială)
O interfață de comunicare serială (SCI) este un dispozitiv care permite schimbul de date între un microprocesor și periferice, cum ar fi imprimantele, unități externe, scanere sau bluetooth. În acest sens, este similar cu o interfață serială periferică (SPI). Dar, în plus, SCI permite comunicații seriale cu un alt microprocesor sau cu o rețea externă. Termenul SCI a fost inventat de Motorola în anii 1970. În unele aplicații, este cunoscut ca un asincrone receptor / transmițător universal (UART).
SCI conține unconvertor paralel-serial care servește ca un transmițător de date, și un convertor serial-paralel, care servește ca un receptor de date. Cele două dispozitive au clock separat, și folosesc semnale de enable si întreruperi diferite. SCI funcționează într-un format de întoarcere la zero (NRZ) și poate funcționa în modul semi-duplex (folosind doar receptorul sau doar emițător) sau în full duplex (folosind receptorul și transmițătorul simultan). Viteza de date este programabilă.
Interfețele seriale au anumite avantaje față de interfețe paralele. Cel mai semnificativ avantaj este cablare simplă. În plus, cablurile de interfață serie pot fi mai mari decât cablurile de interfață paralel, pentru că există mult mai puțină interacțiune (crosstalk) între conductorii din cablul.
Termenul SCI este uneori folosit cu referire la un port serial. Acesta este un conector găsit pe majoritatea calculatoarelor personale, și este destinat utilizării cu dispozitivele periferice seriale.
UART utilizează două fire: de transmisie (TXD) și rececepție (RXD), pentru comunicație full- sau half-duplex.
Figura 2.17 Comunicația SCI
2.6.2 Bluetooth HC-06
Figura 2.18 Bluetooth HC-06
Acest modul se bazează pe chip-ul CSR (Cambridge Silicon Radio) BC417 Bluetooth radio care funcționează la o frecvență de 2,4GHz. Acesta este un chip complex care folosește o memorie flash externă de 8Mbit. HC-06 este un modul doar sclav având două moduri de funcționare:
Modul de comandă – unde putem trimite comenzi AT
Modul de date – în cazul în care transmite și primește date pentru un alt modul Bluetooth
Proprietăți:
Banda de lucru ISM: 2.4GHz-2.48GHz.
Protocolul Bluetooth: V2.0 protocol standard
Nivelul de putere: Clasa 2 (+6dB)
Sensibilitatea receptorului: -85dB
Temperatura de funcționare: -40℃ – +105℃
Tensiune de lucru: 3.3V
2.7 Interfața grafică de control
Intefrțele grafice permit utilizatorilor să interacționeze cu dispositive electronice prin icoane grafice și indicatori vizuali ca o notație secundară spre deosebire de interfețele bazate pe text. Când stai în fața ecranului unui calculator care rulează, te confrunți mereu cu nterfața de control. Primele interfețe au fost de linie de comandă în cazul în care puteai interacționa cu calculatorul numai prin tastarea comenzilor de la tastatură. Astăzi acest lucru este posibil prin utilizarea unui mouse (in cazul calculatoarelor), făcând clic pe pictograme și manipularea de diferite ferestre de pe ecran folosind comenzile grafice. Astfel de interfețe sunt numite Interrfețe grafice de control deoarece acestea utilizează imagini sau pictograme pentru a reprezenta intrarea și ieșirea unui program.
2.7.1 Mediul de dezvoltare MIT App Inventor 2
Figura 2.19 Aplicația MIT App Inventor 2
MIT App Inventor 2 (Figura 2.19) este un instrument de programare bazat pe blocuri care permite tuturor de a începe programarea și de a consrui aplicații complet funcționale pentru dispositive Android. Inventor susține o comunitate la nivel mondial de aproape 3 milioane de utilizatori, reprezentând 195 de țări din întreaga lume. Mai mult de 100 de mii de utilizatori activi pe săptămână care au realizat mai mult de 7 milioane de aplicații Android. Un instrument open-source, care urmărește să facă atât programarea și crearea aplicațiilor accesibile la o gamă largă de public.
2.7.2 Structura aplicației pentru Android
Figura 2.20 Funcțiile ce pot fi apelate de pe aplicație
2.8 Fotorezistorul
Un fotorezistor este o componentă electronică a cărei rezistență descrește cu creșterea intensității luminoase. Mai este numit fotoconductor sau fotocelulă. Un fotorezistor este fabricat dintr-un semiconductor cu rezinstență mare. Dacă lumina căzută pe dispozitiv are frecvența destul de mare, fotonii absorbiți de semiconductor dau electronilor de legătură destulă energie pentru a sări pe banda conductoare. Electronul liber rezultat și golul conduc electricitatea, astfel micșorând rezistența. Un dispozitiv fotoelectric poate fi intrinsec sau extrinsec. Un semiconductor intrinsec are proprii purtători de sarcină și nu este un semiconductor eficient, exemplu-silicon. În dispozitivele intrinseci, singurii electroni disponibili sunt în banda de valență, și deci fotonul trebuie să aibă destulă energie pentru a excita electronul pe toată banda de goluri. Dispozitivele extrinseci au impurități adăugate, care au o en energie statică mai apropiată de banda conductoare.
Fără lumină – fotorezistența are o rezistență foarte mare
La luminarea suprafaței fotorezistenței curentul treace prin ea și valoarea rezistenței scade. Este un rezistor, realizat dintr-un material semiconductor omogen, a cărui rezistență se modifică sub incidența unui flux luminos incident. Se bazează pe fenomenul de fotoconductivitate prin care sub influența radiației luminoase sunt eliberați electroni liberi care cresc conductivitatea electrică a semiconductorului și implicit scad rezistența rezistorului (este o aplicație a efectului fotoelectric intern).
Tipurile de fotorezistori
Sunt 4 tipuri de dispozitive fotoelectrice:
– tipul fotoemisie;
– tipul fotovoltaic;
– tipul cu joncțiune fotoconductivă;
– tipul cu efect de buffer fotoconductiv;
– Celula fotoemisie – electronii lovesc suprafață acoperită cu fosfor care produce luminarea ei.
– Celula fotovoltaică – utilizează radiația solară pentru generarea tensiunii electrice.
– Celula fotoconductivă cu joncțiune se bazează pe proprietățile fotoconductive ale joncțiuni P-N
– Celula fotoconducție cu efect de bulk se bazează pe utilizarea proprietăților fotoconductive ale cristalului
Structura
Fotorezistorul este format dintr-o peliculă din material semiconductor, depusă prin evaporare în vid pe un grătar metalic care este fixat pe o placă izolatoare. Pelicula este prevăzută la capete cu contacte ohmmice care reprezintă terminalele și este protejată prin acoperire cu lac sau prin încapsulare în material plastic.
Fidura 2.21 Structura fotorezistenței
În general conductanța fotorezistenței este proporțională cu fluxul luminos. Materialele din care se realizeză fotorezisțentele sunt sulfurile, seleniurile, precum și compuși, mai utilizate sunt PbS, PbTe, PbSe, InSb, Ge pentru infraroșu, iar pentru vizibil și ultraviolet apropiat: CdS, CdSe și TI2S.
Valoarea curentului prin fotorezistor, la o tensiune data U depinde de nivelul de iluminare conform caracteristicii curent – tensiune .
Figura 2.22 Caracteristica curent-tensiune
Comportarea fotorezistenței la modificarea intensității fluxului luminos
Rezistența electrică a fotorezistorului scade o dată cu creșterea intensității fluxului luminos aplicat pe suprafața sensibilă a fotorezistorului. Rezistența fotorezistorului se modifică în funcție de gradul de acoperire a suprafeței sensibile. Conectat într-un circuit electric, fotorezistorul modifică intensitatea curentului din circuit. Intensitatea curentului crește proporțional cu creșterea intensității fluxului luminos. În circuitele electronice, în funcție de modul de conectare, fotorezistorul poate fi activat de lumină sau poate fi activat de întuneric.
Performanțele fotorezistorului
Performanțele fotorezistorului se apreciază prin mărimile:
rezistență la întuneric
dependență de dimensiunile geometrice și de concentrația de impurități a semiconductorului.
pragul fotoelectric
reprezentând lungimea de undă maximă până la care dispozitivul mai funcționează.
sensibilitatea spectrală
reprezintă raportul dintre conductanța fotorezistenței și fluxul luminos incident.
inerția fotorezistenței – reprezentând timpul după care rezistența elementului se stabilizează la noua valoare, atunci când fluxul luminos variază prin salt.
Parametrii specifici unui fotorezistor
valoarea rezistenței electrice la întuneric;
tensiunea maximă admisă la borne;
puterea maximă disipată;
sensibilitatea la lumină.
Sensibilitatea la lumină reprezintă raportul dintre variația curentului și variația iluminării, la o tensiune constantă.
Sensibilitatea spectrală depinde de natura materialului semiconductor utilizat și reprezintă dependența sensibilității și de lungimea de undă a radiației incidente.
Avantaje
Sensibilitate semnificativă
Ușor de utilizat și la costuri reduse;
Utilizarea în circuite DC și AC (lucrează în mod independent de direcția ale curentului);
Dezavantaje
Timp de răspuns mare, care crește în cazul în care lumina intensă este urmată rapid de întuneric;
Dependența semnificativă de temperatură, de rezistență;
Fotorezistențe operaționale în funcție de vârstă;
2.9 Breadboard
Figura 2.23 Breadboard
Un breadboard (Figura 2.23) este un dispozitiv care permite conectarea extrem de simplă a componentelor electronice, fără lipituri. Este de obicei o bază de construcție pentru realizarea de prototipuri de electronice Pentru a conecta dispozitivele se folosesc fire tată-tată (cu pini la ambele capete), care se introduc în găurile din breaboard. Găurile existente în breadboard sunt conectate între ele (de obicei pe linie), astfel încât firele introduse pe aceeași linie vor fi conectate între ele. Un exemplu frecvent de utilizare a breadboard-ului este acela în care dorim să conectăm simultan mai multe dispozitive brick la Arduino (care are doar un singur pin de 5V, și doar 3 pini de GND). În această situație, vom conecta folosind fire tată-tată pinul de 5V Arduino la un calculator modern cuprinzând milioane de tranzistori, diode și rezistențe, nu se pretează la prototipuri folosind breadbordurile. Dintre liniile breadboard-ului, la altă linie din breadboard vom conecta unul dintre pinii GND, și în acest mod vom avea disponibile încă patru pini care sunt conectați la 5V (cei care sunt pe aceeași linie cu cel conectat la 5V), și patru pini conectați la GND (cei care sunt pe aceeași linie cu GND). Există mai multe tipuri de breadbord, mai mari sau mai mici. Deoarece breadboardul pentru electronică nu necesită lipire, este reutilizabil. Acest lucru îl face ușor de utilizat pentru crearea de prototipuri temporare și experimentarea cu un design de circuit.
Capitolul 3
Implementarea și funcționarea proiectului
3.1 Pentru implementarea proiectului s-a folosit:
Arduino Mega 2560 + Shield pentru motoare L293D
Kit mașină 4WD SMART CAR
Bluetooth HC-06
Servomotor SG90
Senzor ultrasunete HC-SR04
LCD 16×02
Baterie 9V + 1.5V
Fire de conexiune + LED-uri
Placă Breadboard
3.2 Realizarea conexiunilor Mega deintre 2560 și Shield-ul L293D precum și a motoarelor
Figura 3.1 Conectarea Shield-ului L293D cu placa de dezvoltare
Conexiunea are loc prin suprapunearea Shield-ului L293 cu Mega 2560 și se realizează prin următorii pini:
Pinii digitali 0…11 (pentru controlul motoarelor de curent continuu)
Pinii de comunicate serială 12, 13
Pinii anlogici A0…A5 (pentru controlul servomotorului)
Pinii de alimentare VCC (3.3V – 5V) și masă
M+ și GND sunt conectați la o sursă externă
Conectarea motoareloc cu Shieldul:
Cele 4 motoare de curent continuu sunt conectate prin intermediul conectorilor M1…M4
Servomotorul este conectat la jumper-ul SERVO_2
Figura 3.2 a) Conectarea motoarelor DC b) Conectarea servomotorlui
Modul de funcționare
La transmisia de către microcontroler a comenzii de deplasare înainte (înapoi) toate motoarele DC se învârtesc la viteză maximă înainte (înapoi) pe o durată determinată. În cazul deplasării la stânga (dreapta) a mașinii motoarele se învârtesc în felul următor: cele poziționate de partea dreaptă (stângă) vor merge înainte pe când cele poziționate pe partea stângă (dreaptă) vor merge îmapoi.
Pentru a controla turația motoarelor de curent continuu (Figura 3.3) se utilizează comanda cu impulsuri modulate în lățime (Pulse Width Modulation). Variția turației motorului se face prin creșterea sau micșorarea timpului în care semnalul de comandă are 1 logic. Astfel la un factor de umplere de 100% (în program reprezintă valoarea 255) motorul are turație maximă. La un factor de umplere de 50% (127) motorul are jumătate din turația nominală, iar la un factor de umplere de 0% (0) motorul este oprit
Servomotorul la primirea comenzii de lucru va avea următorul mod de funcționare. Din poziția sa considerată la 100° acesta cotește spre stânga cu 50° apoi spre dreapta cu 100° după care revine în poziția sa inițială. Acest lucru se execută rapid (circa 1-2 secunde).
Figura 3.3 Turația motorului DC
3.3 Realizarea conexiunilor dintre Arduino și LCD, Bluetooth, Senzorul cu ultrasunete și componentele auxiliare (LED, fotorezistență)
Circuitul are următoarlele conexiuni:
TX (Bluetooth) conectat la pinul 18 de pe placa de dezvoltare
Rx (Bluetooth) conectat la pinul 19 de pe placa de dezvoltare
SDA (LCD) conectat la pinul 20 de pe placa de dezvoltare
SCL (LCD) conectat la pinul 21 de pe placa de dezvoltare
Trig (Senzor ultrasunete) conectat la pinul 47 de pe placa de dezvoltare
Echo (Senzor ultrasunete) conectat la pinul 46 de pe placa de dezvoltare
LED_1 conectat la pinul 36 de pe placa de dezvoltare
LED_2 conectat la pinul 37 de pe placa de dezvoltare
Fotorezistența conectată la pinul A15 de pe placa de dezvoltare
Funcționarea
La punerea sub tensiune a plăcii de dezvoltare (alimentare 9V) senzorul de ultrasunete recepționează distanța până la primul obstacol întalnit. Odată obținută această distanță este transmisă către LCD unde este afișată repetitiv la o perioadă de 200ms.
Fotorezistența sesizează intensitatea luminoasă din locația curentă. La o intensitate mare (o rezistență mică) prin pinul analog (A15) este trasmis o tensiune maximă (5V) care are ca rezultat stingerea LED-urilor. În cazul în care intensitatea scade (o rezistență din ce în ce mai mare) are ca rezultat aprinderea LED-urilor.
Prin intermediul Bluetooth-ului are loc recepția comenzilor de la un dispozitiv (Smartphone sau calculator) care pun în funcționare motoarele din subcapitolul precedent. Acesta lucrează doar pe post de receptor nefiind posibilă transmitera unui răspuns de confirmare a comenzii. În cazul în care nu e conectat la nici un dispozitiv el se află pe poziția de așteptare
3.4 Funcționarea sistemului
Figura 3.4 Proiect final
Prin punerea sub tensiune a plăcii de dezvoltare și a shield-ului, mașina trece în regim de așteptare. Pentru a schimba regimul precum și a da comenzi msșinii este necesară realizarea conectării acesteia cu un smartphone sau calculator (în cazul nostru prin intermediul smartphone-ului) prin intermediul bluetooth-ului HC – 06.Confirmarea conexiunii este atenționată de LED-ul bluetooth-ului care în regim de aștepare luminează intermitent iar în cazul conectării la un dispozitiv acesta rămâne aprins. După ce s-a realizat conexiunea prin inermediul smartphone-ului mașina așteaptă transmiterea de comenzi.
Mașina poate interacționa în două regimuri de funcționare
Regim manual (stare inițială)
Regim autonom
Figura 3.5 a)Dispozitiv neconectat b)Dispozitiv în regim manual c)Dispozitiv în regim automom
Regimul manual
Din regimul manual (Figura 3.5 b) se pot transmite următoarele comenzi:
Trecere în regim autonom
Înainte – mașina merge înainte
Înapoi – mașina merge înapoi
Stânga – mașina cotește spre stânga
Dreapta – mașina cotește spre dreapta
Stop – mașina se oprește
Răspunsul mașinii la comenzi este descris în subcapitolul 3.2
Regimul autonom
Din regimul autonom (Figura 3.5 c) de pe interfața grafică se poate transmite doar comanda de trecere în regim manual. Însă modul de funcționare este diferit, controlul mașinii este autonom.
Funcționarea mașinii în acest mod este următoarea.
Mașina se deplasează înainte pâna când întâmpină un obstacol (distanța minimă până la acesta fiind de 20cm iar cea maximă 40cm). În cazul în care mașina s-a apropiat prea mult de obstacol (distanța este mai mică de 20 cm) aceta se deplasează înapoi și se se reia funcția precedentă. Dacă distanța este cuprinsă în intervalul optim atunci mașina se oprește și intră în funcție servomotorul (care este conectat de senzorul de ultrasunete). Servomotorul se rotește cu 50° spre stânga față de poziția inițială (senzorul de ultrasunete înscrie valoarea distanței detectată într-o variabilă) după care se rotește spre dreapta cu 100° de la poziția curentă (senzorul de ultrasunete înscrie valoarea distanței detectată în altă variabilă) după care revine la poziția inițială. Microcontrolerul face comparația dintre cele două distanțe obținute și o selectează pe cea mai mare, ca rezultat are loc cotirea mașinii spre dreapta sau spre stânga. După această operație are loc se reia procesul de la început (acest lucru se realizează dacă nu a intevenit comanda de trecere a mașinii în regim manual).
Concluzii și îmbunătațiri ulterioare ale proiectului
Proiectul de față reprezintă o primă incursiune în lumea platformei de dezvoltare Arduino, care impresionează prin simplitatea utilizării și capacitatea impresionantă de aplicații posibile de dezvoltat.Este cu adevărat o lume impresionantă a electronicii aplicate concentrate în această platformă, care permite o serie foarte largă de extensii și posibile imbunătiri a oricărei aplicații. Adică permite atât o dezvoltare hardware prin extensiile aduse la suportul fizic principal cât și o dezvoltare software care practic este limitată doar de imaginația dezvoltatorului în ce fel să exploateze cât mai eficient resursele hardware existente.
Lucrarea de față are ca scop demonstrarea simplității de realizare a unui proiect pe platforma Arduino și posibilitatea folosirii acestuia într-o diversitate mare de proiecte ce țin de domeniul microcontrolerelor.
Îmbunătățirile care se pot aduce proiectului actual sunt foarte multe ca de exemplu:
Conectarea unei camere web și transmiterea semnalului video pe dispozitivul de control al mașinii.
Conectarea unui GPS pentru a afla locația mașinii
Înzestrarea cu diferiți senzori (temperatură, gaz, substanște radioactive, CO2)
Îmbunătățirea softului pentru ca mașina să poată urmări un traseu delimitat de benzi
Panou solar pentru o durată de funcționare mai mare
Parcare autonomă
În final aș vrea să menționez că proiectul de față a constituit pentru mine o bună practică în generalizarea cunoștințelor acumulate de-a lungul anilor de studiu, care îmi vor servi de asemenea ca temelie în ceea ce voi face în continuare sau cu siguranță au constituit un suport intelectual important care mi-au modelat modul de analiză a diferitor aspecte din viața cotidiană
Bibliografie
Dale Wheat Arduino Internals 2011
Don Wilcher Learn Electronics with Arduino 2012
Enrique Ramos Melgar Ciriaco Castro Diez Arduino și Kinect Projects Design, Build, Blow Thei Minds 2012
Jonathan Oxer și Hugh Blemings Practical Arduino editată de Apress, 2009
Motoare (https://ro.wikipedia.org/wiki/Motor_electric )
Placade dezvoltare Arduino Mega 2560 (https://www.arduino.cc/en/Main/ Arduino Board Mega 2560)
Robofun.ro Arduino pentru începători 2015
Datasheet Display (http://www.engineersgarage.com/sites/default/files/LCD%2016×2.pdf )
Shield pentru motoare (http://zelectro.cc/Adafruit_motor_shield )
Fotorezistență (http://cursuri.flexform.ro/courses/L2/document/Cluj-Napoca/grupa1/Aranyi_ Iulia/site/ fotorezistenta.html )
Servomotor Datasheet( http://datasheet.sparkgo.com.br/SG90Servo.pdf )
Bluetooth Datasheet (http://www.rcscomponents.kiev.ua/datasheets/hc_hc-05-user-instructions-bluetooth.pdf )
Microcontroler (http://electronicamicro.blogspot.ro/p/microcontrolere-avr-atmel-pe-8-biti.html )
Librării (http://arduino.cc )
Anexă
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
#include <AFMotor.h>
// Setarea pinilor prin I2C chip folosit pentru conexiunile LCD:
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Setarea LCD I2C address
const int trigPin = 47; //Prin acest pin trimitem semnal
const int echoPin = 46; // Prin acest pin vom citi raspunsul
// Comanda pentru motoarele din spate
AF_DCMotor motor_b1(1); // M1 pe shield
AF_DCMotor motor_b2(2); // M2 pe shield
// Comanda pentru motoarele din fata
AF_DCMotor motor_f1(3); // M3 pe shield
AF_DCMotor motor_f2(4); // M4 pe shield
Servo servo_com; // Pentru controlul servomotorului
int dist_1,dist_2; // Distanta max senzor stanga si dreapta
int regim_manual,regim_autonom; // Variabile ajutatoare(regim_autonom [1 = ON si 2 = OFF], regim_manual [0 = ON si 1 = OFF])
char date_primite; // Datele citite de pe telefon
int sensePin = 15; // Pin pentru citirea fotorezistentei
int ledNoapte_1 = 36; // Pin pentru led lumiozitate noapte
int ledNoapte_2 = 37; // Pin pentru led lumiozitate noapte
// Functie pentru setarea vitezei motoarelor
void set_speed(int speed)
{
motor_b1.setSpeed(speed);
motor_b2.setSpeed(speed);
motor_f1.setSpeed(speed);
motor_f2.setSpeed(speed);
}
// Functie pentru ca motorul sa mearga inainte
void robot_inainte()
{
motor_b1.run(FORWARD);
motor_b2.run(FORWARD);
motor_f1.run(FORWARD);
motor_f2.run(FORWARD);
}
// Functie pentru ca motorul sa mearga inapoi
void robot_inapoi()
{
motor_b1.run(BACKWARD);
motor_b2.run(BACKWARD);
motor_f1.run(BACKWARD);
motor_f2.run(BACKWARD);
}
// Functie pentru ca motorul sa se opreasca
void robot_oprit()
{
motor_b1.run(RELEASE);
motor_b2.run(RELEASE);
motor_f1.run(RELEASE);
motor_f2.run(RELEASE);
}
// Functie pentru ca motorul sa coteasca la dreapta
void cotire_la_dreapta()
{
motor_b1.run(FORWARD);
motor_f2.run(FORWARD);
motor_b2.run(BACKWARD);
motor_f1.run(BACKWARD);
}
// Functie pentru ca motorul sa coteasca la stanga
void cotire_la_stanga()
{
motor_b2.run(FORWARD);
motor_f1.run(FORWARD);
motor_b1.run(BACKWARD);
motor_f2.run(BACKWARD);
}
// Functie petru setarea distantei in cm
int distanta()
{
long duration;
int dist;
pinMode(trigPin,OUTPUT);
digitalWrite(trigPin,LOW);
delayMicroseconds(2);
digitalWrite(trigPin,HIGH);
delayMicroseconds(10);
digitalWrite(trigPin,LOW);
pinMode(echoPin,INPUT);
duration = pulseIn(echoPin,HIGH);
dist = (int) duration / 58.2;
return dist;
}
void setup()
{
Serial1.begin(9600);// Initializare serial
Serial.begin(9600);// Initializare serial
lcd.begin(16,2); // Initializare LCD 16char & 2 linii, Porneste luminozitatea
lcd.setCursor(0,0);
lcd.print("Distanta senzor");
lcd.setCursor(4,1);
lcd.print("cm");
servo_com.attach(9); // Servomotorul este conectat la pinul 9
servo_com.write(100); // Setam servo motorul pe unghiul de inceput egal cu 100 grade
}
void loop()
{
date_primite = Serial1.read(); // Datele citite de pe bluetooth sunt atribuite unei variabile
lcd.setCursor(0,1); // Afisarea distantei pe LCD
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(distanta());
int fotorezistor = analogRead(sensePin);
fotorezistor = constrain(fotorezistor, 100,600);
int intensitate_led = map(fotorezistor, 100,600,255, 0);
analogWrite(ledNoapte_1, intensitate_led);
analogWrite(ledNoapte_2, intensitate_led);
delay(200);
if(date_primite == '9' && regim_manual == 0)
{
regim_manual = 1;
regim_autonom = 1;
set_speed(200); // Viteza motorului la initializare
robot_inainte(); //Setare motor sa mearga inainte
}
else if(date_primite == '9' && regim_manual == 1)
{
regim_manual = 0;
regim_autonom = 2;
}
if(regim_autonom == 1) // Pornire regim autonom
{
if(distanta() < 20)
{
set_speed(150);
robot_inapoi();
delay(500);
lcd.setCursor(0,1); // Afisarea distantei pe LCD
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(distanta());
delay(200);
set_speed(200);
robot_inainte();
}
else if (distanta() < 40)
{
robot_oprit();
servo_com.write(50); // Servomotorul se indreapta spre dreapta cu 50 grade
delay(200);
dist_1 = distanta();
Serial.print("d_1 = ");
Serial.println(dist_1);
servo_com.write(150); // Servomotorul se indreapta spre stanga cu 50 grade
delay(400);
dist_2 = distanta();
Serial.print("d_2 = ");
Serial.println(dist_2);
servo_com.write(100); // Servomotorul revine la pozitia initiala
delay(200);
if (dist_1 > dist_2)
{
set_speed(255);
cotire_la_dreapta();
delay(500);
set_speed(200);
robot_inainte();
}
else if (dist_1 < dist_2)
{
set_speed(255);
cotire_la_stanga();
delay(500);
set_speed(200);
robot_inainte();
}
if (distanta() > 40)
{
set_speed(200);
robot_inainte();
lcd.setCursor(0,1); // Afisarea distantei pe LCD
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(distanta());
delay(200);
}
}
}
else if(regim_autonom == 2) // Oprire regim autonom
{
robot_oprit();
}
if(date_primite == '1') // In regim manual masina merge inainte
{
set_speed(255);
robot_inainte();
while(!Serial1.available()) // Se executa functia precedenta pana la aparitia alteia
{
lcd.setCursor(0,1); // Afisarea distantei pe LCD
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(distanta());
delay(200);
}
}
else if(date_primite == '2') // In regim manual masina merge inapoi
{
set_speed(255);
robot_inapoi();
while(!Serial1.available()) // Se executa functia precedenta pana la aparitia alteia
{
lcd.setCursor(0,1); // Afisarea distantei pe LCD
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(distanta());
delay(200);
}
}
else if(date_primite == '3') // In regim manual masina merge la dreapta
{
set_speed(255);
cotire_la_dreapta();
while(!Serial1.available()) // Se executa functia precedenta pana la aparitia alteia
{
lcd.setCursor(0,1); // Afisarea distantei pe LCD
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(distanta());
delay(200);
}
}
else if(date_primite == '4') // In regim manual masina merge la stanga
{
set_speed(255);
cotire_la_stanga();
while(!Serial1.available()) // Se executa functia precedenta pana la aparitia alteia
{
lcd.setCursor(0,1); // Afisarea distantei pe LCD
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(distanta());
delay(200);
}
}
else if(date_primite == '5') // In regim manual masina este oprinta
{
robot_oprit();
}
}
Bibliografie
Dale Wheat Arduino Internals 2011
Don Wilcher Learn Electronics with Arduino 2012
Enrique Ramos Melgar Ciriaco Castro Diez Arduino și Kinect Projects Design, Build, Blow Thei Minds 2012
Jonathan Oxer și Hugh Blemings Practical Arduino editată de Apress, 2009
Motoare (https://ro.wikipedia.org/wiki/Motor_electric )
Placade dezvoltare Arduino Mega 2560 (https://www.arduino.cc/en/Main/ Arduino Board Mega 2560)
Robofun.ro Arduino pentru începători 2015
Datasheet Display (http://www.engineersgarage.com/sites/default/files/LCD%2016×2.pdf )
Shield pentru motoare (http://zelectro.cc/Adafruit_motor_shield )
Fotorezistență (http://cursuri.flexform.ro/courses/L2/document/Cluj-Napoca/grupa1/Aranyi_ Iulia/site/ fotorezistenta.html )
Servomotor Datasheet( http://datasheet.sparkgo.com.br/SG90Servo.pdf )
Bluetooth Datasheet (http://www.rcscomponents.kiev.ua/datasheets/hc_hc-05-user-instructions-bluetooth.pdf )
Microcontroler (http://electronicamicro.blogspot.ro/p/microcontrolere-avr-atmel-pe-8-biti.html )
Librării (http://arduino.cc )
Anexă
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
#include <AFMotor.h>
// Setarea pinilor prin I2C chip folosit pentru conexiunile LCD:
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Setarea LCD I2C address
const int trigPin = 47; //Prin acest pin trimitem semnal
const int echoPin = 46; // Prin acest pin vom citi raspunsul
// Comanda pentru motoarele din spate
AF_DCMotor motor_b1(1); // M1 pe shield
AF_DCMotor motor_b2(2); // M2 pe shield
// Comanda pentru motoarele din fata
AF_DCMotor motor_f1(3); // M3 pe shield
AF_DCMotor motor_f2(4); // M4 pe shield
Servo servo_com; // Pentru controlul servomotorului
int dist_1,dist_2; // Distanta max senzor stanga si dreapta
int regim_manual,regim_autonom; // Variabile ajutatoare(regim_autonom [1 = ON si 2 = OFF], regim_manual [0 = ON si 1 = OFF])
char date_primite; // Datele citite de pe telefon
int sensePin = 15; // Pin pentru citirea fotorezistentei
int ledNoapte_1 = 36; // Pin pentru led lumiozitate noapte
int ledNoapte_2 = 37; // Pin pentru led lumiozitate noapte
// Functie pentru setarea vitezei motoarelor
void set_speed(int speed)
{
motor_b1.setSpeed(speed);
motor_b2.setSpeed(speed);
motor_f1.setSpeed(speed);
motor_f2.setSpeed(speed);
}
// Functie pentru ca motorul sa mearga inainte
void robot_inainte()
{
motor_b1.run(FORWARD);
motor_b2.run(FORWARD);
motor_f1.run(FORWARD);
motor_f2.run(FORWARD);
}
// Functie pentru ca motorul sa mearga inapoi
void robot_inapoi()
{
motor_b1.run(BACKWARD);
motor_b2.run(BACKWARD);
motor_f1.run(BACKWARD);
motor_f2.run(BACKWARD);
}
// Functie pentru ca motorul sa se opreasca
void robot_oprit()
{
motor_b1.run(RELEASE);
motor_b2.run(RELEASE);
motor_f1.run(RELEASE);
motor_f2.run(RELEASE);
}
// Functie pentru ca motorul sa coteasca la dreapta
void cotire_la_dreapta()
{
motor_b1.run(FORWARD);
motor_f2.run(FORWARD);
motor_b2.run(BACKWARD);
motor_f1.run(BACKWARD);
}
// Functie pentru ca motorul sa coteasca la stanga
void cotire_la_stanga()
{
motor_b2.run(FORWARD);
motor_f1.run(FORWARD);
motor_b1.run(BACKWARD);
motor_f2.run(BACKWARD);
}
// Functie petru setarea distantei in cm
int distanta()
{
long duration;
int dist;
pinMode(trigPin,OUTPUT);
digitalWrite(trigPin,LOW);
delayMicroseconds(2);
digitalWrite(trigPin,HIGH);
delayMicroseconds(10);
digitalWrite(trigPin,LOW);
pinMode(echoPin,INPUT);
duration = pulseIn(echoPin,HIGH);
dist = (int) duration / 58.2;
return dist;
}
void setup()
{
Serial1.begin(9600);// Initializare serial
Serial.begin(9600);// Initializare serial
lcd.begin(16,2); // Initializare LCD 16char & 2 linii, Porneste luminozitatea
lcd.setCursor(0,0);
lcd.print("Distanta senzor");
lcd.setCursor(4,1);
lcd.print("cm");
servo_com.attach(9); // Servomotorul este conectat la pinul 9
servo_com.write(100); // Setam servo motorul pe unghiul de inceput egal cu 100 grade
}
void loop()
{
date_primite = Serial1.read(); // Datele citite de pe bluetooth sunt atribuite unei variabile
lcd.setCursor(0,1); // Afisarea distantei pe LCD
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(distanta());
int fotorezistor = analogRead(sensePin);
fotorezistor = constrain(fotorezistor, 100,600);
int intensitate_led = map(fotorezistor, 100,600,255, 0);
analogWrite(ledNoapte_1, intensitate_led);
analogWrite(ledNoapte_2, intensitate_led);
delay(200);
if(date_primite == '9' && regim_manual == 0)
{
regim_manual = 1;
regim_autonom = 1;
set_speed(200); // Viteza motorului la initializare
robot_inainte(); //Setare motor sa mearga inainte
}
else if(date_primite == '9' && regim_manual == 1)
{
regim_manual = 0;
regim_autonom = 2;
}
if(regim_autonom == 1) // Pornire regim autonom
{
if(distanta() < 20)
{
set_speed(150);
robot_inapoi();
delay(500);
lcd.setCursor(0,1); // Afisarea distantei pe LCD
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(distanta());
delay(200);
set_speed(200);
robot_inainte();
}
else if (distanta() < 40)
{
robot_oprit();
servo_com.write(50); // Servomotorul se indreapta spre dreapta cu 50 grade
delay(200);
dist_1 = distanta();
Serial.print("d_1 = ");
Serial.println(dist_1);
servo_com.write(150); // Servomotorul se indreapta spre stanga cu 50 grade
delay(400);
dist_2 = distanta();
Serial.print("d_2 = ");
Serial.println(dist_2);
servo_com.write(100); // Servomotorul revine la pozitia initiala
delay(200);
if (dist_1 > dist_2)
{
set_speed(255);
cotire_la_dreapta();
delay(500);
set_speed(200);
robot_inainte();
}
else if (dist_1 < dist_2)
{
set_speed(255);
cotire_la_stanga();
delay(500);
set_speed(200);
robot_inainte();
}
if (distanta() > 40)
{
set_speed(200);
robot_inainte();
lcd.setCursor(0,1); // Afisarea distantei pe LCD
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(distanta());
delay(200);
}
}
}
else if(regim_autonom == 2) // Oprire regim autonom
{
robot_oprit();
}
if(date_primite == '1') // In regim manual masina merge inainte
{
set_speed(255);
robot_inainte();
while(!Serial1.available()) // Se executa functia precedenta pana la aparitia alteia
{
lcd.setCursor(0,1); // Afisarea distantei pe LCD
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(distanta());
delay(200);
}
}
else if(date_primite == '2') // In regim manual masina merge inapoi
{
set_speed(255);
robot_inapoi();
while(!Serial1.available()) // Se executa functia precedenta pana la aparitia alteia
{
lcd.setCursor(0,1); // Afisarea distantei pe LCD
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(distanta());
delay(200);
}
}
else if(date_primite == '3') // In regim manual masina merge la dreapta
{
set_speed(255);
cotire_la_dreapta();
while(!Serial1.available()) // Se executa functia precedenta pana la aparitia alteia
{
lcd.setCursor(0,1); // Afisarea distantei pe LCD
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(distanta());
delay(200);
}
}
else if(date_primite == '4') // In regim manual masina merge la stanga
{
set_speed(255);
cotire_la_stanga();
while(!Serial1.available()) // Se executa functia precedenta pana la aparitia alteia
{
lcd.setCursor(0,1); // Afisarea distantei pe LCD
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(distanta());
delay(200);
}
}
else if(date_primite == '5') // In regim manual masina este oprinta
{
robot_oprit();
}
}
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Platforma Mobila cu Control de la Distanta Prin Intermediul Unui Smartphone (ID: 150119)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
