34
Istituto Classe V sez. B I Sp “R  Ferrari 1 ecnico Industriale Sta “Alessandro Rossi” nd. Elettronica e Teleco ecializzazione robotica BOT ESPLORATORE” Marco & Verona Dieg  ale unicazioni o

Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

  • Upload
    pecafe

  • View
    1.137

  • Download
    0

Embed Size (px)

DESCRIPTION

Elaborato scritto del progetto "ROBOT ESPLORATORE" di Ferrari Marco e Verona Diego. Robot in grado di localizzare oggetti in una stanza e prenderli per depositarli successivamente alla "base".

Citation preview

Page 1: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 1/34

 

Istituto

Classe V sez. B I

Sp

“R

 

Ferrari

1

ecnico Industriale Sta

“Alessandro Rossi”

nd. Elettronica e Teleco

ecializzazione robotica

BOT ESPLORATORE”

Marco & Verona Dieg

 

ale

unicazioni

o

Page 2: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 2/34

 

2

INTRODUZIONE:

Il nostro progetto d’esame fa parte del vasto e variegato mondo della robotica e

dell’automazione industriale, che sempre con più vigore trova spazio nella vita

quotidiana. Le persone acquisiscono ogni giorno una maggiore familiarità con talimacchine, creando un fertile contesto per lo sviluppo della robotica. Il nostro

progetto combina l’automazione ricercata nell’ambiente produttivo-industriale

trasportandolo in un più vasto contesto di utilizzo. La struttura leggere e compatta e

un semplice sistema di locomozione rende il robot capace di muoversi in ambienti

casalinghi, differendo dai robot ingombranti e fissi che si trovano in tutte le

industrie. Il suo funzionamento generale permette una notevole flessibilità di

utilizzo mentre la sua struttura, composta da braccio meccanico e ruote motrici,

permette un campo di utilizzo molto ampio. Il robot è in grado di raccogliere oggetti

e di trasportarli in luoghi diversi. La modalità con cui svolge tale compito è

facilmente modificabile via software. I sensori del robot permettono allo stesso di

individuare oggetti di natura diversa e comune eliminando il bisogno che gli oggetti

stessi inviino al robot segnali particolari e rendendo il robot flessibile a diverse

situazione e impieghi. I due sensori in questione riprendono, inoltre, il

funzionamento della vista umana. La posizione dei sensori permette al robot di

determinare, non solo la distanza dell’oggetto, ma anche la posizione dello stesso

nello spazio. Con vari livelli di complessità software è possibile programmare il robot

dalla semplice individuazione di ostacoli nelle vicinanze fino alla ricostruzionedell’ambiente stesso che lo circonda. Tutte queste caratteristiche rendono il

progetto interessante e durante la sua costruzione è stato possibile aggiungere di

volta in volta nuovi compiti.

Nel progetto finale il robot è in grado di ricercare fino a due oggetti differenti ed una

volta raccolti inizia la ricerca della “base” dove depositerà tali oggetti prima di

cominciare una nuova ricerca. Durante la fase di ricerca il robot analizza i dati

provenienti dai due sensori ultrasuoni, mentre ruota su se stesso in modo da

ricoprire uno spazio di visuale di 360°. Grazie al confronto dei dati raccolti identifical’oggetto più vicino e si muove in tale direzione. A questo punto, sempre grazie

all’uso di due sensori ultrasuoni, il robot inizia a muoversi verso l’oggetto tenendosi

sempre il più verticalmente possibile a quest’ultimo in modo che l’oggetto entri

nell’apertura dove è alloggiata la pinza. Quando l'oggetto entra nella “bocca”

interrompe un fascio luminoso diretto verso un sensore di luce, in modo da

avvertire il “cervello” del robot, che a sua volta farà fermare i motori del robot.

Mentre il robot è immobile il braccio meccanico si aziona e, grazie a sensori di

contatto, controlla il suo movimento depositando il primo oggetto nel relativo

scomparto. Quando la pinza ritorna nella posizione originale il robot ricomincia lasua ricerca. Quando anche il secondo oggetto è nello scompartimento relativo il

robot inizia la ricerca della base. Per far riconoscere al robot il luogo preciso si è

Page 3: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 3/34

 

scelto di utilizzare una sorg

sensori di luce posti sul lato

seguire la sorgente più lumi

terra e inizia una nuova rice

DESCRIZIONE STRUTTURA E

inesistente spazio di azione.

L'intera struttura del robot

soddisfano un buon rappo

tale scopo abbiamo usato

per una parte della struttur

La base del robot è stata

resistente per sostenere il p

E' stata poi ritagliata un’a

base verso il lato frontalecentrale rispetto la posizion

di ultrasuono e di luce,

possibilità alla lattina di en

volta entrata, essere presa

verso la sua locazione p

braccio meccanico è comp

pinza (comprata in kit di mo

viene sollevata da un

grazie ad un filo da pesca

affidabilità e resistenza all'

Figura 1: struttura rob

3

nte luminosa fissa e esterna al robot

frontale del robot. In questi modo il

nosa. Raggiunta la base il robot depo

rca.

CORPO DEL ROBOT:

La struttura assume

con lato di 30 [cm] ch

muoversi grazie a 2

ruote sferiche per

struttura. Le ruote

scelte di materialcoefficiente di attrit

problemi causati d

aderenza di alcune

sferiche le abbiamo a

la loro semplicità e p

relativamente all'ing

dei suoi componenti è stata costruit

to peso/forza supportata da un pre

prevalentemente alluminio per la st

della carrucola.

reata con un foglio di plastica sotti

eso della circuiteria, delle lattine e del

ertura sulla

del robot ee dei sensori

per dare la

trare e, una

trasportata

edefinita. Il

osto da una

ntaggio) che

ervomotore

che assicura

usura e una

 

 

Figura 2: pinz

, in aggiunta a due

robot è in grado di

sita i due oggetti a

na forma di cubo

ha la possibilità di

uote motrici e 2

il sostegno della

otrici le abbiamo

con un altoo per ovviare ai

lla mancanza di

uperfici. Le ruote

dottate invece per

r i pochi problemi

mbro e al quasi

a con materiali che

zzo ragionevole. A

ruttura e plexiglas

le, ma abbastanza

braccio.

 

obot  

Page 4: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 4/34

 

forza massima portante di

ruotare nelle tre posizioni (

abbiamo utilizzato un ulte

movimento. Per mantenere

della base abbiamo aggancassicurandone la possibilità

quadrata di plexiglas che sc

I sensori luce, che vengono

perché il loro rivestimento

a contatto con la strutturasensori stessi. Sia i sensori

anteriore della struttura de

degli occhi umani (percezio

luce che abbiamo selezion

della bocca del robot è ill

maniera quasi assoluta la p

deve essere gestita, per i s

una taratura minuziosa e

possibile accurata. Il robot

ideato e progettato intera

noi e attribuiamo la sua

non perfettamente allineat

utilizzo di strumentazione

basilare e molto spesso ina

ad un simile progetto.

Figura 3: servomotore carrucol 

4

5 Kg. Per dar la possibilità alla pinza

posizione di "presa", posizione sede

riore servomotore che sostiene il p

la struttura il più verticale possibile d

iato la sua estremità superiore allo sdi rotazione grazie ad un perno.

Una parte della struttura

particolarmente interess

relativa ai movimenti di p

spostamento, discesa e ri

Da notare che per a

abbiamo sfruttato la f 

abbiamo utilizzato a nospostamento del barice

lattina della pinza stessa

attaccata superiorment

rre su una rotaia verticale.

utilizzati frontalmente, sono stati is

sterno coincide con la base del fotot

he funge da massa crea una situaziodi luce che i sensori ultrasuoni sono

l robot e la loro funzione può essere

ne della profondità e distanza di un

ato per creare un interruttore elet

uminato da 5 led ad alta luminosit

ssibilità di inteferenza della luce amb

nsori di luce destinati alla ricerca d

d il più

è stato

ente da

truttura

a ad un

i lavoro

deguata

a

 

 

Figura 4: apertura fr 

e alla carrucola di

e 2 per le lattine)

eso e permette il

urante la rotazione

cheletro del robot

del robot che ci ha

ti è stata quella

esa, sollevamento,

lascio della lattina.

bassare la pinza

rza di gravità e

stro vantaggio lotro con e senza

. Infatti la pinza è

ad una base

lati dalla struttura

ansitro stesso, che

ne di anomalia deiubicati nella parte

associata a quella

ggetto). Il sensore

ronico all'ingresso

per escludere in

ientale, che invece

lla base, grazie ad

o

 

ntale 

Page 5: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 5/34

 

SCHEMA A BLOCCHI DEL CO

Andremo ora a spiegare, de

robot.

BATTERIA:

Abbiamo scelto i pacchi ba

Li-BATT eco (Figura 6)  per

una capacità elevata, co

ridotto e dimensioni cont

caratteristiche della battesono riportate nella tabella

5

NTROLLO DEL ROBOT:

crivere e dimensionare i vari blocchi

teria LiPo

hè  hanno

un peso

nute. Le

ria sceltaeguente:

 

Figura 5: schema a blocchi generale 

Figura 6: bat 

he compongono il

 

eria 

Page 6: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 6/34

 

6

REGOLATORE DI TENSIONE (LM7805):

L’integrato LM7805 è un regolatore di tensione

che fornisce in uscita una tensione stabilizzata

di 5 [V] a patto che l’ingresso sia circa il doppio

di tale valore. I valori dei condestatori e il loro

collegamento sono dati dalla casa produttrice.

Il regolatore di tensione permette di ricavaredai 12 [V] della batteria, necessari per

comandare in modo ottimale i motori,

l’alimentazione TTL compatibile necessaria ai

vari crcuiti integrati.

Per le caratteristiche tecniche dell’integrato LM7805 si rimanda al link:

www.datasheetcatalog.org/datasheet/fairchild/LM7805.pdf  

 

Caratteristiche Tecniche:

Tensione Nominale 11,1V

Numero Elementi 3

Capacita' mAh 2000

Valore C (in scarica) 12

Corrente di scarica max 24A

Dimensioni 110 x 36 x 28 mm

Peso 185gr

Connettore di potenza Multiplex M6

Connettore di bilanciamento MPX/TP/FPTabella 1: Caratteristiche tecniche della batteria Lipo Li-BATT eco. 

CIRCUITO DEL REGOLATORE DI

TENSIONE

DIDASCALIA: 

VBAT: tensione prelevata dalla

batteria.

VCC (output): tensione stabilizzata

di uscita pari a 5 [V]

C1 = 0,33 [μF]

C2 = 0, 1 [μF]

output

5V

LM7805LINE VREG

COMMON

VOLTAGE

C1 C2

input

VBATT

Page 7: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 7/34

 

7

CIRCUITO DI CONTROLLO LIVELLO BATTERIA (LM7805):

Il circuito rappresentato compara, grazie ad un amplificatore operazionale in

configurazione comparatore, la tensione della batteria con una tensione di soglia.

L’operazionale e l’ingresso invertente devono essere alimentati con una tensionestabilizzata, che non si abbassi con lo scendere della tensione della batteria che

alimenta il robot; altrimenti il confronto di tali tensioni non avrebbe senso perché

entrambi dipendenti dal livello della batteria stessa. Grazie all’integrato LM7805

posso avere i 5 [V] costanti desiderati, finchè la batteria riamane sopra i 9 [V] circa.

Pertanto il valore di soglia, oltre la quale deve accendersi il led per segnalare il basso

livello della batteria, è stato scelto abbastanza elevato, anche per non sforzare i

motori, e vale circa 11 [V]. Non si ha una precisione elevata della tensione di soglia a

causa dell’utilizzo di resistenze di non alta

precisione, inoltre, si è dovuto adattare il

circuito ed il suo dimensionamento a valori

di resistenze poresenti in commercio. La

precisione non rappresenta comunque un

fattore decisivo per l’utilizzo di tale circuito,

esso è di sola indicazione. La tensione della

batteria viena abbassata grazie ad unpartitore in modo da rendere più semplice

il confronto con la tensione stabilizzata. Se

prevale l’ingresso non invertente, quindi la

tensione della batteria è sopra al valore

desiderato di 11 [V], l’uscita si porta in

saturazione (Vsat = Vcc = 5 [V]) e non viene

a crearsi differenza di potenziale ai capi del

diodo led che quindi rimane spento. Se

invece, la batteria scende sotto il livello di tensione prestabilito, prevale l’ingresso

invertente e l’uscita va a massa (-Vsat = Gnd = 0 [V]); di conseguenza il led si

accende per la differenza di potenziale che viene a formarsi ai suoi capi.

Dimensionamento componenti:

 . .  

ℎè 11 , : 

V+

DIDASCALIA:

VBAT: tensione prelevata dalla batteria.

VCC: tensione prelevata dal regolatore di tensione.

R1 = 12 [kΩ]

R2 = 10 [kΩ]

RL = 330 [Ω]

VCC

TLO81

3

2

4

7

6

51

RL

LED

VBAT

R1

R2

0

PIC

CIRCUITO CONTROLLO LIVELLO BATTERIA

Page 8: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 8/34

 

8

+=5 =11 : 

+= 2 1 + 2 ∗ : 2 1 + 2 = 511 =0,46 

1 = ( ,∗),   2 = 10 1=12  

FUNZIONAMENTO SENSORE ULTRASUONI (SRF05):

Il sensore ad ultrasuoni di cui si è fatto uso è SRF05 del tipo Trig/Echo. SRF05 non è

altro che l'acronimo di Sonic Range Finder 05 e come dice il suo stesso nome è un

misuratore di distanze che sfrutta gli ultrasuoni per determinare la distanza

dall'ostacolo che ha di fronte, ed in questo caso è il quinto della serie (05) . In Figura

1 è riportata la foto del sensore. I pin sulla destra sono utilizzati solo in fase di

programmazione del dispositivo stesso ovvero per l'installazione del firmware

all'interno del PIC che controlla il sensore stesso.

 

Caratteristiche tecniche

Tensione operativa 5 [V]

Corrente operativa tipica 4 [mA]Frequenza 40 [KHz]

Portata 1 [cm] – 4 [m]

Impulso di ritorno Segnale TTL positivo, di durata

proporzionale

alla distanza rilevata.

Trigger di input Impulso TTL di durata minima di 10 [uS]

Modalità di funzionamento Pin singolo per trig/echo o 2 Pin SRF04

compatibile.Dimensioni 43 x 20 x H 17 [mm]

Tabella 2: caratteristiche tecniche dei sensori SRF05 

Figura 7: sensore ad ultrasuoni SRF05 (modalità 2-pinTrig/Echo) 

Page 9: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 9/34

 

9

Il principio di funzionamento del sensore ad ultrasuoni è molto semplice. Gli

ultrasuoni sono frequenze che il nostro orecchio non è in grado di percepire. Il

sensore in questione lavora alla frequenza di 40 [KHz] mentre un buon orecchio

umano percepisce suoni fino a circa 22 [KHz]. Questo significa che il nostro orecchio

non è in grado di percepire il “suono” emesso da questo sensore. Quando il segnale,emesso dal sensore, raggiunge un ostacolo, viene riflesso. Dal momento che la

velocità con cui il suono viaggia nello spazio libero, è nota1, misurando il tempo che

percorre tra l'emissione del segnale e il suo ritorno è possibile risalire alla distanza

dell'oggetto che ha causato la riflessione. Da questo si capisce che se non c'è

nessuno ostacolo non verrà rilevato nessun eco. Il sensore SRF05 possiede due

sensori ad ultrasuoni uno utilizzato come sorgente per generare la nota a 40 [KHz] e

uno utilizzato come orecchio per rilevare l'eventuale segnale di eco derivante dalla

presenza di un ostacolo. La presenza dei due sensori non è in generale obbligatoria,

sono infatti presenti sistemi con un solo sensore che funziona prima come sorgente

e poi come orecchio per captare un eventuale eco. La velocità con cui il suono

viaggia nello spazio libero viene a dipendere dall'umidità dell'aria dalla temperatura

e anche dalla pressione atmosferica. Da questo si capisce che le misure saranno

soggette ad un certo errore. In questo progetto non è prevista nessuna

autocalibrazione ma è possibile comunque ottenere una precisione intorno al cm.

Un altro fattore che può causare un deterioramento della precisione del sensore è

legata alla forma dell'oggetto che causa la riflessione stessa. Forme complesse o

troppo grandi causano riflessioni multiple che degradano la precisione del sensorestesso2. Anche in questi casi la precisione è comunque più che sufficiente in molte

applicazioni. Il sensore è utilizzabile secondo le specifiche riportate in Tabella 2 in un

range compreso tra 1 [cm] e 4 [m] anche se l'accuratezza in questi due estremi non

è elevata. 

Vediamo ora in maggior dettaglio come comandare il sensore SRF05. Le linee di

controllo sono quelle sulla sinistra di Figura 7. Queste possono essere impostate per

due modalità di controllo differenti nominate 2-pin Trig/Echo e 1-pin Trig/Echo. La

prima modalità è riportata in Figura 7 ed è quella da noi adoperata; è possibile

osservare che partendo dall'alto bisogna collegare il pin 1 a Vcc, il pin 2 è per ilsegnale di output per l'echo, il pin 3 è il segnale di input per il Trig, il pin 4 è non

connesso3 mentre il pin 5 è collegato a massa.

1 La velocità del suono nello spazio libero e alla temperatura di 25°C è circa 340m/s, quindi se gridiamo la nostra voce

giungerà a 340m di distanza dopo un secondo.

2 Se si mettono troppo vicini un oggetto piccolo e uno grande il sensore tenderà a rilevare solo l'oggetto grande.3 Non va collegato nè a massa nè a Vcc poiché sulla scheda del sensore è gia' presente un resistore di pull-up. 

Page 10: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 10/34

 

10

Per comandare il sensore in questa modalità bisogna inviare un impulso sulla linea di

Trig di almeno 10 [uS]. Quando il sensore riceve questo impulso trasmette il segnale

alla frequenza di 40 [KHz] in 8 piccoli “colpetti”, e si mette poi in attesa del segnale

di eco. Il tempo che impiega il segnale d'eco a tornare al sensore è misurabile dalla

durata dell'impulso che è presente in uscita alla linea Echo. Se la durata è più' di30ms vuol dire che l'oggetto è oltre i 4 metri della portata del sensore.

Quanto appena descritto è riassunto in Figura 8.

Figura 8: modalità 2-pin Trig/Echo e range di funzionamento 

Il range di localizzazione di questo tipo di sensori è quello che vedete nella Figura 8.

MICROINTERRUTTORE A LEVETTA (FINECORSA):

Il funzionamento del finecorsa, usato come

sensore di contatto, è molto semplice. come

evidenzia il circuito, il deviatore, a riposo,

collega il pin di ingresso del PIC a massa. Se

premuta la levetta viene commutato ilcollegamento del PIC a Vcc in modo che il

microcontrollore rilevi un impulso a livello logico

alto 5[v]. Grazie a tale

impulso, ricevuto dal

microcontrollore, viene

gestito il movimento della carrucola del robot. La resistenza

è necessaria durante il test che il PIC esegue quando lo si

programma. Il microcontrollore infatti, durante tale test,

DIDASCALIA:

VCC: tensione data dal regolatore di tensione.

R1 = 10 [kΩ]

FINECORSA

R1

VCC

PIC

CIRCUITO SENSORI DI CONTATTO

 

Figura 9: interuttore finecorsa 

Page 11: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 11/34

 

11

abilita tutti le uscite portandole a livello logico alto, di conseguenza, senza la

resistenza verrebbe a crearsi un cortociucuito e il programmatore (pikit2) non

consentirebbe lo scaricamento del nuovo software nel PIC.

SENSORI SEGUI LUCE (L14G1):

Il principio di funzionamento è molto efficace e semplice: se il sensore di destra

vede più luce di quello di sinistra, la tensione all’ingresso invertente del

comparatore sarà maggiore di quella presente all’ingresso non invertente, quindi il

segnale che arriverà alpic sarà un livello logico

basso e, grazie ad un

opportuno programma,

il robot procederà

girando a destra

(quindi verso la parte

più luminosa); nel caso

in cui la tensione

all’emettitore del

fototransistor sinistro

sia maggiore di quello

destro allora il segnale

di uscita del

comparatore sarà a

livello logico alto equindi il robot girerà a

sinistra. A differenza

del sistema utilizzato

per identificare la presenza di luce o meno all’ingresso della bocca del robot, in

questo sistema serve una calibrazione più precisa e le possibilità di errore sono più

alte. Questo è causato dal fatto che le distanze sono maggiori e che la luce

ambientale influenza l’intero funzionamento del sistema.

 

DIDASCALIA:

VCC: tensione data dal regolatore di tensione di 5 [V].

R1 = 100 [KΩ]

R2 = 4,1 [KΩ]

R3 = 41[KΩ]

R4 = 330 [Ω]

CIRCUITO SENSORI SEGUI LUCE

TL081

3

2

4

7

6

51

VCC

PIC

L14G1

R3 R4R2

L14G1_2

R1

Page 12: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 12/34

 

12

SENSORE LUCE BOCCA (L14G1):

Per la rilevazione degli oggetti che entrano nella “bocca” del robot abbiamo

utilizzato, in modo semplice ma efficace, un fototransistor e un operazionale in

modalità comparatore. Collegando il fototransistor in modo che la base sia funzionedella luce, si riscontra che più luce c’è, più alta è la corrente sulla base e più corrente

passa dal collettore all’emettitore, che è collegato a massa tramite un trimmer che

utilizzeremo per tarare il sensore. Il trimmer non è di precisione perché non serve

una calibrazione minuziosa dato che il sensore deve solo rilevare la presenza o

l’oscuramento, da parte dell’ eventuale oggetto, di una fascio luminoso di 5 led rossi

ad alta luminosità. I led ad alta luminosità garantiscono anche una efficace immunità

del sensore alla luce ambientale che risulata molto più debole di quella emanata da

tali led. L’emettitore del fototransistor è stato invece collegato all’ingresso

invertente dell’operazionale così che l’uscita dell’operazionale sia a livello alto solo

in presenza di una tensione, all’ingresso non invertente, maggiore di quella presente

all’ingresso invertente. Questo si riscontra quando la corrente che attraversa il

fototransistor generi una tensione ai capi del trimmer, quindi all’ingresso invertente,

minore della tensione garantita dal partitore.

Figura 10: trasduttore L14G1 

Page 13: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 13/34

 

13

Tale partitore è necessario per mantenere, all’ingresso non invertente

dell’operazionale, una tensione di riferimento di 2,5 [V] e non 0 [V], come si

potrebbe pensare; in quanto l’emettitore del fototransistor avrà sempre una, anche

se piccola, corrente. Infine abbiamo collegato un led di alimentazione e un led in

uscita dell’operazionale per una più facile lettura dei segnali e delle tensioni presenti

nel circuito.

CIRCUITO SENSORE DI LUCE BOCCA

DIDASCALIA:

VCC: tensione data dal regolatore di tensione di 5 [V].

R1 = 100 [Ω]

R2 = 100 [KΩ]

R3 = 330 [Ω]

R4 = 330 [Ω]

R5 = 330 [Ω]

R6 = 330 [Ω]

Led rossi ad alta luminosità

Led alimentazione

attiva

TL081

3

2

4

7

6

51

VCC

PICL14G1

R1

R3

R4 R5R2

R6

Figura 11: trasduttore L14G1 

Page 14: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 14/34

 

SERVOMOTORI:

Per i movimenti del braccio

alcune loro caratteristiche p

1.  Coppia meccanica ele

2.  Possibilità di controll

3.  Dimensioni e peso rid

4.  Assenza di circuiti di c

I servmotori scelti sono di ti

dalle nostre possibilità: L’ es

dei tre servo adoperati men

funzionamento della carruc

Funzionamento generale de

In un servomotore l' energi

continua, il quale, qualora

cioè, il positivo con il nega

alberino, tramite una ridu

connesso il perno millerigh

avvitare la squadretta di cominuscolo potenziometro,

posizione assunta

squadretta. Il servo

connesso al circuito di c

tramite un cavetto tripol

conduttori rosso porta la t

di alimentazione provenie

regolatore di tensione LM7

quello giallo è invece ciclicpresente il segnale di coma

durata compresa tra 1 e 2

piccolo potenziometro,

sappiamo co

meccanicamente alla squa

è invece elettricamente co

ad un circuito monosta

tarato per generare, quand

impulsi di durata variabile

circuito di controllo (PIC

14

meccanico abbiamo deciso di adoper

referibili ai normali motori in corrente

v

 

ata a prezzi accessibili.

di precisione del movimento.

otti.

ontrollo e potenza esterni al servo.

po analogico, in quanto il costo dei se

cursione massima di rotazione tipica

re il terzo servo è multigiri e sarà utili

la che solleva ed abbassa la pinza.

l servo:

meccanica viene fornita da un micro

se ne inverta la polarità di alimentaz

ivo), è in grado di invertire il verso

zione effettuata da un treno di pi

, che fuoriesce dal corpo del servo, su

ando. A questo perno è anche collegche quindi varia la propria resistenz

dalla

viene

ntrollo

are: il

nsione

te dal

05, su

mentendo (di

sec). Il

che

llegato

dretta,

nnesso

bile e

la squadretta raggiunge gli estremi

a 1 a 2 msec. Questo segnale, e que

nel nostro caso), vengono invia

Figura 12: interno serv 

re tre servi, per

conitua:

vi digitali usciva

di 180° per due

zzato per il

-motore a corrente

ione (scambiando,

i rotazione; al suo

coli ingranaggi, è

l quale siamo soliti

ato l'alberino di unin funzione della

ella sua rotazione,

llo proveniente dal

i ad un circuito

m

 

otore 

Page 15: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 15/34

 

15

"comparatore", che ne raffronta la durata temporale; se l'impulso, chiamiamolo "di

posizione" differisce da quello "di controllo", il comparatore aziona il motore,

fornendo allo stesso la polarità idonea a farlo girare nel giusto verso, finché non

verificherà che la durata dei due impulsi è divenuta uguale. In altre parole, la logica

di controllo del servo "insegue" il segnale proveniente dal radiocomando, finché nonriesce a generarne uno uguale; e, nel realizzare questa condizione, ottiene proprio il

risultato ricercato.

Caratteristiche del servo:

Oltre alle dimensioni e al peso, vengono invariabilmente fornite due sole

caratteristiche operative: velocità e coppia. Ma questi valori, pur di fondamentale

importanza e facile interpretazione, non ne caratterizzano completamente la

qualità; come in ogni servomeccanismo, bisogna prendere in esame anche due altri

parametri fondamentali: la sensibilità e la precisione. Definiamo la sensibilità (in

modo molto generico) come la capacità di reagire ad una minima variazione del

segnale di comando: quanto più la variazione percepita sarà piccola, tanto più

elevata la sensibilità del sistema. La precisione, invece, può essere definita come la

capacità del servo di riportarsi sempre nella stessa posizione, qualora riceva un

identico segnale di comando; e ciò indipendentemente dal variare delle condizioni

ambientali (temperatura, vibrazioni...), dal mutare del carico meccanico (resistenzaopposta dalle superfici mobili comandate) e dalle modalità di operazione (ad

esempio, se il ritorno in posizione del servo avvenga con movimento orario, oppure

antiorario): tanto più piccolo sarà l'errore commesso, tanto migliore la precisione.

Queste due caratteristiche rappresentano in realtà gli incubi ricorrenti per tutti i

progettisti di servomeccanismi in genere; si dimostra infatti matematicamente (si

chiamavano Bode e Nyquist gli studiosi che hanno gettato le basi per effettuare

calcoli in materia) che l'incremento della sensibilità e/o della precisione avviene

sempre a scapito della stabilità del sistema. Ciò significa che, cercando di migliorare

oltre un dato valore questi parametri, si va inevitabilmente incontro ad un grave

degrado nelle prestazioni; nel caso del servomotore, la squadretta inizierebbe ad

oscillare avanti e indietro intorno alla posizione da raggiungere o, nel caso peggiore,

finirebbe a fondo corsa, senza rispondere più ai comandi. Come può allora il

costruttore di un servo migliorare la qualità del suo prodotto? I fattori determinanti

sono:

1) l'impiego d'ingranaggi metallici lavorati con precisione, in modo da ridurre alminimo i giochi e l'usura meccanica;

Page 16: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 16/34

 

16

2) l'adozione di un potenziometro di alta precisione, compensato rispetto alle

variazioni di temperatura ed efficacemente protetto dalle influenze ambientali;

3) la realizzazione di circuiti elettronici aventi stabilità elevata e deriva termica

minima.

Comandare il servo:

Nonostante ci sia una notevole

somiglianza, il segnale di

controllo dei Servo non è

assolutamente un segnale PWM.

La notazione corretta è PCM

ovvero Pulse-Code Modulation

che, letteralmente, si puòtradurre come Modulazione

Codificata di Impulsi. Per

convincersi è sufficiente

confrontare i due segnali con un

normale oscilloscopio. Il

funzionamento del Servo è

molto semplice. Come si può osservare, dallo schema a blocchi, il segnale di

Controllo arriva all'Elettronica. Questa lo confronta con il valore presente sul

Potenziometro e decide se deve fare ruotare il motore ed in che direzione.Per

comandare un Servo occorre, tramite il filo di controllo, inviare allo stesso una serie

di impulsi TTL. La durata del singolo impulso determina la posizione dell'asse di

uscita. Il tempo di pausa, tra un impulso ed il successivo, può variare entro ampi

limiti senza che si abbia una perdita di controllo del Servo. Dopo avere data una

descrizione qualitativa cominciamo a dare delle indicazioni quantitative stabilendo

dei precisi valori numerici.La durata dell'impulso può variare tra un minimo di 1mS

ed un massimo di 2mS. In funzione della durata di questo impulso il Servo farà

ruotare il perno di uscita, solidale con il potenziometro, fino al raggiungimento delcompleto equilibrio.

Relazione esistente trà larghezza degli

impulsi e rotazione:

La durata minima e massima

dell'impulso corrisponde ai due estremi

dell'escursione del Servo. L'impulso della

durata di 1,5mS corrisponde allaposizione centrale, o mediana, del

Servo. Bisogna ricordare che questo

 

Figura 13: interno servomotore 

Figura 14: rotazione albero servomotore 

Page 17: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 17/34

 

17

impulso deve essere continuamente rinfrescato (ripetuto) altrimenti il Servo, non

essendo più governato, si porterà a riposo. Questo significa che non potrà più

garantire di mantenere la posizione e l'albero potrà essere mosso dalle forze casuali

presenti sul carico applicato. La durata della Pausa, tra un impulso ed il successivo,

deve essere compresa tra un minimo di 10mS ed un massimo di 40mS. La duratatipica della Pausa tra gli impulsi è di 20mS che sono pari a 50Hz.

Per il servo multigiri, invece, la variazione della durata dell’impulso di comando

determina, oltre alla direzione di rotazione, la velocità con cui il servo ruota.

Caratteristiche dei servi usati:

Caratteristiche HS – 475 HB 

Tipo motore 3 poli ferrite

Cuscinetti a sfera 2

Ingranaggi Resina Karbonite

Coppia [Kg*cm] 5,5 (6 Volts)

Velocità [Sec./40°] 0,12 (6 Volts)

Velocità [Sec/60°] 0,18 (6 Volts)

Dimensioni [mm] 41 x 20 x 37

Peso [g] 39Tabella 3: caratteristiche HS - 475 HB e foto del servo 

Tabella 4: caratteristiche HSR - 1422 CR e foto del servo 

Caratteristiche HSR – 1422CR 

Tipo di controllo Standard RC – 1,5 [ms] servo

fermo

Coppia [Kg*cm] 2,8

Velocità 43.4 rpm (giri al minuto)

variabileSenso di rotazione Orario / Antiorario

Dimensioni [mm] 40.6 x 19.8 x 36.6

Peso [g] 41,7

Page 18: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 18/34

 

MOTORI IN CORRENTE CON

I motori in corrente contin

carcassa metallica contene

dalla stessa e da un rotore,sostiene delle bobine col

rotazione del motore.

aumentando il numero di la

Figura 15: motore

18

INUA E DRIVER DI POTENZA (L298):

ua (dc) sono costituiti da uno stato

te uno o più magneti che creano un

nche esso costituito da una carcassalegate fra loro a livello del colletto

aliment

campo

effetto

poli

repulsi

stesso

genera

metteappena

in mot

operan

del

alimen

manie

nuovi

perpe

dello

quindi

La fluttuazione della coppia risu

me del collettore.

La cop

motore

didipend

dall’alt

caratte

per

motore

lineare

conosc

vuoto

spunto

 

n corrente continua 

e formato da una

campo all’interno

metallica , il qualere che una volta

ate generano un

magnetico. Per

dell’attrazione dei

ontrari e della

ne dei poli di

egno, sul rotore si

una coppia che lo

in moto. Nonil rotore si mette

alcune spazzole,

o su lame diverse

collettore,

tando le bobine in

a che l’asse dei

poli del rotore sia

comunque

dicolare a quello

statore, causando

la continua

ltante diminuisce

pia che fornisce il

e la sua velocità

otazione sononti l’una

a. Si tratta di una

ristica essenziale

uesto tipo di

. Tale relazione è

e permette di

re sia la velocità a

che la coppia di

del motore.

Page 19: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 19/34

 

Da questo grafico si deduce

Le curve coppia-velocità e

del motore. La tensione diun impiego continuo di tal

ambiente di 20°C. E’ pera

diversa, in generale compre

se lo si sottoalimenta il mot

più potente ma si riscald

alimentazione comprese t

parallela a quella nominale.

vuoto varieranno dello stes

utile massima del motore, q

Un’altra caratteristica impo

conoscere la corrente assor

19

la curva della potenza utile:

otenza utile dipendono dalla tension

limentazione fornita per un certo momotore in funzionamento nominal

ltro possibile alimentare il motore

sa tra -50% e +100% della tensione pr

o

 

re sarà meno potente mentre se lo s

erà maggiormente . Per variazioni

a -25% e +50%, la nuova curva c

Di conseguenza, sia la coppia di spun

o valore percentuale n%. Per quanto

uesta si ottiene :

tante è data da grafico coppia-corren

ita a vuoto, oppure a motore bloccat

 

e di alimentazione

tore corrisponde aalla temperatura

con una tensione

evista: ovviamente

i sovralimenta sarà

della tensione di

ppia-velocità sarà

to che la velocità a

iguarda la potenza

e,che permette di

.

Page 20: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 20/34

 

20

Il rapporto tra la potenza meccanica utile che può essere fornita e la potenzaassorbita è detto rendimento. I motori in corrente continua sono costruiti per

funzionare permanentemente a velocità prossime alla propria velocità a vuoto, che

essendo nella maggior parte dei casi troppo elevata si applica un motoriduttore.

MOTORIDUTTORE:

Le nozioni da sapere per il nostro scopo sono abbastanza banali e approssimabili

senza problemi. I motori debbono fornire una forza maggiore del prodotto massaper accelerazione, più altre forze che si oppongono al moto come quelle di attrito al

rotolamento delle ruote (attrito volvente) .

Supponendo che il robot non debba pesare complessivamente più di 2[kg], si voglia

un’accelerazione a = 0.38[m/s^2] , il raggio delle ruote è 3,65[cm] e approssimando

a zero le forze che si oppongono al moto :

= ∗ ∗ → = 0 , 3 8 ∗ 2 ∗3,65 =2,74∗ 

Page 21: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 21/34

 

21

Essendo due i motori che muoveranno il robot, il peso si ripartirà metà su un motore

e metà sull’altro (sempre in situazioni ideali) dunque la coppia di ciascun motore

dovrà essere:

2 =

2,74

2 =1,37 ∗  

Per sicurezza, tenendo anche conto dell’approssimazione a zero delle forze

resistenti, si è scelto un motoriduttore con una coppia di 1,5[N*cm].

La seguente tabella riporta le caratteristiche del motoriduttore in questione: 

Tabella 5: caratteristiche motori DC  

A questo punto, conoscendo anche il numero di RPM, è possibile calcolare lavelocità di punta moltiplicando il numero di giri al secondo dell’asse per la

Page 22: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 22/34

 

22

circonferenza della ruota. Dividendo il numero di RPM (giri al minuto) per 60 si

ottengono il numero di giri al secondo.16560 =2,75

 

=2=0,73 

= ∗ →2,75

∗0,73 =2,0/ 

PILOTAGGIO MOTORI DC:

Il pilotaggio più semplice per un motore è quello ON-OFF che permette di mandare il

motore alla massima velocità oppure fermarlo. Il circuito risulta abbastanzasemplice e consiste in un interruttore ( Transistor,relè ecc) in serie al motore e un

diodo di ricircolo sul motorino (si ricorda che il motore in DC è un carico induttivo)

per evitare danni sul resto del circuito. Se si vuole invertire anche il verso di

rotazione si ricorre ad un “ponte H”, che consente di invertire il verso della corrente

che attraversa il motore stesso. In seguito è riportato lo schema semplificato di un

ponte H:

In questo caso è chiusa la coppia diinterruttori A2 e B1 consentendo alla

corrente di circolare in un

verso,viceversa interruttori A1 e B2 la

corrente circolerebbe in un’altro

verso. In questo caso se fosse chiusa

la coppia di interruttore A1 e B1 la

corrente circolerebbe in un altro

verso.

L298:

L’l298 è un driver per motori DC o stepper,costituito da due ponti H integrati,che

supportano un elevato voltaggio (46V) ed elevate correnti (2A per ponte) e che

possono essere pilotati con livelli in logica TTL. Ciascun ponte può essere disabilitato

Figura 16: schema semplificato di un ponte H 

Page 23: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 23/34

 

23

o abilitato tramite il relativo piedino di enable. Per il comando di tale integrato

inviamo attraverso il pic due pin per motore: se hanno valore uguale il motore sta

fermo; se hanno valore differente il motore si muove in avanti o indietro a seconda

che il bit alto sia il primo o il secondo. La velocità dei motori è invece comandata

mediante segnale di tipo pwm proporzionale ai dati rilevati dai sensori ultrasuoni,senza doverne indicare il valore via software. Semplicemente: se rileva una distanza

maggiore il sensore ad ultrasuoni destro, il motore relativo rimarrà fermo, viceversa

se rileva una distanza maggiore il sensore ultrasuoni sinistro. Il continuo alternarsi di

acceso/spento di comando ai motori, in funzione dei dati rilevati dai due sensori,

crea un segnale pwm che regola la velocità dei motori. Grazie al motoriduttore

incorporato nel motore, non è stato necessario modificare tale parametro a livello

software, in quanto le velocità in gioco sono molto basse e il robot ha il tempo di

girare nella giusta direzione senza una risposta immediata.

Figura 17: circuito interno L298 

Page 24: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 24/34

 

Caratteristiche tecniche d

 

24

ell’L298: 

Tabella 6: caratteristiche L298 

Figura 18: scheda di potenza dei motori  

Page 25: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 25/34

 

PIC 18F458:

Tabella 7: pin utilizzati 

Figura 19: pin PIC 18F458 

25

 

Figura 20: circui 

Figura 21: schema a blocchi 

 

o di controllo (PIC 18F458) 

interno del PIC 18F458 

Page 26: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 26/34

 

26

 /***************************************************************************************************************  pic usato: 18f458 quarzo: 40 [MHz] motori cc: collegamenti: motore destro RB0 e RB1 pin 33 e 34 

motore sinistro RB2 e RB3 pin 35 e 36 servomotore pinza: Vcc (rosso)

Gnd (nero)segnale (giallo) RC2 pin 17 

servomotore base: Vcc (rosso)Gnd (nero) segnale (giallo) RB4 pin 37 

servomotore carrucola: Vcc (rosso)Gnd (nero) segnale (giallo) RC3 pin 18 

sensori ultrasuoni: SRF05 collegamenti: Vcc (rosso) 

Echo (verde) RC1 e RC5 pin 16 e 24 Trigger (bianco/verde) RC0 e RC4 pin 15 e 23 Gnd (bianco) 

sensore bocca: /  collegamenti: Vcc (rosso) 

Gnd (bianco) input (blu) output (bianco/blu) RC7 pin 26 

sensori luce: /  collegamenti: Vcc (rosso) Gnd (bianco) input (blu) output (bianco/blu) RB7 pin 40 

fine corsa: /  collegamenti: Vcc (rosso) 

Gnd (bianco) alto (bianco/giallo) RB5 pin 38 basso (bianco/giallo) RB6 pin 39 

*************************************************************************************************************/   

#include <htc.h>  //include la libreria per i comandi 

 //VALORI DEFINE ******************** #define TEMP_i 10  //numero cicli for (variabile i) #define PAUSA 320  //pausa di circa 20 [ms] tra un impulso al servomotore e un altro #define TRIGGER 25  //impulso trigger sensori ultrasuoni di 10 [us] #define ECHO 50  //controlla il valore di echo ogni 20 [us] 

  // FUNZIONI ******************** void apri_pinza();  //apre la pinza void stringi_pinza();  //chiude la pinza void solleva_pinza();  //solleva la pinza void abbassa_pinza();  //abbassa la pinza void ruota_pinza_o();  //ruota la pinza in senso orario void ruota_pinza_a();  //ruota la pinza in senso antiorario void avanti();  //robot avanti dritto void indietro();  //robot indietro dritto void sinistra();  //robot gira sinistra void destra();  //robot gira destra void fermo();  //robot fermo 

 //DICHIARAZIONE VARIABILI ******************** int remember;  //serve per indicare se l'oggetto preso è il primo o il secondo int d;  //conta gli impulsi di us dall'invio del segnale di trigger del sensore ultrasuoni sinistro int z;  //durata impulso di echo da sensore ultrasuoni destro int s;  //conta gli impulsi di us dall'invio del segnale di trigger del sensore ultrasuoni sinistro int x;  //durata impulso di echo da sensore ultrasuoni sinistro int i;  //variabile di conteggio cicli for int pinza;  //variabile di conteggio cicli for int robot;  //variabile di conteggio cicli for(utilizzo di for di secondo livello) int control;  //serve per verificare che sia passato sufficiente tempo per gli ultrasuoni int remo;  //serve per verificare che siano inviati sufficienti impulsi per gli ultrasuoni int minore=100;  //serve per trovare la lattina più vicina int remember=0;  //serve per verificare che siano inviati sufficienti impulsi per gli ultrasuoni int ostia=0;  //serve ad accedere alla parte di programma specifica  //a,b,c,e sono usate come label quindi non disponibili per evetuali variabili 

Page 27: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 27/34

 

27

 //PROGRAMMA PRINCIPALE ******************** main(){ 

  //SETTAGGIO REGISTRI ******************** TRISA=0;  //PORTA in uscita TRISB=0b11100000;  //RB5,6,7 ingresso (FINE CORSA UP, DOWN, RITORNO) TRISC=0b10100010;  //RC1 e RC5 in ingresso (ECHO DX e ECHO SX) TRISD=0b00000000;  //PORTD in uscita TRISE=0;  //PORTE in uscita T0CON=0b11000001;  //prescaler=4 : frequenza=fosc/(4*prescaler)  //POSIZIONE INIZIALE PINZA ******************** 

inizio: fermo();  //ferma i movimenti delle ruote del robot for(robot=0;robot<45;robot++){  //ruota il braccio e stringi pinza

stringi_pinza(); ruota_pinza_a();

} while(PORTBbits.RB6==0){  //abbassa finché non viene premuto il finecorsa inferiore 

abbassa_pinza(); } for(robot=0;robot<30;robot++){

apri_pinza(); }pinza=0;

  //GIRA IL ROBOT E RILEVA LA LATTINA PIU' VICINA ******************** if(ostia==0){ 

while(pinza<=150){  //aspetta che il robot faccia 360° for(i=0;i<10000;i++){  //gira con piccoli scatti e ogni scatto controlla la vista 

PORTBbits.RB0=1;  //motore sinistro avanti PORTBbits.RB1=0; //motore sinistro avanti PORTBbits.RB2=0;  //motore destro indietro PORTBbits.RB3=1;  //motore destro indietro 

} pinza++;  //rilevazione distanza d=0;  //azzera la variabile di conteggio control=0;  //azzera control remo=0;  //azzera remember 

 //GENERAZIONE IMPULSO DI TRIGGER(utilizza un solo sensore ultrasuoni) PORTCbits.RC0=1;  //invia impulso di trigger TMR0L=0;  //azzera timer while(TMR0L!=125);  //durata impulso di trigger 10us PORTCbits.RC0=0;  //spegni impulso di trigger 

 //ALGORITMO RICEZIONE SEGNALE DI ECHO P: if(PORTCbits.RC1==1){  //se il segnale di echo dal sensore è arrivato al pic 

while(TMR0L!=125);  //delay di 50us - 125 d++;  //conta quanti impulsi da 50us ci stanno finché l'echo è 1 remo++;  // incremento remember control=1;  //quando control è a 1 allora l'echo è andato a livello alto goto p;

} else{  //se il segnale di echo non è arrivato al pic remo++;  //incremento remember 

if(control==0){  //l'echo è ancora a livello basso goto p; 

}else{ 

if(remo<700){  //se ho fatto meno di 700 controlli continuo goto p; 

} else{  //MEMORIZZA L'OGGETTO PIU' VICINO 

if(d<(minore+1)){ minore=d; 

} } 

} }  //chiudi else 

} //chiudi while }  //chiudi ostia=0  //ferma il robot per evitare eventuali errori for(i=0;i<60;i++){ 

for(pinza=0;pinza<3000;pinza++){

Page 28: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 28/34

 

28

fermo(); } 

 //GIRA SU SE STESSO FINCHÉ NON RITROVA L'OGGETTO PIÙ VICINO GIÀ MEMORIZZATO ******************** while(1){ 

 //rilevazione distanza d=0;  //azzera la variabile di conteggio control=0;  //azzera control remo=0;  //azzera remember 

 //GENERAZIONE IMPULSO DI TRIGGER(utilizza un solo sensore ultrasuoni) PORTCbits.RC0=1;  //invia impulso di trigger TMR0L=0;  //azzera timer while(TMR0L!=125);  //durata impulso di trigger 10us PORTCbits.RC0=0;  //spegni impulso di trigger 

 //ALGORITMO RICEZIONE SEGNALE DI ECHO y: if(PORTCbits.RC1==1){  //segnale di echo dal sensore è arrivato al pic 

while(TMR0L!=125);  //delay di 50us - 125 d++;  //a conta quanti impulsi da 50us ci stanno finché l'echo è a 1 remo++;  //incrementto remember control=1;  //quando control è a 1 significa che echo è andato a 1 goto y;

} else{  //se il segnale di echo non è arrivato al pic 

remo++;  //incremento remoif(control==0){  //l'echo è ancora a livello basso 

goto y; }else{

if(remo<700){  //se ho fatto meno di 700 controlli continuo goto y; 

} else{ 

if(d<=minore){  //se vede l'oggetto più vicino smette di girare ostia=1; goto vai; 

} else{  //continua a girare for(i=0;i<10000;i++){ 

PORTBbits.RB0=1; //motore sinistro avanti PORTBbits.RB1=0;  //motore sinistro avanti PORTBbits.RB2=0;  //motore destro indietro PORTBbits.RB3=1;  //motore destro indietro 

} } 

} }  //chiudi else 

}  //chiudi else(se il segnale non è ritornato al pic) }  //chiudi while 

vai:  //INIZIO RICERCA E PRELIEVO OGGETTI ******************** if(ostia==1){ 

while(1){  //ciclo infinito if(PORTCbits.RC7==0){  //se la bocca del robot è libera   //CERCA OGGETTO ******************** 

 //rilevazione distanza d=0;  //azzera la distanza destra s=0;  //azzera la distanza sinistra 

 //GENERAZIONE IMPULSO DI TRIGGER (SENSORE DESTRO) PORTCbits.RC4=1;  //invia impulso di trigger sensore destro TMR0L=0;  //azzera timer while(TMR0L!=TRIGGER);  //durata impulso di trigger 10us PORTCbits.RC4=0;  //spegni impulso di trigger sensore destro 

 //ALGORITMO RICEZIONE SEGNALE DI ECHO (SENSORE SINISTRO) a: if(PORTCbits.RC1==1){  //segnale di echo dal sensore è arrivato al pic 

while(TMR0L!=ECHO);  //delay di 6us corrispondenti ad 1mm s++;  //a conta quanti impulsi ci stanno finché l'echo è a livello alto x=s;  //x contiene la distanza massima rilevata dal sensore sinistro goto a; 

Page 29: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 29/34

 

29

 //GENERAZIONE IMPULSO DI TRIGGER (SENSORE SINISTRO) PORTCbits.RC0=1;  //invia impulso di trigger sensore sinistro TMR0L=0;  //azzera timer while(TMR0L!=TRIGGER);  //durata impulso di trigger 10us PORTCbits.RC0=0;  //spegni impulso di trigger sensore sinistro 

 //ALGORITMO RICEZIONE SEGNALE DI ECHO (SENSORE DESTRO) 

b: if(PORTCbits.RC5==1){  //segnale di echo dal sensore destro è arrivato al pic while(TMR0L!=ECHO);  //delay di 6us corrispondenti ad 1mm d++;  // conta quanti impulsi l'echo è a livello alto z=d;  //z contiene la distanza massima rilevata dal sensore destro goto b; 

 //CONFRONTO DISTANZE RILEVATE if((d<600)&&(s<600)){  //se entrambi i sensori oggetto < 600 

if(x<z){  //se la distanza dal sensore sx è < di quella del sensore dx sinistra(); 

} if(x>z){  //se la distanza dal sensore dx è < di quella del sensore sx

destra(); } if(x==z){  //se la distanza rilevata dai sensore è uguale

avanti(); } } else{  //se non vedo oggetti nelle vicinanze vado dritto 

avanti(); } 

else{  //se l'oggetto è nella bocca avanti un secondo e fermati   //RECUPERO OGGETTO ******************** for(i=0;i<TEMP_i;i++){ 

for(pinza=0;pinza<3000;pinza++){fermo(); 

} } for(i=0;i<TEMP_i;i++){ 

for(pinza=0;pinza<3000;pinza++){avanti(); 

} }for(i=0;i<TEMP_i;i++){ 

for(pinza=0;pinza<2000;pinza++){fermo(); 

} }  //STRINGI PINZA E SOLLEVALA while(PORTBbits.RB5==0){ 

stringi_pinza(); solleva_pinza(); 

}  //RUOTA BRACCIO(in funzione di remember) E STRINGI PINZA for(robot=0;robot<45;robot++){ 

stringi_pinza();  //POSIZIONE OGGETTO 1 (DIETRO) if(remember==0){  //se è il primo oggetto che trovi mettilo dietro 

 //RUOTA BASE (ORARIO) for(i=0;i<TEMP_i;i++){  //invia al servomotore un impulso di circa 1,9 [ms] 

for(pinza=0;pinza<50;pinza++){ PORTBbits.RB4=1;

} } for(i=0;i<TEMP_i;i++){  //pausa tra gli impulsi inviati di circa 20ms 

for(pinza=0;pinza<PAUSA;pinza++){ PORTBbits.RB4=0;

} } 

}  //POSIZIONE OGGETTO 2 (DESTRA) if(remember==1){  //se è il secondo oggetto che trovi mettilo a destra  //RUOTA BASE (ORARIO) 

for(i=0;i<TEMP_i;i++){  //invia al servomotore un impulso for(pinza=0;pinza<29;pinza++){ 

PORTBbits.RB4=1;

Page 30: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 30/34

 

30

} } for(i=0;i<TEMP_i;i++){  //pausa tra gli impulsi inviati di circa 20ms 

for(pinza=0;pinza<PAUSA;pinza++){ PORTBbits.RB4=0;

} } 

}  //chiudi remember 

}  //chiudi ciclo per far ruotare la pinza  //ABBASSA E STRINGI PINZA while(PORTBbits.RB6==0){ 

stringi_pinza(); abbassa_pinza(); 

 //INIZIO RICERCA BASE ******************** if (remember>=1){  //se ha due lattine ritorna alla base con la pinza sulla seconda destra 

ostia=2; goto e; 

 //SOLLEVA E APRI PINZA while(PORTBbits.RB5==0){ apri_pinza(); 

solleva_pinza(); } 

 //RUOTA (ANTIORARIO) E STRINGI PINZA for(robot=0;robot<45;robot++){ 

stringi_pinza(); ruota_pinza_a();

 //POSIZIONE ORIGINARIA while(PORTBbits.RB6==0){  //finchè il fine corsa basso non viene attivato 

abbassa_pinza(); } for(robot=0;robot<45;robot++){ 

apri_pinza(); } remember++;  //incrementa remember ostia=0;  //serve per far ripartire dall'inizio goto inizio;  //il robot comincerà il programma dall'inizio 

}}  //chiudi whlie ostia=1 

}  //chiudi ostia=1 

 //ALGORITMO RICERCA BASE ******************** e: 

if(ostia==2){ while(1){

while(1){  //prima incontra base poi esce dal while e deposita lattine if(PORTBbits.RB7==0){  //in base ai sensori luce gli arriva un segnale 

for(i=0;i<1000;i++){ destra(); } 

} else{ 

for(i=0;i<1000;i++){ sinistra(); 

} }  //rilevazione distanza d=0;  //azzera la variabile di conteggio control=0;  //azzera control remo=0;  //azzera remember 

 //GENERAZIONE IMPULSO DI TRIGGER PORTCbits.RC0=1;  //invia impulso di trigger TMR0L=0;  //azzera timer while(TMR0L!=125);  //durata impulso di trigger 10us PORTCbits.RC0=0;  //spegni impulso di trigger 

Page 31: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 31/34

 

31

 //ALGORITMO RICEZIONE SEGNALE DI ECHO q: if(PORTCbits.RC1==1){  //segnale di echo dal sensore è arrivato al pic 

while(TMR0L!=125);  //delay di 50us - 125 d++;  //a conta quanti impulsi ci stanno finché l'echo è a livello alto remo++;  //ogni volta che controllo incrementto remo control=1;  //quando control è a 1 significa che echo è a livello alto 

goto q; } else{ /  /se il segnale di echo non è arrivato al pic 

remo++;  //incremento remember if(control==0){  //se control significa che l'echo è ancora andato a livello bass 

goto q;}else{  //altrimenti 

if(remo<700){  //se ho fatto meno di 700 controlli continuo goto q; 

} else{ 

if(d<=2) { //se vedi la base a pochi centimetri goto mucca; 

} } 

}

 } }  //chiudi while sensore 

mucca:  //BASE TROVATA ******************** fermo(); 

 //SOLLEVA STRINGENDO PINZA(la pinza si trova ancora nella 2 posizione(a destra)) while(PORTBbits.RB5==0){  //tira su tutto e stringi(la pinza è già nella posizione destra) 

stringi_pinza(); solleva_pinza(); 

 //RUOTA (ANTIORARIO) STRINGENDO PINZA for(robot=0;robot<45;robot++){ 

stringi_pinza(); ruota_pinza_a();

 //ABBASSA STRINGENDO PINZA while(PORTBbits.RB6==0){ 

stringi_pinza(); abbassa_pinza(); 

 //APRI PINZA for(robot=0;robot<45;robot++){ 

apri_pinza(); } 

 //DEPOSITA SECONDA LATTINA SPOSTANDOSI INDIETRO for(i=0;i<10;i++){ for(pinza=0;pinza<32000;pinza++){ 

indietro(); } 

 //si sposta più indietro e deposita l'altra lattina fermo();  //SOLLEVA PINZA while(PORTBbits.RB5==0){ 

solleva_pinza(); }  //RUOTA PINZA (ORARIO) for(robot=0;robot<45;robot++){ 

for(i=0;i<TEMP_i;i++){  //invia al "servomotore base" un impulso di circa 1,9 [ms] 

for(pinza=0;pinza<50;pinza++){PORTBbits.RB4=1;

}} for(i=0;i<TEMP_i;i++){  //pausa tra gli impulsi inviati al "servomotore base" di circa 20ms 

Page 32: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 32/34

 

32

for(pinza=0;pinza<PAUSA;pinza++){ PORTBbits.RB4=0;

} }

 //ABBASSA PINZA(GIA' APERTA) 

while(PORTBbits.RB6==0){ abbassa_pinza(); } 

 //SOLLEVA STRINGENDO PINZA while(PORTBbits.RB5==0){ 

stringi_pinza(); solleva_pinza(); 

 //RUOTA (ANTIORARIO) STRNGENDO PINZA for(robot=0;robot<45;robot++){ 

stringi_pinza(); ruota_pinza_a(); 

 //ABBASSA STRINGENDOLA PINZA  while(PORTBbits.RB6==0){ 

stringi_pinza(); abbassa_pinza(); 

} for(robot=0;robot<45;robot++){ 

apri_pinza(); } for(pinza=0;pinza<100;pinza++){ 

for(i=0;i<10000;i++){ indietro(); 

} } 

 //SI GIRA E CONTINUA LA RICERCA DELLE LATTINE for(pinza=0;pinza<80;pinza++){ 

for(i=0;i<10000;i++){ PORTBbits.RB0=1;  //motore sinistro avanti PORTBbits.RB1=0;  //motore sinistro avanti PORTBbits.RB2=0;  //motore destro indietro PORTBbits.RB3=1;  //motore destro indietro 

} } ostia=0;  //necessario per ripartire il programma dall'inizio remember=0;  //settaggio necessario per prendere 2 nuove lattine goto inizio;  //riparte dall'inizio 

}  //chiudi while(ostia=2) }  //chiudi ostia=2 

}  //chiudi int 

  //FUNZIONI ******************** 

 //MOVIMENTI PINZA ******************************* 

 //APRI PINZA void apri_pinza(){

for(i=0;i<TEMP_i;i++){  //invia al "servomotore pinza" un impulso di circa 1,9 [ms] for(pinza=0;pinza<1;pinza++){ 

PORTCbits.RC2=1;} 

} for(i=0;i<TEMP_i;i++){  //pausa tra gli impulsi inviati al "servomotore pinza" di circa 20ms 

for(pinza=0;pinza<PAUSA;pinza++){ PORTCbits.RC2=0;

} } 

}  //STRINGI PINZA void stringi_pinza(){ 

for(i=0;i<TEMP_i;i++){  //invia al "servomotore pinza" un impulso di circa 1,9 [ms] 

Page 33: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 33/34

 

33

for(pinza=0;pinza<29;pinza++){ PORTCbits.RC2=1;

} } for(i=0;i<TEMP_i;i++){  //pausa tra gli impulsi inviati al "servomotore pinza" di circa 20ms 

for(pinza=0;pinza<PAUSA;pinza++){ PORTCbits.RC2=0;

} } } 

 //SOLLEVA PINZA void solleva_pinza(){ 

for(i=0;i<TEMP_i;i++){  //invia al "servomotore carrucola" un impulso di circa 1,9 [ms] for(pinza=0;pinza<25;pinza++){ 

PORTCbits.RC3=1;} 

} for(i=0;i<TEMP_i;i++){  //pausa tra gli impulsi inviati al "servomotore carrucola" di circa 20ms 

for(pinza=0;pinza<PAUSA;pinza++){ PORTCbits.RC3=0;

} } 

 //ABBASSA PINZA void abbassa_pinza(){ 

for(i=0;i<TEMP_i;i++){  //invia al "servomotore carrucola" un impulso di circa 1,9 [ms] for(pinza=0;pinza<40;pinza++){ 

PORTCbits.RC3=1;} 

} for(i=0;i<TEMP_i;i++){  //pausa tra gli impulsi inviati al "servomotore carrucola" di circa 20ms 

for(pinza=0;pinza<200;pinza++){ PORTCbits.RC3=0;

} } 

 //RUOTA PINZA (ORARIO) void ruota_pinza_o(){ for(i=0;i<TEMP_i;i++){  //invia al "servomotore base" un impulso di circa 1,9 [ms] 

for(pinza=0;pinza<29;pinza++){ PORTBbits.RB4=1;

} } for(i=0;i<TEMP_i;i++){  //pausa tra gli impulsi inviati al "servomotore base" di circa 20ms 

for(pinza=0;pinza<PAUSA;pinza++){ PORTBbits.RB4=0;

} } 

 //RUOTA PINZA (ANTIORARIO) void ruota_pinza_a(){ 

for(i=0;i<TEMP_i;i++){  //invia al "servomotore base" un impulso di circa 1,9 [ms] for(pinza=0;pinza<1;pinza++){ PORTBbits.RB4=1; } 

} for(i=0;i<TEMP_i;i++){  //pausa tra gli impulsi inviati al "servomotore base" di circa 20ms 

for(pinza=0;pinza<PAUSA;pinza++){ PORTBbits.RB4=0;

} } 

  //MOVIMENTI ROBOT ********************  //AVANTI void avanti(){ 

PORTBbits.RB0=1;  //motore sinistro avanti PORTBbits.RB1=0;  //motore sinistro avanti 

PORTBbits.RB2=1;  //motore destro avanti PORTBbits.RB3=0;  //motore destro avanti 

Page 34: Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego)

5/6/2018 Tesina Maturità 2011 - ROBOT ESPLORATORE (Ferrari Marco & Verona Diego) - slidepdf.com

http://slidepdf.com/reader/full/tesina-maturita-2011-robot-esploratore-ferrari-marco-verona-diego 34/34

 

34

 //INDIETRO void indietro(){ 

PORTBbits.RB0=0; //motore sinistro indietro PORTBbits.RB1=1;  //motore sinistro indietro 

PORTBbits.RB2=0; //motore destro indietro PORTBbits.RB3=1; //motore destro indietro 

 //SINISTRA void sinistra(){ 

PORTBbits.RB0=1;  //motore sinistro fermo PORTBbits.RB1=1;  //motore sinistro fermo 

PORTBbits.RB2=1;  //motore destro avanti PORTBbits.RB3=0;  //motore destro avanti 

 //DESTRA void destra(){ 

PORTBbits.RB0=1;  //motore sinistro avanti PORTBbits.RB1=0;  //motore sinistro avanti 

PORTBbits.RB2=1; //motore destro fermo PORTBbits.RB3=1;  //motore destro fermo } 

 //FERMO void fermo(){ 

PORTBbits.RB0=0;  //motore sinistro fermo PORTBbits.RB1=0;  //motore sinistro fermo 

PORTBbits.RB2=0; //motore destro fermo PORTBbits.RB3=0;  //motore destro fermo