Appunti per Scuola e Universitą
humanisticheUmanistiche
Appunti e tesine di tutte le materie per gli studenti delle scuole medie riguardanti le materie umanistiche: dall'italiano alla storia riguardanti le materie umanistiche: dall'italiano alla storia 
sceintificheScientifiche
Appunti, analisi, compresione per le scuole medie suddivisi per materie scientifiche, per ognuna troverai appunti, dispense, esercitazioni, tesi e riassunti in download.
tecnicheTecniche
Gli appunti, le tesine e riassunti di tecnica amministrativa, ingegneria tecnico, costruzione. Tutti gli appunti di AppuntiMania.com gratis!
Appunti
informatica
CComputerDatabaseInternetJava
Linux unixReti


AppuntiMania.com » Informatica » Appunti di computer » Progetto per la realizzazione di un robot comandato da computer tramite WiFi

Progetto per la realizzazione di un robot comandato da computer tramite WiFi




Visite: 1344Gradito:apreciate 4-stela [ Medio appunti ]
Leggi anche appunti:

Il meccanismo di simulazione e l'architettura ad oggetti di ASIM


Il meccanismo di simulazione e l'architettura ad oggetti di ASIM 1.1           Il

Deadlock


Deadlock        Un insieme di processi si trova in una situazione di stallo

Supermercati e informatica


  SUPERMERCATI E INFORMATICA     Indice: Ų    Introduzione Ų    Cenni
immagine di categoria

Scarica gratis Progetto per la realizzazione di un robot comandato da computer tramite WiFi

Progetto per la realizzazione di un robot comandato da computer tramite WiFi









































Indice:

Introduzione

Hardware

Meccanica

Elettronica

La Fonera

Software

Linux OpenWrt

Programma Server


















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.





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


Rele' con avvolgimento da 5 volt


Transistor BC 547 C


Cicalino


Router "La Fonera"


Batteria da 6 volt per alimentazione circuito e motore


Batterie per alimentazione fonera


Diodo led


Motore 6 volt


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



Fermo



Fermo



Indietro



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.







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.



















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.


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.

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

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)

else:

# Altrimenti prova ad inviare il file richiesto

try:

sc.send(open(cmd.split(' ')[1][1:], 'r').read())

except: pass


# Chiude la connessione

sc.close()


# Funzione che avvia il server

def start(self):

print __SERVER_NAME__ + ' started'


# Accende il led

self.led(1)


# Inizializza il server socket

self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Assegna la porta al server

self.socket.bind(('', __SERVER_PORT__))

# Mette il server in ascolto per massimo 1 utente alla volta

self.socket.listen(1)


while 1:

# Attende una connessione

(SocketClient, address) = self.socket.accept()

# Avvia la funzione di gestione del client

self.clientHandler(SocketClient)


if __name__ == '__main__':

# Inizializza un oggetto robotServer()

rs = robotServer()

# Richiama la procedura di avvio

rs.start()


Scarica gratis Progetto per la realizzazione di un robot comandato da computer tramite WiFi
Appunti su: robot comandati con ip, tutti robot comandati da ip,



Scarica 100% gratis e , tesine, riassunti



Registrati ora

Password dimenticata?
  • Appunti superiori
  • In questa sezione troverai sunti esame, dispense, appunti universitari, esercitazioni e tesi, suddivisi per le principali facoltą.
  • Universitą
  • Appunti, dispense, esercitazioni, riassunti direttamente dalla tua aula Universitaria
  • all'Informatica
  • Introduzione all'Informatica, Information and Comunication Tecnology, componenti del computer, software, hardware ...