ht barro

52

Upload: adrianl136378

Post on 31-Jul-2015

65 views

Category:

Documents


8 download

TRANSCRIPT

Page 1: Ht Barro
Page 2: Ht Barro

cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot cum se construiește un robot

C U M S E C O N S T R U I E Ș T E U N R O B O T

R O B O T

M E C A N I C Ă

E L E C T R O N I C Ă

S E N Z O R I

P R O G R A M A R E

D E S P R E R O K E Y

S O L U Ț I I

Editori: Silvia-Daniela Ionaşcu • Marian-Silviu Poboroniuc • Radu IonaşcuCoautori străini: Vladimir Bobot • Jens Kristian Borup • Mika Vettensaari • Ştefan Wintgen

M E C A N I C Ă

E L E C T R O N I C Ă

S E N Z O R I

D E S P R E R O K E Y

S O L U Ț I I

P R O G R A M A R E

Un

ghid

pra

ctic

pas

cu

pas

pent

ru e

levi

i și p

rofe

sorii

din

șco

li

gim

nazi

ale

și li

cee.

CINE PENTRU CINE ?

Acest ghid este scris de către profesorii din licee și universitari pentru elevii din școlile gimnaziale și licee. Profesori către elevi.Acest ghid este scris de către profesorii din licee și universitari pentru profesorii din școlile gimnaziale și licee.Profesori către profesori.Acest manual reprezintă produsul colectiv al tuturor partenerilor. Fiecare partener și-a dezvoltat partea scrisă și figurile pentru un rezultat comun. Din acest rezultat s-au ales părțile componente pentru acest manual.Elevii sunt unici. Acest manual se dorește a fi un ghid: un ghid care ajută elevii să înțeleagă elementele de bază; un ghid care nu descrie, ci explică; un ghid care expune elevilor o cale dificilă, dar captivantă să afle multe lucruri noi; un ghid care poate fi prima, dar nu și ultima carte despre roboți a unui elev. Toți avem această convingere.

Editori: Silvia-Daniela Ionascu • Marian-Silviu Poboroniuc • Radu IonascuCoautori straini: Vladimir Bobot • Jens Kristian Borup • Mika Vettensaari • Stefan Wintgen

R O B O T

DE CE?

Un robot reprezintă un complex de abilități reciproc conectate prin fire, șuruburi și idei. Cine știe cum să constuiască un robot, știe dependențe. Pentru a cunoaște dependențele este necesară înțelegerea. Înțelegerea este ceea ce ne dorim noi ca un elev să dobândească.

CU

M S

E C

ON

STR

UIE

ȘTE

UN

RO

BO

T C U M S E C O N S T R U I E Ș T E

U N R O B O T

Conţinutul acestui document este responsabilitatea exclusivă a Grupului Şcolar Industrial “Ştefan Procopiu“ şi nu reprezintă punctul de vedere al Comisiei Europene şi al Agenţiei Naţionale pentru Programe Comunitare în Domeniul Educaţiei şi Formării Profesionale. Comisia Europeană şi Agenţia Naţională pentru Programe Comunitare în Domeniul Educaţiei şi Formării Profesionale nu au nici o responsabilitate cu privire la conţinutul acestui document.

Un ghid practic pas cu pas pentru elevii și profesorii din școli gimnaziale și licee.

Programul pentru învățare continuă Comenius

Parteneriate Școlare Multilaterale Rokey 2008-2010

Proiectul este finanțat de Comisia Europeană.

Page 3: Ht Barro

Silvia-Daniela IonașcuMarian-Silviu Poboroniuc

Radu Ionașcu&

Vladimir BobotJens Kristian Borup

Mika VettensaariŞtefan Wintgen

Cum se construiește un robot !

Un ghid practic pas cu pas pentru elevii și profesorii din școli gimnaziale și licee.

Programul pentru învățare continuă ComeniusParteneriate Școlare Multilaterale

Proiect ROKEY 2008-2010Tehnologii-Robot ca soluții pentru învățare în viitor 2008-2010

ISBN 978-606-92400-1-4

Page 4: Ht Barro

Cum se construiește un robotUn ghid practic pentru elevii și profesorii de liceu şi şcoli generale conform Programului Comenius - Parteneriate Şcolare Multilaterale, Tehnologii-Robot ca soluție pentru procesul de învățare în viitor.

Editori: Silvia - Daniela Ionașcu, Marian-Silviu Poboroniuc, Radu Ionașcu (România);Coautori străini: Vladimir Bobot (Slovacia), Jens Kristian Borup (Danemarca), Mika Vettensaari (Finlan-da), Stefan Wintgen (Germania).Tehnoredactare: Radu IonașcuCopyright © Vladimir Bobot, Jens Kristian Borup, Silvia - Daniela Ionașcu, Mika Vettensaari, Stefan Wint-gen, 2010.

Aviz legal:Toate drepturile rezervate. Nimic din acest manual si nici de pe CD nu poate fi copiat sau transmis electronic ori fizic, incluzând: copierea sa, înregistrarea sau stocarea informației printr-un sistem de recuperare a datelor, fără permisiunea lui Vladimir Bobot.Orice fragment din această carte sau chiar și cartea în întregime pot fi folosite de: Carl-Benz-Schule Koblenz (Koblenz,Germania), Grup Școlar Industrial Stefan Procopiu (Vaslui, România), Satakunnan Ammattiopisto (Kankaanpaa, Finlanda), TEC (Centru de Formare Profesională) – Școala Gimnazială Superioară Tehnică din Lyngby (Copenhaga, Danemarca) exclusiv pentru realizarea oricărui obiectiv al Proiectului Tehnologii-Robot ca soluţie pentru procesul de învăţare în viitor al Parteneriatelor Școlare Multilaterale Comenius, ca drept ver-siunea PDF a acestei cărti de la: www.rokey.eu sau CD-ul atașat pot fi copiate și folosite (dar nu imprimate) de către profesorii și elevii școlilor gimnaziale şi din licee, exclusiv în scopuri educative. Toate celelalte drepturi sunt rezervate.

Prima ediție: februarie 2011.Număr de exemplare printate in limba romana: 100.Ataşament: CD-ul atașat conține versiunea electronică a acestei cărți (a se vedea avizul legal)www.rokey.eu: pagina conține versiunea acestei cărți în format electronic (a se vedea avizul legal)Editura: Imprimis, Str, Chimiei, nr.16, Iași, RomâniaISBN 978-606-92400-1-4

Bibliografie și surse folosite:Scheme electronice (p. 26, 27), așezarea componentelor și desene PCB (p. 22,23,24): Stefan WintgenFotografii de Karel Capek, Isaak Asimov, poster-ul R.U.R: wikipedia.orgCele trei principii ale Roboticii: Isaac Asimov Secvențele din filme despre roboți 8,9,10 și fotografiile roboților de la paginile 8,9,12: wikipedia.orgDesenele Da Vinci: drawingsofleonardo.comSenzor ultrasonic (p. 42): parallax.comSteaguri: hxms.com, atmel.com

Mulțumiri speciale (în ordine alfabetică): Henrik Bæch, Vladimir Bobot, Silvia - Daniela Ionașcu, Alfred Psutka, Aila Vatanen - coordonatoriiproiectului de la școlile participante pentru organizarea excelentă a întâlnirilor noastre, care au fost esențiale pentru dezbaterile sistematice despre conținutul ghidului.

Traducere texte materiale de specialitate:Profesori: Teodora Mandrea, Ana Cristiana Botan, Carmen Ranette, Teodora Donosa şi Georgiana Coşaru

Mii de mulțumiri:Tuturor partenerilor asociați pentru propunerile și comentariile lor valoroase, în special Facultății de Inginerie Electrică, Energetică și Informatică Aplicată, Universitatea Tehnică “Gheorghe Asachi” din Iași, România, reprezentată de Conf.dr.ing. Marian-Silviu Poboroniuc.

DESPRE ROKEY................................................................................................... 4 INTRODUCERE (de Silvia - Daniela Ionașcu) 4 OBIECTIV TEHNIC (de Marian-Silviu Poboroniuc) 4 MĂSURI DE SIGURANȚĂ (de Silvia - Daniela Ionașcu) 5ROBOT.................................................................................................................... 6 ISTORIE (de Maria Ciulei) 6MECANICĂ............................................................................................................ 8 TEORIE (de Mariana Bacoşcă Bică ) 8 CLASIFICARE (de Mariana Bacoşcă Bică) 10 ȘASIU (de Mariana Bacoşcă Bică) 11 FOTOGRAFII (echipa română de proiect) 12 DETALII (echipa română de proiect) 13ELECTRONICĂ..................................................................................................... 14 RECAPITLUARE (de Maria Ciulei) 15 SCHEMĂ BLOC (de Maria Ciulei) 16 LISTA COMPONENTELOR ELECTRONICE (de Maria Ciulei) 17 SCHEMA COMPONENTELOR (de Maria Ciulei) 18 PCB-UL MICROCONTROLLER-ULUI (de Maria Ciulei) 20 PLACA DE DEZVOLTARE (de Maria Ciulei 22 SCHEMA ELECTRONICĂ AVR (de Maria Ciulei) 24 SCHEMA PUNȚILOR H (de Maria Ciulei) 25 MOTOARE (de Maria Ciulei şi Marian Poboroniuc) 26 SERVO (de Maria Ciulei şi Marian Poboroniuc) 28 PUNTEA-H (de Radu Ionaşcu și Maria Ciulei) 30 STABILIZATORUL (de Maria Ciulei, Silvia - Daniela Ionașcu) 30 BATERII (de Maria Ciulei ) 31 EXAMINARE (de Radu Ionaşcu şi Maria Ciulei) 32 VERIFICARE (de Radu Ionaşcu şi Maria Ciulei) 32 REZULTATE (de Silvia - Daniela Ionașcu, Maria Ciulei) 33SENZORI................................................................................................................ 36 CLASIFICARE (de Silvia - Daniela Ionașcu, ) 36 PARAMETRI (de Silvia - Daniela Ionașcu) 37 TABEL CU SENZORI (de Silvia - Daniela Ionașcu) 38 MICROSWITCH (de Mariana Bacoşcă Bică) 38 SENZOR CU INFRAROȘU (de Silvia - Daniela Ionașcu) 39 FOTOREZISTOR (de Maria Ciulei ) 39 SENZOR CU ULTRASUNETE (de Silvia - Daniela Ionașcu) 40 CODIFICATORUL (Silvia - Daniela Ionașcu) 42 SENZORI ÎN INFRAROȘU SHARP (de Silvia - Daniela Ionașcu și Dănuţ. Irimia) 44 GAMA DE PRODUSE SHARP (de Silvia - Daniela Ionașcu ) 46 CLASIFICAREA SENZORILOR DE PROXIMITATE (de Silvia - Daniela Ionașcu ) 47 CONCLUZII DE LARGĂ UTILIZARE (de Mariana Bacoșcă, Marian Poboroniuc) 47 GPS (de Silvia - Daniela Ionașcu) 48 SENZORUL HALL (de Silvia - Daniela Ionașcu) 49PROGRAMARE..................................................................................................... 50 BINE DE ȘTIUT (de Silvia - Daniela Ionașcu, Marian Poboroniuc) 50 VARIANTA I (de Eusebiu Gherguţ, Radu Ionașcu și Dănuț Irimia) 51 VARIANTA II (de Marian Poboroniuc și Radu Ionașcu) 53 PINII MICROCONTROLLER-ULUI ATMEGA 32 (de Radu Ionaşcu) 54 SCHEMA BLOC ATMEGA32 (de Radu Ionşcu) 56 AVR STUDIO (de Radu Ionaşcu, Eusebiu Gherguţ) 58 NOȚIUNI DE BAZĂ ALE LIMBAJULUI C (de Eusebiu Gherguţ) 64 REGISTRE FUNCȚIONALE (de Eusebiu Gherguţ) 68 PORTURI (de Eusebiu Gherguţ ) 68 REZISTENȚA PULL-UP (de Radu Ionaşcu, Gherguţ Eusebiu) 70 OPERAȚII PE BIȚI (de Radu Ionașcu, Dănuț Irimia) 72 DISPLAY-UL LCD (de Silvia - Daniela Ionașcu și Radu Ionașcu) 73 CONVERTORUL ANALOGIC-DIGITAL (Silvia Daniela Ionașcu, Marian Poboroniuc) 74 OSCILATORUL CU CRISTALE (de Radu Ionaşcu, Dănuţ Irimia) 78 CRONOMETRUL WATCH DOG (de Radu Ionaşcu) 79 CRONOMETRUL / NUMĂRĂTOR (de Radu Ionaşcu) 80 TEORIA PWM (de Marian Poboroniuc, Radu Ionaşcu ) 83 ÎNTRERUPERI (de Marian Poboroniuc, Radu Ionaşcu) 85 REGLARE PID (de Radu Ionaşcu) 86SOLUȚII........................................................................................................... 90 DANEMARCA - SOLUȚII (de Jens Kristian Borup) 92 FINLANDA - SOLUȚII (de Mika Vettensaari) 93 GERMANIA - SOLUȚII (de Stefan Wintgen) 94 SLOVACIA - SOLUȚII (de Vladimir Bobot) 94 ROMÂNIA - SOLUȚII (echipa română de proiect) 95

CU

PRIN

S

Page 5: Ht Barro

Cum se construiește un robot Cum se construiește un robot4 5Proiectul Rokey Proiectul Rokey

“Rokey” este un acronim pentru Tehnologii-Robot ca o soluție pentru procesul de învățare în viitor.“Rokey” este un proiect internațional care se încadrează în Programul de Învățare Permanentă Comenius - Parteneriate Multilaterale Școlare.Parteneriatul “Rokey” este susținut de către școlile gimnaziale şi licee din Dane-marca, Finlanda, Germania, România și Slovacia după cum urmează:• TEC (Centrul de Formare Profesionala) Școala Gimnazială Tehnică din

Lyngby (Copenhaga, Danemarca), reprezentată de coordonatorul de proiect Henrik Baech

• Satakunnan Ammattiopisto (Kankaanpaa, Finlanda), reprezentat de coordo-natorul de proiect Aila Vatanen

• Carl-Benz-Schule Koblenz (Koblenz, Germania, reprezentat de coordona-torul întregului proiect Alfred Psutka)

• Grup Școlar Industrial Ștefan Procopiu (Vaslui, România), reprezentat de coordonatorul de proiect Silvia-Daniela Ionașcu cu partenerul asociat, Facultatea de Inginerie Electrică, Energetică și Informatică Aplicată, Uni-versitatea Tehnică “Gheorghe Asachi” din Iași, reprezentată de Conf.dr.ing.Marian-Silviu Poboroniuc.

• Stredná odborná škola, Pod Sokolicami 14, (Trencín ,Slovacia), reprezentat de coordonatorul de proiect Vladimir Bobot.

• Robotul trebuie să pătrundă într-o incintă delimitată cu pereți rigizi (gard), să găsească un obiect, să-l prindă și să revină în punctul de start.

• Obiectul poate să fie confecționat din orice material. Dimensiunea este de 30x30 mm (proporțională cu dimensiunile apucătorului robotului).

• Un obiect poate fi localizat oriunde în incintă.• Gardul are 7 cm înălțime și culoarea sa nu este specificată.• Dimensiunea incintei este de aproximativ 1500x2000 mm.• Suprafața incintei este făcută dintr-un material monocrom, de regulă din

lemn.• Motoarele și senzorii pot fi alese de către fiecare partener. Platforma

mecanică și electronică a robotului este una comună. Se intenționează realizarea de algoritmi comparabili de căutare, prindere și mișcare.

• Microcontroller - Atmel ATmega32.• Limbaj de programare - Limbajul C (se poate folosi și Assembler).Elementele nespecificate pot fi alese independent de către parteneri.

INTRODUCERE

DE CE?

Un robot reprezintă un complex de abilități reciproc conectate prin fire, șuruburi și idei. Cine știe cum să constuiască un robot, știe dependențe. Pentru a cunoaște dependențele este necesară înțelegerea. Înțelegerea este ceea ce ne dorim noi ca un elev să dobândească.

DE LA CINE ȘI PENTRU CINE?

Acest ghid este scris de către profesorii de liceu și universitari pentru elevii școlilor gimnaziale și pentru elevii de liceu. De la profesori către elevi. Acest ghid este scris de către profesorii de liceu și universitari pentru profesorii școlilor gimnaziale și de liceu. De la profesori către profesori. Manualul acesta este o lucrare colectivă a tuturor partenerilor. Partenerii au pus în comun contribuțiile lor scrise ca și desenele. De comun acord au fost alese capitolele cărții.Nicio propoziție din cartea aceasta nu a fost copiată de la o sursă străină.Elevii sunt unici. Acest manual este un ghid: un ghid pentru predarea noțiunilor de bază, elevului; un ghid care nu descrie, ci explică; un ghid care arată elevilor un mod mai dificil dar emoționant de a învăța mai mult pentru a progresa; un ghid care poate să fie prima carte de Robotică dar nu și ultima. Așa sperăm cu toții.

MĂSURI DE SIGURANȚĂ

Mai bine ai avea toate degetele decât să ai un robot. Ideal ar fi să le ai pe ai pe ambele. Luați aminte la măsurile de siguranță!Foloseste mănuși la nevoie! Folosește ochelari atunci când trebuie! Ferește-te de șocuri electrice când folosești aparatura electrică!

SARCINA

ÎNTREBĂRI

SARCINA ÎN DETALIU

GÂNDIREA

ÎNVĂȚAREA

GÂNDIREA

ÎNVĂȚAREA

CONSTRUCȚIA

PROGRAMAREA

DEPANAREA

EVALUAREA

Procesul construirii robotului!

“Principalul obiectiv al acestui proiect este de a forma specialiști creativi cu o calificare înaltă, cu abilități mari de a se perfecționa continuu, specialiști care se vor adapta cu ușurință cerințelor unui loc de muncă în domeniul Informaticii. Con-struirea unui robot este o provocare pentru elevi.”Alfred Psutka, propunere, 2008.

DESPRE ROKEY

Socializarea echipelor de pe întregul continent european.

OBIECTIV TEHNIC

Un careu delimitat de un gard.

Robot

Căutare

Căutare

Obiectul găsit și apucat

Obiect

Întoarcere

SATISFACȚIA

SAFETY

FIRST! SAFETYSECOND!

SAFETYTHIRD!

SAFE

TYFO

REV

ER!

Pune literele în ordine pentru a găsi numele scriitorului meu german preferat!

Toam

na 2

008

Vara

201

0

Ciclul de desfășurare al proiectului.

Dis

emin

are

Page 6: Ht Barro

Cum se construiește un robot Cum se construiește un robot6 7Robot Robot

Epoca de început

• Homer (Illias): femeie din aur, care a ajutat pe Hefaistos în fierăria lui.• Matematicianul grec Archyttas a construit un porumbel mecanic zburător

(probabil primul avion?).• Poveste din secolul al XIII-lea: La ușa castelului din Regensburg (un oraș

puzzle) era un android făcut din ceară, lemn și piele care păzea intrarea și vorbea cu vizitatorii. Și Thomas Aquinas a vizitat castelul și a pus androidu-lui multe întrebări filozofice. Când androidul nu putea să raspundă, el lua un băț și-l lovea pe Thomas în cap.

• Secolul al XVI-lea: Toledo (Spania) - era o stradă numită ”Strada Omului de Lemn”. Povestea spune că era un om din lemn care vindea produsele lui în piață.

Epoca copilăriei

• Secolul al XX-lea: lumea începe să folosească cuvântul “ROBOT”. Se știe că a fost folosit pentru prima oară în drama lui Karel Capek, R.U.R. (Roboții Universali ai lui Rossum, 1920). Însă, adevărul este că fratele său Josef a venit cu ideea aceasta.

Îmbunatățirea a fost făcută de către Karel Capek însuși în ziarul Lidove Noviny în cadrul articolului intitulat: “Despre cuvântul robot.”Iată traducerea:“Josef”, autorul începe, “Am o idee”.“Ce idee?” a murmurat pictorul (a murmurat într-adevăr, ținând o pensulă în gură). Autorul a explicat succint.“Scrie pe ceva atunci.”, a spus pictorul fără măcar să scoată pensula din gură și fără să înceteze să coloreze pânza. Indiferența sa era aproape ofensivă.“Însă nu pot să-i numesc pe acei muncitori prefăcuți. I-aș numi muncitorași, dar nu cred că se cuvine.”“Numește-i roboți”, a murmurat pictorul cu pensula în gură și continuând să picteze. Și așa a și fost. Așa a apărut cuvântul ”robot”. Fie ca pictorului să îi revină meritul noțiunii acesteia.• 1951 : H. Walter a construit 3 broaste țestoase. Ele puteau să detecteze lu-

mina, să evite obstacolele, să găsească surse de energie pentru a-și încărca

bateriile...probleme similare cu cele din proiectul nostru. În această etapă roboții reprezentau jucăriile.

Tinerețea

• A doua jumătate a secolului al XX-lea. Oamenii au realizat că roboții pot de asemenea să-i și ajute. Roboții își pierd formele umane, sunt asemănători mâinii omenești. Însă ei pot să substituie lucrători în activităti specializate, repetate la infinit. Un bun exemplu este sudura, 24 de ore pe zi fără nevoia de a bea sau mânca.

Prima generație de roboți

• Manipulatori programabili. Robotul poate fi programat să facă mai multe feluri de activități. Ei sunt universali. De obicei au o unitate de control și un manipulator. Un alt bun exemplu sunt roboții care sudează în Industria Automobilelor.

A doua generație de roboți (din ziua de azi)

• Roboți controlați pe baza senzorilor. Ei sunt sensibili la multe influențe ex-terne și pot să decidă cum să reacționeze în multe situații. Corpul uman are 5 simțuri. Fiecare dintre ele poate sa fie măsurat de robot. Aceste soluții sunt tipice pentru industria actuală.

A treia generație de roboți (într-un viitor apropiat)

• Roboții cu inteligență artificială. Este posibil ca ei sa decidă calea pentru pentru rezolvarea obiectivului cerut. Este un complex de receptori și actua-toare, controlate de microprocesoare.

Ce se întâmplă când un robot din prima generație se ciocnește de un obstacol?Ce ar face un robot din generația a doua? Există simțuri, pe care roboții din ziua de azi nu le au. Încearcă să explici!Explică noțiunea de grad de libertate.Este corpul uman organismul ideal? Dacă răspunsul tău este nu, de ce?Încearcă să scrii definiția ta proprie pentru robot.

Mâna umană are 27 de grade de libertate. Un braț robotic are de obicei 5 grade de libertate.

Ce este un android și ce este un cyborg?Ce înseamnă Inteligența Artificială?Ce naționalitate a avut Isaac Asimov?Ce este un nanobot?Încercați să explicați termenul senzor.

Cele trei legi ale roboților (Isaac Asimov)• Legea 1: Un robot nu trebuie să rănească o ființă umană sau prin lipsa sa de

acțiune să lase o ființă umană să fie vătămată.• Legea 2: Un robot trebuie să asculte ordinele date de ființele umane cu

excepția cazului când acestea vin în conflict cu Prima Lege.• Legea 3: Un robot trebuie să-și protejeze existența sa atât timp cât aceasta

nu vine în conflict cu Prima sau A Doua Lege.

Poster R.U.R., 1931

IRobot, 2004

Isaac Asimov, 1920 - 1992

Star Wars de George Lucas. Vă amintiți?

Karel Capek, 1890 - 1938

Lunochod, URSS, vehicul lunar.

(răspicat) Eu sunt un ROBOT. Tu cine ești?(rușinat) Sunt doar o ființă umană.

Citat din dramă, autor: QFX45 în 2304 (sper ca niciodată să nu fie publicat)

DEFINIȚIE

ÎNTREBĂRI

SARCINI

Robotul este un complex de obiecte electro-mecanice, capabil să îndeplinească sarcini în concordanță cu un program.

ISTORIE

ROBOT

Robot pentru sudură OJ 10. Pro-dus în Cehoslovacia în anul 1986.

2001 Odiseea Spațiului (Stanley Kubrick)

Un film de lung metraj, în care computerul HAL a decis cine să

trăiască și cine nu.

Page 7: Ht Barro

Cum se construiește un robot Cum se construiește un robot8 9Mecanică Mecanică

“Pot să repar navete spațiale americane.Dar trebuie să vreau și trebuie să am timp.”

Jan Gondocs, de multe ori

GÂNDIȚI-VĂ

DEFINIȚIE

Componentele mecanice sunt componentele care nu sunt electronice. Componentele mecanice sunt cele care nu au conexiune către o sursă de alimen-tare (dar depind de forma generală a robotului).

ÎNTREBARE

Sunt componente ale roboților care pot fi atât mecanice cât și electronice?Amintiți-vă spre exemplu de placa de bază a unui calculator.

Imaginați-vă că sunteți un vrăjitor. Mergeți la baie și reveniți cu o roată pentru stabilitate fără fricțiune. Chiar sunteți un vrăjitor?

• Ce se întâmplă cu stabilitatea robotului? În toate cazurile, ar trebui utilizate roți adiționale pentru stabilitate. O roată activă necesită două roți adiționale, pentru două roți active este necesară o singură roată suplimentară. Amintiți-vă din cunoștințele din Fizică. Roata pentru stabilizare ar trebui să se poată roti în toate direcțiile pentru a oferi mobilitate. Mecanica unei roți de stabi-lizare este complicată, de aceea cel mai simplu este să folosești o semisferă sau sferă din plastic.

• Ce zici de o suprafață cu roți? Roțile de plastic patinează, de aceea cel mai simplu este să folosiți roți de cauciuc. Roțile de care dispui sunt din plastic? Nicio problemă. Pune cauciuc de la roțile de bicicletă sau roagă pe cineva să te ajute. Roțile de care dispui sunt din cauciuc? Ce fel de textură folosiți? (puteți apela le tehnologia Formel 1).

• Diametrul roților. Un diametru mai mare înseamnă viteză mai mare, dar cuplu mai mic. Un diametru mai mic înseamnă cuplu ridicat, dar viteză redusă. Dacă dețineți motoare fără reducție (nu foarte puternice), este bine să folosiți un diametru al roților mai mic (probabil că robotul va urca dealul).

• Lățimea roților. Aveți acasă o bicicletă? Da, am două. Una din ele are roți subțiri. Cea de-a doua are roți groase pentru mers în pădure. Încet, dar sigur.

• Diametrul găurii centrale. Ia în calcul lungimea și diametrul axului mo-torului.

• Roțile cu motoare sunt de obicei prinse de schelet. Din ce material sunt cadrele de prindere? Lemn sau aluminiu? Aluminiul este mai bun, dar lem-nul se prelucrează mai ușor în altelierul școlii (mașină de găurit, fierăstrău, pilă...).

• Este important să se aleagă o formă potrivită a șasiului. Imaginează-și ro-botul întrun colț al incintei. Trebuie să se poată întoarce. În cazul în care forma lui este pătrată, probabil că nu va putea face acest lucru. În schimb, când forma este rotundă, nu există astfel de probleme.

• Diametrul șasiului. Ar trebui să fie cât mai mic posibil, dar trebuie avut în vedere și faptul că robotul nu este format doar din roți și motoare, ci și din senzori, baterii și sârme.

• Înălțimea robotului. Centrul de gravitație trebuie să fie cât mai aproape de sol, pentru a asigura stabilitatea în timpul întoarcerii. Încearcă să minimizezi înălțimea robotului.

• Construcția de deasupra șasiului. Nu puteți ști niciodată cine va îmbunătăți robotul. Nu știți niciodată unde vor fi situați senzorii. Încearcați să sugerați o construcție care se poate modifica pentru a putea oricând să adaugați noi piese fără să trebuiască să demontați totul (nu este vorba de sistem LEGO, ci de ceva care funcționează pe același principiu).

• Greutatea robotului este de asemenea importantă. Un robot cu masă mare este greu de manevrat la diverse viteze. Este bine să folosești o roată cu mar-ginea îngustă, dar stabilă, sârme din cupru cu diametru mic și izolație subțire (ai grijă totuși la intensitatea curentului electric), construcție din plastic, etc.

Acesta este motivul pentru care formele rotunde sunt cele mai potrivite pentru obiectivele noas-tre. Acestea pot vira fără a se lovi de colțurile incintei.

ÎNTREBARE

Care va fi cea mai grea componentă a robotului?

ME

CA

NIC

Ă

TEORIE

Un punct,două puncte, trei puncte, patru puncte de stabilitate.

STA

BIL

Ai văzut vreodată roboți cu această formă?Este ciudat! Cât de ciudat?

Ce înseamnă mecanica robotului?1. forma unui robot 2. materialul din care robotul sau componentele sale sunt făcute 3. precizia constructivă

Despre formă:

Forma depinde de scopul robotului. Probabil că nu ai construi niciodată un robot cu roți, când scopul ar fi de a urca scările (și ar fi probabil sub forma unui păianjen). Pentru mersul pe Lună probabil că ai alege pentru robot o formă de mașină, cu șenile, ca în cazul tancurilor. Dacă scopul este de a face un robot care să joace fotbal american, ideea cea mai bună este cubul. Dacă robotul trebuie să ma-nipuleze bunuri materiale, forma sa nu este importantă.

Care este cea mai bună soluție pentru a realiza scopul robotului nostru?• Robotul trebuie să găsească un obiect, deci se mișcă prin intermediul roților.• Cum se schimbă direcția unui robot? Un răspuns bun ar fi virajul cu aju-

torul unui servomotor atașat unor pinioane, ca în cazul unui automobil real. Această soluție este însă dificilă din pricina cuplului mecanic. Cea mai bună soluție pentru schimbarea direcției ar fi controlul vitezei roților în mod in-dependent. Dacă roata din stânga este în repaus și cea din dreapta se rotește spre înainte, robotul virează spre stânga. Controlul vitezei roților în mod independent permite virajul robotului cu un anumit unghi.

• Câte roți sunt adecvate pentru un robot? Robotul s-ar putea deplasa și cu o singură roată, dar pentru viraj ar trebui utilizat un servomotor. Dacă ar avea două roți și un singur motor, ar fi de asemenea necesar un servomotor pentru viraj. Cu două roți și cu două motoare însă se poate vira utilizând controlul independent al vitezei pe fiecare motor al robotului.

Pe copertă este scris numele unui renumit arhitect (Finlanda). Găsește-l!

13

5

7

111317

19

23

31

37

Completează cu numărul lipsă.

Completează cu litera lipsă.

K

A

L

EV

A

L

INST

AB

ILIN

STA

BIL

Page 8: Ht Barro

Cum se construiește un robot Cum se construiește un robot10 11Mecanică Mecanică

SPAȚIU DREPTUN-GHIULAR PENTRU ROȚI

CLASIFICARE

În fotografia de mai jos este un desen al șasiului. Poți să adaptezi dimensiunile recomandate în funcție de cerințele tale. Cadrul este făcut din lemn (6 mm lățime). Dacă ai posibilitatea, îl poți fabrica din aluminiu (4mm lățime).

MOTOR

ACUMULATORI

Puteți cumpăra bare din plastic sau aluminiu cu diametru diferit și lungime diferită pentru a adăuga mai multe etaje pe cadrul robotului.

STAȚIONAR

ROBOTUL ÎN CONFORMITATE CU CONSTRUCȚIA MECANICĂ

MOBIL

FIX

PE ȘINE

CU ROȚI

CU ȘENILE

CARE MERGE

MIXTĂ

EXOTIC

CU 2 ROȚI

CU 3 ROȚI

CU 4 ROȚI

STABILIZAT

DINAMIC

CU ȘASE PICIOARE

CU DOUĂ PICIOARE

CU PATRU PICIOARE

ALTE TIPURI

CARE SARE

ZBURĂTOR

DRONĂ

Roboții cu mai multe roluri. Sunt de exemplu roboți cu roți, care-și schimbă modul de de-plasare când întâlnesc trepte.

Dronele sunt vehicule auto-nome cu antenă, folosite de către forțele aeriene pentru a determina harta unui teren sau a studia schimbările de climat sau poluare a aerului.

În acest moment (momentul editării ghidului), dronele sunt folosite pentru a studia cenușa vulcanică din Islanda.

TINEȚI MINTE

Selecția componentelor mecanice se bazează pe obiectivele stabilite. Încercați să fiți original și să sugerați întotdeauna ceva nou.Să nu vă fie teamă sa aveți idei noi.Brainstorming-ul este metoda cea mai bună pentru conceperea formei și meca-nicii robotului.Aceste cuvinte ale lui Niels Bohr, un fizician danez pot fi viitorul vostru: “Ideea ta este nebună. Dar este îndeajuns de nebună?”Nu folosiți niciodată mai mult de două tipuri de șuruburi, de preferință cu cap în cruce.

Robot umanoid japonez.

Robot pe șină.

Hexapod

Robot care sare.

GÂNDIȚI-VĂ

Care sunt avantajele și dezavantajele fiecărei construcții mecanice din tabelul de mai sus?Ce construcție mecanică ar putea fi folosită la mersul pe Lună? Dar la cercetările marine?

ȘASIUL

Desenele lui Leonardo da Vinci

Nu este nevoie să fii perfect ca Leonardo Da Vinci, dar poți în-cerca să fii cât mai bun.

Brainstorming. Nu te teme să îți exprimi orice idee care pare stupidă sau nebună. Este posibil să descoperi ceva nou și original.

BARE DE LEMN

MOTOR

LOC PENTRU BRAȚ MOBIL ȘI SENZORI

Page 9: Ht Barro

Cum se construiește un robot Cum se construiește un robot12 13Mecanică Mecanică

POZE

Șasiul robotului. Vedere de jos

Acesta este stadiul curent al robotului cu 7 senzori, braț mobil și ecran LCD.

Poze ale robotului din Germania la începutul proiectului. Ul-

tima poză reprezintă robotul din România.

Este foarte important ca sârmele să nu fie încurcate. Se vor folosi coliere din nylon pentru a le lega.

Se poate folosi și bandă izolatoare pentru aranjarea firelor.

Prinderea senzorului de șasiu este importantă. Nu se va folosi per-manent lipici, deoarece la nevoie, nu s-ar putea muta senzorul. Se poate folosi gumă cauciucată deși nu este foarte aspectuoasă.

Barele din plastic sunt ideale pen-tru a construi mai multe nivele pe un șasiu. Ține cont că robotul va fi demontat și remontat de mai multe ori.

La prima vedere trebuie să distingeți componentele robotu-lui. De aceea este bine să folosiți etichete pentru a le distinge mai ușor.

Senzorul în infraroșu este lipit de șasiul din lemn cu ajutorul unui lipici special pentru plastic.

Bățul de înghețată este ideal pentru a fi folosit ca suport.

Suportul de stabilitate este din plastic. Urmăriți gradul de uzură al aces-tuia.

Detaliu al roții înguste de cauciuc (vezi encode-rul). Observați faptul că șuruburile nu sunt cele adecvate pentru că nu au capul în cruce.

DETALII

Page 10: Ht Barro

Cum se construiește un robot Cum se construiește un robot14 15Electronics ElectronicsElectronică Electronică

Sunteți un expert în programare? Excelent!Știți pe de rost pinii ATMega32? Excelent!Sunteți capabil să dați găuri, să folosiți freza sau strun-gul? Excelent!Vă socotiți singur cheltuielile? Excelent!Nu știți ce înseamnă punte H? Ne pare rău! Următorul!

Poate că așa va fi conversația cu un posibil angajator în 2-5 ani.Angajatorii au nevoie de oameni complecși. Oamenii complecși sunt aceia care pot realiza conexiuni.Evident, trebuie să fii un expert într-un domeniu spe-cific.

Electronica este o punte între actuatori și microcontrollere. Dacă nu înțelegeți electronica, nu veți putea construi un robot.

EL

EC

TR

ON

ICĂ

Actuatorul. Derivat din cuvântul acțiune. Componentă ce realizează o acțiune (motor, braț mobil...).

TINEȚI MINTE

Corpul uman (sau robotul) poate fi încărcat electrostatic, în special când ae-rul este uscat. Când sunteți încărcați cu electricitate și veniți în contact cu obi-ecte conductoare, sarcina se va descărca brusc. Când atingeți o componentă electronică, ea poate fi distrusă.Înainte de a atinge un robot sau orice parte a sa electronică, trebuie să atingeți un obiect împământat, cum ar fi: o conductă de apă, un calorifer, pentru a vă descărca de posibila încărcătură electrică. Electronica robotului este precisă, așa că uitați-vă de două ori înainte de a trece mai departe. Nu vă grăbiți. Componentele puse greșit pot cauza erori sau defecte și căutarea lor este o muncă foarte anevoioasă.În cazul în care nu sunteți sigur de dungile colorate de pe rezistențe, folosiți un multimetru.Fiți sigur că circuitele integrate sunt bine introduse în soclu.Evitați lipiturile reci. De asemenea evitați și lipiturile îndelungate din cauza temperaturii ridicate care pot arde cablajul (PCB-ul).Nu este bine să folosiți pistolul de lipit din cauză ca are putere mare și generază un câmp electromagnetic când se utilizează butonul de pornire.Este bine să folositi stații de lipit cu putere între 40-60 W. Este și mai bine dacă se afișează temperatura de lipire.Pentru lipituri este recomandat să se folosească fludor de 1mm fără plumb și acid.

Lipirea pieselor este o artă. Un maestru al lipiturilor are nevoie de o secundă sau două pentru a re-aliza o lipitură corectă. Am avut experiențe bune cu marca Weller.

RECAPITULARE

• Masă (Ground, GND). Este o legătură la pământ. Pentru multe circuite electrice are o tensiune de 0V. Este cunoscut de asemena sub numele de ground.

• Lampă. Un traductor care transformă energia electrică în lumină. Simbolul alăturat este pentru o lampă care lucrează ca indicator.

• Motor. Un traductor care transformă energia electrică în energie cinetică (mișcare).

• Celula. Asigură energia electrică. Terminalul mai lung este pozitiv (+). O singură celulă se numește adesea baterie, dar pentru a fi mai exacți, o baterie constă din două sau mai multe celule puse împreună.

• Bateria. Asigură energia electrică. O baterie este formată din mai mult de o celulă.

• Siguranța fuzibilă. Un dispozitiv de siguranță care va fi întrerupt dacă curentul electric ce îl parcurge depășește o valoare specificată.

• Rezistorul. Un rezistor restricționează scurgerea curentului, de exemplu pentru a limita curentul care trece printr-un LED. Un rezistor este folosit împreună cu un condensator într-un circuit generator de semnal de tact.

• Rezistorul variabil. Este un rezistor cu valoare variabilă. Acest tip de rezis-tor este operat cu ajutorul unei șurubelnițe mici.

• Potențiometrul. Este un rezistor variabil cu 3 contacte utilizat pentru a regla din exterior tensiunea electrică dintr-un circuit.

• Condensatorul. Un condensator înmagazinează sarcini electrice. Este de obicei folosit împreună cu o rezistență pentru a realiza un generator de sem-nale de tact. Poate fi folosit și ca filtru pentru a bloca componenta continuă.

• Inductorul (Bobina, Solenoidul). Reprezintă un bobinaj de fire conduc-toare care creează un câmp magnetic atunci când curentul electric trece prin acesta. Centrul bobinei poate fi din fier și poate servi drept traductor, trans-formând energia electrică în energie mecanică (releu).

• Dioda. Un dispozitiv care permite curentului să circule într-un singur sens.• LED (Light Emitting Diode). Un dispozitiv traductor care transformă

energia electrică în lumină.• Dioda Zener. Un tip particular de diodă care ajută la menținerea tensiunii

fixă la bornele sale.• Fotodioda. Este o diodă sensibilă la lumină.• Transistor-ul NPN (PNP). Are rol de amplificare a curentului. Poate fi fo-

losit cu alte componente pentru a crea un amplificator sau un întrerupător. Este compus din: emitor, bază și colector.

• Fototransistor. Este tranzistorul sensibil la lumină.• LDR (Light Depending Resistor). Traductor care are rolul de a transforma

intensitatea luminii în variație a rezistenței electrice.• Termistorul. Traductor care transformă energia termică în variație a

rezistenței electrice.• Transformatorul. Constă din două bobine de sârmă conectate printr-un nu-

cleu de fier. Transformatorul este folosit pentru a ridica sau coborî nivelul de tensiune al curentului alternativ. Nu există conexiune electrică între bobine (doar magnetică).

• Releul. O bobină operată electric, care poate controla un alt circuit indepen-dent.

GÂNDIȚI-VĂ

Grupați componentele descrise cu simbolurile lor grafice.

Multimetrul digital. Asistentul personal.

16

7

13

203353

86

139

225

364

Completați cu numărul lipsă.

IC (CI). Circuitul Integrat. Un circuit electronic, care este alcătuit din mai multe componente elec-tronice conectate într-o capsulă.

LIPITURĂ BUNĂ

CABLAJ

FLUDOR

TIMP: 1 - 2 secundeCIOCAN DE LIPIT

Page 11: Ht Barro

Cum se construiește un robot Cum se construiește un robot16 17Electronics ElectronicsElectronică Electronică

Componenta Tip Nr. buc. Utilizare Poză

Dioda Shottkey 1N5817 8D1-D8, pentru Punțile H;

pentru a controla sensul rotației motoarelor

Punte H Completă cu radiator L 298 N 1 IC1, pentru controlul PWM-

ului motoarelor

Circuite Trigger Schmitt

MOS 40106N 2

IV2B, IC2C, pentru conversia semnalelor sinusoidale în sem-

nale dreptunghiulare

LED

orice LED cu consum

redus, maxim 2mA

2LED1, LED2, pentru semna-

lizarea activității codificatoru-lui și mișcarii motoarelor

Rezistor 27 k 2 R3, R4, pentru codificatoare

Rezistor 1 k 2 R7,R8, pentru limitarea curen-tului LED-urilor

Rezistor 10 k 2 R1, R2Rezistor 10 k 2 R9, R10, pentru codificatoareRezistor 6 k 2 R5, R6, pentru codificatoare

Condensator 200 nF 1 C2, limitator de curent

Conectori poze pe următoarea pagină

PCB. Printed Circuit Board. Fo-lie de cupru pe un strat dielec-tric. Cuprul se poate îndepărta prin următoarele metode:Tipărirea cu cerneală. Cerneală ce protejează folia de cupru.

Fotogravarea. Se aplică o mască (proiectată CAD sau CAM) după care urmează îndepărtarea surplu-sului de cupru.

Polizarea. Se folosește un dispozi-tiv care îndepărtează mecanic cu-prul în exces.

SMD. Surface Mount Device. Datorită miniaturizării componen-tele sunt lipite pe placă fără a fi ne-voie de găuri.

SMT. Surface Mount Technology. Tehnologii automate de lipire a componentelor SMD.

CAD. Computer Aided Design.

CAM. Computer Aided Manufac-turing.

• Inversiunea. O poartă NU poate avea doar o singură intrare. Semnul ” ” la ieșire înseamnă ”nu” logic. Ieșirea unei porți NU este opusul intrării, astfel ieșirea este ”1” logic când intrarea este ”0” logic. O poartă NU este numită și poartă inversoare.

• Conjuncția. O poartă ȘI poate avea două sau mai multe intrări. Ieșirea unei porți ȘI este ”1” logic când toate intrările sunt ”1” logic.

• Conjuncția inversată. O poartă ȘI-NU poate avea două sau mai multe intrări. Semnul ” ” la ieșire semnifică faptul că poarta este ȘI negată. Ieșirea porții ȘI-NU este ”1” logic cu singura excepție când toate intrările sunt ”0” logic.

• Disjuncția. O poartă SAU poate avea una sau mai multe intrări. Ieșirea unei porți SAU este ”1” logic când cel puțin una din intrări este ”1” logic.

• Disjuncția inversată. O poartă SAU-NU poate avea una sau mai multe intrări. Semnul ” ” semnifică faptul că poarta este negată. Ieșirea unei porți SAU-NU este ”1” logic când toate intrările sunt ”0” logic.

• Disjuncția exclusivă. O poartă SAU-EXCLUSIV (XOR, EOR) poate avea două intrări. Ieșirea unei porți XOR este ”1” logic când intrările sale sunt diferite (una ”1” logic, una ”0” logic).

• Disjuncția exclusivă inversată. O poartă SAU-EXCLUSIV NEGAT (XNOR, ENOR) poate avea doar două intrări. Semnul ” ” semnifică negarea porții. Ieșirea unei porți XNOR este ”1” logic când valorile de intrare sunt identice.

PCB

SMD

LISTĂ DE COMPONENTE ELECTRICE

Următoarele tabele conțin toate componentele electronice, care vor fi folosite în construcția robotului. Primul tabel este o listă de componente folosite pe placă pentru a controla motoarele.

SCHEMA BLOC

SURSĂ DE ALIMENTARE PE BATERII(6 X AA)

PLACĂ MICROCONTROLLER

STABILIZATOR DE TENSIUNE

(5 V cc)

IN SYSTEM PROGRAM-MING (ISP)

SENZORI

AVR ATMELATMEGA32

ACTUATORI(MOTOARE)

MODUL CONTROL MO-TOARE

PROGRAMATOR

LCDSERVOMOTOR

PUNȚI H

Plăci universale

Pozele au caracter informativ.

PLACĂ CONTROL MOTOARE

Există o componentă electronică, care nu este direct conectată pe placă, dar totuși este una dintre cele mai importante componente: senzorul optic IS451F, care generează pulsurile de rotație. Pentru acest robot sunt necesare două bucăți, câte una pentru fiecare roată.

Lista completă

Placă de control motoare

Placă microcontroller

Page 12: Ht Barro

Cum se construiește un robot Cum se construiește un robot18 19Electronics ElectronicsElectronică Electronică

Intrări motoare

Ieșire Codifica-toare

PWM și direcție (microcontroller)

L 298 N

Schmitt flip-flop

Diode Shottkey - alimentare PWM5 V

Piesele pentru controlul motoarelor sunt lipite pe o placă universală deoarece este cea mai rapidă cale de construcție.

L 298 NCircuit

Trigger-Schmitt

Punți H

DISPUNEREA COMPONENTELOR

Viteza motoarelor este controlată prin așa numitul amplificator punte, controlat de IC298N. Acesta este folosit pentru a controla două motoare de curent con-tinuu în intervalul de 0V-5V (PWM).Intrările - ieșirile circuitului L298:Motorul stâng: 5: sensul (înainte, înapoi) 7: sensul inversat (inversorul este în afara integratului) 6: semnal PWM de la microcontroller 2: ieșire către motor 3: ieșire către motorMotorul drept: 12: sensul (înainte, înapoi) 10: sensul inversat (inversorul este în afara integratului) 11: semnal PWM de la microcontroller 13: ieșire către motor 14: ieșire către motorAceste intrări-ieșiri sunt conectate la placă pentru controlul motoarelor:2 x semnal de la motorul din stânga și din dreapta2 x semnal PWM de la microcontroller la L298 pentru cele două motoare4 x selecție sens de rotație pentru motoare Conectarea porturilor:D0, D1: ieșiri, direcția motorului din stângaD2, D3: intrări, pentru ieșirea codificatorului, independente pentru ambele roțiD4, D5: ieșiri, semnal PWM la L298, independente pentru ambele motoareleD6, D7: ieșiri, direcția motorului din dreapta

Punți H

Trigger Schmitt

L 298 N

Codificatoare

Semnal PWM

Codificatoare Motor Motor

Marcați tările participante la proiectul Rokey.

Interesant: Sunt repetate 5 culori în steagurile tărilor din proiect.

Completați cu litera care lipsește.

Z

A R

AR

I S

AN

K

O

P

E

EN

H

A

G

E N

Realizați un cuvânt din literele de deasupra.

Page 13: Ht Barro

Cum se construiește un robot Cum se construiește un robot20 21Electronics ElectronicsElectronică Electronică

Fața și spatele plăcii de dezvoltare a microcontroller-uluiPLACA DE DEZVOLTARE PLACA DE DEZVOLTARE

1. Intrare baterie și stabilizatorul de tensiune pentru alimentare.2. Tensiune de ieșire de 5V pentru alte dispozitive externe.3. Senzor piezoelectric (frecvența sunetului este de 2,4 kHz).4. Conector pentru programator ISP.5. LED-uri indicatoare pentru alimentare și mod de programare.6. Pinii de I/O ai microcontroller-ului.7. Buton de RESET.8. Conector pentru comunicații seriale RS-232 cu calculatorul.9. LED și buton pentru test.10. TWI / I2C

Schemele de mai sus se referă la părțile de alimentare, programare și circuitele corespunzătoare de pe placa microcontrollerului.

TWI. Two Wired Interface. Protocol serial de comunicații ATMEL.I2C. Protocol compatibil pentru alte tipuri de microcontrollere

Mic

roco

ntro

ller 1

Mic

roco

ntro

ller 2

Mic

roco

ntro

ller 3

Comunicațiile prin TWI

I/O. Intrare/Ieșire

Page 14: Ht Barro

Cum se construiește un robot Cum se construiește un robot22 23Electronics ElectronicsElectronică Electronică

PLACA DE DEZVOLTARE

PORT A

ATMEGA32

PORT CPORT A

PORT B

IEȘIRE 5 V

APĂSAT = MASĂ LA D3

APĂSAT = MASĂ LA D4

IEȘIREA D5

IEȘIREA D6

IEȘIREA D7

APĂSAT = MASĂ LA D2

CRYSTAL 8 MHz

PINII I / O PORT DPINII I / O PORT B

STABILIZATOR

BUTON RESET

PINII / O PORT C

PROGRAMATOR ISP

CONECTOR COMUNICAȚII SERIALECONECTOR BATERIE

INDICATOR ALIMENTARE

LISTĂ DE COMPONENTE PENTRU PLACA AVR

Componentă Tip Nr. buc. Utilizare Fotografie

Condensator 22 pF 2 C1, C2

Consensator 1 uF 6 C3, C5, C6, C7, C8, C11

Condensator 100 uF 1 C4

Condensator elec-trolitic 470 uF 2 C9, C10

LED 2 mA 5 LED1, LED2, LED3 LED4, LED5

Oscilatorcuarț 8 MHz 1 Q1

Rezistor 10 k 3 R1, R7, R8Rezistor 1 k 5 R3, R4, R5, R9Rezistor 100 uH 1 R2

Circuit integrat MAX 232 1 IC1 (USART pentru conexi-unea serială RS 232)

Microcontroller AT-MEGA32 1 IC2

Stabilizator L4940V5 1 IC3

Conectori în concordanță cu pozele ante-rioare

Pozele sunt cu caracter informativ.

PIEZO

JUMPER PT. ACTIVARE PIEZO

JUM

PER

I AFE

REN

ȚI R

S232

JUM

PER

I IPE

NTR

U U

TILI

ZAR

E B

UTO

AN

E

MAX232 FOR USARTSERIAL COMMUNICATION

THROW RS 232

PORT D

Page 15: Ht Barro

Cum se construiește un robot Cum se construiește un robot24 25Electronics ElectronicsElectronică Electronică

SCHEMA ELECTRONICĂ AVR SCHEMA ELECTRONICĂ A PUNȚILOR H

Page 16: Ht Barro

Cum se construiește un robot Cum se construiește un robot26 27Electronics ElectronicsElectronică Electronică

ACTUATORI

Actuatorii realizează acțiunea. Sunt folosiți pentru deplasarea robotului sau a modulelor sale. În general se utilizează două tipuri de actuatori - motorul și servomotorul.

Motorul. Este un dispozitiv care transformă energia electrică în mișcare mecanică (liniară sau

circulară).

Servo (servodrive, servome-canism). Motorul pas cu pas este

un dispozitiv care transformă energia electrică în mișcare

circulară cu posibilitatea de a ajusta unghiul poziției finale.

MOTOARE

Cel mai comun tip de motor este cel asincron alimentat cu curent alternativ, datorită fiabilității, construcției simple și a prețului scăzut. Acest tip de motor este inutil pentru aplicația noastră, deoarece am avea nevoie de convertor CC/CA pentru a-l alimenta. Viteza acestuia este în general controlată cu un conver-tor de frecvență. În cazul de față s-au utilizat motoare de curent continuu cu magneți permanenți.

TEORIE

Motorul este un dispozitiv în care interacționează două câmpuri magnetice. Forța mecanică produsă de aceste câmpuri este transformată în mișcare de rotație. Un câmp magnetic este în general aferent părții staționare a motorului - statorul și a doua parte este în legătură cu partea mobilă - rotorul. Clasificarea se face în general după modul cum se creează aceste câmpuri magnetice.

Motoare sincrone de curent alternativ:Rotorul este un magnet permanent sau un electromagnet. Conexiunea sa la curentul trifazat crează un câmp magnetic de rotație. Aceste câmpuri magnetice sunt în legătură mutuală unul cu celălalt. Sunt rar utilizate.

Motoare asincrone de curent alternativ:Un câmp magnetic produs de conexiunea trifazată din stator induce tensiune în bobina situată pe rotor (uzual, rotor în formă de colivie de veveriță) conform principiului inducției electromagnetice. Această tensiune generează curent în înfășurarea rotorului, generând astfel al doilea câmp magnetic (câmpul mag-netic al rotorului). Cele două câmpuri magnetice se influențează reciproc. Sunt cele mai utilizate tipuri de motoare în aplicațiile industriale.

Motoare de curent continuu cu magnet permanent:Rotorul acestui tip de motor este alimentat cu curent continuu. Curentul care trece prin bobina rotorului generează un câmp magnetic. Câmpul magnetic al statorului este generat de un magnet permanent. Aceste câmpuri magnetice se influențează unul pe altul.

Motor de curent continuu în serie:Comparativ cu motorul cu magnet permanent, în acest caz câmpul magnetic al statorului este generat de o sursă de tensiune comună, conectată la motor. Rotorul este în conexiune serială cu bobina statorului. Acest tip de motor este folosit la pornirea autovehiculului datorita cuplului mare generat.

Motorul de curent continuu în paralel:Comparativ cu motorul cu magnet permanent, câmpul magnetic al statorului este generat de tensiunea aplicată motorului. Bobina rotorului este conectată în paralel cu bobina statorului.

Motorul pas cu pas (stepper-ul sau MPP):Este similar cu motorul sincron alimentat cu curent alternativ. Cu toate acestea, statorul este un sistem independent de bobine, care sunt una câte una alimentate cu tensiune de alimentare externă (comandate de microntroller). Astfel se poate genera un câmp magnetic de rotație. Avantajul acestei categorii de motoare este că poate fi oprit precis în aproape orice poziție și menținut în acea poziție chiar dacă este aplicată o forță asupra sa. Această poziție poate fi contorizată fără revenire la starea inițială. Numărul de pași este de aproximativ 200 pe rotație. Corespondența este de 1,8 grade unghiulare/pas.

GÂNDIȚI-VĂ

1. De ce nu ar fi necesar controlul în buclă închisă?2. Ce posibilități recomandați pentru controlul în buclă închisă al poziției?3. Ce posibilități recomandați pentru controlul în buclă închisă al vitezei?4. Ce motoare recomandați pentru un vehicul destinat planetei Marte?5. În viitor va fi posibil să folosiți influența a două câmpuri magnetice pentru mișcare pe baza levitației magnetice. Sugerați cum s-ar putea realiza acest lucru.6. Care ar fi dezavantajele motorului pas cu pas la viteze mari?

SARCINI

1. Imaginați-vă că ați folosit un stepper la robotul dumneavoastră. Ce diametru trebuie să aibă roțile pentru a se mișca 1 cm când rotorul face 200 de pași?2. Încercați să găsiți o întrebuințare motoarelor de curent continuu și pas cu pas într-un calculator vechi pe care îl dețineți.

CONTROLUL VITEZEI ȘI A POZIȚIEI

Problemele de bază legate de controlul motoarelor sunt reglarea vitezei și a poziției. Viteza motorului asincron este controlată prin modificarea frecvenței semnalului. Viteza motoarelor de curent continuu este modificată cu ajutorul tensiunii de alimentare. Poziția rotorului poate fi controlată în buclă deschisă doar în cazul stepper-elor. În cazul în care se dorește controlul precis al vitezei sau (și) al pozitiei este necesar controlul în buclă închisă. Acest lucru poate fi realizat cu ajutorul unui tahogenerator, IRC sau prin alte metode.

TINEȚI MINTE

Cele mai utilizate motoare în Robotică sunt cele de curent continuu cu magneți permanenți și motoarele pas cu pas. Amândouă categoriile pot fi controlate în general cu ajutorul microcontroller-ului (prin controlul tensiunii prin PWM și Punți H). Motoarele sunt de obicei atașate unor roți prin intermediul unor reduc-toare (care uneori nu sunt folosite).

Sarcină dificilă: Identificați și marcați poziția statelor partici-

pante la proiect pe harta Europei. Comparați apoi rezultatul cu harta

anterioară.

Motorul pas cu pas unipolar. Curentul electric circulă printr-o singură bobină a statorului pe parcursul unui pas. Sunt mai simplu de controlat, dar au mai puțină forță.Motorul pas cu pas bipolar. Curentul circulă prin două bobine ale statorului (opuse) pe parcursul unui pas. Sunt adecvate pentru sarcini mari (cuplu mare).

Bobine stator

Rotor

CurentCurent

Control cu o singură fază a motorului pas cu pas. Curentul circulă printr-o singură bobină a statorului pe parcursul unui pas. Sunt usor de controlat, dar dezvoltă un cuplu mic.Control cu două faze a motoru-lui pas cu pas. Curentul circulă prin două bobine adiacente ale statorului (două bobine - unipolar, patru bobine - bipolar).

CurentBobine stator

Rotor

Curent

Avantaj: Se poate controla viteza motorului fără a fi nevoie de un control în buclă închisă. Pentru un control mai precis se poate utiliza controlul în buclă închisă. Dezavantaj: Motorul se poate opri, dar totuși consumă curent.

Bobinele statorului

Rotor

Principul de funcționare al unui motor pas cu pas.

IRC. Internet Relay Chat. Este o formă de comunicare on-line. Această prescurtare nu ne interesează în cazul nostru.IRC. Incremental Rotary enCoder. Produce impulsuri electrice. Numărul acestora este proporțional cu poziția rotorului. În continuare dispozitivul va fi numit codificator.

Page 17: Ht Barro

Cum se construiește un robot Cum se construiește un robot28 29Electronics ElectronicsElectronică Electronică

SERVO

Principiile de funcționare ale motoarelor, folosite în special pentru deplasarea roboților, au fost explicate în capitolul anterior. În concordanță cu cele menționate, rotorul se află într-o continuă mișcare de rotație care este transformată într-o mișcare rectilinie. Totuși robotul necesită și un alt tip de mișcare și anume cea reversibilă și repetată. Imaginează-ți un braț robotic care trebuie să prindă o cutie, să o întoarcă și să o așeze în alt loc sau gândește-te la aripile unui avion cu telecomandă care trebuie să-și schimbe unghiul pentru a crea portanța necesară sau modifica direcția de deplasare. Pentru a putea atinge aceste ținte, cea mai bună metodă este să se folosească soluția complexă numită servomotor (servo-mecanism).

DEFINIȚIE

Servomotorul este un motor al cărui ax este poziționat între două limite (de obi-cei 90 de grade la stânga și la dreapta față de poziția centrală) și dezvoltă cuplu suficient pentru menținerea poziției atinse. Evident, un servomotor poate fi folosit pentru controlul poziției.Legat de funcționalitatea sa, este mai simplu de utilizat decât un motor pas cu pas (nu necesită control în buclă închisă, dezvoltă cuplu în poziția atinsă) și nu necesită un circuit de alimentare complex. Pe de altă parte, un servomotor nu se poate roti cu 360 de grade (există excepții de motoare care se pot roti complet).

TEORIE

• ax extern (connectat la actuatorul extern)• potențiometrul (conectat la ax, influențat de poziția acestuia)• monostabil (generează semnal pentru amplificatorul diferențial)• amplificatorul diferențial (compară valoarea cerută cu cea reală)• trei fire (GND, + 5 V, valoarea de comandă pentru unghi)

Unghiul cerut (referința), codificat prin durata impulsului, constituie intrarea monostabilului. Acesta generează un semnal pozitiv de durată proporțională cu valoarea actuală a unghiului (țineți minte că potențiometrul este conec-tat la axul intern astfel încât unghiul acestuia este proporțional cu rezistența potențiometrului). Valorile reală și referință sunt comparate cu ajutorul unui comparator. Dacă există diferențe, un semnal este transmis către amplificator și influențează rotația axului motorului. Acest lucru cauzează rotirea în sens opus a potențiometrului și crearea unui răspuns negativ către monostabil, până când lățimile semnalelor în comparator devin egale. Dacă diferența este zero motorul se oprește.

În aplicația noastră am utilizat servomotorul Hitech, cu o tensiune de alimentare între 4.8 și 6 V. Curentul consumat în timpul funcționării fără sarcină este de 200 mA, în stare de așteptare consumând doar 10 mA. Domeniul de reglaj pentru unghi este de 180 de grade, cuplul fiind de 48 Ncm / 5 V.

Un servomotor nu este așa de ușor de înțeles, de vreme ce conține mai multe componente care se influențează reciproc. Pe pagina următoare există o formă de undă folosită pentru servomotoare. Frecvența sa este de 50 Hz (perioada 20 ms), amplitudinea impulsului este de 5V, durata impulsului este de la 1 ms la 2 ms. Semnalul este generat de microcontroller. Această procedură este explicată în capitolul denumit Programare.Servomotorul nu este un simplu motor, ci este un complex de dispozitive:• motor de curent continuu (magnet permanent, vezi capitolul anterior).• reductor (pentru a putea furniza un cuplu mai mare).

REDUCTOR

MOTOR

AX

REGLAJ POTENȚIOMETRU

MONOSTABIL

AMPLIFICATOR

VALOAREA CERUTĂ

VALOAREA REALĂ

EROARE REGLARE

VALOAREA CERUTĂ

ÎMPĂMÂNTARE+ 5 V

Servomotoarele ieftine au potențiometrele conectate direct la ax. Cele scumpe au conexiunea prin intermediul reducțiilor.

PWM. Pulse Width Modulation. Puls modulat în lățime. Are am-plitudine constantă și își modifică doar durata.

Perioadă 20 ms

Durata impulsului 1 - 2 msAmplitudine 5 V

Perioada (T). Timpul necesar repetiției semnalului.Frecvența (f). Număr de oscilații într-o secundă.T=1 / ff=1 / T

Lățime 1.5 ms. Axul în mijloc.

Lățime 2 ms. Axul în dreapta (90 de grade de la poziția mediană).

Lățime1 ms. Axul în stânga (-90 de grade la stânga față de poziția mediană).

Forma generală a sem-nalului, folosită pentru controlul servo (generat de microcontroller).

Monostabil flip-flop. După acti-varea semnalului de declanșare, ieșirea circuitului devine 1 logic. După o perioadă de timp ieșirea devine zero. Are o singură valoare stabilă - nivel zero logic.Bistabil flip-flop. Este comutat între 0 și 1 logic când semnalul de comandă este activat.Astabil flip-flop. Comută tot tim-pul fără un semnal de declanșare.

COMPARATOR

Hitec. Producător motoare servoFutaba. Producător servo.Hitec vs Futaba. Hitec este mai ieftin. Calitatea este aceeași. Diferă doar mecanic (culori ale firelor, conectori).

RC. Remote Controlled. Mașini, avioane, elicoptere teleghidate.

Se poate obține un cuplu mai mare în cazul alimentării cu 6V ( un plus de 10 Ncm), dar nu este nece-sar pentru obiectivul nostru.

Funcționare continuă. Servo-motorul poate fi modificat să funcționeze ca un motor normal. Trebuie îndepărtate semnalul de reacție al potențiometrului și opritoarele de capăt de cursă. Viteza este controlată prin lățimea impulsurilor.

Poziția axului -90o

Poziția axului 0o

Poziția axului +90o

Servo Hitec HS-422.

Cuplu (moment). Cuplul este forța acționată de o pârghie asupra unui punct de rotire. Unitatea de măsură este Nm (Newton metru).Încercați să prindeți rotorul mo-torului. Dacă reușiți să-l opriți motorul are un cuplu mic, în celălalt caz acesta dispune de un cuplu mare. Atașați o roată axu-lui motorului și încercați același lucru asupra roții. Veți observa că aveți nevoie de o forță mai mare să opriți roata. Forța este cu atât mai mare cu cât diametrul roții este mai mare.

Axul motorului

GÂNDIȚI-VĂ

De ce reprezintă greutatea unui servomotor o caracteristică foarte importantă?Ce este mai adecvat de folosit? Un motor pas cu pas sau un servomotor?

LADE LA

Mișcare reversibilă și repetată.

Aripile avioanelor nu au servo. De ce?

Page 18: Ht Barro

Cum se construiește un robot Cum se construiește un robot30 31Electronics ElectronicsElectronică Electronică

PUNTEA H

A controla un motor înseamnă a-i regla viteza și sensul de rotație.În capitolul anterior am menționat că viteza motoarelor de curent continuu este controlată de către semnalul PWM generat de microcontroller. Datorită limitării de curent din microcontroller, puterea semnalului PWM trebuie mărită. Această creștere este realizată cu ajutorul punții H. Schimbarea sensului de rotație se realizează de asemenea prin intermediul punții H.

TEORIE

Tranzistorii și celelalte componente de comutație sunt controlate de microcon-troller. Observă semnalul PWM la baza tranzistorului. Această metodă de a controla motoarele este folosită de mulți producători cu di-verse componente.Pentru robotul nostru folosim integratul L298. Această componentă conține două punți H. Curentul maxim este de 4A, tensiunea maximă este de 48 V. Acești parametri sunt potriviți și pentru a contro-la motoare mai puternice (până la 200 W). Semnalul de control este TTL.

IC. Integrated Circuit. Circuit Integrat.

TTL. Tranzistor Tranzistor Logic.

Reprezintă valori logice de 5 V.

DTL. Diodă Tranzistor Logic.

Reprezintă valori logice de 15 V.

STABILIZATORUL

De ce?Sursa reală de alimentare (în cazul nostru bateria) are întotdeauna rezistență internă. Când o sarcină se conectează la această sursă, conform Legii lui Ohm există o cădere de tensiune. Aceasta depinde de curentul consumat și duce la scăderea nivelului de tensiune pe circuit. Uneori acest lucru nu este acceptabil.

Cum?Între sursa de alimentare și sarcină există un stabilizator, care verifică nivelul de curent consumat și ajustează astfel nivelul de tensiune. Tensiunea de alimentare trebuie să fie puțin mai ridicată decât cea necesară a fi furnizată sarcinii.

BATERIILE

Una dintre deciziile noastre în timpul construcției robotului a fost alegerea siste-mului de alimentare. Robotul trebuie să fie autonom, astfel încât să nu mai fie legat prin fire de o sursă externă în timpul funcționării. Alegerea noastră este simplă prin utilizarea acumulatorilor. Problema a fost alegerea tipului și dimen-siunilor acumulatorilor folosiți.

Parametri tehnici necesari:

• un nivel de tensiune mai mare de 5 V (această tensiune va fi necesară pentru alimentarea microcontroller-ului), tensiunea adecvată fiind de 8 V.

• un curent de alimentare de 1 A menținut constant timp de 2 ore. De ce? Un motor are nevoie de aproximativ 300 mA (amândouă 600 mA), senzorii consumă 50 mA ( 8 senzori 400 mA). Timpul de testare trebuie să fie de două ore fără încărcare. Deci avem nevoie de baterii cu capacitate de 2Ah.

Posibilități:

• Baterii Alcaline (1.5V). Sunt ieftine și atât. Este recomandată utilizarea bateriilor alcaline doar pentru consumuri mici (telecomandă, ceasuri). Au capacitate redusă și nu sunt reîncărcabile. Nu sunt potrivite pentru robot din cauza consumului mare, care le descarcă într-un timp foarte scurt.

• Acumulator NiCd (1.2 V, Nichel Cadmiu). Sunt reîncărcabile și au fost fo-losite în telefoanele mobile din trecut. Problema lor este că trebuie descărcate complet și apoi încărcate la maxim. A doua problemă este că acești acumula-tori reprezintă o problemă pentru mediu (conțin Cadmium).

• Acumulator NiMH (1.2 V, Nichel Metal Hibrid). Sunt folosite în telefoanele mobile de astăzi. Pot fi încărcate oricând (fără necesitatea de a fi descărcate înainte), dar au nevoie de un timp mai mare de încărcare. Sunt mai scumpe dar merită încercate.

Soluția noastră este compusă din 6 baterii NiMH înseriate de dimensiune AA și de capacitate 2.5 Ah.Acumulatorii cu Litiu (Li-ion) sau Hibrid Nichel Metal Hibrid, în special folosiți pentru camere video, sunt pe piață. Pot fi o opțiune, dar sunt mai scumpi decât acumulatorii Ni-MH. Carcasă pentru acumulatori.

Sursă de alimentare. Produsă de uzina electrică, prin alternatoare.Transformare. Trecerea de la o

tensiune alternativă de o anumită amplitudine și frecvență la un alt

nivel de tensiune alternativă de aceeași frecvență.

Redresare. Conversia curentului alternativ în curent continuu,

de obicei cu ajutorul diodelor și tiristoarelor.

Rectificare. Ajustarea curentului continuu pentru o formă de undă

mai precisă. Stabilizare. Tensiunea sursei de

alimentare devine independentă de curentul de sarcină.

CENTRALĂ ELECTRICĂ

TRANSFORMATOR

TRANSFORMATOR

TRANSFORMATOR

440 kV, 50 Hz

22 kV / 50 Hz

3 x 400 V / 230 V

1 000 V / 50 Hz

TRANSFORMATOR

REDRESOR

RECTIFICATOR

STABILIZATOR

ROBOT

230 V / 8 V

8 V (DC)

ENERGIA ÎNCONJURĂTOARE

Modalități și mijloaceCea mai simplă metodă este utilizarea diodei Zener. Acesta permite curentului să circule într-un singur sens. De asemenea poate permite curentului să treacă și în sens invers, când tensiunea pozitivă pe catod este mare și poartă numele de tensiune Zener. Acest efect este folosit în stabilizator, dar doar pentru consumuri mici și dispozitive simple, din cauza pierderilor pe diodă. A doua cale este să se utilizeze un tranzistor, care este controlat de ieșirea unui comparator. Acesta compară valoarea de referință (tensiunea cerută) cu cea actuală a nivelului de tensiune. Acest stabilizator folosește reacția pentru a controla valoarea tensiunii furnizată sarcinii. În cazul nostru s-a folosit stabilizatorul L4940V5, care are funcția de stabilizare la 5V, pierderi mici, protecție la scurtcircuit, la tempe-raturi ridicate și la inversare de polaritate.

Caracteristica tensiune-curent a diodei Zener

IND

ESTRU

CTIB

ILĂU [V]

I [A]

5 V

Tensiune Zener

0.6 V

Avans

+ Sarcină

Sursă tensiune

Dioda Zener este ca un stabilizator simplu.

uC. Microcontroller.

Reacția. Ieșirea unui dispozitiv îl influențează în viitor. Cel mai bun exemplu este regulatorul PID.

Loopback. Semnal de test trimis către orice dispozitiv extern, pro-cesat de acesta și trimis înapoi. Este folosit pentru testarea dis-pozitivelor externe. Un exemplu este comanda ping în rețea.

Page 19: Ht Barro

Cum se construiește un robot Cum se construiește un robot32 33Electronics ElectronicsElectronică Electronică

Placa pentru controlul motoarelor este necesară pentru:- 2 motoare de curent continuu cu magneți permanenți (5 V).- șase circuite Trigger-Schmitt.- circuit integrat L298 - numit și punte H, folosit pentru controlul independent

a două motoare prin intermediul PWM, cu posibilitatea de control a direcției prin logică TTL.

- 2 LED-uri pentru monitorizarea mișcării roților.- senzor optic IS471F (sensibil la lumină, generează impulsuri de la codifica-

torul incremental)- Diode Schottkey 1N5817 - alimentarea punților H.- codor incremental. Generează o serie de impulsuri pe parcursul mișcării

roților. Acestea pot fi numărate iar numarul lor este proporțional cu unghiul cu care s-a rotit roata. Se poate măsura distanța parcursă. Pulsurile sunt trans-formate în semnal dreptunghiular cu ajutorul circuitelor Trigger-Schmitt..

EXAMINAREA

VERIFICARE

Trigger Schmitt. Monostabil flip-flop cu histerezis. Ieşirile sale nu sunt influenţate de oscilaţiile de

vârf ale semnalului de intrare.

Dioda Schottkey. Redresor pentru semnale de înaltă

frecvență.

Cea mai bună cale pentru verificare este folosirea unui osciloscop. De vreme ce nu este un aparat de măsură ieftin, recomandăm utilizarea unui osciloscop cu facilităţi de afişare a graficelor pe calculator. Graficele din acest capitol sunt realizate cu un astfel de osciloscop.

• Funcţionalitatea codificatorului incremental. Conectaţi sursa de energie la conectorul SL3 (atenţie la polaritate). Întoarceţi manual roţile. Ledurile 1 şi 2 ar trebui să se aprindă intermitent. Măsuraţi tensiunea pinilor 9(10) şi 11(12) ale conectorului CON 2. Semnalul trebuie să fie dreptunghiular, frecvenţa în jur de 50 Hz, depinzând de viteza de rotaţie, ciclul de încărcare 1:1 (50%). În continuare puteţi vedea rezultatele.

• Controlul vitezei şi direcţiei. Conectaţi sursa de energie la conectorul SL3 (atenţie la polaritate). Toți pinii sunt numerotați relativ la conectorul CON2. Conectaţi Ucc la pinul 13. Acum puteţi simula viteza maximă a motorului (factor de umplere 100%). Conectaţi valoarea de 1 logic la pinul 17 si pe cea de 0 logic la pinul 19. Motorul se roteşte într-un sens. Schimbaţi între ele valorile pinilor 17 și 19. Motorul se roteşte în celălalt sens. Conectaţi valori logice egale la pinii 17 şi 19 (nu contează dacă sunt 1 sau 0). Motorul se opreşte. Când se modifică PWM la pinul 13, se modifică şi viteza. Acelaşi proces poate fi aplicat şi celui de-al doilea motor (PWM aplicat la pinul 15 şi sensul este reglat prin pinii 5 şi 7). Veţi putea vedea rezultatele în continuare.

• Funcţionalitatea stabilizatorului de tensiune. Conectați sondele de măsură la polul + al bateriei şi la oricare din punctele Ucc (din spatele stabi-lizatorului). În timpul rotaţiei către înapoi a motorului trebuie să apară valori neregulate ale tensiunii la sonda plus a bateriei şi nu trebuie să apară nici o variaţie la sonda Ucc. Veţi putea observa rezultatul în continuare.

• Atenţie la alimentarea microcontrolerului. Valori sub 4,9 V nu sunt potri-vite. Valorile peste 5,1 V produc încălzirea şi funcţionarea instabilă a uC. În acest caz schimbaţi stabilizatorul circuitului.

REZULTATE

Următoarele fotografii sunt făcute cu ajutorul osciloscopului cu facilități de afişare pe PC. Recomandăm folosirea acestui tip de osciloscop datorită posibilității de a-l lua peste tot alături de robotul dumneavoastră (de obicei aveți un laptop). Osciloscopul este necesar în timpul perioadei de construcție a ro-botului. Aparatul de măsură V- A este bun, dar nu poate înlocui un osciloscop.

Semnalul de ieşire 1 al osciloscopului – stabilizatorul. Linia albastră reprezintă tensiunea furnizată de baterie. Cea roşie reprezintă tensiunea la ieșirea stabili-zatorului. Se poate observa descreşterea tensiunii bateriei în situaţii de inver-sare a sensului de rotaţie a motorului. Vă puteţi da seama că linia roşie nu este influenţată de sarcina motorului în timpul inversării sensului de rotaţie. Observă de asemenea oscilaţiile de-a lungul liniei. Acestea sunt create de semnalul PWM furnizat motorului (tensiunea de alimentare a motoarelor). Stabilizatorul de 5V, tip L4940V5, funcţioneză perfect.

Semnalul de ieșire 2 al osciloscopului - Codificatorul şi circuitele Trigger-Schmitt. Pentru măsurarea acestor forme de undă nu trebuie să conectezi mo-torul. Roata poate fi rotită manual (desigur, alte componente trebuie conectate). Linia roşie reprezintă tensiunea impulsurilor codificatorului. Observă forma im-pulsurilor. Cea albastră este tensiunea la ieșirea circuitului Trigger-Schmitt. Se poate vedea principala funcţionalitate a circuitului – crearea unei forme drep-tunghiulare a semnalului. Circuitul 40106N funcţionează, impulsurile utilizate de către microcontroller pentru controlul în buclă închisă fiind de bună calitate.

Observați forma impulsului din cercul galben. Anomalia este cauzată de desprinderea unuia din punctele reflectorizante de pe inte-riorul roții (vezi poza anterioară).

SL1 (SL2): 1

Vcc

Puncte de măsură.

40106N: 4

40106N: 3

Puncte de măsurare.

U [V]

t [s]

Comparator Schmitt

Comparator simplu

Cauză a erorilor codificatorului.

Funcție Trigger-Schmitt.

Asistenți indispensabili.

Page 20: Ht Barro

Cum se construiește un robot Cum se construiește un robot34 35Electronics ElectronicsElectronică Electronică

Semnalul de ieșire 3 al osciloscopului. PWM-ul dorit şi cel real. Linia roşie reprezintă semnalul PWM de la microcontroller cu un factor de umplere de 20%. Linia albastră reprezintă tensiunea de la iesirea punţii-H. În timpul măsurătorii motorul nu a fost conectat la ieșirea punţii H. Observaţi viteza motorului. Cir-cuitul L298 funcţionează normal.

Semnalul de ieșire 4 al osciloscopului - PWM-ul dorit şi cel real. Există doar o singură diferenţă faţă de imaginea anterioară - factorul de umplere al semnalu-lui PWM este de 80%. Circuitul L298 funcţionează normal.

Semnalul de ieșire a osciloscopului 5. PWM necesar servomotorului. Un puls cu durata de 1ms presupune axul motorului rotit către stânga. Frecvenţa este de aproximativ 30 Hz. Măsurătoarea este realizată cu motorul deconectat. Microcontroller-ul generează un semnal destul de bun pentru controlul servo.

Semnalul de ieșire a osciloscopului 6. PWM necesar servomotorului. Există doar o singură diferenţă faţă de imaginea anterioară. Un puls cu durata de 2ms presupune axul motorului rotit către dreapta. Microcontroller-ul generează sem-nal necesar pentru controlul servo.

1 ms

30 ms, 33 Hz

2 ms

30 ms, 33 Hz

80 % factor de umplere

o perioadă

10 % factor de umplere

o perioadă

15 % factor de umplere 20 % factor de umplere

L298: 6 (15)

L298: 2 (3)

Puncte de măsurare

L298: 6 (15)

L298: 2 (3)

Puncte de măsurare

ATMega32: pinul de ieșire pentru semnalul servo. Alegerea acestuia este la latitudinea dumneavoastră.

Puncte de măsurare

ATMega32: pinul de ieșire pentru semnalul servo. Alegerea acestuia este la latitudinea dumneavoastră.

Puncte de măsurare

Page 21: Ht Barro

Cum se construiește un robot Cum se construiește un robot36 37Sensors SensorsSenzori SensorsSenzori

DEFINIȚIE

Senzorul este un dispozitiv care converteşte un anumit tip de mărime fizică într-un alt tip de mărime fizică.De obicei, celălalt tip de valoare fizică este un semnal elec-tric, dar în general poate fi orice tip de semnal.

EXEMPLE

Cel mai util senzor din viaţa noastră este termometrul. Acesta indică temperaturi prin lungimea coloanei de mercur, sau o valoare afişată pe ecran.

GÂNDEȘTE-TE

Senzorii corpului uman. Putem recunoaşte lucrurile din jurul nostru prin in-termediul senzorilor corpului uman.Urechile sunt senzorii auzului. Ochii sunt senzorii culorilor. Pielea are senzori pentru presiune și temperatură. Limbii îi este atribuit gustul etc.. Care este funcţia creierului?

Simțurile umane:• văzul

• gustul• pipăitul• mirosul

• auzul

CLASIFICARE

După modul de realizare al măsurătorilor:Măsurare continuă. Valoarea este măsurată la intervale foarte mici. Măsurare stare. Valoarea este măsurată la cerere, atunci când utilizatorul are nevoie de o valoare a unei mărimi. Un microcomutator are doar două stări po-sibile. De fiecare dată când primeşti valoarea acestuia, vei avea doar o stare din cele două posibile.

După semnalul de ieşire:Ieşiri analogice: Tipic măsurătorii continue; de exemplu distanţa de 10 mm corespunde valorii citite de 1 V, 9 mm corespunde valorii citite de 0,9 V…Ieşiri logice: Tipic măsurătorii de stare, când de exemplu o distanţă mai mare de 10 mm înseamnă “0” logic, mai mică de 10 mm, înseamnă “1” logic.Semnal tip impulsuri: este tipic codificatoarelor, care generează impulsuri re-zultate în urma măsurătorilor mișcărilor liniare sau de rotație.

După necesarul de energie:Senzori pasivi: Nu au nevoie de energie deoarece produc ei înşişi energie, ex. indicatorul de presiune, prin intermediul vibratorului cu cristal, termocuplul…Senzori activi: Au nevoie de o sursă de energie pentru a o converti, ex. senzorii Hall, senzorii în infraroșu, termistor.

ÎNTREBARE

De ce sunt senzorii aşa de importanţi?Răspunsul este foarte simplu: Când trebuie să mergem undeva, trebuie să ştim unde suntem. Dacă vrem să răspundem la o întrebare, trebuie să o auzim mai întâi. Dacă robotul trebuie să găsească un obiect, mai întâi trebuie să-l lo-calizeze.

Microcontroller-ul: “Care este distanţa până la gard?”Senzorul:”1,85 V”.Microcontroller-ul: “Mulţumesc”, informează-mă la fieca-re milisecundă.

Fiecare simț poate fi măsurat.Ce știți despre al șaselea simț?

De ce sunt asemănătoare?Ce înseamnă ”ecolocație”?

PARAMETRI

RADAR. RAdio Direction And Ranging.SONAR. SOund Navigation And Ranging.LIDAR. LIght Direction And Ranging.

Sensibilitatea. Este ceva asemănător cu amplificarea unui tranzistor. Cât de mare este variația semnalului de ieşire în comparaţie cu variația semnalului de intrare? Cu alte cuvinte, o mică modificare a valorii măsurate trebuie să producă o modificare mare a ieșirii (sensibilitate bună).Selectivitatea. Senzorul nu trebuie să fie influenţat de mediu. Nimic nu trebuie să-l influenţeze în afara parametrului măsurat. Vă puteţi imagina un senzor ul-trasonic care înregistrează o valoare diferită când fluierați? Influienţele de me-diu pot cauza umiditate, temperatură, vibraţii, semnale acustice, lumină etc.Rezoluţia. Este cea mai mică diferenţă ce poate fi detectată de un senzor. Rigla are o rezoluţie de 1mm, iar termometrul cu mercur de 0,1oC.Domeniul. Este ecartul între valoarea minimă şi cea maximă care pot fi detec-tate de către un senzor. Termometrul poate măsura de la 34o C până la 42o C. Senzorul Sharp 2D120X are un domeniu de măsurare de 4 – 30 cm. Precizia (acurateţea). De fiecare dată trebuie obţinută aceeaşi valoare (în aceleaşi condiţii de mediu). Este o comparaţie între valoarea reală şi cea măsurată. Depinde de mulţi factori - interni şi externi. Minimizarea dispersiei citirilor se face prin calibrare. Un timp de măsură mare duce la o scădere a preciziei. Offset. Este diferenţa dintre valoarea măsurată şi valoarea reală, în cazul în care valoarea reală este zero. Liniaritatea (neliniaritatea). O amplificare aplicată unei intrări conduce la o aceeaşi amplificare pe ieşire. De obicei aceasta nu este îndeplinită. În special senzorii Sharp sunt neliniari, ceea ce este periculos pentru programul nostru. Histerezisul. Exprimă o dependenţă de o valoare anterioară. Când senzorul este apropiat de un obiect, acesta oferă la ieşire 1V la distanţa de 10 cm. Atunci când este depărtat de obiect, măsoară 1 V la distanţa de 9 cm. De obicei, aceasta este una dintre erorile senzorilor magnetici.Timpul de răspuns. Senzorii au nevoie de ceva timp pentru a stabiliza valoarea ieşirii. Senzorul ar trebui să-şi stabilească valoarea de ieşire cât mai curând po-sibil, fără nici o oscilaţie.

Calibrarea. Comparația dintre valorile de la senzor și de la instrumentul etalon.

SENZORI

După poziţia obiectului măsurat:Senzori cu contact. Aceştia sunt în contact cu obiectul de măsurat. Ex: indica-torul de presiune, termometrul, microcomutatorul, bimetalul…Senzori fără contact. Aceştia pot măsura valori fizice de la distanţă. Ex: sen-zori în infraroșu. Şi temperatura poate fi măsurată de la distanţă (termoviziune).

După modul de funcţionare:Senzorii capacitivi. Sunt utilizați în măsurători la mică distanţă şi înnanotehnologii. Ei măsoară capacitatea, care este invers proporțională cu distanţa. Sunt foarte precişi, dar nu-i folosim la robotul nostru.Senzorii inductivi. Sunt utili în detectarea metalelor. În bobina de inducţie se produce un curent care generează un câmp magnetic. În cazul în care se găseşte vreun obiect de metal în apropierea bobinei de inducţie, fluxul de curent crește. Senzorii optici. Utilizează lumină cu diferite lungimi de undă pentru a măsura distanţa. Acest tip de senzori este frecvent folosit în robotică.Senzorii magnetici. Probabil cei mai utilizaţi la măsurarea turaţiei (senzorul Hall). Ei au o sursă de câmp magnetic (pe ax) şi senzorul Hall. Principala pro-prietate a senzorului Hall este cea de a genera tensiune datorită unei modificări a câmpului magnetic. Variaţia tensiunii este proporțională cu turaţia. Aceştia pot fi folosiţi şi ca senzori de proximitate. Toţi senzorii menţionaţi mai sus sunt senzori fără contact.

Termometru analogic.

Termometru digital.

20o C 60o C

Diferență de tensiune

Metal 1

Metal 2

Termocuplu. Folosește efectul termoelectric. Nu poate măsura

temperatura în valori absolute.

20o CMetal 1

Metal 2

Principiul bimetalului. Se foloseşte de dilatarea termică diferită a două metale lipite.

70o CMetal 1

Metal 2

Nanotehnologii. Tehnologiile actuale sunt capabile să lucreze cu precizii de 10-9 m (nanometri). Acestea sunt distanțele dintre atomii din molecule.

Page 22: Ht Barro

Cum se construiește un robot Cum se construiește un robot38 39Sensors SensorsSenzori SensorsSenzori

SENZOR CU INFRAROȘU

Senzorul cu infraroşu (IR) este un circuit electronic care detectează intensitatea luminii reflectate.Acesta constă într-o diodă cu infraroşu, care emite lumină infraroşie şi un foto-tranzistor, care detectează cantitatea de lumină infraroşie reflectată. În funcţie de construcţie, aveţi două posibilităţi: un emiţător IR şi un detector IR într-o singură carcasă (manipulare mai bună, funcţionare mai bună pentru că pot fi reglate) sau carcase independente (mai ieftin).De ce este folosită lumina infraroşie ?Deoarece are o lungime de undă specifică astfel încât detecţia poate fi mai selectivă. Lumina solară influențează foarte puțin detecția. Pentru a se reduce infuența luminii vizibile se folosește spectrul infraroșu modu-lat. Aceasta se codează/decodează cu o frecvenţă de cca. 40 kHz. O altă măsură de precauție este utilizarea unor benzi înfăşurate în jurul capului detectorului pentru a crea umbră. Senzorii cu inflaroşu sunt de obicei folosiţi la roboţii clasici pentru urmărirea liniei drepte şi detectarea obstacolelor, în situaţii în care obiectele detectate sunt la o distanţă mică faţă de detector (1 cm). Trebuie să fiţi atenţi la unghiul de emisie, deoarece chiar şi o mică diferenţă faţă de unghiul corect poate cauza o disfuncţie. Unele materiale (închise la culoare, transparente) pot absorbi lumina emisă şi pot cauza de asemenea disfuncţii.Încercaţi să folosiţi un card de detecţie a semnalului IR pentru a vedea ţinta undei de lumină IR. Mai puteţi vedea unda IR (nu cu ochiul liber) când o înregistraţi cu ajutorul camerei video utilizând funcţia de înregistare pe timp de noapte. Robotul nostru utilizează senzorii cu infraroşu QRD 1114, conectat la pinii por-tului C. Dacă doriţi să economisiţi bateria, deschideţi senzorul emisie-detecţie IR doar atunci când aveţi nevoie de el.

Lungimea de undă IR este de 880 nm

obrazok pracuje OK a nepracu-je pri slnku

FOTOREZISTORUL

Fotorezistorul este un rezistor a cărui conductivitate depinde de cantitatea de lumină incidentă. Depinde de cantitatea de lumină solară, nu de cea cu infraroşu (însă numeroase materiale pot detecta lumina roşie şi ultravioletă). Mai multă lumină înseamnă o mai mică rezistenţă (o mai mare conductivitate). Fotore-zistorii sunt uneori numiţi fototranzistori sau fotocelule, însă ambii termeni sunt incorecţi. Fototranzistorul utilizează proprietăţile joncţiunii PN pentru o rezistenţă variabilă, fotocelulele generează tensiune, care depinde de cantitatea de lumină. Fotorezistorii sunt deseori folosiţi şi ca divizoare de tensiune. Valoarea tensiunii este divizată aproape egal şi pot fi utilizaţi ca senzori de distanţă, când sunt conectaţi la convertorul analog-digital al microcontroller-ului. Însă, datorită dependenţei lor neliniare este mai bine să utilizaţi senzori de distanţă. Fotore-zistorul poate fi utilizat şi pentru detectarea a două stări, care evaluează lumina (ex. cea a unei lămpi) şi direcţioneză robotul către ţintă. Poate fi conectat la pinii microcontroller-ului prin rezistori de ridicare (pull-up). Fotorezistorul are o rezistenţă de ordinul ΜΏ la întuneric. La lumina solară rezistenţa acestuia scade la 100 Ώ. Utilizarea și conectarea la microcontroller vor fi descrise detaliat în partea numită Programare.

Conductivitatea (G). Măsurată în Siemens (S).Rezistența (R). Măsurată în Ohmi (Ώ).R=1/G.

MICROCOMUTATORUL

Microcomutatorul este cel mai simplu senzor. Acesta transformă energia mecanică în două stări ale semnalului electric. (îşi modifică conductivitatea de la aproape 0 până la infinit).Este deseori folosit ca aşa-zis senzor tactil (ca robotul să nu se lovească de perete), sau senzor de coliziune. Poate fi folosit şi pentru butoane de comenzi.Uneori este ataşat microcontroller-ului împreună cu rezistențe de prescriere a nivelului logic (“1” sau “0”, vezi figurile din stânga).

Senzor de proximitate. Senzor care poate măsura distanțe.

Senzor tactil. Senzor care sesizează contactul fizic cu un

obstacol sau obiect.

Există două probleme legate de construcţia roboților. Cum să se miște un robot şi cum să recunoască mediul înconjurător. Restul este doar programare.

TABEL CU SENZORI

Tip Descriere Importanță Utilizat în robot?

Micro-întrerupătorul

Comutator tactil (de contact). Detector de coliziune care sesizează contactul fizic.

3 0

Fotorezistor Rezistenţa sa este influenţată de lumină. Este utilizat pentru o depla-sare pe distanţe mijlocii.

4 0

Senzor în infraroșu Emite şi detectează lumina infraroşie. Utilizat pentru mersul în linie dreaptă, evitarea obstacolelor. Adecvat pentru distanţe mici.

5 1

Senzor cu ultrasu-nete

Emite şi detectează undele sonore. Utilizat pentru evitarea obstacolelor și găsirea obiectelor. Adecvat pentru distanţe mijlocii de până la 3 metri.

3 0

Senzor infraroșu Sharp

Emite lumină în infraroșu şi detectează cantitatea de lumină reflectată. Utilizat pentru distanţe mijlocii de până la 5 metri.

5 1

Codificatorul Emite şi detectează lumina. Utilizat pentru măsurarea vitezei de rotaţie.

5 1

Senzorul de curent Măsoară curentul. Utilizat pentru controlul vitezei şi controlul consu-mului bateriei.

2 0

Senzor de culoare Detectează frecvenţa luminii reflec-tate.

1 0

Busolă digitală Detectează direcţia de mişcare potrivit câmpului magnetic al pământului.

1 0

Senzor GPS Detectează locaţia. Utilizează navigaţia prin Sistemul Global de Poziţionare.

1 0

Cameră de luat vederi

Detectează împrejurimile cu aju-torul unei camere video digitale.

1 0

Notă: Importanţa depinde în mod deosebit de obiectivul robotului. În cazul în care scopul robotului este de a ghida persoanele nevăzătoare în lumea reală GPS-ul şi camera de luat vederi, ar avea probabil o importanţă mai mare.

Următorul tabel conţine cei mai des folosiţi senzori ai roboticii:

Microîntrerupător cu tampon

Stratul fotosensibil al unui senzor care sesizează intensitatea

luminoasă.

GÂNDEȘTE-TE

Există în natură un animal care utilizează emisia luminii pentru orientare?Puteţi compara microcomutatorul cu vreo parte a corpului animalelor?

QRD1114. Emițător-detector în aceeași capsulă.

22 k Ώ

GND

+ 5 V

Către intra-rea microcon-

troller-ului

Desen tipic de senzor IR cuplat cu un rezistor de limitare.

I [A]

U[V]

800 lx400 lx

100 lx

Caracteristica V-A a fotorezistoru-lui (cazul ideal).Lux. Unitatea de măsură a intensității luminoase. O zi însorită are 100 000 lx. Camera de lucru 500 lx. Lumina Lunii are 0.3 lx.

22 k Ώ

GND

+ 5 V

Intrarea micro-controller-ului

22 k Ώ

GND

+ 5 V

Intrarea micro-controller-ului

Rezistor de ridicare (pull-up). Ridică tensiunea la nivelul Ucc.

Rezistor de coborâre (pull-down). Scade tensiunea la zero.

Page 23: Ht Barro

Cum se construiește un robot Cum se construiește un robot40 41Sensors SensorsSenzori SensorsSenzori

SENZORUL CU ULTRASUNETE

Senzorul ultrasonic este un mecanism care transformă distanţa la care se află un obiect în tensiune electrică prin intermediul măsurării timpului dintre emisia şi recepţia impulsului semnalului ultrasonic.

TEORIE

Sunetul înseamnă unde acustice. Urechea umană poate percepe sunete cu o frecvenţă între 20 Hz şi 20 kHz (limitele sunt percepute de cei cu un auz special).Sunetul ultrasonic are o frecvenţă de peste 20 kHz (câinii sau liliecii îl pot per-cepe). Sunetul ultrasonic poate fi produs şi detectat de către un vibrator de cristal. Acesta foloseşte efectul piezo.Efectul piezo înseamnă conversia presiunii în tensiune şi invers. Viteza sem-nalelor ultasonice în aer este de circa 340 m/s (1220km/oră).Nu este o problemă în a măsura timpul dintre emisia şi receptia unui semnal şi calcularea distanţei. Microcontroller-ul face asta cu uşurinţă.

Câinii, liliecii şi alte animale pot auzi ultrasunetele.Delfinii şi balenele pot auzi sunetele subsonice (sub 20 Hz), dar şi frecvenţele ultrasonice.Oscilatoarele cu cristal sunt folosite în difuzoare (probabil şi în laptopul dumneavoastră) şi microfoane. Senzorii ultrasonici sunt uneori denumiţi sonar. Radarul este şi el folosit în măsurarea distanţei. Acesta emite şi detectează im-pulsul electromagnetic cu o frecvenţă de ordinul MHz-ilor şi măsoară diferenţa de frecvenţă a semnalelor emis şi recepţionat. Este folosit pentru măsurători la mare distanţă în special pe echipamente militare (radiolocatori).Sonarul măsoară timpul, radarul măsoară frecvenţa.Semnalul emis de sonar trebuie să aibă o bună focalizare pentru a avea o bună selectivitate în timpul măsurătorii.Sonarul are de obicei două vibratoare de cristal. Unul pentru emisie, şi unul pentru recepţie. Dar puteţi cumpăra deasemenea un sonar cu cristal doi în unul.

GANDIȚI-VĂ

Cât de departe este obiectul, dacă timpul dintre emisia și recepția semnalului cu ultrasunete este de 0,02 ms? Se poate măsura distanța până la un obiect de sticlă cu senzorul cu ultrasunete?Se pot măsura distanțe până la obiecte, cu senzori cu ultrasunete, într-un mediu foarte întunecat sau foarte luminos?Senzorul cu ultrasunete consumă 100 mA curent în stare inactivă. Când emite sunet, consumă 1 A. Gândiți-vă la administrarea bateriei! Ce spui despre măsurarea distanțelor scurte de până la 5 cm? Este o soluție bună măsurarea lor cu ultrasunete?Dar măsurarea distanțelor într-un mediu zgomotos? Puteți recomanda măsurarea cu sonarul? Dar rezolvarea problemei prin măsurarea frecvenței sunetului re-flectat?De ce avioanele nu folosesc senzori cu ultrasunete pentru a măsura distanțele?De ce avioanele nu folosesc servomotoare pentru a schimba direcția?

SENZORUL ULTRASONIC ÎN PRACTICĂ

Mai jos, sunt enumerați șase pași pe care programatorul ar trebui să îi urmeze când dorește să folosească sonarul pentru măsurarea distanței:1. microcontroller-ul trimite secvența de semnale de tensiune dreptunghiulară prin emițătorul de unde sonore – cristal piezorezonator.2. în același timp se începe măsurarea timpului cu un contor3. ecoul de la obiect este detectat de cristalul piezorezonator4. contorul oprește numărarea5. microcontroller-ul calculează timpul real, îl înmulțeste cu viteza sunetului și obține distanța până la obiect6. acest lucru se repetă de mai multe ori rezultând calculul distanței. Pare simplu. Acest procedeu va fi explicat într-un capitol numit Programare.

DEZAVANTAJE

Se folosesc 3 metode de măsurare a distanţelor mari:1.Măsurarea diferenţei de timp dintre emisia şi detectarea sunetului2.Măsurarea cantităţii de lumină reflectată3.Măsurarea diferenţei de frecvenţă dintre semnalele tip microunde, emis şi de-tectat.Cea de-a treia metodă (efectul Doppler) nu ne interesează deoarece necesită un echipament complex.

1. Ecouri fantomă. Sunetul emis nu este unidirecțional. Sunetul este reflectat și de mediul înconjurător, nu doar de obiectul măsurat.2. Folosirea mai multor senzori cu ultrasunete. Aceștia se pot influența reciproc.3. Mediul este compus din mai multe materiale. Reflexia de la un metal este diferită față de cea de la un burete.4. Distanța minimă pentru măsurare este de 5 cm. Distanța maximă este de 5 m cu eroare de 3-4 cm.5. Consumul de energie electrică din timpul emiterii sunetului este mare.6. Măsurarea depinde de condițiile externe, în principal de temperatura aerului (acesta este motivul pentru care avioanele nu le folosesc).

Robotul sensibil (algoritmul lui Braintenberg). Un robot cu

doi fotorezistori caută o sursă de lumină. Când aceasta este

detectată robotul se îndreaptă către ea.

Senzor cu ultrasunete

Obiect

Distanţa = Viteza sunetului x tim-pul dintre emisie şi detecţie / 2

Unde sonore

BINE DE ȘTIUT

Senzor ultrasonic

Obiect

Unde sonore

Eroare în timpul măsurării: ecouri false.

Eroare în timpul măsurării: trei senzori se influențează reciproc

INTERESANT

Senzor cu ultrasunete.

Simțurile șobolanului:Vedere: slabă, probabil fără pro-funzime în vizibilitate, incolorăPipăit: excelent, prin intermediul mustățilorMiros: excelent, nu atingeți cu mâna spălatăAuz: bun, până la frecvențe foarte înalteDate furnizate de Jose

Page 24: Ht Barro

Cum se construiește un robot Cum se construiește un robot42 43Sensors SensorsSenzori SensorsSenzori

CODIFICATORUL

DEFINIȚIE

Imaginați-vă că robotul dumneavoastră trebuie să meargă de la punctul A la punc-tul B. Distanța dintre A și B este de 50 cm. O soluție facilă ar fi plasarea unei surse de lumină care să lumineze punctul B, folosiți orice tip de senzor de detectare a luminii și programați robotul pentru a se opri când senzorul detectează lumina.O soluție mai bună și frecvent utilizată ar fi să programați robotul pentru a merge 50 cm drept înainte.Cum?1. realizează o serie de găuri în jurul circumferinței roții2. pune un LED pe o parte a roții și activează-l3. pune un fototranzistor pe cealaltă parte a roții4. numără impulsurile generate de fototranzistor în timp ce roata se învârte. Observă că o rotație a roții este egală cu numarul de găuri de pe circumferința roții. La o rotație distanța parcursă este egală cu numărul lui Ludolph (Pi) înmulțit cu diametrul roții.5. contorizați numărul de impulsuri pentru parcurgerea distanței de 50 cm și programați robotul să se oprească după ce se ajunge la această valoare.Nu este simplu, dar fiecare robot fiabil are implementată această soluție, desigur, într-o formă ceva mai complexă.

În general vorbind, codificatorul este un dispozitiv hardware, care transformă informația dintr-un anumit format în alt format. Înțelesul ambelor forme este același, dar reprezentarea lor este diferită.Opusul codării este decodificarea. Decodificarea este un proces de restaurare a informațiilor anterior codate.Această definiție are drept scop reprezentarea valorilor logice. De exemplu, puteți codifica reprezentarea zecimală a unui număr în reprezentarea sa binară. În timpul decodării, numărul binar este transformat din nou în număr zecimal.În robotică, cea mai des utilizată definiție a codificatorului este:Codificatorul este un dispozitiv hardware, care transformă distanța măsurată în impulsuri electrice. Cuvântul decodificator nu este de obicei folosit, pentru că acesta este un proces unidirecțional. Decodificarea nu este importantă.

Traducător limba română. Tra-duce din limba engleză în limba română. El reprezintă codifica-

torul.Traducător limba engleză. Tra-duce din limba română în limba

engleză. El reprezintă decodorul.

TEORIE

CLASIFICARE

În funcție de forma codificatorului, acesta poate fi liniar sau rotativ:• Codificatorul liniar detectează o mișcare liniară a unui robot.• Codificatorul rotativ detectează o mișcare de rotație (transformare număr pulsuri în unghi, distanță, viteză sau accelerație) a unei roți a unui robot.

În funcție de construcție:• Codificatorul optic folosește zonele negre și albe din jurul roții (sau orifici-ilor). Sursa emite lumina care este detectată de un detector foto.• Codificatorul mecanic folosește un sistem de orificii și un microîntrerupător mecanic pentru a detecta dacă există sau nu există un orificiu. Nu există nici o componentă optică, doar un contact mecanic al unui microîntrerupător.

În funcție de sistemul de măsurare (pentru codificatorul rotativ):• Codificatorul incremental produce impulsuri și numărarea se realizează cu ajutorul microcontroller-ului. Când codificatorul incremental începe să funcționeze, poziția sa este necunoscută. Următoarea poziție este relativă la poziția precedentă.• Codificatorul absolut își știe poziția în fiecare moment. Codificatorul are 8 piste cu forme negre/albe care reprezintă 256 de poziții mecanice diferite ale unei roți. Dar, trebuie să aibă 8 surse independente, emițătoare de lumină și detectori foto. Fiecare poziție mecanică corespunde uneia dintre aceste 256 posibilități. Aceasta înseamnă că 360 grade se divid în 256 poziții (1,406 grade).

GÂNDEȘTE-TE

Codificatorul rotativ optic incremental are 30 de puncte negre/albe. Ce distanță acoperă, când contorul indică 120 de impulsuri și raza roții este de 3 cm? Co-dificatorul oferă 5 impulsuri/sec. Care este viteza robotului?Contorul roții din stânga a numărat 15 impulsuri, roata din dreapta nu se mișcă. Cu câte grade s-a rotit robotul?Contorul roții din stânga a numărat 15 impulsuri, contorul roții din dreapta la fel, dar cu polaritate opusă a tensiunii. Cu câte grade s-a rotit robotul?Se poate afla direcția roții care se învârte? Găsește soluția!Preferați emițătorul și detectorul separați sau ambele într-o singură carcasă?Care sunt avantajele și dezavantajele codificatoarelor mecanice?Câte poziții diferite sunt necesare pentru a măsura cu codificatoarele rotative absolute cu 4 piste?Pregătiți pe hârtie codificatorul incremental al roții pentru 10 grade precizie.

UȘOR, DAR ADECVAT

Emițătorul și receptorul de lumină sunt de obicei atașate de robotul dumneavoastră. Roata codificatorului se rotește odată cu cea a robotului. Rezul-tatul îl reprezintă impulsurile pătrate de la contorul digital al microcontroller-ului. Dacă știi unghiul dintre fiecare impuls și dacă puteți calcula timpul de la început până la sfârșit, microcontroller-ul poate determina distanța, unghiul de rotire (poziția) sau viteza (sau accelerația).

GHICITORI

1.Codificatorul generează impulsuri, dar robotul nu se mișcă. De ce?2.Ai marcat codificatorul rotativ pe 360 grade. Pare că este în regulă. Dar nu poți să-l oprești în poziția dorită. De ce?3.Comportamentul robotului este excelent când îl testezi seara acasă. Dar când dorești să-l prezinți la școală, nu ai succes. De ce? 4.Când folosești codificatoare în robotul tău, microcontroller-ul se resetează uneori. Când nu îl folosești, totul este în regulă. De ce?5.”Robotul meu are codificator optic rotativ absolut cu o singură pereche emițător/receptor”. Este această propoziție adevarată sau falsă?

Lumină emisă

Lumină emisă

Receptor

Receptor

Roata

Roată

Soluția noastră. Există puncte negre și albe reflectate împrejurul

circumferinței roții. Emițătorul și receptorul se află în aceeași

carcasă.

Soluție posibilă. Lumina emisă este receptată prin orificii.

Soluția noastră în practică.

Undă reflectată

Undă nereflectată

Exemplu de roată de robot cu striații pentru măsurare

codificator 8 biți absolutbit 3 bit 2 bit 1 bit 0

codificator 4 biți cu semnalele provenite de la detector

Codificator extern

Robot

Page 25: Ht Barro

Cum se construiește un robot Cum se construiește un robot44 45Sensors SensorsSenzori SensorsSenzori

BINE DE ȘTIUT

SENZORI SHARP DE PROXIMITATE CU INFRAROȘU

Senzorii de proximitate cu infraroșu, produse ale companiei Sharp (Japonia), sunt cel mai frecvent utilizați ca detectoare la distanță în domeniul roboticii (ro-botica pentru amatori, dar sunt folosite și în soluțiile profesionale). Probabil că fiecare robot care interacționează cu mediul foloseste acest tip de senzor.

DEFINIȚIE

Senzorul Sharp de proximitate cu infraroșu este un dispozitiv care transformă distanța în tensiune prin măsurarea cantitații de lumină reflectată pe matricea detectorilor foto.

TEORIE

Senzorul Sharp cu infraroșu este alcătuit de obicei din două părți. Este imposi-bil să le separăm (idea de emițător și detector de lumină infraroșie separate, nu reprezintă o problemă).O parte componentă este un LED de lumină infraroșie. Lumina este emisă ca un fascicul focalizat (mai focalizat înseamnă precizie mai bună). Lungimea de undă este de 850 nm și este emisă prin impulsuri.A doua parte este o matrice (matrice fizică, linie) de detectori fotosensibili, în spatele unei lentile. Este asemănătoare unui chip CCD dintr-o cameră foto, dar punctele fotosensibile sunt grupate în linie, nu într-un pătrat.LED-ul infraroșu emite lumina către obiect. Lumina reflectată cade pe linia de puncte CCD prin lentila receptorului. O distanță mai mare înseamnă iluminare a centrului receptorului. Pentru o distanță mai scurtă rezultă o iluminare a detec-torilor de pe margine. Rezultă o tensiune culeasă mai mare (distanța mai scurtă). Acest sistem de măsurare a distanței este foarte interesant și semnificativ. Priviți figura pentru a înțelege mai bine acest principiu.

CCD. Charge Coupled De-vice. Lumina se transformă

proporțional în tensiune electrică.

AVANTAJE

• Ușor de folosit timp îndelungat fără nicio problemă (problemă hardware)• Consum redus de energie (25 mA în timpul funcționării: emisie de lumină)• Domeniu de măsurare de la 4 cm la 5,5 m• Relativ mic (versiunea senzorului Sharp pentru 5 m este puțin mai mare)• Lumina emisă este ajustată în secvență de impulsuri. Acest lucru îl face să nu depindă de surse de lumină ambientală.• Cantitatea de lumină reflectată nu depinde de suprafața și forma obiectelor detectate.• Doi senzori pot fi folosiți în loc de sonar pe un robot (vezi figura)• Cartografiere 2D - puneți senzorul Sharp pe un servo, scanați împrejurimile și stocați distanțele într-o matrice de numere (nu este usor de programat).• Senzorul este ideal pentru așa-numita detectare de contur, când obiectele sunt urmărite (se mișcă). Robotul nostru are instalată această funcționalitate.• Măsurarea nu depinde de culorile obiectelor.

DEZAVANTAJE

• Dependența neliniară invers proporțională Distanță-Tensiune. La distanță mică tensiunea la ieșirea senzorului este mare. Dependența neliniară poate fi liniarizată prin metode de programare. Nu este cazul aici.• Semnalul trimis de un senzor poate interacționa cu semnalul de la alt senzor.• Emisia razei de lumină nu este așa de focalizată pe cât avem nevoie.

CONSTRUCȚIE

Așa cum am mai spus, dimensiunea senzorului este foarte redusă. Folosește co-nectorul fără lipituri din Japonia (de obicei oferit) pentru conectare. Este mic și usor de folosit. Conectorul JST (CFJ) are 3 fire – masă, Vcc și ieșire. Senzorul cu domeniul de distanță de până la 5 m are un conector diferit.

ANALOG VERSUS DIGITAL

Compania Sharp produce și 2 tipuri de senzori cu ieșire digitală. Acestea nu generează o valoare analogică a tensiunii în functie de distanță, ci valori 0 logic sau 1 logic în functie de distanță.

Senzor de proximitate IR Sharp

Conector JST

SHARP ÎN PRACTICĂ

Principalul scop al utilizării senzorilor de distanta este de a reacționa, când se detectează un obiect (obstacol, zid…). Senzorul Sharp va spune “Distanța este…”. Această valoare trebuie tradusă pentru microcontroler care o evaluează și decide între a întreprinde sau nu o acțiune. Programul va trece la rutina adecvată pentru acea acțiune. Controlul se face în buclă închisă.Problema este comparația. Regiștrii pot compara valorile digitale, dar sen-zorul Sharp produce valori analogice. Este necesar să se transforme valoarea analogică într-o valoare digitală și este rolul convertorului Analogic/ Digital. A doua posibilitate este de a utiliza Comparatorul Analogic, inclus în micro-controller. Aceste posibilități vor fi explicate în detaliu în capitolul intitulat Programare.

Cum sa vezi lumina infraroșie? Pentru a vedea lățimea punctu-lui luminii infraroșii (dispersia)

poți cumpăra un detector special infraroșu sau să folosești o cameră

video pe modul nocturn

LED IR

OBSTACOLE LA DIVERSE DISTANȚE

MAT

RIC

E C

CD

LENTILE RECEPTOR

OK

ERO

AR

E

OK

OK

În caz că evaluați distanța în colțuri, pot apărea posibile greșeli de măsurare. Pentru a avea valori

corecte, încercati să schimbați un-ghiul drept cu arcul de cerc (ajută

și un pic de hârtie)

+ 5 VGROUND

IEȘIRE

10 20 30 40 50 60 70 80 Distanță obiect [cm]

Ieșirea analogică [V]

0.51.01.52.02.53.0

Senzor analogic SHARP 2Y0A21

Valori ce pot fi eronate

ERO

AR

E

OK

Ai în vedere posibilele erori de măsurare. Tensiunea de ieșire de 2.5V poate reprezenta distanțe de 5cm sau 15cm.

OK

Soluție. Elimină eroarea. Fixează senzorul în profunzimea robotului

Conectarea celor doi senzori (ai în vedere unghiurile diferite), pot înlocui sonarul, care nu este foarte precis.

OK

0 25 50 100 150 200 Distanță obiect [cm]

Ieșire digitală (0 sau 1) [V]

5.0Măsurători eronate

Senzorul SHARP digital 2Y0D02. Distanță de măsurare 20 - 150 cm.

Page 26: Ht Barro

Cum se construiește un robot Cum se construiește un robot46 47Sensors SensorsSenzori SensorsSenzori

GAMA DE PRODUSE SHARP

Cea mai importantă decizie este alegerea tipului corect de senzor. Tabelul de mai jos arată principala gamă de senzori de proximitate Sharp.

Distanța în centimetri 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 200 300 400 500 600

2D120X2Y0A41 4 - 30 cm

2D150A3 - 30 cm

IEȘIRE DIGITALĂ

2Y0A0220 - 150 cm

2Y0A2110 - 80 cm

IEȘIRE ANALOGICĂ

2Y0A70050 - 550 cm

2Y0D02IEȘIRE DIGITALĂ

20 - 150 cm

SARCINI

Notați valorile măsurătorilor efectuate cu unii senzori SHARP din timpul lecțiilor practice. Evaluați valorile măsurate din calculul tabelar (MS Excel sau Open Office) și desenați de asemenea caracteristicile de ieșire.Încercați diferite condiții de lumină, diferite culori ale obstacolelor, încercați oglinda și alte materiale reflectorizante. Schimbați și unghiurile obstacolelor în timpul măsurării.

RECOMANDARE

În faza de testare a robotului va fi nevoie să afisați valorile senzorilor pe ecran. Acest ghid nu descrie posibilități scumpe de a face acest lucru prin intermediul diferitelor soluții hardware și software. Dar în capitolul Programare vă oferim o soluție similară și eficace privind display-ul LCD alfanumeric 2x16. LCD cu 2x16 linii care afișează

valorile măsurate

În strictă legătură cu principiul funcționării, senzorii de proximitate pot fi:Capacitivi. Funcționarea unui senzor de proximitate capacitiv se bazează pe evaluarea variației capacității electrice a unui circuit RC, ca rezultat al apropierii de un anumit obiect.Inductivi. Funcționarea se bazează pe proprietatea conform căreia dimensiunea de măsurat produce o variație a inductivității unei bobine care este parte din circuitul oscilant RL al senzorului.Optic. Funcționarea senzorilor optici se bazează pe interpretarea unui semnal luminos în spectrul vizibil sau invizibil. Semnalul este interpretat de un receptor ca o prezență sau absență a obiectului, sau ca un rezultat al întreruperii razei op-tice, prin interpunerea unui obiect între transmițător și receptor, ambele datorate unui flux de lumină produs de emițător printr-o suprafață reflectorizantă.Magnetici. Senzorii de proximitate magnetici reacționează la câmpurile mag-netice produse de magneți și electromagneți permanenți. Senzorii magnetici pot fi de mai multe tipuri: REED, cu efect HALL, electronic.

CLASIFICAREA SENZORILOR DE PROXIMITATE

CONCLUZII DIN INDUSTRIE

În prezent, există un interes permanent în creșterea inteligenței roboților indus-triali, în special a roboților mobili independenți. Interesul este legat de senzorii de navigație și ghidare. Există două principii implementate în controlul roboților mobili:1.Determinarea poziției robotului mobil se află în relație cu unele puncte ex-terne, fie ele fixe sau marcate.2.Determinarea poziției și orientarea robotului mobil se face cu ajutorul unui sistem senzorial independent, montat pe robot.

Sisteme de ghidare electromagnetice. Semnalul modulat în frecvență dintr-un cablu situat în podea și bobine situate pe robotul mobil. Cablurile sunt folosite în paralel pentru a asigura flexibilitatea robotului (cu frecvență diferită).Sisteme de ghidare optice pe trasee marcate. O vopsea reflectorizantă este folosită pe podea pentru a marca traseul. Senzorii optici măsoară abaterea de la traseu și ghidează baza robotului mobil. Sisteme de ghidare cu ajutorul vopselei magnetice. Există o vopsea care conține un praf, ferită magnetică, aplicat pe podea pentru a marca traseul. Sen-zorii magnetici instalați pe ambele părți ale robotului vor detecta abaterile și vor face corecțiile necesare. Sisteme de ghidare cu laser. Folosim un laser atașat tavanului camerei, care scanează podeaua. Robotul independent va folosi lumina pentru a găsi calea dorită. Prin intermediul unei zone foto-senzoriale robotul detectează abaterea de la traiectorie/drum și o transmite controller-ului. Folosind acest sistem de ghidare, robotul poate fi direcționat spre o rută fixă sau aleatoare.Sisteme de ghidare optice. În general ele se bazează pe aparate foto care pot detecta coduri de bare, repere pe trasee, etc. pentru a obține informații despre poziția robotului pe traseul de urmat.Sisteme de detectare a poziției, atașate de robotul mobil. Ele se bazează pe sisteme cu girocompas, cu laser, sonice, sau combinații ale acestora. Girocom-pasele mecanice sunt foarte căutate în prezent.

IEȘIRE ANALOGICĂ

IEȘIRE ANALOGICĂ

IEȘIRE ANALOGICĂ

Page 27: Ht Barro

Cum se construiește un robot Cum se construiește un robot48 49Sensors SensorsSenzori SensorsSenzori

GPS

Robotul trebuie să-și cunoască poziția în spațiu. Aceasta este o axiomă valabilă pentru roboți care au raza de acțiune mai mare de 10 m. Exemple:• Imaginați-vă că veți construi un robot care ghidează oamenii orbi. Cum poate el ști că obstacolul din fața sa este o stație de autobuz? Răspunsul este simplu. Își știe poziția, știe că în această poziție există o stație de autobuz (este scris în hărțile GPS)• Imaginați-vă că veți construi un robot zburător pentru cartografiere. Robotul trebuie să-și cunoasca poziția pentru a obține hărți exacte.

GÂNDEȘTE-TE

Încercați să gasiți mai multe exemple în care este absolut necesar a fi la curent cu poziția exactă.Pe de altă parte, explicați de ce nu este necesară (sau nu este posibilă) determi-narea poziției exacte în îndeplinirea obiectivului nostru.

TEORIE

GPS. Global Positioning System.

Poziția. Este detetminată de co-ordonatele x, y și z pe Pământ.

Imaginați-vă că stiți distanța dintre robot și satelit. Unde este situat robotul? Un-deva în zona pătrată cu raza egală cu distanța (linia albastră în figura din stânga). Atât de multe posibilități!Imaginați-vă că ştiți distanța dintre cei doi sateliți. Intersecția ambelor sfere ale sateliților reprezintă două puncte. Unul pe pământ, altul în spaţiu. Acesta este un mod de a defini poziția x și y a unui robot. În caz că putem folosi sfera celui de-al treilea satelit, putem să definim și pozitia z a robotului - înălțimea sa. Cum să obținem distanța dintre satelit și robot? Satelitul emite un semnal, ro-botul îl primește. Timpul dintre emisie și recepție corespunde distanței (viteza semnalului este de 300.000 km/s). Cea mai importantă problemă a GPS-ului o reprezintă măsurarea de secvențe de timp foarte scurte, asta însemnând că ceasul de pe satelit și de pe robot trebuie să fie extrem de precise și sincronizate în mod regulat.Orbita este plină de sateliți. Sateliții pentru GPS sunt situați la înălțimea de 20.000 km deasupra suprafeței Pământului. Sunt 24 de toți. Ei se rotesc de două ori pe zi în jurul Pământului. Precizia de măsurare a GPS-ului este de 10 m.

Pământ

Robot

Satelit

Intersecția cercurilor albastre reprezintă poziția robotului.

Satelit

DE CE NU GPS?

De ce nu putem folosi GPS-ul în proiectul nostru?• Precizia de determinare a poziției este de 10 m. Noi căutam obiectul pe o suprafață de cca 2x2 m. Nu avem nici o șansă să fim preciși.• ATmega32 reprezintă un microprocesor pe 8 MHz. Trebuie să măsurăm poziția mai mult decât o singură dată într-o microsecundă. GPS-ul de pe roboți nu folosește microcontrollere cu o atât de scazută viteză de calcul. Este mai bine să folosim placa de bază și un procesor încorporat în PC-uri clasice.

SENZORUL HALL

În prezent senzorul Hall este folosit în multe aplicații, în special în industria auto-mobilelor. Acesta folosește efectul Hall pentru funcționalitatea sa. Senzorii Hall au o importanță deosebită în măsurarea turațiilor. Fiecare rotație influențează senzorii Hall prin trecerea prin fața unui magnet. Impulsurile de tensiune de la senzor pot fi numărate cu un contor rezultând viteza de rotație a arborelui unui motor.Nu folosim acest tip de senzor pentru robotul nostru.Viteza roților este evaluată prin intermediul codificatorului. Este mai precis și putem să evaluăm și poziția roții (unghi). Senzorii Hall nu sunt neapărat utili pentru măsurarea unghiului dar sunt ideali pentru măsurarea turației, datorită construcției simple.

+ curent continuu

- curent continuu

Polu

l Nor

d M

agne

tic

Polu

l Sud

Mag

netic

V

Efectul Hall. Semiconductorul este situat într-un camp mag-netic. Cele două părti ale sale sunt conectate la câmpul electric. Pe de altă parte este creată tensiunea Hall.

Ax

Magnet

Senzor Hall

Senzorul Hall. Ideal pentru măsurarea vitezei de rotație

DECIZII

Ce tip de senzor se folosește pentru fiecare activitate a robotului?

Urmărirea liniei. Robotul trebuie să urmeze o linie neagră pe o suprafață albă. Folosiți senzori cu infraroșu. Cea mai bună solutie este să folosim un LED și doi fototranzistori pe ambele părti ale LED-ului. Puteți controla direcția de mișcare (controlul cu regulator PID ar putea fi cel mai potrivit).

Evitarea obstacolelor. Roboții trebuie să înconjoare obstacolele. Folosiți sen-zorul Sharp de apropiere la distanțe de până la 30 cm.

Urmărirea peretelui de delimitare. Robotul trebuie să urmeze peretele. Folosiți senzorul Sharp de proximitate până la 30 cm și reglarea PID.

Detectarea obiectului. Robotul trebuie să găsească un obiect și să se oprească în apropierea sa. Folosiți senzorul cu infraroșu într-o carcasă sau întrerupătorul tactil (microîntrerupător).

Urmărirea luminii. Robotul trebuie să urmeze sursa mobilă de lumină. Folosiți doi fotorezistori.

PID. Proporțional Integrator și Derivativ. Unul dintre modurile de control al motoarelor.

GÂNDEȘTE-TE

Analizați avantajele și dezavantajele soluțiilor pentru obiectivele de mai sus.Propuneți un sistem de senzori pentru:• Aspirator robotizat• Mașină de tuns iarbă robotizată• Vehicul lunar• Robot fotbalist• Frigider• Vehiculul viitorului

REȚINE

Senzorii reprezintă cele mai importante componente ale robotului independent. Alegerea corectă a senzorului va influența munca ta.Nu vă preocupați să schimbați sistemul de senzori (luați în considerare șasiul modular al robotului care permite acest lucru).Găsiți sistemul de preluat valori de la senzori.

Numărător

Page 28: Ht Barro

Cum se construiește un robot Cum se construiește un robot50 51Programming ProgrammingProgramare ProgrammingProgramare

JOKEDEFINIȚIE

Programarea este un proces de creare a unui cod sursă.Programarea oferă viaţă maşinilor.Programarea reprezintă traducerea unui algoritm într-un cod sursă.Programarea este… (încercaţi să vă gândiţi la propria definiţie).

Când cineva vă spune că ştie să programeze, să nu-l credeţi până când nu vă va arăta ce a realizat.

Arată-mi codul sursă şi îţi voi spune dacă eşti un programator adevărat sau nu.

GÂNDIŢI-VĂ

Este creierul uman într-un fel sau altul programat? Ce ziceţi de informaţia genetică din celulele creierului? Este o memorie nevolatilă (care nu se pierde/şterge)?

• Un algoritm este descrierea exactă a rezolvării unei probleme• O schemă logică (diagramă grafică), este reprezentarea unui algoritm într-o formă grafică.• Un program este un algoritm rescris în limbajul calculatoarelor, asta însem-nând un limbaj de programare.• Un cod sursă este un text creat de programator, care reprezintă un program.• Un cod maşină (cod binar) este un cod sursă tradus într-un anumit limbaj, recunoscut de microcontroller (procesor).• Un compilator este un program, care traduce un cod sursă într-un cod maşină.• Un limbaj de programare superior este un limbaj care conţine cuvinte uti-lizate în mod obişnuit într-o limbă şi poate fi înţeles cu uşurinţă de oamenii obişnuiţi.• Un limbaj de programare inferior este un limbaj ale cărui cuvinte cheie nu pot fi înţelese de oamenii obişnuiţi (limbaj de asamblare).• Cuvintele cheie sunt cuvinte sau abrevieri, folosite în limbajul de programare.• În lume există aproximativ 20 de limbaje de programare. • Orice limbaj de programare are propriul vocabular de cuvinte cheie (de obicei maximum 100 de cuvinte cheie).• Sintaxa limbajului de programare reprezintă regulile de utilizare a cuvintelor cheie şi a altor componente de limbaj într-un program.• IDE este un program utilitar în care un programator scrie şi îşi dezvoltă pro-gramul.• Prin depanare se înţelege procesul de evaluare şi testare.• Cele patru responsabilităţi ale unui programator sunt: să înţeleagă sarcina, să conceapă algoritmul, să creeze un program şi să verifice programul.• Cele patru aspecte ale unui program bine realizat sunt: funcţionalitatea, prezentarea grafică, denumirea sugestivă pentru variabile în funcţie de ro-lul lor, detalii despre codul sursă.• Fiecare limbaj de programare trebuie să cuprindă: o secţiune de comenzi de intrare (cum să scrie ceva într-o variabilă), o secţiune de afişare a comenzilor (cum să afişezi valoarea variabilelor către utilizator), condiţii (decizii care au la bază operaţii logice), cicluri (repetiţii de comenzi)

BINE DE ȘTIUT

StartIntrare Senzor 1Intrare Senzor 2

ComparareDacă Senzor 1 > 10

Mergi StângaDacă nu

Mergi DreaptaComparare

Dacă Senzor 2 < 5Stop

TCCR1A |= (1<<WGM10) | (1<<WGM11) | (1<<COM1A1) |

(1<<COM1B1); TCCR1B |= (1<<WGM12) |

(1<<CS12) ; MOTORPORT = STOPP;

sei(); wdt_reset();

:100000000C942A000C943494BA030C9447000A:100010000C9447000C944700047000C94470044:100020000C9447000C9447000C9400C94470034:100030000C9447000C9447000C9447094470024:100040000C9447000C9447000C9447000C70014:100050000C94471241FBECFE5D8E0DEBFCDD:1000700B107D9F711E0A6E7B1E001C01D929C

ANALIZEAZĂ

Caută asemănări între limbajul de programare şi limba engleză.Ce înseamnă termenul CAD şi ce au în comun CAD, IDE, MS Office, Joom-la…?Care este cea mai mare responsabilitate a programatorului?Care este cel mai important aspect a unui program bun?Credeți că aproape toate limbajele de programare au aceleaşi cuvinte cheie? Dacă da, de ce nu există un limbaj de programare universal?Puteți să găsiți propriul limbaj de programare?Care este cel mai bun IDE pentru a începe să programezi în orice limbaj?Crezi că limbajele de programare pot fi cumpărate prin internet sau sunt gratu-ite? Dar IDE?Fiul îl întreabă pe tatăl său programator: “Tată, de ce soarele răsare la est şi apune la vest?”. Tatăl îi răspunde:” Dacă funcţionează, lasă-l în pace.”

SARCINI

Caută cu ajutorul Internet-ului numele programului utilizat de obicei de pro-gramatorii începători.Mergi la librărie şi află ce limbaj de programare este cel mai popular în acest moment.Explică termenii intrare, ieșire, condiție, ciclu într-o organigramă.

CONCLUZIA I

Tot acest capitol este dedicat programării. Încă nu ştim ce fel de echipament suntem pe cale să programăm. În ansamblu, avem nevoie de un echipament care să poată calcula şi să aibă memorie suficientă în care să se poată introduce un program. Avem două posibilităţi: un tip de procesor (microprocesor) sau un tip de microcontroller.

Care este diferenţa dintre acestea?Ambele au o unitate de procesare centrală (CPU) pentru calcule, o memorie pentru stocarea datelor, porturi de intrări şi ieşiri. Ar însemna că din punct de vedere calitativ sunt identice. Dar din punct de vedere cantitativ sunt diferite. Microcontrolerul este doar o formă de procesor mai mică şi specializată. Mi-croprocesorul este creat să facă aproximativ orice (este folosit în PC) în timp ce microcontroller-ul este creat pentru anumite activităţi ale unor echipamente spe-ciale (ex: roboţi, aspiratoare, echipamente pentru stropit, telefoane mobile…). Avantajele microcontroller-ului sunt: 1. Cost redus 2. Mai puţină muncă şi mai puţin timp pentru însuşirea cunoştinţelor de programare.

Dezavantajele microcontroller-ului sunt: 1. Mai puţine posibilităţi de a-l programa. 2. De obicei, memorie redusă pentru stocarea programului. 3. Viteză mai mică (nu se potriveşte pentru unele aplicaţii).

Limbajul C are 32 de cuvinte cheie IF, CASE, WHILE…

Sunt elemente de bază în crearea softului

NIMIC NU ESTE DIFICIL PENTRU CEI CARE NU ÎNŢELEG. PROGRAMARE

START

INPUT

IF

END

ACTION

ACTION

Exemplu de algoritm.

Schema logică a algoritmului.

Cod sursă C pentru AVR

Exemplu de cod hexazecimal.

CODUL TĂU SURSĂ

COMPILATOR

PROCESOR

if (x>0) rad=10;

001010110111001

ACȚIUNE

ASSEMBLER

FORTRAN

PASCAL

BASIC

C LANGUAGE

C++

C#

PYTHON

JAVA

Exemple de limbaje de programare

Assembler. Assembly language.Limbaj de programare inferior.Soluţie excelentă pentru progra-marea unui robot (dar nu pentru un începător).

ADD AX,CX;MOV 10, AX;

MUL CX;MOV s1, 256;

IDE - Integrated Development Environment (Mediu integrat de

dezvoltare). Ajută la crearea şi dezvoltarea programului.

POT SĂ FAC LUMEA UN LOC MAI BUN … DAR

OFERĂ-MI UN COD SURSĂ!

Page 29: Ht Barro

Cum se construiește un robot Cum se construiește un robot52 53Programming ProgrammingProgramare ProgrammingProgramare

GÂNDIȚI-VĂ

Imaginează-ţi că sarcina ta este de a construi un robot care foloseşte camera video pentru a se ghida. Este aceasta o decizie bună? Încearcă să te gândeşti la culegerea datelor în timp real şi la frecvenţa microprocesorului şi microcon-troller-ului.De ce nu folosim orice limbaj de programare orientat pe obiecte?Cât de multe cuvinte cheie (aproximativ) pot fi stocate în memoria de 32 kB?

PCB. Printed Circuit Board. Este placa de bază a circuitelor electronice. Sunt conectate prin intermediul PCB-ului.

Motivul pentru care am ales microcontroller-ul este unul logic – de a învăţa pas cu pas. Mai întâi învăţăm să programăm echipamentul cel mai uşor de pro-gramat şi apoi învăţăm să-l programăm pe cel mai dificil.Alegerea este, de asemenea, mai bună ca urmare a lucrului direct cu intrările şi ieşirile microcontroller-ului.

Acum trebuie să decidem ce tip de microcontroller trebuie să folosim.Microcontroller-ul nostru trebuie:1. să aibă o capacitate de memorie cât mai mare2. să fie mai rapid3. să aibă cât mai multe intrări/ieşiri

Prima cerinţă se referă la mărimea codului nostru sursă. Este inutilă crearea unui program mai mare, deoarece este imposibil să-l inscripţionăm în memoria microcontroller-ului. A doua cerinţă se referă la frecvenţa de lucru a microcontroller-ului. Vom fo-losi un senzor pentru a detecta linia traseului măsurând distanţa de 10 ori pe secundă. Problema care apare este că devine foarte lent.De asemenea se referă la mărimea regiştrilor. Este bine să fie cât de mare posibil (astăzi cele mai bune microcontrollere au probabil 64 de biţi), dar pentru robotul nostru avem nevoie de regiştri pe 8 biţi.A treia cerinţă se referă la numărul de senzori sau dispozitive de ieşire, care pot fi conectate la microcontroller. Cu cât sunt mai multe, cu atât mai bine.

Analizând toate acestea putem afirma că configuraţia de care avem nevoie este: de 32kB memorie, 8 MHz frecvenţa de lucru, 32 de pini pentru dispozitive.Pe piaţă există doi mari producători de microcontrollere ai căror parametri sunt asemănători cu cei de mai sus. Primul producător este compania Micro-chip ce comercializează marca PIC iar celălalt este compania ATMEL care comercializează marca AVR. Motivul pentru care am ales firma ATMEL Corp. este următorul: un suport mai bun pe internet (Avrfreaks.com). Dar nu veţi face o greşeală dacă alegeţi PIC.

Ce tip de microcontroller să alegi?Există două posibilităţi: prima este aceea de a alege un microcontroller lipit pe PCB (SMD) şi a doua variantă este aceea de a alege un microcontroller detaşabil de la PCB (soclu). Însă orice se poate defecta, chiar şi un microcontroller, aşa că vom alege un model detaşabil.Ultima noastră alegere va fi în privinţa tipului de cip Atmel. Potrivit parametrilor definiţi mai devreme, cel mai potrivit tip este ATmega32. Este microcontroller-ul potrivit pentru robotul nostru.

Descrierea generală pentru ATMega32:• Magistrala de date pe 8 biţi (în orice moment poate accesa informaţii pe 8 biţi)• Frecvenţă de lucru de 8 MHz (viteza de lucru)• Arhitectură RISC (cât de multe instrucţiuni poate executa)• Arhitectura Harvard (memoria de date şi memoria program sunt separate)• 32 kB de memorie program (dimensiunea maximă a programului)• 32 de regiştri cu lăţimea de 8 biţi

Această informaţie este descrisă în detaliu în secţiunea ATtmega32.

DECIZIA II

Acum este timpul să luăm cea de a doua decizie a acestui capitol. Scopul nostru este de a alege un limbaj de programare pentru robotul nostru.Opţiunile noastre sunt:

1. Să scriem programul într-un cod binar. Dacă alegi această posibilitate, proba-bil eşti un prieten apropiat al d-lui Gates (proprietarul Microsoft) sau al d-lui Page (proprietarul Google) sau al d-lui Torvalds (cel care a creat Linux) sau al altor 100 de oameni din lume. Nu, această opţiune nu este pentru noi în acest moment, având în vedere cunoştinţele noastre. Poate în viitor.

2. Să scriem programul într-un Limbaj de programare inferior – limbaj de asamblare. Această alegere este excelentă pentru cei, care, cu adevărat, vor să îşi conecteze vieţile la programarea microcontrollerelor. Această alegere iţi va da libertate în programare. Programul tău va fi universal, rapid şi vei avea control asupra lui. Dar nu este uşor să înveţi limbajul de asamblare. Aces-ta presupune cunoştinţe de programare, care nu pot fi însuşite într-o singură lună. Alege acest limbaj când realizezi că limbajul de programare superior nu iţi îndeplineşte cerinţele.

3. Să scriem programul în Limbaj de programare superior. Este uşor de învăţat, pentru că cuvintele cheie sunt uşor de înţeles şi o lună poate fi suficientă pentru însuşirea noţiunilor de bază. Considerăm această opţiune cea mai bună alegere.

Acum, întrebarea este ce tip de limbaj de programare superior să folosim?Pascal sau Visual Basic, sau C, sau C++, sau C# , sau altul? Un limbaj proce-dural sau un limbaj orientat pe obiecte?

Cel mai bun algoritm pentru a opta pentru un limbaj de programare este:Tipul de microcontroller ales. În capitolul anterior am motivat alegerea micro-controller-ului Atmega32. Producătorul recomandă programarea în Assembler sau C (posibil orientat pe obiecte, C ++) şi oferă suport complet prin interme-diul IDE pentru limbajul de programare C prin AVR Studio. Acest IDE se poate descărca gratuit de pe internet. Vom urma această recomandare şi vom utiliza limbajul C.

OOP. Object Oriented Program-ming. Varianta de programare aleasă. Limbaje de programare orientate pe obiecte: C++, C#, etc.

Familia ATMEL AVR

Alți producători de microcon-trollere:

Intel, Advanced Micro Devices (AMD), Analog Devices, Texas

Instruments, Motorola, IBM...

SARCINI

1. Găsiţi exemple din viaţa de zi cu zi pentru a explica de ce mărimea regiştrilor influenţează viteza microcontrolerului.2. Ce tip de memorie poate fi utilizată pentru stocarea programului? Memorie volatilă sau nevolatilă?3. Ce limbaj este cel mai probabil utilizat pentru programarea în sistemul de operare Linux?

Microcontroller ATmega32L.

BASCOM. Este un limbaj de pro-gramare folosit pentru programa-rea microcontroller-elor Micro-chip.

AVR XMEGA

megaAVR

tinyAVR

ATmega8

ATmega64

ATmega32

ATmega16

ATmega128

ATmegaXXX

Capacitate memorie în KB.

Familia ATMEL megaAVR.

C LANGUAGE

Care limbaj de pro-gramare?

1

ATMEL

Cine este producătorul?

2

ATmega32

Ce tip este?

3

Decizia este a voastră.

Obiecte cu atribute și metode.

Instanță a obiectului.

Verifică schema simplificată OOP.

Page 30: Ht Barro

Cum se construiește un robot Cum se construiește un robot54 55Programming ProgrammingProgramare ProgrammingProgramare

DESCRIEREA PINILOR ATMEGA32

40

39

38

37

36

35

34

33

32

31

30

29

28

27

26

25

24

23

22

21

PA0

PA1

PA2

PA3

PA4

PA5

PA6

PA7

PC7

PC6

PC5

PC4

PC3

PC2

PC1

PC0

PD7

PORT

APO

RT C

PORT

DPO

RT B

PB0

PB1

PB2

PB3

PB4

PB5

PB6

PB7

PD0

PD1

PD2

PD3

PD4

PD5

PD6

ATMEGA32 pinii 1 - 20

ADC0

ADC1

ADC2

ADC3

ADC4

ADC5

ADC6

ADC7

AREF

GND

AVCC

TOSC2

TOSC1

TDI

TDO

TMS

TCK

SDA

SCL

OC2

PA0 înseamnă pinul (bitul) 0 al Portului A. ADC0 înseamnă Convertor din Analog în Digital (Analog to Digital Converter), a cărui valoare analogică este conectată la pinul Portului A (bit) 0.

8 pini ai portului A au două posibilităţi de utilizare.

• Intrările analogice pentru ADC. Aceasta înseamnă, că pe aceşti pini poţi conecta maximum 8 senzori analogici ( sau orice dispozitive a căror ieşire este o valoare analogică cuprinsă între 0V şi 5V). Aceste valori sunt transformate în valori digitale (în format zecimal, de la 0 la 255) şi poţi lucra cu acestea în programul tău. Pentru ADC poţi folosi în mod exclusiv PORT A.

• În cazul în care nu utilizezi aceşti pini ai portului A pentru a lucra cu valori analogice pentru ADC, poţi folosi acest port la fel ca pe celelalte porturi bidirecţionale de intrare sau ieşire pe 8 biţi. Rezultă că îi poţi folosi pentru a scrie sau citi valori logice în/din regiştrii acestui port. Toţi pinii pot folosi rezistoare interne pull-up. Dacă aceştia sunt utilizaţi ca intrări, ei pot fi conectaţi la rezistenţe externe pull-down.

Toţi pinii portului A sunt independenţi şi pot fi folosiţi pentru orice situaţie prezentată mai sus.

XCK/T0

T1

INT2/AIN0

OC0/AIN1

SS

MOSI

MISO

SCK

RESET

VCC

GND

XTAL2

XTAL1

RXD

TXD

INT0

INT1

OC1B

OC1A

ICP

+-ul tensiunii de alimentare. Tensiunea de alimentare este de la 4V la 5.5 V. Tensiunea maximă este de 6 V. În orice caz,

5 V este cea mai bună valoare.

Pinul GND reprezintă masa sau polul ”-” al tensiunii.

ATMEGA32 pinii 21 - 40

PB0

înse

amnă

pin

(bit)

0 a

l por

tulu

i B. 8

pin

i ai p

ortu

lui B

pot

fi fo

losi

ţi ca

pi

ni b

idire

cţio

nali

de ie

şire

sau

intra

re. A

sta

înse

amnă

poţi

să-i

folo

seşt

i pe

ntru

scr

iere

a sa

u ci

tirea

de

valo

ri lo

gice

în r

egis

trul c

ores

punz

ător

por

-tu

lui.

Toţi

pini

i pot

fol

osi r

ezis

tenţ

e in

tern

e pu

ll-up

. Dac

ă su

nt f

olos

iţi c

a in

trări,

ei p

ot fi

con

ecta

ţi ex

tern

la re

zist

enţe

pul

l-dow

n.

Pinii pentru programarea ISP (In System Program-ming). Aceşti pini sunt utilizaţi pentru scrierea

memoriei FLASH unde este stocat programul nostru. Fluxul de date trece prin MOSI (I = intrare) către μC (scriere date în μC). Funcţia opusă o are MISO (O =

ieşire), fluxul de date vine de la μC (ex: verificarea programului). Fluxul de date este fluxul serial de biţi

transmişi separat (0110110..). SCK= semnal de tact, care determină viteza de transmitere

a datelor. La fiecare tact se transmite un bit.

Portul INT2 este utilizat pentru cereri de întreruperi externe. Poţi să conectezi la aceasta, de exemplu

un buton, cu care se va executa un anumit cod din programul tău.

Pinul T1 este sursa pentru ceasul Timer/Counter 1.

Pinul T0 este sursa pentru ceasul Timer/Counter 0.

Ieşirea OC0 serveşte ca flag(semn) când Timer/Coun-ter 0 atinge o valoarea cerută. Serveşte de asemenea ca ieşire pentru semnalul PWM furnizat motorului.

Acest pin este utilizat pentru funcţia RESET a microcontroller-ului. Pentru a reseta, valoarea “0” logic trebuie conectată cel putin 1.5

μs. Resetarea determină restartarea programului şi şterge conţinutul tuturor regiştrilor.

XTAL2 şi XTAL1 sunt pinii pentru conectarea os-cilatorului de cristal piezo extern. Frecvenţa de lucru uzuală este de 8 MHz. Nu e nevoie să îl utilizezi, dar poate creşte rapid viteza microcontroller-ului (oscila-torul intern are frecvenţa de lucru de doar 1 MHz) şi

stabilizează activitatea.

GND27p

27p

8 MHz

RXD (R înseamnă Receptie) şi TXD (T înseamnă Transmisie) sunt utilizate pentru comunicație (USART) între microcontroller şi alte dispozitive, de exemplu alt μC sau PC prin portul serial RS232. Se lucrează cu un flux serial de date cu tact definit (nu este necesar al

treilea fir cu semnal de tact ca în programarea memoriilor FLASH). Circuitul MAX 232 este puntea de legătura cu alte dispozitive PCB.

Pin-ul INT0 serveşte pentru cereri de întrerupere externe. Poţi conecta acolo, de exemplu, un buton la a cărui apăsare să se

execute o secvență de cod din programul tău.Pin-ul INT2 serveşte pentru cereri de întrerupere externe.

Poţi conecta acolo, de exemplu, un buton la a cărui apăsare să se execute o secvență de cod din programul tău.

Ieşirea OC1B serveşte ca indicator (flag), când valoarea din Timer/Counter1 atinge o valoare dorită (cei 8 biţi mai semnificativi). Mai

este folosit pentru a genera semnalul PWM pentru motor.

Ieşirea OC1A serveşte ca indicator (flag), când valoarea din Timer/Counter1 atinge o valoare dorită (cei 8 biţi mai puţin semnificativi).

Mai este folosit pentru a genera semnalul PWM pentru motor.

AREF este o tensiune de referinţă pentru ADC. Aceasta poate fi setată la AVCC(de obicei 5V), intern la 2.56V sau orice valoare externă. Dacă senzorul tău generează valori analogice de la 0V la 2.56V(nu mai mult), foloseşte AREF 2.56V. Măsurarea va fi mult mai precisă. Dacă senzorul generează 0-4.5V, foloseşte AVCC(5V).Pinul GND este masa sau polul negativ pentru tensiunea de alimentare.

AVCC este tensiunea de alimentare pentru ADC. De obicei, pinul este conectat la VCC (plusul tensiunii de alimentare).

Pinii TDI, TDO,TMS şi TCK sunt folosiţi pentru programare via JTAG.JTAG este un mod important de programare deoarece poţi realiza tot ce doreşti. JTAG permite şi depanarea. Modul nostru de programare ISP nu permite depanarea dar este o cale mai uşoară pentru începători.

OC2 serveşte ca indicator atunci când valoarea din Timer/Counter2 se potriveşte cu valoarea cerută. Mai poate fi folosit pentru a genera semnal PWM pentru comanda unui motor.

ATm

ega3

2Anumite funcţii ale pini-lor nu constituie subiectul nostru de interes.

Nu vă îngrijorați dacă nu înțelegeți anumite cuvinte sau expresii. Totul este ex-plicat în detaliu în paginile următoare.

DESCRIEREA PINILOR ATMEGA32

1

20

40

21

ATm

ega3

2

Anumite funcţii ale pini-lor nu constituie subiectul nostru de interes.

Nu vă îngrijorați dacă nu înțelegeți anumite cuvinte sau expresii. Totul este ex-plicat în detaliu în paginile următoare.

1

20

40

21

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

Page 31: Ht Barro

Cum se construiește un robot Cum se construiește un robot56 57Programming ProgrammingProgramare ProgrammingProgramare

MIPS. Milioane de Instrucţiuni executate Pe Secundă. Este o descriere curentă a vitezei procesorului. În trecut viteza era afişată în MHz (GHz). Dar 1 MHz nu reprezintă 1 milion de instrucţiuni pe secundă, pentru că o instrucţiune poate fi executată pe mai multe tacte. MIPS este o descriere mai relevantă.

1MIPS = 1 MHz. Acest lucru este valabil doar pentru arhitectura Harward.

32 kB FLASH (PROGRAM)

1024 B EEPROM (BOOT LOADER)

2 kB RAM (DATA)

8 BIT TIMER / COUNTER

8 BIT TIMER / COUNTER

16 BIT TIMER / COUNTER

CANAL PWM

ADC 6 CO

MPA

RAT

OR

AN

ALO

G

32 PINI INTRARE/IEȘIRE (4 PORTURI)

PORT A

CANAL PWM

CANAL PWM

CANAL PWM

MEMORIE INTERNĂ PROGRAMABILĂ

TIMERE / NUMĂRĂTOARE

GENERATOARE PWM

ADC 4

ADC 2

ADC 0

ADC 7

ADC 5

ADC 3

ADC 1

CONVERTOR ANALOGIC DIGITAL

VALO

RIL

E D

E R

EFEI

NȚĂ

C

OM

PAR

ATO

R

PORT B

PORT C

PORT D

ATMEGA32MODULE UTILE

RISC (Reduced Instruction Set Computer). Computer cu set redus de instrucţiuni. Acest tip de calcu-lator poate să execute doar o parte

din toate instrucţiunile posibile. Sau, din setul de instrucţiuni, cele mai complicate au fost înlăturate.

În mod paradoxal, performanţa calculatorului creşte. De ce? Cal-culele complicate sunt rezolvate

cu instrucţiuni simple (ex. 3). Este mai rapid, decât rezolvarea

doar printr-o singură instrucţiune complicată. Atmega32 are 130 de

instrucţiuni.

CISC. Computer cu set complex de instrucțiuni. Acest calcula-

tor este capabil să execute toate instrucţiunile posibile. Unele

dintre ele nu sunt folosite, fiind inutile.

Instrucţiune. Modul de a face ceva. Nu este un cuvânt cheie.

Dar se pot observa instrucţiunile din spatele cuvântului cheie.

Poate fi de exemplu add, move. Instrucţiune înseamnă comandă

(ce anume să facă cu datele).

Programarea paralelă. E o mo-dalitate mai dificilă de programare

a microcontroller-ului, dar care permite programarea oricărui tip şi

conţinut al memoriei AVR.

Depanarea este un proces prin care se caută erorile programului. Este o soluţie software, care per-mite de exemplu executarea pas cu pas a instrucţiunilor, oprirea programului în timpul oricărei instrucţiuni şi odată oprit, pro-

gramul poate să evalueze valorile variabilelor.

MODULE ATMEGA32

GÂNDIȚI-VĂ

Ce tip de arhitectură preferi: RISC sau CISC?Imaginați-vă că sunteți o furnică. Încearcați să vă gândiți la setul propriu de instrucţiuni.Cât este curentul consumat de microcontroller, când toate porturile sunt con-figurate ca ieşiri iar LED-urile sunt conectate la acestea?MIPS şi frecvenţa de lucru. Sunt aceşti termeni comparabili?

SARCINI

Tipurile de microcontroller Von Neumman şi Harvard. Încearcă să găseşti diferenţe între cele două (utilizând documentaţia de la bibliotecă).Câte numere de 8 biţi pot fi stocate pe un EEPROM al ATMEGA32?Câţi biţi are 1 Byte? (nu este o glumă)Crezi că un kilometru are 1024 metri?Locuieşti într-un bloc cu apartamente? Ce buton apeşi când vrei să ajungi la etajul 4? Numărul 3 cumva?

Arhitectura Harward. Instrucţiunile (programul) şi

datele sunt în memorii separate. Aceste memorii sunt accesibile

simultan. Aceasta înseamnă că pe un tact se poate executa o singură

instrucţiune. Arhitectura Von Neumann.

Programul şi datele sunt în aceeaşi memorie. Aceasta înseamnă că

pentru execuţia unei singure instrucţiuni sunt necesare cel puţin

două tacturi. Primul, în care se precizează ce se face, în al doilea

cu ce se face.Comparaţie. Microcontroller-ele

cu arhitectură Harward sunt mai rapide decât cele cu arhitectură

Von Neumann.

ATmega32

ATmega32L

Ucc 4.5 - 5.5 VFrecvență 16 MHz

Ucc 2.7 - 5.5 VFrecvență 8 MHz

Diferenţa între Atmega 32 şi Atmega32L. Folosim Atme-ga32L, dar practic nu există nici o diferenţă.

SMD. Dispozitiv montat pe suprafaţa. Cablajul nu are găuri. Circuitul este montat direct pe suprafaţa PCB.

Administrarea bateriei. Economiseşte bateria ori de câte ori este posibil. Caută posibilităţi de a scădea consumul.

ATM

EG

A32

Forma pătrată a ATMega 32 pentru montarea SMD (40 pini).

PROBLEME POSIBILE

Programatorul AVR ISP mkll se găseşte sub două forme:1. Conector cu 6 pini2. Conector cu 10 pini.Când cumperi un programator, alege versiunea cu conector cu 6 pini, dacă placa ta de bază suportă un astfel de conector. În cazul în care programatorul tău are conectorul cu 10 pini, eşti forţat să faci o adaptare. Schema pentru reconectarea pinilor este în dreapta.

O MICĂ PAUZĂ

Programatorul fumează o ţigară. Prietena lui ţine un pachet de ţigări şi spune: “Atenţie: Fumatul dăunează grav sănătăţii”Ea îi arată mesajul programatorului fumător.“Dragă, eu sunt interesat de erori nu de atenţionări.”

CERINŢEGata cu teoria, să începem programarea.Scopul nostru este acela de a scrie un program în limbajul C cu ajutorul Atmel IDE numit AVR Studio, de a-l compila cu ajutorul unui program numit AVR GCC şi de a-l încărca cu ajutorul programatorului ISP numit AVR ISP mkII.

Trebuie să rezolvăm câteva lucruri de bază:

1. Descărcarea unui IDE pentru programare. AVR Studio se descarcă şi se foloseşte gratuit. (www.atmel.com). Descarcă un fişier executabil şi salvează-l într-un director, unde de obicei îţi salvezi fişierele de instalare (director special, de exemplu Install). Descarcă cea mai nouă versiune AVR Studio de 8 biţi AVR pentru Windows (sau alt sistem de operare pe care îl utilizezi). Astăzi, ultima versiune este 4.18. Dacă vrei să descarci documentaţia, descarcă, dar nu este necesar. Oricum, caută ultima versiune sau pachetele de servicii AVR Studio din când în când.

2. Descărcarea unui compilator. Descarcă programul WinAVR (www.source-forge.com). Este un compilator pentru limbajul C, recunoscut de AVR. Salvează-l în directorul cu fişierele de instalare descărcate.

3. Instalarea AVR Studio (şi a pachetelor de servicii). Nu este o problemă.

4. Instalarea Win AVR (fără nici o problemă).

5. Instalarea software-ului pentru programator. Urmează instrucţiunile de pe ghidul CD-ului acestuia.

6. Conectează PCB (microcontrolerul este în soclul său) cu conectorul progra-matorului. Conectează al doilea cablu al programatorului în oricare dintre por-turile USB ale calculatorului tău.

Acum eşti pregătit să scrii primul tău program, să îl compilezi şi să îl instalezi în microcontroller.

MISOSCK

RESET

MOSINC

RESETSCK

MISO

UccMOSIGND

UccGNDGNDGNDGND

1 2

1 2

Două variante de conectori ISP.

Pot exista mai multe avertismente în programul tău. Compilatorul merge bine. Erorile din program determină compilatorul să nu traducă codul sursă.

Page 32: Ht Barro

Cum se construiește un robot Cum se construiește un robot58 59Programming ProgrammingProgramare ProgrammingProgramare

AVR GCC este un compilator şi un modul de detectare a erorilor.

Compilează programe scrise în C sau orientate pe obiecte C++, în cod hexazecimal, folosit apoi de

AVR.

AVR STUDIO

Următoarea imagine a fost surprinsă în timpul instalării AVR Studio pe un cal-culator cu sistem de operare Windows Vista. Pe un alt sistem de operare proce-sul poate fi puţin diferit.

AVRStudio417Setup.exe

WinAVR-20090313-Install.exe

Instalare

Instalare Maș

ină

Loc

ală

Rulare AVR Studio

Recomandăm acest sistem de programare:Creați câte un director special pentru fiecare funcţionalitate. De exemplu di-rectorul PWM, directorul ADC, directorul LCD etc. Vor fi părţi independente pentru soluţia finală atunci când le veți uni.Ideea de a plasa tot codul sursă într-un singur program de la început nu este o soluţie bună, pentru că, cel mai probabil, veți pierde viziunea de ansamblu a codului. Structura directorului dumneavoastră (şi a subdirectoarelor) ar putea să arate ca în imaginea următoare.Bineînţeles, eşti liber să îţi creezi propriul tău sistem (logic şi uşor de adminis-trat).

Cel mai important fişier este “main.c”. Este codul dumneavoastră sursă scris în limbajul C.Cel de-al doilea fişier important este “main.hex” din directorul “Default”. În acest director, se află codul hexazecimal, care a fost compilat din codul sursă. Acest cod este inscripţionat în microcontroller.

Codul tău sursă

Directoarele Adc, Lcd, Motor... aici se află aşa numitele fişiere antet (head-er files). Fişierul antet este un cod sursă, care poate fi o parte din programul dumneavoastră main.c. Dar ca să nu fie un fişier main.c mare, puteţi lua câteva părţi din el, să le plasați în alt director şi să creați un link către ele de la codul sursă.

varianta 1main.c

varianta 2main.c some.h

Recomandăm să folosiți a doua variantă cu fişiere antet. Codul este divizat în părţi mai mici care sunt mai bine administrate. Codul hexazecimal rezultat este acelaşi în ambele variante.

Urho Kekkonen

Hans Christian Andersen

Stefan Procopiu

Jean Sibelius

Lego

Johan Volfgang Goethe

Josef Murgas

Ludovit Stur

Hamlet

Paavo Nurmi

Viking

Nadia Comaneci

Niels Bohr

Alvar Aalto

Janosik

Dracula

Linus Torvalds

Ludwig van Beethoven

Ondrej Nepela

Michael Schumacher

Gruntvig

Dadaismus

Potriviți numele cu ţara de provenienţă.

Page 33: Ht Barro

Cum se construiește un robot Cum se construiește un robot60 61Programming ProgrammingProgramare ProgrammingProgramare

main

Buton creare director nou RokeyADC

Selectarea limbajului C

Locația - Rokey ADC

Click Next

Selectare microcontroller

Click Finish

Bună alegere

Acum este timpul să scrieți primul program, să-l compilați şi să-l încărcați în microcontroller.Pentru a face toate acestea, scrieți codul din imaginea de mai jos în fişierul main.c. Apoi click pe Build-Rebuild All. Fişierele antet sunt încă goale dar tre-buie să vă obişnuiți să compilați codul cu ajutorul acestui buton.

În partea de jos a ecranului sunt afişate mesaje ca în imaginea de mai jos. Atenţionările sunt permise pentru că ele nu au nici o influenţă asupra compilării. Bineînţeles este de preferat să nu le avem.Erorile nu sunt permise, ele oprind compilarea. IDE vă arată unde este eroarea (numărul rândului precum şi cauza).

Acest mesaj este important

Memorie Flash folosită

Memorie EEPROM folosită

Acum puteţi vedea codul hexazecimal al codului sursă compilat în directorul Default. Codul trebuie inscripţionat în memoria Flash a microcontroller-ului. Pentru a face asta, click Tools – Program AVR – Connect...(sau icoana ”con”

).Pentru a continua, trebuie să vă conectați programatorul la PCB-ul microcontroller-ului şi la portul USB al computerului dumneavoastră.În următoarea imagine este prezentat un programator AVR ISP mkll. Bineînţeles, puteți să folosiți oricare programator (utilizarea acestuia este condiţionată de PCB-ul microcontrolerului).

Tipul programatorului

Port conectare PC

Click Connect

EEPROM. Electrically Eras-able Programmable Read-Only Memory).

După ce ați dat click pe butonul Connect, programatorul poate să comunice cu microcontroller-ul şi cu computerul (dacă funcţionează bine). Acum dați click pe Tools-Program AVR-Write Flash (sau iconiţa AVR). Sunt afişate următoarele imagini:

AVR ISP mkll este un programator care poate fi folosit în progra-marea AVR. Poţi folosi oricare alt programator dar preferabil este să foloseşti programatoare AVR-ISP.

Acest programator ISP a fost folosit de parteneri la începutul proiectului. Unii dintre parteneri au cumpărat şi alte tipuri de pro-gramator ISP.

Partenerul slovac a folosit tipul de programator - AVR ISP mkII.

Page 34: Ht Barro

Cum se construiește un robot Cum se construiește un robot62 63Programming ProgrammingProgramare ProgrammingProgramare

Ștergerea memoriei Flash După programare se va face o verificare a informațiilor scrise în memoria Flash

Demarcați dacă vă grabiți

Întotdeauna trebuie să fie marcată.

Citirea codului din memoria Flash, pe calculator

Verificare cod de pe mi-crocontroller

Click pentru a începe pro-gramarea memoriei Flash

Această secțiune nu a fost folosită

OK semnifică buna funcționare.

Conţinutul memoriei Flash nu se schimbă când deschideți un alt proiect în AVR Studio.Atenţie la textul opţiunii acesteia pentru a nu inscripţiona codul hexazecimal al unui proiect nedorit.

Căutați fișierul HEX dorit

Noul microcontroller ATMEGA32 este pregătit din fabrică pentru programarea ISP. În cazul în care schimbați (intenţionat sau din greşeală) bit-ul numit SPIEN (Serial programming enable - activarea programării seriale) din pagina Fuses în disabled (vezi următoarea imagine), devine imposibil să readuceți valoarea SPIEN-ului la valoarea enabled (activat) prin intermediul AVR Studio. Astfel, microcontroller-ul nu va putea să fie programat prin ISP. Microcontrolerul nu este distrus dar trebuie să-l reprogramați prin JTAG sau prin programator para-lel. Probabil că nu ați procurat încă acest tip de programator. Să nu schimbați setarea SPIEN din pagina Fuses.

ATENȚIE

Programare JTAG. Alt mod de programare AVR.

Programare Paralelă. Alt mod de programare AVR. El nu constituie

un subiect de lucru

Valoarea iniţială (din fabricaţie) a frecvenţei din pagina Fuses este configurată pentru oscilatorul intern 1 MHz. Această valoare nu este acceptabilă pentru noi (vom folosi cristal extern piezo pentru a mări frecvenţa). Bifează opţiunea pen-tru 8 MHz şi apoi click pe Program.

Să repetăm:1. Noul microcontroller are bit-ul SPIEN configurat enabled (activat).2. Să nu experimentezi această setare. O ajustare greşită poate să configureze SPIEN-ul disabled şi μC nu poate fi programat prin ISP.3. SPIEN poate fi configurat enabled doar prin intermediu JTAG sau Parallel.4. Noul microcontroller trebuie să fie configurat pentru utilizarea unui oscilator extern de 8 MHz.

Căsuța trebuie să fie selectată

Selectați această opțiune

Imagine cu meniul Fuses.

Imagine cu pagina Main (în cazul unor probleme).

RECOMANDARE

Această secțiune nu a fost folosită

Page 35: Ht Barro

Cum se construiește un robot Cum se construiește un robot64 65Programming ProgrammingProgramare ProgrammingProgramare

BAZELE LIMBAJULUI C

Cele 4 aspecte ale unui program bun sunt: funcţionalitatea, prezentarea grafică, denumirea sugestivă a variabilelor, comentariile codului sursă. Vă amintiţi? Toate acestea au fost precizate înainte şi ar trebui să respectaţi aceste postulate.

Orice limbaj superior de programare are propria sa structură, sintaxă, propriile cuvinte cheie, şi propria structură de programare. Toate însă, sunt foarte simil-are. Când ştiți să lucrați foarte bine cu unul dintre ele, cu siguranţă nu veți avea probleme cu celelalte.

1. Comentarii

Comentați totul! Acum înțelegeți absolut tot ce tocmai ați scris, într-o lună veți uita multe informații. Comentariile nu sunt compilate şi nu cresc conţinutul co-dului binar.

Sintaxa comentariilor:int i=0; // este nevoie să înceapă un ciclu de la zero pentru că…/*GoGeorgeGo(0,0);DELAY_MS_(100);Cele două rânduri de deasupra şi această frază nu sunt compilate*/

2. Respectarea scrierii cu minuscule

Limbajul C este un limbaj case-sensitive adică ţine cont de mărimea literei. Cuvântul cheie for este OK, pe de altă parte FOR înseamnă eroare (nu este recu-noscut ca instrucţiune de compilator). Cel mai bine este să scrieți programul cu litere mici şi astfel nu veți face confuzii. În cazul variabilelor şi al procedurilor este mai bine să folosiți modalitatea numită camel casing: GoGeorgeGo(10), GoGeorgeStop(10), NumberOfSensors...Când definiți o variabilă NumberOfSensors, folosind Numberofsensors undeva în codul dumneavoastră veţi obţine o eroare.

3. Structura programului în limbajul C

a) Încărcarea bibliotecilorb) Încărcarea fişierelor de antetc) Declararea variabilelor(constantelor)d) int main(void) {e) condiţii, cicluri, calcule, operaţii cu biţi, ... adică părţi ale programuluif) }

a) Încărcarea bibliotecilor înseamnă adăugarea bibliotecilor în program. Nu este recomandat să se încarce o bibliotecă dacă nu este nevoie de ea în pro-gram, iar dacă foloseşti instrucţiuni dintr-o bibliotecă care nu este încărcată în program, computer-ul va semnala o eroare. Bibliotecile sunt create de autorii limbajului de programare şi tu doar le utilizezi (poate în viitor le vei actualiza sau le vei crea).

Library. DLL. Dynamic Linked Library. Biblioteca este un cod

disponibil care este adăugat (linked) codului tău. O bibliotecă

are mai multe funcţii. Poate fi folosită în mai multe aplicaţii. Este motivul principal pentru

utilizarea DLL - urilor – un singur cod împărţit/utilizat pentru mai multe programe. Bibliotecile au

de obicei extensia .dll (programele pentru Windows) şi .h în limbajul

C.

Sintaxa:#include <stdio.h> //DLL pentru intrări şi ieşiri#include <math.h> //DLL pentru funcţii matematiceReţine că bibliotecile predefinite nu au nevoie de calea către locația lor (cale relativă).

b) Încărcarea fişierelor de antet (header) înseamnă adăugarea codului dumneavoastră sursă. Fişierele header sunt cumva asemănătoare cu bibliotecile, dar nu sunt împărţite cu alte programe (dar puteți face o bibliotecă dintr-un fişier header propriu). Fişierele header (precum şi bibliotecile) au extensia .h. Fişierele header fac pro-gramele uşor de vizualizat. Atenţie însă, nu puneți prea multă informaţie pe o singură pagină!#include <C:\Robot\Motors\motor.h>#include <C:\Robot\Motors\SensorA.h>

c) Declararea variabilelor. Fiecare variabilă folosită trebuie declarată. De-clararea înseamnă definirea numelui şi a tipului de date pentru o anumită variabilă folosită în program. În cele mai multe cazuri vom folosi date de tip întreg (integer).

int Value; //variabilă cu numele Value şi dată de tip întreguint8_t Drive=255; //întreg fără semn, mărime 8 biţi, valoare 0-255char NuOfSe=”X”; //variabilei caracter NuOfSe i se atribuie valoarea X Value=10; //această operaţie este permisă

Prin declarare puteţi atribui o valoare implicită sau o puteţi face ulterior în tim-pul derulării programului.

d) int main(void) este punctul de început al programului. Fiecare program tre-buie să aibă această funcţie. Dar o poţi folosi o singură dată în codul tău sursă. Programul începe derularea cu aceasta.

Sintaxa:int main(void){//locul celor mai importante construcţii ale programului -//instrucţiuni, condiţii, cicluri, calcule, operaţii cu biţi}

e) Condiţii, cicluri, calcule, operaţii cu biţiCondiţiile sunt de fapt decizii. În cazul în care distanţa până la perete este mai mică de 20 cm, întoarceți la stânga. În cazul în care este mai mare de 20cm, mergeți înainte. În construcţia dumneavoastră puteți folosi o condiţie simplă, care împarte derularea programului în două direcţii sau condiţii complexe, care împart programul în mai multe direcţii. Condiţia evaluează tot timpul o expre-sie logică (mai puţin de 20cm? DA – rezultatul expresiei logice este adevărat (true) sau NU – rezultatul este fals (false)).

Sintaxa int i;if (i>0) //expresie logică{

Declararea. Presupune definirea numelui şi tipului de date ale variabilei. Cum să te recunoşti şi cum să ştii cui îi aparţii (eşti un membru al unui grup)? Exemplu: My name is John Doe and I am 16 years old înseamnă că unica ta identificare este numele şi că faci parte dintr-un grup de adolescenţi.

int main(void)int înseamnă valoarea returnată când programul se terminămain este numele funcţieivoid înseamnă gol, adică proce-dura main nu presupune nici o valoare din exterior.

Cu semn (signed). Valoarea poate fi mai mare sau mai mică decât 0.Fără semn (unsigned). Valoarea este mai mare decât 0.

int8_t x; // variabila x poate avea valoare de la -128 to 127uint8_t s; // variabila s poate avea valoare de la 0 to 255

Cale relativă (relative path). În legatură cu locaţia de unde este apelată biblioteca. include motor.h înseamnă că fişierul motor.h este localizat în directorul în care se găseste programul principal include PWM/motor.h înseamnă că fişierul motor.h se află în subdirec-torul PWM, localizat în directorul în care se găseşte programul prin-cipal

Cale absoluă (absolute path). Ca-lea către bibliotecă trebuie descrisă complet. C:\Robot\Motors\motor.h)

Variabilă. Poate memora o valoare. Această valoare poate să se schimbe în timpul executării programului.

Condiție simplă

i

Condiție complexă

i

i<0 i>=0

-100<i<0

0=i<10

11<i<100

Page 36: Ht Barro

Cum se construiește un robot Cum se construiește un robot66 67Programming ProgrammingProgramare ProgrammingProgramare

Cea mai utilă utilizare a instrucţiunii while este infinity looping (bucla infinită). Se repetă totul din bucla while până când unele calcule din buclă duc la rezultatul false al condiţiei de buclare. Scriem un exemplu de utilizare mai complexă a instrucţiunii while, împreună cu if, şi alte comenzi. Atenţie la punerea în pagină!

#include <stdio.h> //DDL pentru I/O#include <C:\Robot\Tools\tools.h> //fişier headerint difference;difference=20; //sau int difference=20int main(void) //începutul unui program{ int i=0; //din aceleaşi motive while(i) { MotorGo(100,100); //robot mers înainte int sensor0=GetADC(0); //măsurăm distanţa de la senzorul 0 if(sensor0<50) // robot aproape de margine { MotorStop(); //se opreşte mişcarea MotorTurnRight(90); //robotul se întoarce către dreapta while(i) { MotorGo(100,100); // deplasare înainte int sensor1=GetADC(1); if (sensor1<30) { DoSomething(); } else if ((sensor1>30)&&(sensor1<40)) { DoSomethingOther(); } else { StopMotor(); } } }}De asemenea există instrucţiunea switch pentru condiţii, care evaluează valo-rile şirurilor, dar poate fi înlocuită de if şi else if şi este mult mai prietenoasă pentru utilizator.

Sintaxa:char letter; //sau tip de date numericswitch (letter){ case A : ActionA(); case B : ActionB(); break; //se termină bucla switch în acest caz case C : ActionC(); default :AnyOtherAction(); } default :AnyOtherAction();}

MotorStop();} MotorTurn(20,90);} //observă aşezarea codului sursă.Divizarea programului în mai multe direcţii este puţin mai dificilă

Sintaxa:int i;if (i=0){ MotorStop(); //opreşte mişcarea}else if (i<0) { MotorTurnLeft(90); //întoarce 90 de grade la stânga } else if (i>0) { MotorTurnRight(90); //întoarce 90 de grade la dreapta }

Conjuncţii şi disjuncţii

Puteţi alătura condiţii logice în modul următor:if ((i=0)&&(j=0))... //returnează true dacă i şi j sunt 0if ((i=0)||(j=0))... // returnează true dacă i sau j sunt 0

Se lasă codul fără paranteze doar dacă în interior este doar o comanda (nu mai multe):if (i>0) MotorStop(); else MotorTurn(20,90);

Bucle de program

Reprezintă o repetare a unor instrucţiuni. Numărul de repetări depinde de va-loarea logică a unei condiţii. Există două posibilităţi principale de a programa:Când ştiți exact numărul de repetiţii, folosiți comanda for.Când nu ştiți exact numărul de repetiţii, trebuie să folosiți comanda while.Sintaxa:int i=0;for (i=0; i<10; i=i+1) //i=i+1 se poate scrie i++{ MotorTurnLeft(90); //întoarce la stânga de 10 ori cu 90 de grade, adică // 900 de grade}Aceeaşi construcţie while:while (i<10){ MotorTurnLeft(90); // întoarce la stânga de 10 ori cu 90 de grade, //adică 900 de grade i++; //creşte unitar i, când i este egal cu 10 ciclul se opreşte}

Mica sirenă, Copenhaga.

Page 37: Ht Barro

Cum se construiește un robot Cum se construiește un robot68 69Programming ProgrammingProgramare ProgrammingProgramare

Imaginează-ți un deget uman. Pe masă se află o ceaşcă fierbinte de ceai. Când o atingi simţi că e fierbinte. Degetul tău iţi serveşte ca intrare (dispozitiv de intrare-citire). Temperatura ceştii este transmisă spre procesare către creierul tău cu ajutorul unui senzor tactil.Împinge această ceaşcă cu degetul. În acest moment degetul tău face o acţiune - mişcă ceaşca pe masă. Serveşte ca o ieșire (comandă venită din interior printr-un dispozitiv de ieşire).Microprocesorul trebuie să procedeze la fel. Trebuie să simtă ce îl înconjoară ca să poată lua decizii în funcţie de aceste condiţii externe – trebuie de aibă intrări.Pe de altă parte trebuie să aibă capacitatea de a controla mediul înconjurător, de obicei prin generarea unor tensiuni. Acestea sunt ieșirile (rezultatele) sale. Degetul uman poate fi în acelaşi timp input şi output. Împingi ceaşca şi simţi temperatura acesteia în acelaşi timp.

REGISTRI

GÂNDIȚI-VĂ

I/O. Input/Output. Întotdeauna cu privire la un obiect.

Intrare înseamnă informație pen-tru obiect.

Ieşire înseamnă informație de la obiect.

Este chiar simultan? Sau degetul este intrare pentru un timp foarte scurt şi apoi devine ieșire? Cât de mult durează aceste intervale? Oare creierul nostru este atât de imperfect?

I/O înseamnă Input/OutputRegistrul este o zonă de memorie, unde datele sunt stocate sub formă binară (0 sau1 ).0 înseamnă logic false şi are valori ale tensiunii continue în intervalul 0V-0.8V.1 înseamnă logic true şi are valori ale tensiunii continue în intervalul 3.5V-5V.Fiecare tensiune între valoarile logică false şi true este o valoare nedefinită şi foarte probabil va cauza resetarea programului.Registrul are propria sa dimensiune. Dimensiunea registrului este definită de un număr de locuri adiacente pentru stocarea biţilor. Fiecare loc poate fi scris cu valori logice 0 sau 1. Fiecare microcontroller are un număr diferit de regiştri şi dimensiunea lor poate varia. Atmega32 are 32 de regiştri şi atributul lor comun este că au dimensiunea de 8 biţi (Atmega32 are regiştri de 8 biţi). Regiştrii, pre-cum şi pinii regiştrilor au nume proprii.În regiştri se stochează date.Mai mulţi regiştri oferă posibilitatea de a lucra cu mai multă informaţie în acelaşi timp. Mai mulţi biţi într-un registru înseamnă acelaşi lucru. Ambele influenţează viteza de lucru a unui robot.

Acum avem o întrebare importantă: care este mecanismul de transfer al datelor de la regiştri şi către regiştri? În ce mod pinii regiştrilor intră în contact cu me-diul înconjurător?

Răspunsul este simplu: cu ajutorul porturilor.Regiştrii sunt foarte importanţi, ei stochează informaţia. Ei trebuie să fie ac-cesibili. Ei sunt accesibili prin “degetele” microcontroller-ului, care se pot ve-

BINE DE ȘTIUT

Intrarea presupune scrierea în regiştri.

Informaţia despre temperatura senzorului este stocată în registru;

la fiecare citire se rescrie peste valoarea precedentă.

Ieşirea reprezintă citirea din registru. Informaţia despre viteza

motoarelor este preluată de la pinii ataşaţi regiştrilor şi se pot controla

motoarele.

PORTURI

dea în jurul microcontrolerului. Aceştia sunt pinii. Pinii sunt împărţiţi în patru părţi numite PORTS (porturi). Fiecare port are 8 pini. Restul pinilor din mi-crocontroller sunt întrebuinţaţi în alt scop (vezi secţiunea cu descrierea pinilor ATMega). Pentru a avea un sistem, porturile sunt denumite astfel:

PORT APORT BPORT CPORT D

Fiecare dintre ele au câte 8 pini şi sunt marcate de la 0 la 7.Porturile sunt conectate la mediul înconjurător. Aceasta înseamnă că PORT A şi PORT B sunt porturi de intrare şi restul de ieşire? Poate la începutul istoriei microcontroller-ului. Acum este ceva mai greu dar foarte logic şi variabil. Un port poate fi şi de ieşire şi de intrare. Depinde de programator. Nu există un port explicit de intrare sau de ieşire. Portul este setat pentru intrare sau ieşire.Mai mult, se poate seta fiecare pin în parte (de intrare sau de ieşire). Aceasta înseamnă că PORT B poate fi setat de exemplu în acest fel: pinii 0, 5 şi 7 să fie intrări şi restul ieşiri.

AVR are 4 porturi (PORT A, PORT B, PORT C, PORT D). Fiecare dintre ei are 8 pini (de la 0 la 7). Pinii servesc la citirea datelor din mediul înconjurător (de exemplu senzori) sau pentru scrierea datelor către mediul înconjurător (de exemplu tensiune pentru motoare). Fiecare port este conectat la trei regiştri. Fiecare dintre cei trei regiştri are 8 biţi (nimic surprinzător). Faptul că numărul ordinal specific de pin al portului este conectat la acelaşi număr ordinal de bit al registrului rămâne întotdeauna valabil. Regiştrii conectaţi la port sunt numiţi DDRx, PORTx, PIN, unde x-ul poate fi înlocuit cu A, B, C sau D. De exemplu DDRC, PORTA, PIND. Următoarea imagine reprezintă regiştrii corespunzători PORT D.

Nu există port de ieşire.Nu există port de intrare.Există port, care poate fi de ieşire şi de intrare.

REGISTRUL DDRx

DDRx verifică dacă portul x va fi de intrare sau ieşire.În cazul în care bitul este setat la valoarea 0, pinul corespunzător portului este setat intrare (citirea valorilor de la senzori).Dacă bitul este setat unei valori logice TRUE pinul corespunzător portului este setat ieşire (generând tensiune pentru orice acţiune).

EXEMPLE

Comanda următoare stabileşte toţi pinii portului D pentru valorile citite, adică pentru intrări.DDRD=0b00000000

OBIECT

IEȘI

RE

INT

RA

RE

7 6 5 4 3 2 1 01 registru = 8 biți

Cel mai sem-nificativ bit

Cel mai nesem-nificativ bit

Al cincilea bit

Fiecare bit poate avea valoare 0 sau 1

Fiecare bit poate avea nume.

Registrul poate avea un nume

Registrul de 16 biţi este alcătuit din 2 regiştri de 8 biţi. De exem-

plu registrul ADC este alcătuit din ADCH (H însemnând HIGH

-superior) şi ADCL (L însemnând regiştri LOW).

ADCH ADCL

ATm

ega3

2

1

20

40

21

Port APort B

Port CPort D

Locaţia porturilor pentru AT-MEGA32. Observă că un pin al portului D este alături de portul C.

7 6 5 4 3 2 1 0

8 7 6 5 4 3 2 1

Ordinea pinilor - corect

Ordinea pinilor - incorect

7 6 5 4 3 2 1 0

Anumiţi pini sunt definiţi de pro-gram pentru ieşiri, restul pentru intrări.

PORT D

DDRD

PORTD

PIND

Pentru setarea direcției (I sau O)

Pentru stabilirea valorilor de ieșire

Pentru a citi datele de intrare

Page 38: Ht Barro

Cum se construiește un robot Cum se construiește un robot70 71Programming ProgrammingProgramare ProgrammingProgramare

ÎNTREBĂRI ȘI RĂSPUNSURI

Întrebare: Este necesar să prescrieți pinii oricărui port pentru citire (intrări)?Răspuns: Nu, toţi pinii sunt stabiliţi implicit pentru citire.I: Când stabiliți toţi pinii porturilor drept ieşiri, pot genera ei doar valori logice?R: Da, pot. Aceste valori logice pot fi modificate cu o frecvenţă foarte mare şi

prin schimbarea duratei ciclului, valoarea tensiunii poate varia de la 0 la 5 V.I: Când portul este prescris ca intrare, pot aceşti pini să lucreze doar cu valori

logice?R: Nu, puteți conecta orice tensiune de la 0 la 5 V la pin şi să lucrați cu această

valoare. I: Câţi volţi sunt la pinii microcontroller-ului care sunt setaţi ca ieşire?R: În cazul valorii logice “0”, maximum sunt 0.6V. În cazul valorii logice “1”,

minimum sunt 4V.I: Care este valoarea corectă a rezistorului pull-up?R: De la 20kΩ la 100kΩ, sau foloseşte rezistorul pull-up intern.

GANDIȚI-VĂ

SARCINI

Imaginaţi-vă că trebuie să detectați semnale de la 20 de senzori şi să controlați 20 unităţi de stocare. Ați putea să folosiți ATMega32?Încearcați să desenați o schemă simplă pentru utilizarea rezistorului pull-up pentru ieşire!

1. Scrieți codul sursă pentru programul care va aprinde LED-urile de pe primul şi ultimul pin al portului D.2. Scrieți un alt program care va pune în funcţie un motor pe pinul 3 al portului C.

Răspunsuri la ghicitori despre codificatoare:1. Codificatorul generează im-pulsuri, dar robotul nu se mişcă. De ce?Se află pe gheaţă.

2. V-ați împărţit codificatorul rota-tiv în 360 de grade. Se pare că este bine. Dar nu sunteți în măsură să-l opriți în locuri definite. De ce?Diametrul este prea mare.

3. Comportamentul robotului era excelent când l-ai testat aseară acasă. Dar când ați vrut să-l prezinţi dimineaţă la şcoală nu ai avut succes. De ce?Răsăritul soarelui influenţează comportamentul.

4. Când folosiți codificatoare în robot, câteodată microcontroller-ul se resetează. Când nu sunt folosite totul este ok. De ce?Codificatorul are nevoie de mai multe calcule din partea microcon-troller-ului.

5. “Robotul meu are codificator optic rotativ absolut cu o pereche emiţător /detector”. Ar putea fi adevărată propoziţia? Da, piesele negre ale codifica-torului sunt în nuanţe de negru. Alb este aproximativ la 0 grade, negru la 360. Dar detectorul de lumină trebuie să poată detecta nuanţe de gri şi programul să le utilizeze.

DDRA=0b00001111 setează cei 4 pini din stânga portului A pentru citire şi 4 pini din dreapta portului A pentru scrierea valorilor, adică pentru ieşiri. Registrul PINx stochează datele, care sunt scrise cu ajutorul portului x. Bineînţeles, pi-nii portului x trebuiesc setaţi pentru citire cu ajutorul registrului de citire PORTx. Nu este posibil să-l folosiți pentru trimiterea de date către port. În cazul în care portul este stabilit pentru ieşire, biţii registrului PINx urmează datele, care sunt trimise pinilor din port.

REGISTRUL PINx

PIN.Port IN.

REGISTRUL PORTx

Registrul PORTx conţine informaţii, care sunt trimise la pinii portului pentru a controla mediul înconjurător. Aceasta înseamnă că pinii portului urmăresc biţii registrului PORTx. Bineînţeles pinii portului trebuie să fie setaţi pentru ieşire.

EXEMPLE

DDRA=0b00000000//În primul rând pinii portului A sunt stabiliţi pentru citirea valorilor (intrare)//Setează pinii al şaptelea şi al optulea ai portului A pe “1” logic (5Volti)//Alocă această valoare variabilei iint i = PINA//Variabila i va conţine reprezentarea zecimală a valorii binare 0b00000011

EXEMPLE

DDRA=0b11111111//În prima linie pinii portului A sunt stabiliţi pentru scrierea valorilor (ieşire)//Conectează fiecare pin al portului A la anodul unor LED–uri şi // catozii lor la masă.PORTA=0b11111111//LED –urile vor lumina.

În exemplul precedent este o greşeală în ceea ce priveşte LED-ul. Pinii micro-controller-ului pot fi încărcaţi cu un curent maxim de 40 mA. În cazul unui LED cu consum redus nu este o problemă. Dar în cazul necesităţii unui consum mai mare (exemplu motor direct sau servo), acest curent ar fi foarte probabil peste 40 mA şi portul poate fi distrus.

Cum să rezolvi această problemă?Există o idee electronică bună pentru alimentarea acestor tipuri de dispozitive (motor, servo) – aşa numitele rezistoare de ridicare (pull up).Dispozitivul este alimentat din sursa plăcii de bază, nu din pinul portului.

REZISTOARE PULL-UP

PAUZĂ

Codul Morse:Mai jos este numele de familie al unui faimos filozof şi profesor danez (el a influenţat considerabil sistemul educaţional în Europa) scris în codul morse.--. .-. ..- -. - ...- .. --.

Page 39: Ht Barro

Cum se construiește un robot Cum se construiește un robot72 73Programming ProgrammingProgramare ProgrammingProgramare

OPERAȚII CU BIȚI

Limbajul C nu este performant în setarea biţilor regiştrilor. Dar lucrul cu biţii regiştrilor este extrem de important. De ce? Pentru că programarea unui mi-crocontroller înseamnă să scrii şi să citeşti în/din biţii regiştrilor.

Valoarea în registru (sau în variabile) poate fi scrisă în trei moduri:zecimal: DDRB=146hexazecimal: DDRB=0xA2binar: DDRB=0b10010010

Cum să prescrii al treilea şi al şaptelea bit din PORTA la 1(HIGH)?PORTA = (1<<PA2) | (1<<PA6); //restul biţilor sunt stabiliţi LOWPORTA | = (1<<PA2) | (1<<PA6); //restul biţilor au starea anterioară

Cum să prescrii al treilea şi al şaptelea bit din DDRA la 0(LOW)?DDRA = ~ ((1<<PA2) | (1<<PA6)); // restul biţilor sunt stabiliţi HIGHDDRA & = ~ (1<<PA2) | (1<<PA6); // restul biţilor au starea anterioară

Aceeaşi funcţionalitate este realizată mai simplu prin:PORTA = (1<<2) | (1<<6); //notează doar numărul de ordine al biţilor în loc de PA2

În cazul în care biţii de port au nume definiteTCCR1B |= (1<<WGM12) | (1<<CS12) ;//biţii numiţi WGM12 şi CS12 sunt prescrişi HIGH în registrul TCCR1B

if(bit_is_set(PINC,0)) {...} //citeşte valoare din condiţieif(bit_is_clear(PINC,0)) {...} //citeşte valoarea din condiţie

Valori de adevăr poarta ȘI:0 ȘI 0 = 0 0 ȘI 1 = 0 1 ȘI 0 = 0 1 ȘI 1 = 1

Valori de adevăr poarta SAU:0 SAU 0 = 0 0 SAU 1 = 1 1 SAU 0 = 1 1 SAU 1 = 1

Valori de adevăr poarta XOR0 XOR 0 = 0 0 XOR 1 = 1 1 XOR 0 = 1 1 XOR 1 = 0

OPERATORI MATEMATICI+ Adunare- Scădere

/ Împărțire* Înmulțire

++ Incrementare-- Decrementare

Operatori logici== egal!= inegal< mai mic ca> mai mare ca<= mai mic sau egal ca>= mai mare sau egal ca! nu&& și|| sau

Ține minte:PORTB & = ~ (1<<5);

//sterge bit-ulPORTB | = (1<<5);

//setează bit-ulPORTB ^ = (1<<5);

//schimbă valoare bit (^ este XOR)

SET înseamnă HIGHCLEAR înseamnă LOW

ECRAN LCD

Următorul capitol va fi dedicat convertorului analogic/digital. Intrarea către mi-croprocesor este o valoare analogică de la senzor (de exemplu senzor de proxi-mitate). Această valoare analogică va fi schimbată într-una digitală prin interme-diul ADC. Ea va reprezenta distanţa. Pentru un test şi o evaluare mulţumitoare a robotului, este necesară afişarea acestei distanţe (respectiv valoarea zecimală corespunzătoare acestei distanţe).În ce fel? O modalitate este de a folosi anumite instrumente de depanare, livrate cu programatorul JTAG. Dar această soluţie este prea scumpă, de aceea n-o vom folosi. Mai ieftină şi facilă este folosirea unui ecran LCD pentru afişarea tuturor datelor pe care le definim în programul nostru.Folosim două linii (2 rânduri) de afişaj LCD. Fiecare linie are 16 caractere alfa numerice. Poate fi folosit orice LCD compatibil cu HD 44780.

LCD-ul poate lucra în modul 4 sau în modul 8 de funcţionare. Modul 8 permite citirea valorilor din LCD, dar foloseşte 8 biţi ai Portului D pentru a trimite/primi date. Vom folosi modul pe 4 biţi (doar scrierea datelor pe afişaj, dar salvând 4 biţi ai portului).

Pentru conectarea LCD-ului folosim Port D. De ce? Pentru că Portul A este fo-losit de ADC, Portul C este folosit pentru comanda motoarelor iar Portul B este folosit pentru programare. Singurul port liber este Portul D.

AT

meg

a32

1

20 PD6

40

21

Port APort B

Port C

Port D

19 PD518 PD417 PD316 PD215 PD114 PD0

LCD compatibil HD44780

2 1 3 4 5 6 14 13 12 11 10 9 8 7 15 16

+ 5 V+ 5 V

1030GND

GND3131+ 5 V

GND

15 k

Ohm

ENA

RS

R/W

DB

7D

B6

DB

5D

B4

Luminozitatea LCD-ului. Pen-tru luminozitate maximă se conectează pinul 3 la pinul 2 fără potențiometru.

RS. Definește trimiterea unei comenzi sau dată.

R/W. Definește procesul de citire/scriere.

ENA. Semnal de tact pentru LCD.

Explicaţiile codului sursă pentru afişarea datelor nu sunt importante în acest moment. Copiază directorul LCD în proiectul tău şi fisierul lcd16.c în directorul main pentru utilizare.

Adăugați aceste instrucțiuni în fişierul main.c:InitLCD();SendString(“ISR ADC YES”, 1, 5);//1 înseamnă prima linie (1 - 2), 5 înseamnă poziţia de start din linie (0 - 15)SendInt(senzor7,2,12);//transmite valori întregi ale variabilei senzor7 către a doua linie, 12- poziţie de start

Podul și castelul din Bratislava.

ADC. Analog to Digital Con-verter.Convertor Analogic-Digital

Page 40: Ht Barro

Cum se construiește un robot Cum se construiește un robot74 75Programming ProgrammingProgramare ProgrammingProgramare

Microcontrollerele AVR au ADC ataşat la portul A (ADC partajează portul A).ADC funcţionează în două moduri:

1. Modul conversie unică – ADC execută conversia şi apoi îşi opreşte activitatea (con-versie unică). Aceasta înseamnă că conversia se face o singură dată.2. Modul continuu – ADC execută conversia şi începe altă conversie imediat. Acest fenomen poartă numele de conversie continuă.

Divizorul:ADC-ul are nevoie de un semnal de tact ca să lucreze. AVR-ul nostru are o frecvenţă de 8 MHz. Aceasta înseamnă că la fiecare aproximativ 0.1 microsecunde ADC converteşte valori analogice în valori digitale. Este prea mare şi inutilă (şi scade performanţa mi-crocontroller-ului). Frecvenţa optimă este de la 50 kHz la 200 kHz. O frecvenţă joasă înseamnă o mai mare precizie de măsurare, o frecvenţă mai mare înseamnă o execuţie mai rapidă. Această frecvenţă este stabilită de valoarea divizorului (are acelaşi înţeles că setarea PWM). Divizorul poate fi stabilit pe 7 valori diferite: 2, 4, 8, 16, 32, 64, 128.

Portul A are 8 pini de I/O. Fiecare are propria posibilitate ADC (numită canal). Fiecare pin poate fi conectat la un senzor. Aceasta înseamnă că poţi detecta şi lucra cu semnale de la 8 senzori deodată în programul tău. ADC-ul în funcţiune pe canalul 3 înseamnă măsurarea valorii analogice de la al 37-lea pin Atmega32.

ADC lucrează cu 4 regiştri:ADMUX – alegerea tensiunii şi canalului de referinţă, care este utilizat de faptADCSRA - starea şi controlul ADCADCL a ADCH - doi regiştri de 8 biţi, care conţin rezultatele conversiei. Ei sunt marcaţi ca regiştri ADC.Pentru încărcarea rezultatului conversiei sunt utilizaţi doi regiştri. De ce? Pentru că rezul-tatul este pe 10 biţi şi un registru are o capacitate de stocare doar pe 8 biţi.

ADC IN PRACTICĂ

Partajarea. Un dispozitiv poate fi utilizat de doi utilizatori. Un port este utilizat pentru mai multe activităţi.Glumă draguţă pentru profesorii mai în vârstă:“ Nu-mi împart niciodata pipa şi nevasta…hmmm…nevasta câteodată dar pipa niciodată”.

Divizor Frecv. Rezultat2 4 MHz fără precizie4 2 MHz fără precizie8 1 MHz fără precizie16 500 kHz fără precizie32 125 kHz OK64 62 kHz excelent128 31 kHz lent

ADC Registrul de selecție multiplexor ADMUX7 6 5 4 3 2 1 0

REFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0

Selectarea tensiunii de referință

Orien-tarea la stânga

Neglijabile (valoarea inițială)

Selecția canalului (pin conversie valoare)

0 0 Referință externă (0 V la tensiunea de alimentare), sursa trebuie să fie conectată la pin-ul 32.

0 1 Sursă de tensiune (probabil 5V). Nu este necesar să se conecteze la pin-ul 32 (vezi schema).

1 0 rezervat

1 1 Tensiune de referință internă de 2.56 V (valoarea este produsă de uC). O sursă poate fi conectată la pin-ul 32.

- 0

ADC poate converti valoarea analogică într-o valoare pe 10 biți. Trebuie memorată în doi regiștri ADCL și ADCH (16 biți în to-tal). În acest caz rezultatul este aliniat la stânga, ADCH este plin și ADCL are 2 biți ocupați

- 1 În acest caz rezultatul este aliniat la dreapta și ADCH este plin și ADCL are ultimii doi biți ocupați

ADC convertește valoarea de la pin-ul 0 al port-ului A 0 0 0ADC convertește valoarea de la pin-ul 1...6 etc. ai port-ului A 001, 010 etcADC convertește valoarea de la pin-ul 7 al port-ului A 1 1 1

ADC

Cele mai multe mărimi fizice îşi modifică valorile continuu – pas cu pas (crescător, descrescător). Aceasta înseamnă că mărimea poate atinge orice valo-are într-un interval definit. Intervalul definit este dat de valoarea minimă şi cea maximă a mărimii fizice. Valoarea din interiorul intervalului poate fi detectată printr-un senzor, care o schimbă într-o valoare electrică – tensiune.

Cum funcţionează microcontroller-ul cu această valoare?

Există două posibilităţi:1. Utilizând comparatorul analogic. Compară două valori analogice cu rezul-tate true sau false (higher-lower).2. Utilizând convertorul analogic-digital. Converteşte o valoare analogică într-o valoare digitală. Această valoare digitală este utilizată de programul tău.

Prin folosirea unui comparator analogic obţinem informaţii despre temperatură, dacă este peste sau sub valoarea referinţă dar nu avem informaţii continue despre temperatură (în orice moment). Dacă scopul este de a urmări dacă nivelul apei dintr-un râu este peste starea critică, această soluţie este mai bună (şi aceasta va fi discutată în capitolele următoare). Dar, pentru evaluarea vitezei de creştere a nivelului apei, există doar un singur mod – folosind ADC.

Cum se procedează? Trebuie să schimbaţi valoarea analogică în valoare digitală. Aceasta înseamnă că, de exemplu, 212 mm sunt schimbaţi de către senzor în 2.32V şi această valoare trebuie reprezentată la nivel de biţi.

Câţi biţi?Imaginează-ţi că într-un bit: poţi stoca 2 valori (2^1), 0 sau 1. Imaginează-ţi că 0V de la un senzor este 0 logic şi 2.32V este 1 logic. Ce se întâmplă cu 2.20V?Imaginează-ţi că sunt 2 biţi: poţi stoca 4 valori (2^2). Încă nu este suficient pentru intervalul nostru de valori.Imaginează-ţi că sunt 8 biţi: poţi stoca 256 valori (2^8). Împărţirea în 256 de valori ar putea fi potrivită.Imaginează-ţi că sunt 10 biţi: poţi stoca 1024 valori (2^10). Împărţirea în 1024 de valori diferite este excelentă pentru noi (dar probabil pentru SMT tot nu este suficient, este nevoie de o mai mare precizie).

Încă nu am definit valoarea maximă a unei mărimi fizice. Se ştie că fiecare sen-zor generează, de obicei, valori de la 0 la o anumită valoare maximă (exemplu 5V). Această valoare maximă este numită tensiune de referinţă. Când senzorul generează o tensiune de la 0 la 5 V şi pentru stocarea valorilor folosim regiştri de 8 biţi (256 valori diferite) suntem capabili să măsurăm valoarea de intrare cu o precizie de 5/256 volţi.

Înţelegerea ADC-ului înseamnă înţelegerea noţiunilor de bază ale micro-controlerului.

TEORIE

Intervalul de temperatură. Valoarea minimă este de -273.15

grade Celsius (0 grade Kelvin). Valoarea maximă este proba-

bil temperatura de pe suprafaţa Soarelui.

SMD. Surface Mount Device.SMT. Surface Mount Technology.

GÂNDIȚI-VĂ

Măsori o distanţă de până la 80 cm. Tensiunea de referinţă este de 5V. Pentru stocarea valorilor foloseşti un registru de 10 biţi. Care este precizia de măsurare a distanţei?

SENZOR

Distanța (de exemplu 45 cm)

Valoare analogică(de exemplu 2.1 V)

Microcontroller

ADC

Valoare digitală (11010010)

Tensiune de referință

2.56 V

Vcc (5 V)

Senz

or

2 V precizia este de 0.01 V

precizia este 0.02 V

3 V

definit de utilizator

2.56 / 256

5 / 256

Diferență tensiune de referință

DIVIZORUL

DIVIZOR FRECVENȚĂ

înseamnă

8 MHz frecvența ceasului

Page 41: Ht Barro

Cum se construiește un robot Cum se construiește un robot76 77Programming ProgrammingProgramare ProgrammingProgramare

COD SURSĂ ADC

Exemplul codului sursă este pentru senzorul de distanţă Sharp, dar el poate fi folosit pentru orice dispozitiv care produce valori analogice pe care le poţi trans-forma în valori digitale. Valoarea maximă de la senzorul Sharp nu va fi peste 2.56V, deci putem folosi tensiunea de referinţă la nivel intern de 2.56V.

Acest cod poate fi în fişierul header numit adc.h şi poate converti valoarea analogică într-una digitală; pinul respectiv este setat ca variabilă în modul con-versie unică.

În codul sursă main.c ar trebui să fie:

int distance2=GetADC(2); //citirea valorii de la senzor pe pinul 2 - port A

În adc.h poate fi codul sursă://declararea procedurilorvoid Init_ADC(uint8_t senzor);int GetADC (uint8_t senzor);//faza de iniţializarevoid Init_ADC(uint8_t senzor){ ADCSRA = 0; // setare registru ADSCRA la valorile implicite ADMUX = 0; // setare registru ADMUX la valorile implicite//stabilirea bitului ADLAR al registrului ADMUX la 1 alinierea la stânga a // rezultatului ADMUX = (1<<ADLAR) | senzor; ADCSRA = (1<<ADPS2) | (1<<ADPS1); //Divizor la 64, 62 kHz //activarea conversiei, pornirea conversiei ADCSRA |= (1<<ADEN) | (1<<ADSC) ;}int GetADC(uint8_t senzor){ Init_ADC(senzor); //buclare pâna când ADIF este setat pe “1” logic while (!(ADCSRA & (1<<ADIF))) { } int temp = ADCH; return temp;}

Acum puteţi lucra cu variabila distance2 în programul principal, în acest mod:

main.cint distance2=GetADC(2);if(distance2>40){ Go();}else{ Stop();}

ADC Registru de stare și control ADCSRA7 6 5 4 3 2 1 0

ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS00 Valoarea 0 oprește conversia ADC (oprirea anulează conversia în curs)1 Prescrieți valoarea ADEN la 1 pentru activarea conversiei

Divizorul este setat cu valoarea 2 0 0 0Divizorul este setat la 2, 4, 8, 16, 32, 64 (001 este echivalent cu 000) 001, 010...

Divizorul este setat la valoarea maximă 128 1 1 1- 0 valoarea 0 nu contează (devine 0 când se termină o conversie)- 1 stabiliți valoarea 1 când se dorește pornirea conversiei

- 0 Semnal de întrerupere. 0 înseamnă că nu există o conversie în curs

- 1

Devine 1 când s-a terminat conversia și este scris în registrul ADC. Este folosit în program pentru a se ști dacă s-a terminat o conversie. Programul nu trebuie să întreprindă nici o acțiune până nu se termină conversia.

Ceilalți biți nu ne interesează pentru obiectivele noastre din proiect.

Registrul de date ADC ADCH 15 14 13 12 11 10 9 8

ADC9 ADC8 ADC7 ADC6 ADC5 ADC4 ADC3 ADC2

Registrul de date ADC ADCL7 6 5 4 3 2 1 0

ADC1 ADC0 - - - - - -Acesta este conținutul regiștrilor când bit-ul ADLAR din registul ADMUX este 1.

Registrul de date ADC ADCH 15 14 13 12 11 10 9 8

- - - - - - ADC9 ADC8

Registrul de date ADC ADCL7 6 5 4 3 2 1 0

ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADC1 ADC0Acesta este conținutul regiștrilor când bit-ul ADLAR din registul ADMUX este 0.

1. Rezultatul ADC este pe 10 biţi. Cei mai importanţi biţi sunt cei din stânga. Când aliniezi rezultatul la dreapta şi vrei să citeşti un singur registru (ADCL) pentru controlul programului, vei pierde doi din cei mai semnificativi biţi. Tre-buie să aliniezi rezultatul la stânga şi să citeşti registrul ADCH. În acest caz pierzi doi biţi dar care nu prezintă o importanţă foarte mare. Desigur, poţi citi toţi cei zece biţi şi atunci nu contează alinierea (dar trebuie să programezi citirea unei valori din doi regiştri). În cazul robotului nostru vom folosi citirea doar dintr-un singur registru (ADCH şi alinierea la stânga a rezultatului).2. ADC poate lucra de asemenea continuu. Aceasta înseamnă că atunci când o conversie se termină, o alta începe. În teorie oprirea conversiei cauzează în-treruperea iar rezolvarea acestei întreruperi porneşte o nouă conversie. Acest proces se repetă şi trebuie programat cu atenţie. Avantajul acestei soluţii este că ai tot timpul valorile senzorilor la dispoziţie, fără fi nevoie să începi manual o conversie. Se pot citi valorile de la cei 8 senzori prin conversie continuă. Acest lucru poate face codul sursă mai scurt. Dar atenţie: această soluţie scade performanţele microcontroller-ului şi creşte consumul de curent din acumula-tori. (Vă amintiţi despre administrarea bateriei?). Porneşte conversia atunci când vrei să citeşti datele de la un senzor!

ȚINEȚI MINTE

Poarta Brandenburg, Berlin

Page 42: Ht Barro

Cum se construiește un robot Cum se construiește un robot78 79Programming ProgrammingProgramare ProgrammingProgramare

Aveţi un câine care latră când e ceva în neregulă în jurul casei tale? Dacă da, atunci folosiţi versiunea în carne şi oase a soluţiei de software watch dog timer.

Una dintre cele mai des întâlnite sarcini în programare este să securizezi toate situaţiile nedefinite şi instabile. Imaginează-ţi că în timpul câtorva mili-secunde tensiunea de alimentare scade la 2 V. Poate să se întâmple, dar cauza nu este importantă acum. Cum să rezolvi această situaţie? Închide alimentarea sau restartează programul. Restartarea este probabil mai bună. Operaţia poate fi securizată cu ajutorul Watch Dog Timer (WDT).

Watch Dog Timer este o soluţie software de resetare a programului în tim-pul unei situaţii neaşteptate.

Când se resetează microcontroller-ul? De obicei, atunci când primeşte comanda reset.

Se poate folosi în următoarele situaţii:1. Tensiunea de alimentare scade sub 2.7V;2. Când la pinul de resetare al microcontrolerului este conectată valoarea logică false pentru o perioadă mai mare de 1.5 microsecunde;3. Watch dog generează un semnal de resetare;4. Căderea sursei de alimentare5. Altele

Aceste situaţii generează comanda reset. Doar una dintre acestea poate fi influenţată de tine ca programator– WDT (dar şi situaţia de la punctul 2). Cele-lalte situaţii sunt posibile dar inacceptabile .WDT previne astfel de situaţii.

De ce resetarea este periculoasă?Toţi regiştrii vor reveni la valorile implicite. Toate variabilele sunt şterse.

Cum funcţionează watch dog timer?Este un cronometru. El numără impulsurile de la cristal (intern sau extern). El porneşte de la valoarea maximă şi descreşte cu fiecare impuls până la zero. În momentul în care valoarea devine zero, el generează semnalul reset. Programul porneşte din nou din punctul de start. Pe parcursul activităţii normale a robotu-lui, semnalul reset generat de WDT este inacceptabil. De aceea, un programator trebuie să reseteze WDT în interiorul codului său sursă. Aceasta înseamnă că el nu trebuie să permită să se atingă valoarea zero şi să se genereze reset. Dar se aplică în timpul activităţii normale a robotului. În cazul unei stări nedefinite, WDT trebuie să genereze Reset.Numărătoarea inversă a WDT este controlată de divizor. Aceasta înseamnă că este imposibil să setezi această perioadă continuu, ci doar în paşi (8 paşi). Cea mai lungă numărătoare inversă pentru microcontrolerul AVR este de 2 secunde.

Ca şi programator, ai totul la îndemână. Poţi să permiţi sau nu activitatea WDT şi să setezi durata de descreştere.

Nu utilizaţi WDT dacă nu este strict necesar! Creşte consumul de energie! Utilizaţi WDT atunci când lucraţi cu motoare.

WATCH DOG TIMER

Brownout.- căderea alimentării pentru scurt timpBlackout - întreruperea alimentării cu energie electrică

Codul sursă WDT:#include <avr/wdt.h> wdt_enable(WDTO_2S);wdt_reset();

Programul se resetează singur?Probabil că nu resetezi WDT!

Codul sursă anterior are o problemă de rezolvat : am măsurat distanţa doar o singură dată însă rezultatul nu este relevant. O soluţie mai bună este aceea de a măsura de exemplu de zece ori într-un ciclu. Apoi se şterg valorile minimă şi maximă. Din restul de măsurători se aproximează valoarea.

Codul sursă :

int NumberOfConversion=10;int GetADC(uint8_t senzor){ Init_ADC(senzor); int i; uint8_t MinValue=255; uint8_t MaxValue= 0; volatile uint32_t temp=0; for (i=1; i<=(NumberOfConversion+2); i++) { while (!(ADCSRA & (1<<ADIF))) { } if (ADCH>=MaxValue) MaxValue=ADCH; if (ADCH<=MinValue) MinValue=ADCH; temp += ADCH; } temp -= MinValue; temp -= MaxValue; temp /= NumberOfConversion; return temp;}

GÂNDIȚI-VĂ

Încercați să analizați algoritmul codului sursă de mai sus pentru a aproxima valoarea (eliminând valoarea maximă şi minimă).

OSCILATORUL CU CRISTAL

Corpul uman are nevoie de o inimă pentru a trăi. Fiecare bătaie a inimii se sincronizează cu activităţile corpului. O orchestră are un metronom. Fiecare bătaie a metronomului indică o acţiune a instrumentelor muzicale. Acest lucru este valabil şi pentru microcontrolere. Ele trebuie să aibă ceva, care să le sin-cronizeze, care să le determine viteza. Fiecare bătaie de tact înseamnă efectu-area unei acţiuni. Mai multe bătăi de tact pe secundă înseamnă o viteză mai mare a execuţiei comenzilor.

Microcontroller-ul nostru are un cristal intern prin intermediul oscilatorului RC, care lucrează cu frecvenţa de 1 MHz. Frecvenţa nu este atât de precisă (şi din cauza căldurii din interiorul microcontroller-ului), aşadar, este recomandat să se utilizeze oscilator cu cristal extern (ceas extern); acesta poate fi setat la o frecvenţă mai mare de 8 MHz. Frecvenţa acestui oscilator extern este mai precisă şi această soluţie este utilizată pe scară largă.Pentru a schimba frecvenţa de tact de la 1 MHz la o frecvenţă externă de 8 MHz, trebuie să selectezi această frecvenţă în pagina Fuse (vezi capitolul anterior) şi să conectezi cristalul la pinii XTAL2 şi XTAL1 (figura din stânga).

Oscilatorul cu cristalUtilizează rezonanţa mecanică a

unui cristal din material piezo-electric pentru a genera un semnal electric cu o frecvenţă precisă. Cel mai utilizat material pentru produ-

cerea cristalelor este cuarţul.

XTAL2

XTAL1

GND27p

27p

8 MHz

Conectarea cristalului extern la microcontroller.

Scrie cel mai mare număr folosind doar alte două cifre.

Page 43: Ht Barro

Cum se construiește un robot Cum se construiește un robot80 81Programming ProgrammingProgramare ProgrammingProgramare

TIMER / NUMĂRĂTOR

DEFINIȚIE

Temporizatorul este un dispozitiv care reține o valoare definită pe o perioadă de timp.Contorul este un dispozitiv care mărește /descrește valoarea sa sub influența unui semnal de tact intern/extern.

Incrementarea înseamnă creșterea valorii cu 1.

Matematic: x =x +1;

x++;

Decrementarea înseamnă scăderea valorii cu 1.

Matematic:x=x-1;

x--; TEORIEEste esențial să se înțeleagă această parte. Temporizatorul și contorul reprezintă două părți ale unui dispozitiv electronic. Observați fișa de date ATMega 32, unde se găsesc informații marcate Timer/Counter, și nu temporizator sau contor distinctiv.Temporizatorul/Contorul (T/C) reprezintă un registru. Registrul poate avea 8 biți sau 16 biți. ATMega 32 are 3 Temporizatoare/Contoare. Două dintre acestea au 8 biți și un Temporizator/Contor are registru de 16 biți. Temporizator/ Con-tor 0 și Temporizator/Contor 2 sunt cele pe 8 biți și Temporizator/Contor 1 este cel pe 16 biți. Temporizator/Contor numără de la 0 la maxim. Acesta își mărește valoarea doar când primește impulsuri (semnal de tact). Acest impuls apare de obicei de la ceasul intern al microcontroller-ului sau de la sursa externă (ex. codficator).

GÂNDIȚI-VĂ

Care este valoarea maximă pe care o poate atinge T/C ?În cazul în care T/C are 1 bit, poate număra de la 0 la 1 (2^1).În cazul în care are 2 biți, poate număra 4 impulsuri.(2^2).În cazul în care are 8 biți poate număra de la 0 la 255.(2^8).În cazul în care are 16 biți poate număra de la 0 la 65 535(2^16).T/C de lățime mai mare înseamnă valoare maximă mai mare.

Care este frecvența pe care o utilizeaza T/C pentru incrementare ? Cu alte cuvinte, cât de des (de rapid) își crește T/C valoarea ?Depinde de utilizarea sa. În cazul generării PWM-ului este utilizat pentru incre-mentarea ceasului intern. Dacă nu se utilizează divizor de frecvență și frecvența ceasului este 8 MHz, incrementează pe aproape o zecime de microsecundă. Când se utilizează un divizor de frecvență cu 8, durata incrementării este de o microsecundă. Dar la T/C pot fi conectate de asemenea alte semnale de numărare- de ex. de la codificator.

Ce se va întâmpla când T/C ajunge la maxim ?Revine la 0 și începe să numere din nou de la 0 la maxim.

Ce înseamnă valoarea T/C ?Valoarea T/C este de obicei expresia zecimală a valorii binare din T/C. Dar câteodată putem vedea valoarea ca valoare binară. T/C pe 8 biți își păstrează valoarea între 0-255. T/C pe 16 biți poate reține valori între 0-65 535.

ȚINEȚI MINTE

În care mod este posibil să se rețină orice valoare pentru un timp definit (întrebare legată de temporizator) ?Este simplu. Definim timpul după numărul de incrementări ale T/C.

Dacă stiți răspunsurile puteți să programați acest modul fără probleme.

TIMER / COUNTER IN PRACTICĂ

Temporizatorul/ Contorul este doar un registru (sau set de regiștri) cu câteva caracteristici, care necesită programare pentru a fi utilizat. Trebuie conectat la periferice pentru a putea citi ceva (ex. semnale de la codificator) sau pentru a face ceva (genera PWM la punțile H). Această conexiune este oferită de către regiștri.O caracteristică a T/C este apelarea unei întreruperi temporare interne când se resetează la 0. Această oprire temporară internă poate fi procesată de ISR din programul creat.

ISR. Interrupt Service Routine. Partea de program care tratează o întrerupere.

TCCR0.Registrul de control pentru Tem-porizator/Numărător 0.

TCCR1.Registrul de control pentru Tem-porizator/Numărător 1.

TCCR2.Registrul de control pentru Tem-porizator/Numărător 2.

1. trebuie să existe un registru care stabilește cât de repede T/C își crește valoarea. Pentru a seta această valoare avem nevoie de 3 biți (astfel vom putea obține 8 viteze posibile). Registrul este numit TCCR0.

2. un alt registru trebuie să stocheze valoarea T/C. Trebuie să putem citi acest registru, dar există uneori situații, când este necesar să se scrie (ex. pentru orice motiv dorim să incrementăm ciclic de la 100 la 120, aceasta înseamnă începerea cresterii valorii cu 100 în baza 10 și trebuie să putem sa scriem această valoare în registru). Acest registru se numeste TCNT0.

3. cel mai important registru este cel care poate stoca orice valoare (de la 0 la 256 în zecimal), ceea ce reprezintă valoarea cerută. Se numește registru de comparare. Valoarea cerută poate fi de exemplu viteza motorului sau numărul de tacturi de la codificator. Oricum, când valoarea în registrul de comparare este egală cu valoarea în registrul care stochează incrementările, întreruperea implicită va fi generată. Această întrerupere poate fi procesată în program. Acest registru se numește OCR0.

Regiștrii atașați la T/C sunt uneori numiți după prima și a doua literă a T/C. Ultimul număr este numărul T/C. TC…1 este un registru al Temporizator/ Con-torului 1.

Regiștrii pentru controlarea T/C sunt denumiți TCCRn (n este 0, 1 sau 2). Aceas-ta înseamnă că Temporizator/Contor 0 are un registru numit TCCR0, Tempori-zator Contor2 are un registru numit TCCR2.

Interesant este Temporizator/Contor1, care are lățimea de 16 biți. Registrul său este de asemenea numit TCCR1, dar este divizat în regiștri de 8 biți, TCCR1A, TCCR1B. Aceștia serveau la configurare, adică programatorul poate cu ajutoul acestor regiștri să seteze valoarea divizorului de frecvență și configurația PWM. Ambele vor fi explicate în cele ce urmează.

Divizorul împarte frecvența cea-sului pentru a controla viteza de incrementare.Divizorul poate fi setat să dividă la 1, 8, 64, 256, 1024.

REGISTRU

DIVIZOR

Semnal de ceas (divizat)

Semnal de ceas

Valori incrementate de la 0x00 la 0xFF

Schemă numărător 8 biți

ATmega32

8 bit Timer/Counter 0

16 bit Timer/Counter 1

8 bit Timer/Counter 2

Structura Temporizatoarelor/Numărătoarelor pentru AT-

Mega32

NUMĂRĂTOARE

NUMĂRĂTOR INCREMENTAL

NUMĂRĂTOR DECREMENTAL

Două tipuri de numărătoare după sensul de numărare.

Registrul dedicat T/C 0 se termină cu cifra 0.Registrul dedicat T/C 1 se termină cu cifra 1.Registrul dedicat T/C 2 se termină cu cifra 2.

Perioada T

0

255

Numărător pe 8 biți care numără de la 255 la 0. După atingerea valorii minime numărătorul revine la valoarea 255.

Period T0

255

Numărător pe 8 biți care numără de la 0 la 255. După atingerea valorii maxime numărătorul revine la valoarea 0.

TINEȚI MINTE!Acest manual este destinat începătorilor. Cel mai bun material de studiu este fișa de informații de la producător.

Page 44: Ht Barro

Cum se construiește un robot Cum se construiește un robot82 83Programming ProgrammingProgramare ProgrammingProgramare

Registrul T/C TCNT07 6 5 4 3 2 1 0

Registrul pentru stocarea valorilor T/C este numit TCNTn (n este 0, 1 sau 2). Din registru poți citi în-totdeauna valoarea T/C.Biții 0-7 stochează valoarea T/C. Diverse valori la momente diferite.

Registrul Comparator al Ieșirii OCR07 6 5 4 3 2 1 0

Registru pentru stocarea valorii, definit de programator. Este o valoare, care este comparată permanent cu valoarea din registrul TCNT. Ce se va întâmpla când aceste două valori sunt egale? Întreruperea este generată (și poate fi tratată de program) sau este folosită în generarea semnalului PWM.Biții 0-7 stochează valoarea pentru comparația cu TCNT0, valoare constantă la momente diferite.

GÂNDIȚI-VĂ

Imaginați-vă un secundar la ceasurile voastre. Găsiți comparația cu Temporiza-torul/Numărător. Imaginați-vă limba care indică ora. Faceti la fel.Imaginați-vă că setați ora de trezire la 7.00. La fel, setați și caracteristica Tem-porizatorului/Numărătorului ?Care este frecvența decreșterii când frecvența ceasului de 8 MHz este impărțită de divizor cu 8 ?

SARCINI

Încercați să setați regiștrii mai sus menționați pentru ca T/C 2 să realizeze următoarea acțiune: (ceasul intern este 8 MHz):

În 10 secunde de la pornirea robotului, acesta se va opri din mișcare (această sarcină este puțin dificilă, dar dacă citiți paginile următoare ale cărții, o veți rezolva. Încercați și veți fi cu un pas înainte.). De ce?

Robotul nostru utilizează motoare de curent continuu cu magnet permanent pentru deplasare. Există doar o posibilitate de a controla mișcarea - prin mo-dificarea tensiunii de alimentare. De exemplu dacă tensiunea scade de la 5V la 2,5 V, viteza descrește la jumătate din viteza anterioară.Problema constă în controlul tensiunii de alimentare a motorului. Prima posibi-litate este utilizarea rezistorului variabil în serie cu motorul. Această soluție duce la risipă de energie prin căldura generată de rezistor. Un alt mod este de a comuta între 0 și 5 V tensiunea de alimentare, cu o anumită frecvență. Când factorul de umplere este 0%, tensiunea medie este 0V pe durata întregii perioade, iar motorul nu se rotește. Dacă în prima jumătate de perioadă tensiunea este 5V și în a doua jumătate este 0V, valoarea medie va fi 2,5V și funcționarea motoru-lui nu va fi afectată de alternarea tensiunilor. Acesta se va roti la jumătate din viteza sa maximă. Nu există pierdere de energie în alte părți adiționale.

Cât poate fi frecvența de alternare a tensiunii ?Optimă. Înseamnă nici joasă (motorul va cala), nici înaltă (interferență electromagnetică cu mediul). Cea mai bună soluție este în jur de 20 kHz.

Sunt încă două probleme de rezolvat :Cum se poate obține semnalul PWM de la microcontroller și cum se poate transforma acest semnal în semnal electric pentru alimentarea motorului. Să rezolvăm mai întâi prima problemă. A doua a fost deja rezolvată în capitolul Electronică cu ajutorul punților H.

Stim că :1. Microcontroller-ul poate genera semnal PWM.2. Atmega32 poate genera 4 semnale PWM simultan.3. T/C 0 pe 8 biți poate genera 1 semnal PWM.4. T/C 1 pe 16 biți poate genera 2 semnale PWM.5. T/C 2 pe 8 biți poate genera 1 semnal PWM.

Principiile generării semnalului PWM vor fi detaliate în cazul T/C 1 pe 16 biți.

Tacturile furnizate la 8MHz, împărțite de către divizor, dau viteza de descreștere a numărătorului. Divizare mai mare înseamnă descreștere mai lentă și vice-ver-sa.Numărătorul contorizează de la maxim la 0. Maximul corespunde la 5V. Când ajunge la 0 (0V), revine la maxim și își descrește valoarea din nou, în buclă.Viteza descreșterii este influențată de către divizor. Rezultatul este un semnal tip dinți de fierăstrău, ale cărui vârfuri sunt mai mult sau mai puțin ascuțite.Valoarea dorită a tensiunii, așa numitul semnal de comparare, este valoarea obținută direct (în cazul variațiilor lente ale vitezei), și este combinată cu sem-nalul tip dinți de fierăstrău al numărătorului.La intersecția acestor semnale se generează pulsurile. Când valoarea cerută este maximă, pulsurile sunt înguste și vice-versa. Astfel se generează pulsuri cu lățime variabilă, utilizate de punțile H.Temporizatorul ATMega32 PWM pe 16 biți este atașat portului D, bit4 și bit5.Există ieșiri pentru controlul a 2 motoare. Modurile de operare ale PWM sunt descrise în imagini. Dacă utilizați doar 1 semnal PWM, nu contează care mod va fi folosit. În cazul controlului a două motoare, se recomandă PWM cu corecție de fază și frecvență, dar încercați să experimentați !

PWM. Pulse Width Modulation. Valoarea tensiunii medii este modificată prin durata pulsului.

TEORIA PWM-ULUI

Interferență electromagnetică. Fiecare modificare de curent crează un impuls electromagnetic. PWM-ul poate produce câmp electromagnetic.

Observație. Curentul maxim pe un pin este de 40 mA. Acesta este un motiv de a utiliza punți H pentru controlul motoarelor.

PWM este un semnal dreptun-ghiular cu perioadă fixă și factor de umplere variabil.

Factorul de umplere. Este un procent între durata de semnal de 5V și totalul perioadei.

Registrul de control al T/C TCCR07 6 5 4 3 2 1 0

FOC0 WGM00 COM01 COM00 WGM01 CS02 CS01 CS00

Pentru Modularea în Durată Semnalului (PWM) Pentru divizarea semnalului de ceas util la contro-lul vitezei de incrementare.

Descrierea regiștrilor Temporizatorului/Numărătorului

Perioada T

50 %

25 %

75 %

100 %

U [V]

Diverse forme de semnal PWM.

Perioada T0

255

Perioada T0

255

OCR0=80

Factor de umplere 40%, tensiunea medie este de 2 V.

0

U[V]5 V

Generarea PWM-ului în imagini.

Page 45: Ht Barro

Cum se construiește un robot Cum se construiește un robot84 85Programming ProgrammingProgramare ProgrammingProgramare

1. Setarea pinilor 4 și 5 ale portului D ca ieșiri. Se generează PWM. DDRD| =(1<<5)| (1<<6) ;2. Setați divizorul registrului TCCR1B la biții CS12, CS11 si CS10 :CS12-CS11-CS100-0-0- PWM este oprit (economisire energie baterie)0-0-1- PWM este activ cu valoarea divizorului de 10-1-0-PWM este activ cu valoarea divizorului de 80-1-1- PWM este activ cu valoarea divizorului de 641-0-0- PWM este activ cu valoarea divizorului de 256 – alegerea noastră1-0-1- PWM este activ cu valoarea divizorului de 1024TCCR1B=0X04 ;

3. Setarea modului PWM. Pentru setare se utilizează registrul TCCR1, biții WGM13, WGM12, WGM11, WGM10 (2 dintre aceștia sunt în registrul TC-CR1A și următorii în registrul TCCR1B).WGM13 - WGM12 - WGM11 - WGM101-0-0-0- Faza și frecvența PWM - alegerea noastră1-0-1-0- Corectarea fazei PWM1-1-1-0- PWM rapidTCCR1A=(0<<WGM11)|(0<<WGM10);TCCR1B|=(1<<WGM13)|(0<<WGM12);

4. Setarea modului comparatorului (incrementare sau decrementare) din regis-trul TCCR1A cu biții COM1A1 și COM1A0COM1A1 - COM1A00 - 0 - Modulul PWM este oprit.1 - 0 - PWM este pornit - mod incrementare - alegerea noastră1 - 1 - PWM este pornit - mod decrementare

5. Setarea valorii maxime a temporizatorului (determină frecvența PWM și numărul valorilor posibile ale PWM - bit de precizie)ICRI=255; // alegerea noastră

6. Setarea valorii comparatorului (PWM-ul necesar pentru două motoare) la regiștrii OCR1A și OCR1B.OCR1A=155, alegerea noastră pentru primul motor, gama poate fi între 0-255(maxim)OCR1B=155 alegerea noastră pentru al doilea motor, gama poate fi între 0-255(maxim)

Puteți să începeți experimentele.

PWM ÎN PRACTICĂ

Imaginați-vă ca vă programați robotul. Deodată sună telefonul. Probabil vă ridicați și mergeți să vorbiți. Apoi continuați programarea. Sau vă puteți conti-nua programarea ignorând telefonul. Sunetul telefonului reprezintă o întrerupere la care puteți sau nu să reacționați.Reacția dumneavoastră este o rutină de tratare a întreruperii. În primul caz scrieți în program așa numita rutină de întrerupere, în al doilea nu-l scrieți. Aceasta este o întrerupere externă.

Ce spuneți despre situația în care se termină bateria? Aceasta situație de întrerupere este propusă de producătorul PC-ului dumneavoastră și foarte pro-babil fișierul vostru se va salva iar calculatorul se va închide. Totuși trebuie să setați această opțiune a calculatorului vostru înainte. În caz contrar, calcula-torul se va închide și fisierul nu va fi salvat. Astfel, trebuie să decideți ce se va întampla când se termină bateria. Aceasta este o întrerupere internă și este îndeplinită de către microcontroller.

Ce se va întampla când apar mai multe întreruperi în același timp? Cea cu pri-oritate mai mare va fi rezolvată.

Întreruperile sunt semnale interne sau externe, care, dacă intervin pe parcur-sul rulării unui program, se execută imediat o rutină dedicată (această rutină se programează, cu diferite proceduri în funcție de tipul de întrerupere) și apoi executarea programului principal este reluată, din locul unde a rămas.

Întreruperile sunt dificil de programat, dar sunt foarte utile. WDT este de aseme-nea un tip de întrerupere, dar nu poate fi programată (se resetează doar, pentru a nu reseta întregul program).

ATMega32 are 18 întreruperi interne (ex. descreșterile numărătorului la 0) și 3 întreruperi externe (ex. apăsarea manuală a unui buton).

Sunt permise 3 întreruperi externe : INT0, INT1, INT2. Acestea sunt atașate la PD2, PD3, PB2 (pini 16, 17 și 3).Întreruperile pot fi declanșate de orice schimbare de valoare logică pe PD2, PD3 sau PB2 (cu excepția INT2).

Exemplu de rutină de tratare a întreruperii:#include <avr/interrupt.h> //încărcarea bibliotecii pentru întreruperi sei() //activarea întreruperilor //instrucțiunea cli() dezactivează întreruperileISR(INT0_vect) //rutina de tratare a întreruperii (ISR) din INT0{ unele comenzi;}

În codul nostru folosim întreruperi pentru controlul motoarelor (întreruperi ex-terne - numărul de pulsuri de la codificator).

ÎNTRERUPERISubrutină. Procedură. Se apelează din programul principal. După ce execuția este finalizată, programul continuă din punctul de unde s-a apelat procedura.

Întreruperile externe sunt numite și întreruperi hardware, cele interne sunt numite întreruperi software.O clasificare mai bună este cea de întreruperi implicite (interne) și explicite (externe).

Motoarele pot fi controlate cu un anumit număr de pași. Puteți să le controlați în 3 pași (teorie, nu practică) - repaus, la jumătate din viteza maximă, viteză maximă. În mod natural, cea mai bună metodă este de a comanda numărul de pași maxim posibili. Cu T/C1 pe 16 biți pot fi aproximativ 65000 niveluri de viteză diferite. Acest număr este cu mult mai mare decât avem nevoie. Numărul nivelurilor de viteză (între viteza maximă și repaus) este posibil de setat (setăm așa numitul bit de precizie). O valoare indicată ar fi 256.

C1

C2

C3

C4 ISR

C5

Întrerupere

ISR. Interrupt Service Routine. Codul executat după generarea întreruperii.

Exec

uția

secv

enția

lă a

inst

rucț

iuni

lor

Stadionul olimpic, Helsinki.

12 6

6 3

2 1Completează cu un număr; 1 nu este corect.

Page 46: Ht Barro

Cum se construiește un robot Cum se construiește un robot86 87Programming ProgrammingProgramare ProgrammingProgramare

REGLAREA PID

Conceptul PID a fost menționat de câteva ori înainte. Acum va fi explicat în detaliu.Există două tipuri de valori: dorite și reale. Valoare dorită înseamnă valoarea de care avem nevoie. De exemplu 20 grade Celsius, temperatura din interiorul locuinței, 50km/oră viteza în localități, 10 cm distanța până la un perete. Valoa-rea reală înseamnă 21 grade în interior(soarele stralucea), 60km/oră ( la vale), 8 cm distanță (un motor este mai lent). Diferența dintre valoarea dorită și cea reală este o deviație (eroare). Ceea ce ne trebuie nouă este reducerea deviației (fără eroare). Procesul prin care se ajunge la eroare nulă se numește reglare.

Eroarea are 2 părți : cantitatea (magnitudinea) și viteza de creștere (descreștere). Aceste două părți sunt reflectate de către reglarea PID. Scopul reglării este mini-mizarea erorii. Una dintre modalitățile atingerii acestui scop este reglarea PID. Aceasta constă din trei părți :- partea proporțională- partea integratoare- partea derivativă

Imaginați-vă că sunteți șoferul și trebuie să mergeți pe un drum drept.1. Când mergeți drept înainte, totul este în regulă. Nu este nevoie să reglați direcția.2. Când mașina începe să vireze la stânga, fixați direcția către dreapta. Dacă deviația mașinii este mică, corecția aplicată este de asemenea mică. Dacă este mare, corecția aplicată este de asemenea mare. Matematic putem spune că răspunsul este proporțional cu deviația mașinii. Ce se întâmplă când mențineți volanul în același unghi? Probabil veți merge către stânga și deviația se va acu-mula către stânga. Atunci veți întoarce volanul către dreapta. Foarte probabil veți oscila în jurul liniei drepte. Aceasta înseamnă că raspunsul vostru este proporțional cu magnitudinea erorii.3. Când deviația este mare, corecția aplicată este mare. Se pune întrebarea cât de rapid crește deviația (trebuie să rotiți volanul mai mult). Cu cât este mai rapidă creșterea deviației, cu atât este mai mare corecția. Dacă deviația nu se modifică înseamnă adăugarea valorii 0 de la această componentă. Aceasta este partea derivativă a controlului PID.4. În orice caz când deviația nu devine 0 imediat. Deviația acumulată în timpul reglării este corectată de partea integratoare a regulatorului PID.

Acesta este valid :RĂSPUNS = P+I+DP reprezintă reacția la mărimea eroriiI reprezintă o reacție la timpul de anulare a eroriiD este o reacție la viteza de creștere a erorii

PID. Proporțional, Integrator și Derivativ.

Reglare P

PID IN PRACTICĂ

Partea I a PID este utilizată doar pentru reglări mai precise. De obicei atingem rezultatele corecte doar cu părțile P și D ale regulatorului PID.

Reglare PD

t [s]

U [V]

semnal dorit

Regulator PD

t [s]

U [V]

semnal dorit

Regulator PID

t [s]

U [V]

semnal cerut

Regulator ideal

sem

nal r

eal

sem

nal r

eal

P =Kp x e (t)

I =Ki x ∫e(t)d(t)

D =Kd x de(t)/dt

∑+ -Răspuns

Comparator

Valoare reală

Eroa

re

Valo

are

dorit

ă

Căt

re a

ctua

tor

Exemplu de urmărire a peretelui cu ajutorul reglării PID.Valoarea cerută. 2,5 V. Este o tensiune care corespunde la 20 cm distanță sen-zor-perete.Valoare reală. 2,6 V. Robotul puțin prea aproape de perete.Comparator. Acesta compară valoarea cerută și valoarea reală. Rezultatul este 0,1V. Aceasta este o eroare care trebuie anulată.Eroare. 0.1V. Rezultat de la comparator.Membrul P. Partea proporțională a PID. Ieșirea poate fi 0,5V. Membrul I. Integrala după eroare a PID. Ieșirea poate fi 0,2 V. Nu utilizăm această parte.Membrul D. Derivata erorii a PID. Ieșirea poate fi 0,1 V dacă viteza modificării erorii este mică sau 0,9V dacă viteza modificării erorii este mai mare.Σ - Suma componentelor P și D este 0,5V + 0,1V=0,6V în primul caz și 0,5V + 0,9V=1,4V în al doilea caz. Aceasta înseamnă că viteze mari de variație a erorii conduc la o tensiune mai mare, iar cele mai mici conduc la tensiuni scăzute (nu se produc oscilații).Răspuns. Tensiunea aplicată motorului este influențată de către valoarea sumei componentelor PID. Când distanța era de 20cm, tensiunea la motoare era de 3V (de exemplu). Acum unul dintre ele va fi alimentat la 3V+0,3V=3,3V. Al doilea va primi 3V - 0,3V= 2,7V. Robotul se întoarce către perete. Noi am dorit această reacție. Calculul este realizat de către programul nostru, tensiunea mai mică sau mai mare este generată de microcontroller prin PWM. La actuator : tensiunea către motoare.Reglarea PID este un proces continuu.

Programul nostru folosește reglarea PID de două ori:- când robotul este la 20 cm de obiect și drumul către obiect este menținut cu ajutorul reglajului PID, pe baza măsurătorii provenită de la 2 senzori.- când robotul se întoarce cu obiectul în apucător și urmărește peretele cu aju-torul unui senzor.

perete

2.5 V 2.6 V2.5 V

Microcontroller

3 V

3 V

2.7 V 3.3 V

Eroare = 0.1 V

Obiect

2.5 V

0.8 V

2.5 V

0.8 V

Eroare = 0 V

Reglarea PID când se merge către obiect, este realizată cu doi senzori. Eroarea se calculează cu ajutorul diferenței dintre cei doi senzori.Reglarea PID pentru urmărirea zidului este realizată cu un senzor. Eroarea se

calculează relativ la o valoare constantă.

sem

nal r

eal

Page 47: Ht Barro

Cum se construiește un robot Cum se construiește un robot88 89Programming ProgrammingProgramare ProgrammingProgramare

CODUL PID

// acesta este un cod pentru urmărirea peretelui folosind un regulator PD// presupuneint Speed_Left,Speed_Right,Deviation,y1,P,P1,D,D1,sum,xalt,drest;

GoGeorgeGoPID(int i) //codul este aplicabil oricăruia dintre cei 8 senzori{ P=12; //constanta de proporționalitate P D = 20; //constanta acțiunii derivative D int sensor1=GetADC(i); //tensiunea proporțională cu distanța dorită Deviation = sensor1-70; //70 în zecimal înseamnă o distanță de 20 de cm D1 =D*(Deviation - xalt); D1 = D1 + drest; if (D1>255) drest = D1 - 255; else if (D1<-255) drest = D1 + 255; else drest = 0; //componenta P P1 = P *Deviation; y1 = P1+D1; int y2 = y1 / 2; xalt = Deviation; int Speed=125;

if (y1 > 0) //viraj la dreapta { Speed_Left = Speed + y2; if (Speed_Left > 255) { Speed_Left = 255; y2 = Speed_Left - Speed; } y1 = y1 - y2; Speed_Right = Speed - y1; if (Speed_Right < 0) Speed_Right = 0; }

if (y1 < 0) //viraj la stânga{ Speed_Right = Speed - y2; if (Speed_Right > 255) { Speed_Right = 255; y2 = Speed - Speed_Right; } y1 = y1 - y2; Speed_Left = Speed + y1; if (Speed_Left < 0) Speed_Left = 0;}//urmează linii de cod pentru PWM//setarea vitezei motoarelorOCR1B=Speed_Left; //viteză motor stângOCR1A=Speed_Right; //viteză motor drept}

GÂNDIȚI-VĂ

Codul de deasupra nu conține toate comentariile. Încercați să adăugați comen-tarii la fiecare linie de cod.

Coeficienții P și D sunt dificil de calculat. Cea mai bună cale pentru a îi stabili este cea experimentală.

O MICĂ PAUZĂ

Un programator în cod C vine la muncă Luni și își spune:”Mă duc să mai dorm încă de două ori și va fi din nou weekend.”

Dacă găsești răspunsul la pro-blema de mai jos, înseamnă că poți construi un robot original!Ai la dispoziție 6 bețe de chi-brituri. Construiește 4 triun-ghiuri egale cu aceste bețe de chibrituri.

Page 48: Ht Barro

Cum se construiește un robot Cum se construiește un robot90 91Soluții Soluții

SOL

II

Page 49: Ht Barro

Cum se construiește un robot Cum se construiește un robot92 93Soluții Soluții

SOLUȚIE - DANEMARCA

Scopul grupului danez a fost de a construi un robot de la zero. Studenții danezi au dorit să urmărească îndeaproape modul în care lucrează și modul în care se construiește. Din punct de vedere mecanic am utilizat Lego.Robotul pe care l-am construit trebuie să urmărească o linie. Doi senzori detectează dacă trebuie sa meargă către dreapta, către stânga sau înainte.Exemplu: Dacă robotul virează către stânga controller-ul oprește roata stângă până când senzorul spune controllerului că s-a revenit pe linia de urmat.

SenzorViraj dreapta

SenzorViraj stânga

Mic

roco

ntro

ller

Programator PicKit

Punte HPoate schimba sensul curentului. Mo-torul drept.

Punte HPoate schimba sensul curentului. Mo-torul stâng.

Start

Init

Definirevariabile

Definirefuncții

Bucla principală

Setare intrări și ieșiri

DACĂ stânga și

dreapta sunt high

DACĂ dreapta este low și stânga

high

DACĂ stân-ga este low și dreapta

high

nu

nu

nu

Virează dreapta

Virează stânga

da

da

da

Schema bloc a soluției daneze

Senzorul este unul care sesizează lumina reflectată, ieftin, de la Optek, OPB 705. Are un LED care luminează și un fototranzistor care detectează lumina reflectată. Tranzistorul este legat la +5V printr-un rezistor 270K. Aceasta per-mite computerului să citească dacă există lumină reflectată sau nu. Rezistorul trebuie să fie de valoare mare, deoarece amplificarea fototranzistorului este rela-tiv mică.

Microcontroller-ul este Microchip PIC16F690.Am ales acest controller deoarece este foarte ieftin.Totul a fost foarte bine docu-mentat, dar profesorii au avut mult de citit. Mai mult, Microchipul nu oferă un Compilator C. Totuși există câteva compilatoare disponibile pe piață. Knudsen Data din Trondheim Norvegia au o versiune pe 8 biți care poate fi utilizată în scop didactic. Software-ul nu este unul gratis, dar este scutit de taxe. Controller-ul are trei porturi, toate putând fi setate ca intrări sau ieșiri.

CD-ul cuprinde o descriere mai detaliată despre setarea tuturor componente-lor.

Există cinci senzori Sharp GP2D120IR (vezi imaginea) în robotul nostru: doi în față, unul în spate și câte unul pe părți. Unul dintre senzorii frontali se orientează în jos. Acesta măsoară în permanență distanțele până la posibilele obstacole de lângă robot. Astfel, robotul detectează gardul și alte posibile ob-stacole. Senzorul orientat în jos este utilizat doar ca să oprească robotul când a ieșit din zona incintei.

Utilitatea principală a senzorilor IR este de a evita impactul cu gardul când ro-botul încearcă să găsească obiectul din spațiul incintei. Senzorii IR pot fi de asemenea utilizați la apropierea de obiect, dar această caracteristică nu este folosită în robotul nostru.

Ieșirea din incintă se consideră detectată atunci când unul dintre senzorii laterali nu mai sesizează obstacol. Robotul se va roti și va ieși din incintă. În acest mo-ment robotul este paralel cu gardul. Apoi merge înainte și păstrează distanța până la gard constantă (ex. 5cm). Ideea este că robotul urmează gardul și găsește drumul către ieșire.

Poarta incintei este găsită atunci când robotul pierde semnalul de la senzorul lat-eral. Atunci robotul se întoarce spre ieșirea din incintă și se oprește. Apoi merge înainte până detectează o linie neagră pe podea. Linia este detectată de senzorul orientat în jos. Dupa detectarea liniei robotul se oprește.

Senzorul ultrasonic este folosit pentru detectarea obiectului din incintă. Senzorul ultrasonic este localizat în partea de sus a robotului, la o înălțime mai mare decât cea a gardului incintei pentru a nu-l detecta (obiectul este mai înalt decât gardul incintei).

Senzorul ultrasonic este instalat în partea de sus a unui servomotor, ceea ce ajută ca senzorul să facă măsurători în jurul său, într-un domeniu de 180 de grade. De aceea nu este nevoie ca robotul să se rotească când caută obiectul. Pe de altă parte, aceasta înseamnă că poziția unghiulară a senzorului trebuie cunoscută tot timpul. Informația primită este legată de poziția servomotorului în timpul măsurătorilor. Pentru a obține această informație servomotorul este comandat pas cu pas. Astfel se știe direcția către care este poziționat senzorul ultrasonic și robotul se poate roti în direcția corectă după detectare.

După detectarea obiectului, robotul se rotește către acesta și apoi realizează alte măsurători. Aceasta se întâmplă până când obiectul se va afla exact în fața ro-botului. Apoi robotul se apropie cât mai mult de obiect. La orice oprire robotul reia măsurătoarea pentru a-și corecta poziția și a verifica dacă direcția de detec-tare este corectă. Această acțiune se repetă până când robotul ajunge la obiect.

Locațiile senzorilor IR. (marcați cu dreptunghiuri negre)

Logica de detecție a senzorului cu ultrasunete și un servomotor. Această schemă semnifică citirea unui semnal acustic emis către cel mai apropiat obiect din aria de acoperire. Pentru acest lucru senzorul trimite un puls și așteaptă revenirea semnalului. Durata de revenire este proporțională cu distanța până la obiect.

Măsură

DaDetecție

Nu

Rotește servo cu un

pas

Întoarce robot

SOLUȚIE - FINLANDA

Două tipuri de senzori sunt fo-losite pentru robot.

Senzori IRSunt perfecți pentru pentru evi-tarea obstacolelor și urmări- rea de linii. Le folosim la robotul nostru pentru a detecta poarta și gardul care înconjoară incinta cu piesa. Pentru că senzorii emit lumină infraroșie senzorii nu sunt adecvați pentru utilizarea în lu-mina Soarelui. Oricum senzorii Sharp nu sunt foarte afectați de

lumina ambientală.

Senzori cu ultrasunete

Ideea de bază este că senzorul cu ultrasunete măsoară distanța prin utilizarea sonarului. Un puls cu ultrasunete este transmis de la unitate și distanța către țintă este determinată prin măsurarea timpului în care sunetul pleacă și revine la senzor. Intervalul de măsurare este de la 2 cm la 3 metri.

Page 50: Ht Barro

Cum se construiește un robot Cum se construiește un robot94 95Soluții Soluții

Germanii au analizat cum să îndeplinească sarcinile robotului. După cum am văzut, incinta era prea mare pentru a găsi obiectul cu senzori la distanța de tip senzori ultrasonici sau cu infraroșu într-un timp rezonabil.

Regula spune că trebuie să gasim obiectul. Nu menționează că obiectul tre-buie să fie unul pasiv. Deci am construit un robot care poate găsi 128 obiecte diferite cu logica de decodare a adresei.

Am construit un emițător care poate fi plasat pe un obiect, și care poate trans-mite diferite semnale codate. Robotul detectează semnalele și decide pe care obiect să-l ridice mai întâi pentru a-l aduce în afara incintei.

Soluția a fost îndeplinită cu componente standard, care pot fi cumpărate din orice magazin de piese electronice.

Codul sursă (cu documentația), diagrama circuitului electronic și descrierea constructiei robotului german apar pe pagina www.rokey.eu (pagina Ger-maniei) și sunt de asemenea adăugate pe CD.

Notă: echipa Germaniei a fost cea coordonatoare în timpul proiectului. Ei au schițat partea mecanică (motoare, roți) și elemente electronice de bază (scheme , PCB) care au fost utilizate de celelalte echipe pentru a face robotul să funcționeze (senzori, programare).

SOLUȚIE - GERMANIA

SOLUȚIE - SLOVACIA

Echipa de proiect românăPrenume și Nume Poziția în cadrul instituției Responsabilitatea în proiectRomel Vicol Director L.S.P Asigurarea condițiilor optime

pentru desfășurarea proiectuluiSilvia-Daniela Ionașcu Profesor, Electro-Mecatronică Coordonator proiect

Realizare robot ROKEYRealizare GhidRealizare pagină Web

Silviu-Marian Poboroniuc Cadru universitar la Facultatea de Inginerie Electrică, Energetică și Informatică Aplicată (IEEI)-Iași

Realizarea ghiduluiProiectarea și realizarea stra-tegiei de control a robotului ROKEY

Bica Mariana Bacoșcă Profesor Mecanică –Mecatronică Realizarea ghiduluiRealizarea ROKEY

Ana Cristiana Botan Profesor de Limba Engleză Realizarea GhiduluiComunicarea între instituțiile partenere

Maria Ciulei Profesor de Electronică Realizarea paginilor WebRealizarea ghidului

Adrian Dascălu Profesor de Electronică Realizarea ghiduluiRealizarea ROKEY

Eusebiu Gherguț Profesor de Informatică Realizarea ghiduluiRealizarea ROKEY

Radu Ionașcu Inginer masterand în cadrul Facultaţii de Automatică şi Calcu-latoare – Iaşi

Realizarea ghiduluiRealizarea ROKEY

Dănuț-Irimia Constantin Inginer doctorand Facultatea de Inginerie Electrică, Energetică și Informatică Aplicată - Iași

Proiectarea și realizarea stra-tegiei de control a robotului ROKEY

Teodora Mandrea Profesor de Limba Engleză Realizarea GhiduluiComunicarea între instituțiile partenere

Carmen Ranete Profesor de Limba Engleză Realizarea GhiduluiComunicarea între instituțiile partenere

Marius Ștefan-Ciprian Asistent, Facultatea de Ingi-nerie Electrică, Energetică și Informatică Aplicată - Iași

Proiectarea și realizarea stra-tegiei de control a robotului ROKEY

Constantin Dascălu Maistru, Mecanică Realizarea ROKEYDumitru Grapă Maistru, Electronică Realizarea ROKEYRobert Sîrbu Elev, profilul Informatică Realizarea ROKEYBogdan Mardare Elev, profilul Informatică Realizarea ghidului

Realizarea ROKEYPaul Sticea Elev, profilul Informatică Realizarea paginii web

Realizarea ROKEYAndrei Ranghiuc Elev, profilul Telecomunicații Realizarea paginii webAdrian Sava Elev, Tehnician - Operator

Tehnică de calculRealizarea ghiduluiRealizarea ROKEY

Vasile Croitoru Elev, profil Informatică Realizarea paginii webRealizarea ROKEY

Alin Fuior Elev, profil Informatică Realizarea paginii webRealizarea ROKEY

Iulian Rotaru Elev, profil Informatică Realizarea paginii webRealizarea ROKEY

SOLUȚIA - ROMÂNIA

Echipa Slovaciei a considerat că problema localizării obiectului este o sarcină complexă și astfel au apărut câteva direcții de lucru abordate :

1. controlul motoarelor (rotirea la stânga sau la dreapta cu diferite viteze)2. măsurarea distanțelor cu senzori Sharp și ADC3. prezentarea măsurătorilor pe LCD (necesar pentru evaluare)4. reglarea PID (deplasarea către obiect după localizarea acestuia)- cu ajutorul celor 2 senzori, întoarcerea prin urmărirea peretelui - cu un singur senzor)5. lucrul cu servomotorul și apucătorul (prinderea obiectului)

Când am rezolvat aceste sarcini sub formă de rutine, le-am adăugat la codul sursă. Toate elementele de control ale robotului, sub formă de cod sursă, sunt adăugate pe CD.

Mergi înainte 30 de cm

Da Detecție pe parcursul

întoarcerii (1 senzor)

Nu

Prindere obiect (servo)

Controlul motoarelor Măsurarea distanței

Afișare valori măsurate

Regulatoare PID Control Servo

Schemă de bază pentru atingerea obiectivului

Start

Mers înainte către obiect (PID, 2 sen-zori)

Distanța către obiect<5mmDa Nu

Mers înainte

Distanța de la gard < 20 cmDa Nu

Urmărește peretele către ieșire (1 sen-

zor, PID) SFÂ

RȘI

T

Arcul de Triumf, București

Câțiva roboți din România.

Page 51: Ht Barro

Cum se construiește un robot Cum se construiește un robot96 97Soluții Soluții

ROKEY (Poza 1) reprezintă un robot mobil, înzestrat cu microcontroller, care poate fi considerat implementarea fizică a multor aspecte menționate în acest ghid. Rolul lui ROKEY este de a căuta intrarea într-o cameră delimitată de pereți, cu forme dreptunghiulare, de a apuca un obiect care trebuie căutat în cameră și de a-l aduce afară din incintă. Algoritmul de lucru este structurat în șapte pași:1. apropierea de peretele camerei2. căutarea intrării în incintă3. intrarea în incintă4. căutarea obiectului5. apucarea obiectului găsit6. căutarea ieșirii din cameră7. eliberarea obiectului

La nivel general trebuie menționat faptul că sistemul tip robot mobil este înzestrat cu:• un microcontroller ATMega32• șapte senzori de proximitate• un braț mobil înzestrat cu un apucător• două motoare de curent continuu

Subiectul va fi dezvoltat avându-se în vedere următoarele două aspecte: A. Hardware: care reprezintă implementarea fizică a robotului ROKEYB. Software: care are în vedere implementarea codului sursă necesar pentru funcționare.

A. Hardware

Implementarea sistemului are în vedere două mari subcategorii:1. Componente mecanice2. Componente electronice și electrice

Pentru o mai bună înțelegere a componentelor fizice de mai jos, se prezintă o schemă bloc a întregului sistem (Poza 2).

1. Componente mecaniceÎn ce privește aspectul mecanic putem preciza ca ROKEY este în mare realizat dintr-un cadru de lemn căruia i-au fost adăugate elemente de suport precum bare de lemn și șuruburi (Poza 3). Placa de susținere a brațului robotic reprezintă de asemenea un element important. Aceasta are rol de suport, dar și de cir-cuit electric în același timp. Brațul robotic cu trei grade de libertate conține elemente precum gheare de prindere și articulații atașate motoarelor (Poza 4). Aceste elemente mecanice sunt acționate de trei servo-motoare. Există de asemenea două roți care asigură deplasarea robotului ROKEY și care sunt controlate de motoare de curent continuu (Poza 3). Semisfera de suport din spatele robotului are un rol foarte important în deplasarea și echilibrul întregului sistem.

2. Componente Electrice și ElectroniceSub aspect electric și electronic putem detalia mult mai multe idei. De exemplu microcontroller-ul (Poza 5), creierul întregului sistem, este unul de tip ATMega32 produs de ATMEL. Acesta funcționează cu o magistrală de 8 biți la o frecvență de 8 Mhz. Memoria de program este de 32 de kiloocteți, care este mai mult decât suficientă pentru stocarea codului sursă pentru controlul robotului.

Dintre modulele interne ale lui ATMega32 am utilizat:1. Convertorul Analogic-Digital cu o rezoluție pe 10 biți2. Două dintre cele 4 canale pentru generarea semnalului PWM pentru motoarele de curent continuu3. Întreruperile externe4. Modulul de comunicații seriale USART

Tensiunea de alimentare pentru ATMega32 este de 5V. Sursa de alimentare formată din 6 acumulatoare de câte 1,2 V are o tensiune totală de 7,2 V, care îndreptățește folosirea unui regulator de tensiune de la 7,2 V la 5 V, care are codul 7805. Tensiunea de 7,2 V este necesară pentru a putea controla motoarele pentru deplasare și pe cele ale brațului robotic.Fiecare microcontroller trebuie să fie atașat în final unei plăci de dezvoltare. În cazul nostru placa de dezvoltare conține toate elementele importante pentru ROKEY. De exemplu toate PORTURILE de intrare-ieșire ale microcontroller-ului sunt interfațate pe placă, împreună cu portul de comunicații seriale și pinii de alimentare.De exemplu 7 pini ai PORT-ului A sunt folosiți pentru conectarea senzorilor de proximitate necesari pentru orientarea corectă a lui ROKEY.Pinii PD4 și PD5 sunt conectați la cele două motoare de curent continuu printr-un driver de motoare care conține două punți H.Pinii PD2 și PD3 sunt atașați unor circuite Trigger-Schmitt, având rolul de a prelua semnalul de la senzorii roților pentru a putea estima viteza sau unghiul de rotație. Roțile reprezintă striații care sunt sesizate de doi senzori de proximitate. Semnalul este transformat într-unul digital de către circuitele Trigger-Schmitt.

M M M

Mot

or S

ervo

1

Mot

or S

ervo

2

Mot

or S

ervo

3

CH0 CH1 CH2

DRIVER SSC32

Linii de comunicație RS232

Modul RS232(USART)

Senz

ori p

roxi

mita

teCH0CH1CH2CH3CH4CH5CH6C

onve

rtor

ATMEGA 32

PORT DPD0 PD1 PD4 PD2 PD3 PD7 PD6 PD5

Intra

re 3

Intra

re 4

Enab

le A

Sem

nal s

enzo

r

Sem

nal s

enzo

r

Inpu

t 2

Inpu

t 1

Enab

le B

Punte H CircuiteTriggerSchmitt

Punte H

Senz

ori p

roxi

mita

te

M MMotor stâng de curent continuu

Motor drept de curent continuu

Poza 2 - Schema bloc ROKEY

ROKEY – Vaslui, România, 21.03.2010.

ROKEY – Trencin, Slovacia, 25.03.2010.

O altă manieră de interconectare a unui dispozitiv la un microcontroller este cea a brațului mobil care comunică prin intermediului modulului serial RS232 (USART) cu microcontroller-ul. Pinii pentru recepție și pentru transmisie sunt PD0 și respectiv PD1.În continuare vom aborda fiecare dintre aceste elemente ceva mai în detaliu pentru o înțelegere mai profundă a fiecărei componente din ansamblu.

a) Senzori

ROKEY este dotat cu 7 senzori de proximitate Sharp GPD12 (Poza 6) care au rolul de a sesiza obstacole și de a măsura distanța până la acestea. Există și o excepție de la regulă. Unul dintre senzori și anume cel orientat înspre sol, situat sub robot, are rolul de a sesiza diferența de culoare pentru intrarea în incintă. Deci în mod particular și la distanțe foarte mici față de sol senzorul poate sesiza fără probleme diferențele de nuanțe ale podelei, explicația fiind că nivelul de tensiune este diferit la trecerea de pe o suprafață albă pe una neagră și invers.Ceilalți senzori sunt situați pe două niveluri, cel inferior și cel superior, în număr de câte trei. Senzorii nivelului inferior ajută la întoarcerea sau la evitarea coliziunii sistemului mobil cu pereții incintei de lucru. Senzorii nivelului superior sunt folosiți pentru detectarea obiectului de recuperat și pentru cen-trarea pe acesta în timpul deplasării. Pe parcursul implementării, la început, s-a folosit un singur senzor central pe partea superioară care s-a dovedit în multe cazuri a fi ineficient. Astfel s-a ajuns la atașarea a doi senzori suplimentari de proximitate Sharp GPD12 (Poza 6) în stânga și în dreapta, necesari pentru centrarea pe obiect atunci când se realizează procedura de recuperare a acestuia.

b) Actuatori

În privința actuatorilor se poate începe cu menționarea motoarelor de curent continuu. Acestea sunt două la număr, unul pe partea stângă și celălalt pe partea dreaptă. Cele două motoare pot fi alimentate cu maxim 9V pentru a obține turația maximă. Conexiunea către microcontroller nu este directă, ci se realizează prin intermediul a două punți H care au rolul de a adapta nivelul de tensiune și curentul nece-sare pentru funcționarea adecvată a acestora. De asemenea punțile H au și rolul de a oferi operabilitate în ambele sensuri ale motoarelor.

Un dezavantaj al motoarelor de curent continuu este ilustrat perfect în cazul acestui sistem mobil. Acesta se conturează prin nivelul de precizie scăzut al controlului motoarelor. De aceea pentru un control mai eficient s-au adăugat doi senzori în apropierea roților cu striații. Senzorii numără impulsurile generate de striații și astfel putem determina cu exactitate unghiul de rotație, viteza și numărul de rotații ale motoarelor. Acești senzori sunt interconectați prin intermediul a două circuite Trigger-Schmitt pentru a transforma semnalul analogic în semnal digital corespunzător lucrului cu microcontrollere.Per total se observă astfel că motoarele împreună cu senzorii reprezintă un sistem de sine stătător, având de altfel o placă de dezvoltare separată pentru implementarea circuitelor necesare pentru funcționare.

Un alt subsistem esențial din sistem este brațul mobil. Acesta are rolul de a prinde obiectul care trebuie recuperat. Există două mari părți mobile ale acestui braț, cleștele care este dotat cu două servomotoare, unul pentru închiderea și deschiderea degetelor cleștelui și unul pentru rotirea acestuia, cât și un servomo-tor care ridică și coboară întregul braț

Controlul motoarelor acestui braț este realizat de un driver servo Lynxmotion SSC32 (Poza 10). Acesta are rolul de a primi comenzi pe interfața serială sub format ASCII, adică în caractere alfanumerice, și de a comanda servomotoarele în urma analizării mesajelor primite.

Acest modul are posibilitatea de a controla până la 32 de servomotoare. În cazul nostru nu a fost nevoie decât de 3 canale și anume 0, 1 și respectiv 2.

Formatul mesajului este de forma: # <ch> P <pw> T <time> <cr>. <ch> reprezintă numărul canalului motorului care se dorește a fi controlat, <pw> constitutie durata pulsului care este necesară pentru a aduce motorul într-o anumită poziție, <time> reprezintă perioada de timp în care să se execute comanda, <cr> provine de la termenul carriage-return și are rolul de a semnaliza finalizarea mesajului așa cum # are meni-rea de a semnala începutul mesajului. Este de reținut faptul că durata pulsului are valori între 500 și 2500 de microsecunde. De regulă, un servomotor va fi centrat dacă perioada pulsului este de 1500 de microsecunde, pentru a-l aduce în poziția de -90 de grade este necesar un puls cu lățimea de 500 de microsecunde, iar pentru 90 de grade este necesar un puls de 2500 de microsecunde. Astfel este simplu a fi calculate eventu-alele poziții intermediare. Intervalul de timp în care trebuie să se execute o mișcare <time> este calculat în milisecunde și poate avea valoarea maximă de 65535 ms.Spre exemplu dacă dorim să centrăm un servomotor aflat pe canalul 0, într-un interval de o secundă, este necesar să se utilizeze comanda: # 0 P 1500 T 1000 <cr>.

Dacă se studiază documentația aferentă SSC32 se va observa că pot există și alte forme de comenzi care pot fi utilizate. În cazul lui ROKEY s-a utilizat doar tipul de comandă menționat mai sus, nefiind necesară o altă sintaxă.

Poza 1 – Robotul ROKEY

Poza 3 – Două motoare de curent continuu montate pe șasiu

Poza 4 - Braț robotic cu trei grade de libertate

Poza 5 – Placa cu microcontrollerul

Page 52: Ht Barro

Cum se construiește un robot Cum se construiește un robot98 99Soluții Soluții

B. SoftwarePână acum am luat în considerare doar aspectele de implementare fizică sau hardware ale lui ROKEY. Totuși, cum este normal în orice sistem incorporat (cu microcontroller), trebuie să existe și implementarea software a unui algoritm care să-l determine să funcționeze. Cu ajutorul programului software putem con-trola toate componentele menționate în partea hardware ale lui ROKEY.

Pentru început va fi prezentată o schemă logică generală care să evidențieze întregul algoritm (Poza 11).După ce s-a creat o imagine generală privind codul rulat de robot, trebuie precizat că schema din poza 11 este varianta finală de soft implementat pe ROKEY. Vom explica în continuare fiecare etapă din schema logică și se va ajunge la nivel de cod efectiv în C, implementat în microcontroller-ul robotului.

Prima funcție Init_USART(); are rolul de a stabili valorile corespunzătoare registrelor interne pentru funcționarea la parametrii doriți ai modulului serial USART. DDRD=(0<<1)||(1<<0); setează pinii pentru RX și TX ca pini de intrare și respectiv de ieșire. UBRRL=12; configurează modulul USART pentru viteza de 38.4kbps, necesară pentru comunicația corespunzătoare cu driverul brațului mobil.

ARM_Initialize(); are rolul de a pregăti brațul sistemului mobil pentru lucru. Această funcție lucrează de fapt pe baza alteia în diverse ipostaze. Funcția în cauză este ARM_Move(…) care este urmată de o întârziere de 1500 de milisecunde. De exemplu ARM_Move(ARM_up); are rolul de a ridica brațul în poziție verticală. Tot în această manieră se vehiculează și celelalte comenzi către braț (deschidere gheare, coborâre braț):

void ARM_Initialize(void){ ARM_Move(ARM_up); // ridică braț DELAY_MS_( 1500 ); ARM_Move(ARM_open); // deschidere braț DELAY_MS_( 1500 ); ARM_Move(ARM_calibrate); // echilibrare braț (orizontal) DELAY_MS_( 1500 ); }

Funcția EntranceSearch(); cuprinde rutina de căutare a intrării în incintă. Odată stabilite valorile de funcționare, ROKEY se va apropia de peretele exterior al incintei după care va executa o întoarcere de 90 de grade spre dreapta. După această etapă va urmări conturul peretelui până când senzorul de dedesubt va observa linia neagră de la intrarea în incintă.

while(GetADC(Sens_DOWN)>=30){ if (GetADC(Sens_LEFT)<60) { MotorRun(20, 60, ML_VORWAERTS, MR_VORWAERTS); } if ((GetADC(Sens_LEFT)>=60)&&(GetADC(Sens_LEFT<=100))) { MotorRun(50, 50, ML_VORWAERTS, MR_VORWAERTS); } if (GetADC(Sens_LEFT)>100) { MotorRun(60, 20, ML_VORWAERTS, MR_VORWAERTS); }}FahrtStopp(); Exemplificarea de mai sus redă exact rutina de urmărire a peretelui exterior până la detectarea dungii negre de la intrare.

Funcția MotorRun(…) controlează viteza celor două motoare. Dacă sistemul este prea departe de perete acesta se apropie printr-un viraj fin la stânga, iar dacă se apropie prea mult sistemul va vira ușor la dreapta.

Odată intrat în incinta de cercetat, funcția ObjectSearch() își preia rolul de scanare pentru a găsi obiectul. Astfel ROKEY va merge înainte 20 de centimetri după care va cerceta, prin rotire, 90 de grade la stânga și apoi 180 de grade la dreapta, dacă obiectul există în spațiul baleiat. În cazul în care nu a detectat obiectul, sistemul mobil va reveni la poziția inițială, va înainta 20 de cm și va reîncepe scanarea. Dacă în timpul scanării s-a detectat obiectul, robotul se oprește în acea poziție și se apropie de obiect până la 3 cm după care părăsește funcția ObjectSearch(). Apoi robotul se centrează cu ajutorul senzorilor nivelului superior pe obiect, pentru a nu-l pierde din raza de acțiune.

Poza 10 – Controller SSC32 Lynxmotion

Init_USART();//inițializare USARTDDRD=(0<<1)||(1<<0);UBRRL=12;

Start

ARM_Initialize();//inițializare braț robotic//ridicare braț//deschidere clește//echilibrare gheare (orizontal)

Init_Motor();//inițializare motoare//initializare registre interne PWMcli();OCR1A=0;OCR1B=0;MOTORSPORT=STOPP;sei();

EntranceSearch();//căutare intrare//se merge perpendicular pe perete (10 cm)//se virează dreapta la 90 de grade //se merge pe lângă perete până la întâlnirea liniei negre a intrării

ObjectSearch();//căutarea obiectului la stânga și la dreaptase merge până la 10 cm distanță de obiect//se centrează pe obiect dacă este găsit//se orientează către obiect periodic până se ajunge la distanța de 3 cm de acesta

ObjectGet();//se prinde obiectul//se lasă brațul//se centrează ghearele orizontal//se închid ghearele//se ridică brațul

ExitSearch();//se caută ieșirea//se centrează robotul perpendicular pe pe-rete//se întoarce la dreapta cu 90 de grade// se merge pe lângă perete până când se ajunge la linia neagră

ObjectRelease();//se eliberează obiectul//se echilibrează ghearele orizontal//se lasă brațul//se deschide brațul//se ridică brațul

Stop

Poza 11 – Schema bloc a algorit-mului.

În rândurile care urmează am exemplificat rutina de scanare la stânga împreună cu condiția de ieșire:

while(!object_detected){ if ((GetADC(Sens_UP)>30)&&(GetADC(Sens_MIDDLE)>30)) object_detected=1; if (!object_detected) { FahreKurveStart(LINKS, 45, 30); while((!FahrtBeendet())&&((GetADC(Sens_UP)<=30)||(GetADC(Sens_MIDDLE)<=30))); FahrtStopp(); }…..}

Rutina ObjectGet() execută prinderea obiectului folosindu-se tot de funcția ARM_Move(…) menționată la ARM_Initialize().

ExitSearch() are menirea de a scoate sistemul mobil din incintă împreună cu obiectul. Funcția este împărțită în două părți: centrarea către peretele interior și apropierea de acesta, întoarcerea la 90 de grade la dreapta și orientarea spre ieșire urmărind peretele interior până la întâlnirea liniei negre de la ieșire. Per ansamblu rutina se aseamănă cu cea de căutare a intrării și se observă acest lucru din exemplifi-carea cu fragmentul de cod de mai jos:

while(GetADC(Sens_DOWN)>((last_down_val)-8)){ last_down_val=GetADC(Sens_DOWN); if (GetADC(Sens_MIDDLE)>=90) { FahreKurveStart(RECHTS, 45, 50); while(!FahrtBeendet()); FahrtStopp(); } else { if (GetADC(Sens_LEFT)<60) { MotorRun(20, 60, ML_VORWAERTS, MR_VORWAERTS); } if ((GetADC(Sens_LEFT)>=60)&&(GetADC(Sens_LEFT<=100))) { MotorRun(40, 40, ML_VORWAERTS, MR_VORWAERTS); } if (GetADC(Sens_LEFT)>100) { MotorRun(60, 20, ML_VORWAERTS, MR_VORWAERTS); } }}

Funcția ObjectRelease() eliberează obiectul folosind funcția ARM_Move(…), ca și celelalte funcții de control ale brațului. În aceste câteva rânduri am explicat pe scurt algoritmul de funcționare al robotului ROKEY. Totuși, există multe alte idei interesante, care pot fi remarcate direct în codul sursă al sistemului mobil proiectat. În cadrul paginilor de mai sus am dezbătut cele mai importante aspecte de implementare de pe parcursul proiectului și elementele noi în comparație cu stadiul de început al implementării.

Se poate observa că tot codul sursă este modularizat pentru o mai bună înțelegere a rutinelor funcționale. De exemplu partea pentru controlul motoarelor este cuprinsă în fișierul „motor.h”. Parametrii de configu-rare ai fiecărui modul pot fi studiați împreună cu documentația aferentă lui ATMEGA32 și astfel se poate ajunge la o implementare completă a acestui sistem sau de ce nu la o dezvoltare ulterioară după idei noi.

SFÂRȘIT

Poza 6 – Senzor Sharp GPD12.

Poza 7– Sensor Sharp CNY70.

Poza 8 - Pozițiile celor 7 senzori de proximitate.

Poza 9 – Caracteristica distanță - tensiune a senzorului de proximi-

tate Sharp GPD12.