Controlul Unui Robot Mobil Folosind Arduino Uno Si Un Dispozitiv Android

CUPRINSUL

LISTA FIGURILOR

Figura 1. DAN E TATAL LOR 2

Figura 2. Selectarea prin click dreapta a opțiunii „Update field” 47

Figura 3. Actualizarea întregului tabel 47

LISTA TABELELOR

Tabelul 1. Nume de utilizatori și valorile rezumat ale parolelor acestora 5

Introducere

Scopul

Scopul acestei lucrări este acela de a dobândi și aprofunda cunoștințe atât teoretice cât și practice despre lucrul cu platforma Arduino Uno, programul Unity și limbajul de programare C#.

Motivația

Tema pe care am ales-o reprezintă o bună oportunitate de a pune în practică acele cunoștințe obținute în cei patru ani de facultate dar și o posibilitate de obținere de cunoștințe noi.

Avantajele proiectului

Platforma Arduino este recomandată pentru începători deoarece există numeroase forum-uri care oferă ajutor și foarte mulți oameni o folosesc.

Un avantaj al proiectului meu este acela că telecomanda care controla mașinuța este înlocuită cu un dispozitiv Android și mașinuța poate fi controlată chiar și cu telefonul mobil, pe care îl avem asupra noastră majoritatea timpului și astfel nu trebuie să mai stăm cu grijă să nu uităm telecomanda sau să cumpărăm baterii pentru ea.

Un alt avantaj este acela că sistemul de operare pentru care este realizată interfața de control, și anume Android este foarte răspândit și cuprinde o gamă foarte largă de dispozitive.

PREzENTAREA TEHNOLOGIILOR ȘI PROGRAMELOR UTILIzATE

Intefața de control

Android

Figura 1. DAN E TATAL LOR

Android-reprezintă un sistem de operare mobil dezvoltat acum de compania Google.

Compania Android a fost creată de Andy Rubin, Rich Miner, Nick Sears și Chris White pentru a dezvolta ”dispozitive mobile mai deștepte și mai conștiente de locația și preferințele posesorului”, așa cum spunea Rubin.

Deși la început compania vroia să se axeze pe sisteme pentru camere de fotografiat digitale, până la urmă s-a îndreptat spre smartphone-uri.

Acum, în iulie 2015 se împlinesc 10 ani de când compania Android a fost cumpărată de gigantul Google care a plătit în jur de cincizeci de milioane de dolari. Mulți angajați au rămas și astfel a început o noua eră.

Platforma Android a fost aratată în 2007 în noiembrie iar HTC Dream a fost primul smartphone cu Android, lansat în anul 2008. Din 2008 și până în prezent sistemul Android a continuat să fie dezvoltat și să primească noi îmbunătățiri. Fiecare lansare mai importantă a fost denumită după un desert. De exemplu, versiunea 1.5 a fost denumită „Cupcake”, versiunea 1.6 a fost denumită „Donut”, versiunea 4.4.4 „KitKat”, iar versiunea 5.0 a primit numele de „Lollipop”.

Acesta este un tabel din care reiese răspândirea versiunilor sistemului Android bazată pe dispozitivele care au accesat magazinul de aplicații in perioada 23 mai-1 iunie 2015.

Din tabelul de mai sus reiese urmatorul grafic al răspândirii versiunilor sistemului Android:

În ceea ce privește interfața sistemului Android, cea de bază permite controlul direct folosind atingeri ce încearcă să fie cât mai apropiate de cele din realitate, ca de exemplu ciupitul, trecerea peste ecran, ciupitul inversat sau lovirea ușoară. Deasemenea mai cuprinde și o tastatura virtuală foarte eficientă ce conține atât litere cât și cifre, semne de punctuație si diverse alte simboluri.

Acestea sunt niște imagini care arată tastatura virtuală a unei tablete ce folosește ca sistem de operare Android versiunea 4.4.2:

În imaginea de mai sus pot observa literele.

În imaginea de mai sus se pot observa cifrele și anumite semne de punctuație dar și câteva simboluri folositoare.

În imaginea de mai sus se pot observa alte simboluri destul de interesante și deasemenea foarte folositoare.

În ceea ce privește proiectul meu de licență, Android este sistemul de operare pentru care am dezvoltat interfața de control a robotului mobil.

Unity

Unity este o platformă folosită pentru creare de jocuri atât 2D cât și 3D dezvoltată de compania Unity Technologies. Jocurile sunt disponibile atât pentru calculator, cât și pentru tablete, telefoane mobile și site-uri web.

Unity a apărut in 2005 și pâna în prezent au fost lansate cinci versiuni:

Unity 1 a apărut chiar în anul în care a fost anunțat, adică 2005, mai exact pe 8 iunie. Printre caracteristicile pe care Unity 1 le prezenta se numărau un motor pentru fizica mișcării, un suport pentru scrierea script-urilor in limbajul C# și un suport audio. Încă de atunci era disponibil atât în varainta de preț mai redus dar și în varianta de preț mare.

În luna octombrie 2007 a fost lansat Unity 2. Acesta prezenta în plus față de varianta anterioară un motor pentru terenuri, un sistem pentru randarea umbrelor, un sistem de conectare la rețea dar și un sistem pentru crearea interfeței utilizatorului pentru jocuri.

În luna octombrie 2010 s-a lansat Unity 3 care venea cu noutăți ce constau in iluminarea scenei, efecte audio și suport pentru C#.

În noiembrie 2012 a fost dezvăluit Unity 4 care prezenta îmbunătățiri la sistemul de animație, umbre disponibile și pe telefoanele mobile și suport pentru Directx 11.

Unity 5 a apărut abia în 2015, în luna martie și aduce îmbunătățiri în ceea ce privește iluminarea globală, noi efecte asupra umbrelor și noi efecte audio.

Dintre cele mai faimoase jocuri dezvoltate prin intermediul platformei Unity amintim: „Cartoon Network Univers:Fusion Fall”, „Battlestar Galactica Online”, „Family Guy Online”, „Cypher”, „ARMA Tactics”, „Angry Birds Epic”, dar și multe altele.

Așa cum spunea VentureBeat: „Puține companii au contribuit la fel de mult la valul de jocuri produse independent, ca Unity Technologies”.

În ceea ce privește interfața de utilizator, exista mai multe ferestre care ne ajută sa controlăm mult mai bine scena. Ferestrele pot fi mutate astfel că fiecare utilizatoe are posibilitatea de a le aranja cum dorește.

Fereastra 1 arata scena, unde sunt create toate obiectele și în care ne putem deplasa. În fereastra 2, numită consolă apar diverse mesaje. Ierarhia este a treia fereastră, unde sunt prezente obiecte create în program. Fereastra 4 se numește Proiect și aici sunt prezente toate fișierele folosite in dezvoltarea unei aplicații, iar fereastra 5, numita Inspector conține diverse setări pentru obiecte și arată codul din script-uri. A șasea fereastră este cea pentru Joc, unde putem testa aplicațiile și să vedem cum funcționează.

În Unity se pot crea anumite obiecte, se pot pune camere, dar permite și importare altor obiecte create în alte programe.

În ceea ce privește proiectul meu, am folosit Unity pentru dezvoltarea interfeței de control, importând unele obiecte realizate în 3Ds Max și diverse imagini prelucrate, cărora li s-au adăugat script-uri și diverse proprietăți.

3Ds Max

3Ds Max este un program de grafică 3D ce permite crearea de imagini și animații. Este dezvoltat de Autodesk Media and Entertainment, dar își are originea în 1990 atunci când a fost creat de Gary Yost pentru platforma DOS și se numea 3D Studio. A fost cumpărat de Autodesk și atunci a primit numele actual.

Pe lângă faptul că este foarte folosit în industria jocurilor, 3Ds Max este utilizat și în cinematografie.

Printre cele mai renumite filme realizate cu ajutorul acestui program se numără și: „Harry Potter”, „Avatar”, „2012”, „Transformers”, „X Men”, „Spider-Man”, „Planet 51” și multe altele.

Deși programul prezintă o interfață destul de dificilă, nu durează mult până să reușim sa deslușim principalele elemente.

În zona centrală sunt cele patru ferestre prin intermediul cărora ni se permite să vizualizăm obiectele pe care le creăm din diferite unghiuri pentru a obține un control mai bun asupra scenei.

Programul permite crearea unor obiecte predefinite, unele mai simple: cub, cilindru, sferă, altele putin mai complicate: ceainic, scări, uși, ferestre.

Deasemenea se pot crea și obiecte 2D, unele mai simple: plan, linie, cerc, patrat, elipsa, altele mai complicate: stea.

După crearea unui obiect în 3D max avem trei opțiuni foarte ușoare: mutare, rotire, scalare. Mutarea permite deplasarea unui obiect pe una sau mai multe dintre cele trei axe de coordonate x, y, sau z. Rotirea ne permite să rotim un obiect pe una sau mai multe axe dintre cele trei, iar scalarea ne pemite să mărim sau să micșorăm un obiect pe una sau mai multe axe.

În tabelul următor sunt prezentate cele mai utilizate scurtături ale programului 3Ds Max, care ne permit un control mai bun și facilitează procesul de modelare.

Atunci când modificatorul Editable Poly este utilizat avem urmatoarele scurtături disponibile:

Plecând de la obiecte predefinite se pot crea modele tridimensionale foarte interesante.

În ceea ce privește proiectul meu, am folosit 3Ds Max 2010 pentru crearea obiectelor de pe fundalul interfeței de control.

Partea hardware

Dispozitivul Android

Dispozitiv folosit pentru intrfața de control poate fi orice dispozitiv care are ca sistem de operare Android, ceea ce este foarte util.

Pentru acest proiect dispozitivul Android folosit este o tabletă Lenovo A3500-FL, care are următoarele specificații:

Ecran IPS de mărime 7 inch (17.78 cm)

Procesor Quad-Core de 1.3Mhz

Memorie internă 8GB

1024 Mb memorie RAM

Sistem de operare Android 4.4.2

Arduino UNO R3

„UNO” este un cuvânt ce provine din linba italiană, acolo unde înseamnă unu și a fost adoptat pentru a marca lansarea versiunii Arduino 1.0.

Plăcuța Uno este cea mai recentă dintre plăcuțele Arduino USB și în același timp este modelul de referință al platformei Arduino.

Conține un chip Atmega16U2 ceea ce o deosebește de predecesoarele ei care aveau FTDI USB-to-serial și în plus are un sistem de resetare mai bun.

Printre caracteristici se numără:

Microcontroler-ul folosit este ATmega328

Limitele de tensiune sunt 6 și 20V

Tensiunea recomandată este între 7 și 12V

Tensiunea cu care operează este de 5V

Pinii digitali sunt în număr de 14 dintre care 6 pentru PWM

Are 6 pini pentru intrare analogică

Pinii de intrare/ieșire au un curent de 40 mA

Pinii de 3.3V au un curent de 50 mA

Memoria flash este de 32 KB (Atmega328), de unde 0.5 KB sunt utilizați de bootloader

Memoria EEPROM este de 1 KB

Memoria SRAM este de 2 KB

Frecvența este de 16 Mhz

Are o lungime de 6.86 cm

Are o lățime de 5.34 cm

Are o greutate de 25 g

Plăcuța poate fi alimentată de la o sursă externă dar se poate conecta și prin USB. Pinii digitali pot fi folosiți atât ca intrări cât și ca ieșiri prin intermediul unor funcții din platforma Arduino, ca de exemplu pinMode(), digitalWrite() și digitalRead(), iar unii pini au funcții specializate:

Comunicare serială: pinii TX și RX sau 1 și 0 sunt folosiți pentru a transmite și respectiv a recepționa date.

Întreruperi externe: pinii 2 și 3 pot fi configurați sa declanșeze o întrerupere utilizând funcția attachInterrupt().

PWM: pinii 3, 5, 6, 9, 10, 11 permit ieșire PWM utilizând funcția analogWrite().

SPI: pinii 10, 11, 12, 13 pentru comunicare folosind librăria SPI

LED: la pinul 13 există un LED încorporat care se aprinde atunci când pinul primește curent și este stins când nu primește curent.

Pinii analogici sunt în număr de 6 și sunt denumiți de la A0 la A5, Raza lor este de regulă între 0 și 5 volți dar poate fi modifictă utilizând pinul AREF si funcția analog Reference(). Unii au și funcții specializate:

TWI: pinii A4 și A5 sau pinul SDA, respectiv pinul SCL permit comunicare TWI

RESET: resetează microcontroler-ul

În legătură cu comunicarea, aceasta se realizează ușor, microcontroler-ul ATmega 328 permițând o comunicare serială UART TTL (5V) disponibilă pe pinii 0 și 1, adică RX și TX.

În urmatoarele imagini este prezentat microcontroler-ul ATmega328, structura pinilor precum și funcția pe care o îndeplinesc în Arduino.

În imaginile următoare este prezentat chipul ATmega16U2 și pinii săi.

Servomotorul

Servomotorul Tower Pro Micro Servo 9g SG90 se poate roti 180˚, 90˚ în fiecare direcție și este recomandat pentru începători.

Caracteristici:

Lungime: 3.22 cm

Lățime: 1.18 cm

Înalțime: 3.1 cm

Greutate: 9 g

Cuplu: 1.8 kgf˖cm

Timp de operare: 0.1 s/60˚

Tensiunea de operare: 4.8-5V

Temperatura: 0˚C-55˚C

În cazul servomotorului, poziția „0” înseamnă centru, poziția „90” înseamnă extremitatea dreaptă, iar poziția „-90” înseamnă extremitatea stângă.

În ceea ce privește cele trei fire, cel portocaliu se conectează la pinul PWN, cel maro la masă, iar cel roșu la sursa de tensiune.

Modulul Bluetooth

Caracteristici:

Transmițător wireless: senzitivitatea poate atinge 80 dBm, iar raza ieșirii este între -4 și +6dBm

Descrierea funcționării: are o antenă integrată de 2.4 Ghz, poate să funcționeze în tensiune scăzută(3.1-4.2V), curentul fiind cuprins între 30-40mA.

Dimensiuni: lungime 28mm, lățime 15mm și înălțime 2.35mm.

Temperatura de lucru între -25˚C și +75˚

Distanță de acoperire: până la 10 m

Cei patru pini ai modulului sunt următorii:

Vcc: sursa de tensiune este de 5V

Gnd: masa

RXD: intrare serială

TXD: ieșire serială

Modulul bluetooth se conectează la plăcuța Arduino în felul următor:

Pinul GND al modulului se conectează la pinul GND al plăcuței

Pinul VCC al modului se conectează la pinul 5V al plăcuței

Pinul RXD al modului se conectează la pinul TX al plăcuței, adică pinul 1

Pinul TXD al modului se conectează la pinul RX al plăcuței,adică pinul 0

Driver-ul pentru motor

Driver-ul folosit pentru controlul motorului robotului mobil este L293D. Este construit să asigure trecerea în mod bidirecțional a unor curenți de până la 600mA. Toate intrările sunt compatibile TTL. Atunci când o intrare de tip „enable” este mare, driverele asociate sunt activate și ieșirile lor devin active și în fază cu intrările, iar când este mică, driverele sunt dezactivate și ieșirile rămân intr-o stare de mare impedanță. Modul acesta de funcționare face ca L293D să fie potrivit pentru controlul unui motor.

În imaginile următoare este prezentat driver-ul L293D și o schemă a pinilor săi.

Caracteristici pentru L293D:

Suportă o variație mare de tensiune, între 4.5-36V

Intrări cu rezistență ridicată la zgomot

Curent la ieșire de 600mA

Vârful curentului la ieșire de 1.2A

Temperatură de funcționare între 0˚C și 70˚C

Stabilizatorul de tensiune 7805

Sursa de tensiune dintr-un circiut poate să aibă fluctuații și sa nu dea o valoare fixă, astfel că stabilizatorul menține o valoare constantă a tensiunii la ieșire.

7805 este un stabilizator de tensiune și face parte din seria de stabilizatoare 78xx, unde xx arată tensiunea la ieșire asigurată. În acest caz, stabilizatorul asigură o tensiune la ieșire de 5V.

În tabelul următor sunt prezentați pinii:

Caracteristici:

Curent la ieșire de până la 1.5A

Tensiuni la ieșire de 5, 6, 8, 9, 10, 12, 15, 18, 24 V

Protecție împotriva supraîncălzirii

Protecție împotriva scurt-circuitului

DESCRIEREA PROIECTULUI

Interfața de control

Unity

Interfața de control realizată cu ajutorul programului Unity poate fi observată în imaginea următoare:

3Ds Max

Am folosit programul 3Ds Max pentru a crea mașina de pe fundalul interfeței de control. Pentru crearea acestui obiect am început prin setarea configurației ferestrelor de lucru din program, după cum urmează:

În bara de meniu am apăsat „Customize” și apoi am ales „Preferences”, unde am configurat opțiunea „Viewports” pentru ferestre și am ales setările necesare.

Am început apoi prin a crea trei plane pe care am incărcat imagini de referință, fiecare plan corespunzând unui unghi din care privim: de sus, din stânga și din față.

Am creat încă un plan pe care am început să îl modelez dupa aplicarea modificatorului „Editable Poly”. Modelarea a avut loc selectând pas cu pas punctele planului și mutându-le, prelungind segmente și respectând imaginile ajutătoare.

La un moment dat a fost nevoie sa mai introduc încă un plan pe care a trebuit să încarc o imagine cu spatele mașinii pentru a putea continua modelarea.

După terminarea caroseriei am modelat o roată.

În final am atașat roțile de caroserie, selectând caroseria și folosind butonul de atașare „Attach” apoi selectând pe rând fiecare roată.

În imaginea următoare este prezentat obiectul final.

Hardware

Am început proiectul de la o mașinuță deja existentă, căreia i-am îndepărtat toate pisesle componente cu excpția motorlui care s-a dovedit că funcționează după testare.

În imaginea următoare este prezentat șasiul mașinuței dupa demontarea pieselor originale.

Următoarele imagini arată caroseria demontată a mașinii.

În următoarea imagine este prezentată telecomanda originală cu care era controlată mașina.

Iar aici este vechea plăcuță de comandă.

Servomotorul

Servomotorul este montat pe plasticul care susține ambele roți directoare și atunci cțnd se rotește mișcă roțile, după cum se poate observa în imaginile următoare.

Rotire maximă dreapta în imaginea următoare.

Rotire maximă stânga în imaginea următoare.

Codul folosit pentru testarea servomotorului este următorul:

Servo servo; // creează un obiect de tip servo care să controleze servomotorul

// pe majoriatea plăcilor pot fi create 12 astfel de obiecte

int poz = 0; // o variabilă care să memoreze potiția servomotorului

void setup()

{

servo.attach(9); // obiectului servo i se atașază servomotorul conectat la pinul 9

}

void loop() //aceasta este o buclă

{

for(poz = 0; poz <= 40; poz += 1) // pleacă de la 0 la 40 grade

{ // în pași de câte 1 grad

servo.write(poz); // îi spune obiectului servo să treacă în poziția din variabila 'poziție'

delay(15); // așteaptă un timp ca servo sa ajungă în poziție

}

for(poz = 40; poz>=0; poz -=1) // pleacă de la 40 la 0 grade

{

servo.write(poz); // îi spune obiectului servo să treacă în poziția din variabila 'poziție'

delay(15); // așteaptă un timp ca servo sa ajungă în poziție

}

}

Legătura pinilor este prezentată în tabelul de mai jos:

După încărcarea codului, servomotorul se va roti la stânga cu 40˚ si apoi la dreapta cu 40˚

Driverul pentru motor L293D

Am folosit un breadboard pentru a conecta L293D, după cum se poate observa în imaginea următoare:

Pinii driver-ului sunt conectați ca în tabelul următor:

Pinul 1 stabilește și viteza de rotație a motorului, în timp ce pinii 2 și 7 stabilesc sensul în care se rotește motorul. Pinii din mijoc, adică 4 și 5 sunt conectați la masă, iar pinii 3 și 6 sunt conectați la motor. Pinul 8 este conectat la sursa de tensiune de 9V.

Codul folosit pentru testarea driver-ului și a motorului este următorul:

void setup()

{

pinMode(2, OUTPUT); //stabilește pinul ca ieșire

pinMode(3, OUTPUT); //stabilește pinul ca ieșire

pinMode(5, OUTPUT); //stabilește pinul ca ieșire

}

void loop() //aceasta este o buclă

{

analogWrite(5, 255); // se setează PWM-ul

digitalWrite(2, HIGH); //pinul 2 setat high

digitalWrite(3, LOW); //pinul 3 setat low

delay(2000); //aceasta este o întârziere, se așteptă timpul din paranteză pâna să se treacă mai departe

digitalWrite(2, LOW); //pinul 2 setat low

digitalWrite(3, HIGH); //pinul 3 setat high

delay(2000); //aceasta este o întârziere, se așteptă timpul din paranteză pâna să se treacă mai departe

digitalWrite(2, LOW); // pinul 2 setat low

digitalWrite(3, LOW); // pinul 3 setat low

delay(2000); //aceasta este o întârziere, se așteptă timpul din paranteză pâna să se treacă mai departe

}

După încărcarea codului, L293D va controla motorul să funcționeze în felul următor:

Motorul se va roti într-un sens

Apoi va aștepta un timp determinat de întârzierea definită în cod în cadrul funcției delay()

Motorul se va roti in sens invers

Va aștepta din nou un timp definit în cod

Motorul nu se va roti pentru un timp definit în cod

Apoi va relua secvența de la început datorită buclei loop()

Modulul Bluetooth și stabilizatorul de tensiune 7805

Modulul bluetooth și stabilizatorul de tensiune sunt montate și ele pe breadboard și au pinii conectați după cum urmează:

Pentru bluetooth:

Pentru stabilizatorul de tensiune:

Plăcuța Arduino

Plăcuța Arduino a fost programată utilizând software-ul Arduino, după se poate observa în imaginile următoare.

Mai întâi trebuie verificat ca în programul Arduino sa fie selectată plăcuța corespunzătoare și mediul de programare corespunzător, după cum urmează:

După aceea se introduce codul, se compilează și se încarcă pe plăcuța Arduino

Concluzii

Autorul prezintă concluziile sale…

Bibliografie

[DOOM05] – Dicționarul ortografic, ortoepic și morfologic al limbii române, Editura Univers Enciclopedic, București, 2005

Referințe web

https://en.wikipedia.org/wiki/Android_(operating_system)#History

https://en.wikipedia.org/wiki/Unity_(game_engine)

https://en.wikipedia.org/wiki/List_of_Unity_games

https://en.wikipedia.org/wiki/Autodesk_3ds_Max

https://en.wikipedia.org/wiki/List_of_films_made_with_Autodesk_3ds_Max

https://www.arduino.cc/en/Main/ArduinoBoardUno

http://datasheet.sparkgo.com.br/SG90Servo.pdf

http://users.ece.utexas.edu/~valvano/Datasheets/L293d.pdf

https://www.fairchildsemi.com/datasheets/lm/LM7805.pdf

http://www.engineersgarage.com/electronic-components/7805-voltage-regulator-ic

Codul sursă

Acesta este codul din Unity, pentru crearea interfeței:

using UnityEngine;

using System.Collections;

public class GUIManager : MonoBehaviour {

public GUIStyle acceleratie;

public GUIStyle frana;

public GameObject Slider;

public float marjaSlider = 0.7f;

private Vector3 defaultPosition = new Vector3 (-1.5f, 3, -7.5f );

private bool clickApasat = false;

private float viteza;

private float diferenta;

private bool stanga;

private bool dreapta;

private bool fata;

private bool spate;

private string directieMesaj;

private GameObject masina;

// faci o variabila viteza

// cand e apasata viteza

private float grade;

// Use this for initialization

void Start () {

Slider.transform.position = defaultPosition;

viteza = 0;

masina = GameObject.FindGameObjectWithTag ("Masina");

grade = 0;

}

// Update is called once per frame

void Update () {

if (fata) {

if (stanga) {

grade = 45;

} else if (dreapta) {

grade = -45;

} else {

grade = 0;

}

} else if (spate) {

if (stanga) {

grade = 135;

} else if (dreapta) {

grade = 225;

} else {

grade = 180;

}

} else {

grade = 0;

}

masina.transform.rotation = Quaternion.Euler( new Vector3(0,0,grade));

if (Input.GetMouseButton (0)) {

Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);

RaycastHit hit;

if (Physics.Raycast (ray, out hit, 50)) {

if (hit.collider.tag == "Slider") {

clickApasat = true;

}

}

} else {

clickApasat = false;

Slider.transform.position = defaultPosition;

}

// -1.5 > -2.0 && -1.5 < -1

if ( clickApasat ) {

Vector3 MousePosition = Camera.main.ScreenToWorldPoint (new Vector3 (Input.mousePosition.x, 1, 2.5f));

Slider.transform.position = new Vector3 (MousePosition.x, Slider.transform.position.y, Slider.transform.position.z);

}

// -1.5 > -2

if ( Slider.transform.position.x < (defaultPosition.x – marjaSlider) ) {

Slider.transform.position = new Vector3(defaultPosition.x – marjaSlider, Slider.transform.position.y, Slider.transform.position.z);

}

if ( Slider.transform.position.x > (defaultPosition.x + marjaSlider) ) {

Slider.transform.position = new Vector3(defaultPosition.x + marjaSlider, Slider.transform.position.y, Slider.transform.position.z);

}

if (viteza < -10) {

viteza = -10;

fata = false;

}

if ( viteza > 0.05f ) {

viteza -= 0.03f;

}else if ( viteza < -0.05f ) {

viteza += 0.1f;

}

if (viteza <= 0.05f && viteza >= -0.05f) {

viteza = 0;

}

if(viteza > 10){

viteza = 10;

}

if (Slider.transform.position.x == -1.5f) {

diferenta = 0;

directieMesaj = "Inainte";

stanga = false;

dreapta = false;

} else if (Slider.transform.position.x < -1.5f) {

directieMesaj = "Stanga";

stanga = true;

dreapta = false;

diferenta = (float)(-1.5 – Slider.transform.position.x);

} else if (Slider.transform.position.x > -1.5f) {

directieMesaj = "dreapta";

diferenta = (float)(Slider.transform.position.x – (-1.5f));

stanga = false;

dreapta = true;

}

}

void OnGUI(){

if (GUI.RepeatButton (new Rect (Screen.width – 150, Screen.height – 200, 100, 150), "", acceleratie)) {

if ( viteza < 10 ) {

viteza += 0.1f;

fata = true;

spate = false;

}

}

if (GUI.RepeatButton (new Rect (Screen.width – 325, Screen.height – 150, 150, 100), "", frana)) {

fata = false;

spate = true;

if ( viteza > -10 ) {

viteza -= 0.2f;

}

}

GUI.Label (new Rect (10, 10, 150, 35), "viteza: " + Mathf.Round(viteza * 10f)/10f);

GUI.Label (new Rect (10, 55, 150, 35), directieMesaj + " " + Mathf.Round(diferenta * 100f)/100f);

}

}

Acesta este cidul folosit pentru testarea funcționaării servomotorului și a motorului:

#include <Servo.h>

Servo servo; // creează un obiect de tip servo care să controleze servomotorul

// pe majoriatea plăcilor pot fi create 12 astfel de obiecte

int pozitie = 0; // o variabilă care să memoreze potiția servomotorului

void setup()

{

pinMode(2, OUTPUT);//stabilește pinul ca ieșire

pinMode(3, OUTPUT);//stabilește pinul ca ieșire

pinMode(5, OUTPUT);//stabilește pinul ca ieșire

servo.attach(9); // obiectului servo i se atașază servomotorul conectat la pinul 9

}

void loop() //aceasta este o buclă

{ analogWrite(5, 255);// se setează PWM-ul

digitalWrite(2, HIGH);//pinul 2 setat high

digitalWrite(3, LOW);//pinul 3 setat low

delay(2000);//aceasta este o întârziere, se așteptă timpul din paranteză pâna să se treacă mai departe

digitalWrite(2, LOW);//pinul 2 setat low

digitalWrite(3, HIGH);//pinul 3 setat high

delay(2000);//aceasta este o întârziere, se așteptă timpul din paranteză pâna să se treacă mai departe

digitalWrite(2, LOW);

digitalWrite(3, LOW);

delay(2000);//aceasta este o întârziere, se așteptă timpul din paranteză pâna să se treacă mai departe

for(pozitie = 0; pozitie <= 40; pozitie += 1) // pleacă de la 0 la 40 grade

{ // în pași de câte 1 grad

servo.write(pozitie); // îi spune obiectului servo să treacă în poziția din variabila 'pozitie'

delay(15); // așteaptă un timp ca servo sa ajungă în poziție

}

for(pozitie = 40; pozitie>=0; pozitie-=1) // pleacă de la 40 la 0 grade

{

servo.write(pozitie); // îi spune obiectului servo să treacă în poziția din variabila 'poziție'

delay(15); // așteaptă un timp ca servo sa ajungă în poziție

}

}

CD / DVD

Autorul atașează în această anexă obligatorie, versiunea electronică a aplicației, a acestei lucrări, precum și prezentarea finală a tezei.

Index

B

Bibliografie 9

C

CUPRINSUL xi

D

Dimensiuni 3

F

Figuri 4

Formulele matematice 4

I

Ilustrațiile 4

L

Legenda 6

LISTA FIGURILOR xii

LISTA TABELELOR xiii

R

Referințe web 10

S

Structura documentului 2

T

Tabele 5

Similar Posts