Anteprima
Vedrai una selezione di 3 pagine su 10
progetto per la realizzazione di un robot Pag. 1 progetto per la realizzazione di un robot Pag. 2
Anteprima di 3 pagg. su 10.
Scarica il documento per vederlo tutto.
progetto per la realizzazione di un robot Pag. 6
1 su 10
Disdici quando vuoi 162x117
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Sintesi

Tesina - Premio maturità  2009

Titolo: progetto per la realizzazione di un robot

Autore: Gessa Marco

Descrizione: Realizzazione di un dispositivo robot che abbia la possibilità  di andare avanti, indietro e riavviarsi, comandato a distanza attraverso il router "La Fonera" tramite un collegamento wifi ed un interfaccia web.

Il primo passo del progetto consiste nella realizzazione del robot che deve avere la possibilità  di alloggiare al suo interno il dispositivo fonera, il circuito elettronico per il pilotaggio della meccanica e il sistema di alimentazione. Per fare questo ho utilizzato i pezzi del meccano, che ben si prestano ad un assemblaggio modulare del robot. Il sistema di movimento è stato realizzato con un motorino ad inversione di polarità  recuperato da un lettore di musicassette accoppiato alle ruote attraverso una cinghia

Area: tecnologica

Materie trattate: elettronica: relizzazione del circuito elettronico; informatica-sistemi: creazione del programma server in pyton, software configurazione fonera; meccanica: costruzione del robot con alloggio fonera, circuito elettrico e alimentazione.

Estratto del documento

1. Introduzione

Realizzazione di un dispositivo robot che abbia la possibilità di andare avanti, indietro e riavviarsi,

comandato a distanza attraverso il router “La Fonera” tramite un collegamento wifi ed un

interfaccia web

2. Hardware

L'hardware di questo progetto, si puo' dividere in tre diverse unita': la parte meccanica e la parte

elettronica e la parte “La Fonera”.

2.1 Meccanica

Il primo passo del progetto consiste nella realizzazione del robot che deve avere la possibilità di

alloggiare al suo interno il dispositivo fonera, il circuito elettronico per il pilotaggio della meccanica

e il sistema di alimentazione.

Per fare questo ho utilizzato i pezzi del meccano, che ben si prestano ad un assemblaggio modulare

del robot. Il sistema di movimento è stato realizzato con un motorino ad inversione di polarità

recuperato da un lettore di musicassette accoppiato alle ruote attraverso una cinghia.

3

2.2 Elettronica

Realizzata la parte meccanica il secondo passo del progetto prevede la realizzazione del circuito

elettronico in grado di invertire la polarità ai capi del motore.

Invertendo l’alimentazione del motorino infatti si inverte il senso di marcia del robot. Per ottenere

tale inversione di polarità ho utilizzato un relè con avvolgimento da 5 volt e le uscite normalmente

chiuse e normalmente aperte dello stesso collegate al motore.

Un ulteriore relè messo in cascata mi da la possibilità di fermare il motore.

Il consenso per l’eccitazione dei relè è dato da una serie di uscite logiche del fonera che io abilito o

disabilito attraverso la parte software (analizzata in seguito).

Il primo problema affrontato è stato quello di dover amplificare il segnale di uscita del fonera che

non era in grado di eccitare l’avvolgimento del relè per ovviare a tale problema ho inserito due

transistor del tipo NPN modello BC 547 c che pilotati sulla base dal segnale in uscita del fonera mi

portavano sull’avvolgimento del relè la tensione della batteria da 6 volt che permetteva

l’eccitazione del relè.

Schema elettrico:

Componenti:

Quantita' Componente

2 Rele' con avvolgimento da 5 volt

2 Transistor BC 547 C

1 Cicalino

1 Router “La Fonera”

1 Batteria da 6 volt per alimentazione circuito e motore

1 Batterie per alimentazione fonera

2 Diodo led

1 Motore 6 volt 4

Il rele uno pilotato dalla porta uno del fonera abilita sulle uscite 9 ed 8 (contatti normalmente aperti)

l’alimentazione al rele 2 sugli ingressi 13 e 4. Il relè due pilotato dalla porta 3 del fonera ha le uscite

9 ed 8 (normalmente aperte ) e le uscite 6 ed 11 (normalmente chiuse) incrociate sul motore.

Attraverso la tabella di verità riportata sotto si riesce a capire l’interazione tra ingressi ed uscite

Sul movimento del motore

Ingresso Porta 1 Ingresso Porta 3 Evento

0 0 Fermo

0 1 Fermo

1 0 Indietro

1 1 Avanti

Ho completato il robot con due led ed un cicalino che vengono attivati in base al senso di marcia

Led verde acceso quando il robot si muove in avanti, Led giallo e cicalino acceso quando il robot si

muove all’indietro. 5

2.3 La fonera

“La Fonera” e' un piccolo router venduto ad un costo abbastanza basso (circa 25 euro) dall'azienda

spagnola FON, per estendere il progetto, appunto chiamato “Fon”, che prevede la creazione di una

rete condivisa in tutto il mondo.

Un router e' in se' un computer, “La Fonera” e' dotata di un processore di 300mhz, 16mb di

memoria ram, e circa 15mb di memoria di memoria flash. Offre inoltre due antenne wireless, ed una

di queste verra' utilizzata dal nostro robot per comunicare con altri computer.

Per l'attivazione dei motorini, dentro la fonera sono presenti 6 pin GPIO (General Purpose Input

Output) che possono essere attivati mediante software e che forniscono una tensione di 3,7V

quando sono accesi.

ù 6

3. Software

Per quanto riguarda il software analizzeremo prima come e' stato configurata “La Fonera” ed in

seguito il funzionamento del programma server, che gestira' la comunicazione con l'esterno.

3.1 Linux OpenWrt

La Fonera appena comprata, ha al suo interno una distribuzione di Linux ottimizzata per la

piattaforma hardware del router, configurata per svolgere lo scopo iniziale, ovvero la funzione di

router wireless; l'azienda “Fon” ha reso pero' questa piattaforma difficilmente modificabile.

Ho deciso di installare Linux OpenWrt, una distribuzione fatta apposta per i router di questo tipo;

tramite un applicazione trovata su internet, ho sostituito il firmware originale della Fonera con un

firmware OpenWrt compilato per questa piattaforma; appena installato openwrt, collegandosi al

server ssh del “La Fonera” da un altro computer, avremo davanti a noi una normalissima console

linux, con i commandi fondamentali per la configurazione e l'installazione di nuovi pacchetti.

La rete e' stata configurata in modo da far apparire il fonera come un access point senza password

(questo solo per velocizzare i test in fase di progettazione), e di risultare accessibile all'ip

192.168.254.105.

Per la comunicazione con le porte GPIO, ho installato un modulo del kernel, sempre disponibile in

un pacchetto; per attivare o disattivare una porta, basta scrivere nel file corrispondente, 0 per

disattivare la porta, 1 per attivarla. Ecco come fare utilizzando il comando echo; utilizzeremo questo

metodo per attivare e disattivare le porte nel programma server:

echo stato > /proc/gpio/porta_dir; echo stato > /proc/gpio/porta_out

3.2 Programma Server

Per la creazione del programma server ho deciso di utilizzare il linguaggio interpetato python; era

gia' disponibile un mini pacchetto con le librerie principali, che ho inviato ed installato sul fonera.

Il programma avra' la funzione di creare un server http basilare ad una porta prestabilita (la 1055),

consentire le connessioni da computer esterni, e gestire la chiamata GET del protocollo http. E'

presente una pagina html chiamata __MAINPAGE__ nella stessa cartella del programma, che

contiene questo form:

<form action="robot.htm" method="get" enctype="text/plain">

<br><div align="center">Secondi:

<input type="text" name="second" value="1"></div>

<br>

<div align="center">

<input type="submit" name="ex" value="Indietro">

<input type="submit" name="ex" value="Avanti">

<input type="submit" name="ex" value="Riavvia"></div>

</form>

Vengono creati tre tasti (avanti, indietro e riavvia) ed una barra di inserimento testo per decidere per

quanti secondi eseguire quell'azione.

Quando un broswer http si connette al server (in questo caso 192.168.254.105:1055), gli viene

inviata questa pagina. Quando viene premuto un tasto, il nome del tasto premuto ed il contenuto

della barra dei secondi, vengono mandate al server, che si occupera' di analizzarle ed eseguire la

funzione desiderata. 7

Se il server trova nella richiesta GET il nome della pagina principale, tenta di analizzare l'url per

vedere se e' stato premuto un tasto, cerca di prendere l'informazione dei secondi e di quale tasto e'

stato premuto, ed esegue il commando, restituendo al client la pagina richiesta con una segnalazione

del commando eseguito. Se viene richiesto un altro elemento (per esempio un immagine o un altra

pagina), il server prova ad aprire il file richiesto, ed in caso positivo lo invia al client.

Ecco il codice del programma:

#!/usr/bin/python

import socket

import thread

import time

import os

__SERVER_PORT__ = 1055

__SERVER_NAME__ = "RoboServer"

__MAINPAGE__ = "robot.htm"

__ABILIT__ = 1

__MOTOR__ = 3

__LED__ = 2

class robotServer:

# Imposta il led allo 'state'

def led(self, state):

os.system("echo "+str(state)+" > /proc/gpio/"+str(__LED__)+"_dir; echo

"+str(state)+" > /proc/gpio/"+str(__LED__)+"_out")

# Movimento di un motore

def go(self, w, dir):

m = not dir

# Abilita le porte per la direzione desiderata

os.system("echo 1 > /proc/gpio/"+str(__ABILIT__)+"_dir; echo 1 >

/proc/gpio/"+str(__ABILIT__)+"_out")

os.system("echo "+str(m)+" > /proc/gpio/"+str(__MOTOR__)+"_dir; echo "+str(m)+" >

/proc/gpio/"+str(__MOTOR__)+"_out")

# Attende w secondi

time.sleep(w)

# Le disabilita

os.system("echo "+str(m)+" > /proc/gpio/"+str(__MOTOR__)+"_dir; echo "+str(m)+" >

/proc/gpio/"+str(__MOTOR__)+"_out")

os.system("echo 0 > /proc/gpio/"+str(__ABILIT__)+"_dir; echo 0 >

/proc/gpio/"+str(__ABILIT__)+"_out")

# Riavvia il robot

def reboot(self):

os.system("reboot");

# Gestore di un client

def clientHandler(self, sc):

# Riceve 128B di dati

cmd = sc.recv(128)

# Se vieene richiesta la pagina principale

8

if cmd.find("GET /"+__MAINPAGE__) != -1 or cmd.find("GET / ") != -1:

# Legge la pagina principale

page = open(__MAINPAGE__, "r").read()

# Prova a trovare i secondi nel link

try: sec = float(cmd.split("=")[1].split("&")[0])

except: sec = 1.0

# Se trova la parola avanti

if cmd.find("ex=Avanti") != -1:

# Aggiunge dell'html alla pagina per le info

# riguardo l'azione

page += "<br><b><div align=\"center\">Eseguendo: Avanti per

"+str(sec)+" secondi</div></b>"

page += "<meta HTTP-EQUIV=\"REFRESH\" content=\""+str(sec)+";

url=/\">" # Invia la pagina

sc.send(page)

sc.close()

# Esegue il commando

self.go(float(sec),0)

# Se trova la parola indietro

elif cmd.find("ex=Indietro") != -1:

# Aggiunge dell'html alla pagina per le info

# riguardo l'azione

page += "<br><b><div align=\"center\">Eseguendo: Indietro per

"+str(sec)+" secondi</div></b>"

page += "<meta HTTP-EQUIV=\"REFRESH\" content=\""+str(sec)+";

url=/\">" # Invia la pagina

sc.send(page)

sc.close()

# Esegue il commando

self.go(float(sec),1)

# Se trova la parola riavvia

elif cmd.find("ex=Riavvia") != -1:

# Aggiunge dell'html alla pagina per le info

# riguardo l'azione

page += "<br><b><div align=\"center\">Riavvio in corso</div></b>"

# Invia la pagina

sc.send(page)

sc.close()

# Spegne il led

self.led(0)

# Riavvia la macchina

self.reboot()

else: # Altrimenti invia la pagina __MAINPAGE__

sc.send(page) 9

Dettagli
Publisher
10 pagine