SlideShare una empresa de Scribd logo
1 de 37
Descargar para leer sin conexión
RaspberryPi Robot
Autor: Manuel Fernández de Ginzo Muñoz
Tutor: José Antonio Carrasco Díaz
I.E.S. Francisco Romero Vargas (Jerez de la Frontera)
Administración de Sistemas Informáticos en Red
Curso: 2015/16
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
Tabla de contenido
Introducción.
Introducción.
Finalidad.
Objetivos.
Medios necesarios.
Planificación.
Realización del Proyecto.
Trabajos realizados.
Problemas encontrados.
Modificaciones sobre el proyecto planteado inicialmente.
Posibles mejoras al proyecto.
Bibliografía.
RaspberryPi Robot. Página 1
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
Introducción.
Introducción.
Construir un robot que sea controlado remotamente a través de una página web, en
dicha web aparecerán los controles y un video streaming por el cual podemos ver el
camino que va siguiendo el robot a través de una webcam.
Finalidad.
Controlar un robot remotamente a través de una página web desde cualquier
dispositivo que tenga navegador web. También se puede utilizar como cualquier otro
juguete tipo coche teledirigido para niños.
Objetivos.
Controlaremos un robot incorporando una RaspberryPi2 en la cual hay un servidor
web, a través de una página web en la que utilizaremos el framework “webiopi”, esto
nos ayuda a controlar los “GPIO” de la Raspberry a través de una página web,lo que
realmente hace es llamar a funciones escritas en python a través de macros, las cuales
hacen que el robot se mueva, también es posible mover el robot diagonalmente, por
ejemplo, para girar en diagonal hacia la izquierda se debe de reducir la velocidad del
motor derecho y en el motor izquierdo dejar la velocidad por defecto. Podremos ver
un streaming de video en la página web, el cual es ejecutado por la cámara web
incorporada al robot.
RaspberryPi Robot. Página 2
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
Medios necesarios.
Que se va a necesitar para realizar este proyecto, hay que indicar los medios físicos
(hardware) y los medios lógicos (software). Ejemplo: Para la realización de este
proyecto se necesita lo siguiente:
● RaspberryPi2 con caja acrílica.
● 2 motores DC con 2 ruedas
● Interruptor
● Chasis del robot
● Puente H (L298N)
● 6 Pilas AA Alcalinas con su respectivo soporte.
● Cámara para RaspberryPi 2
● PowerBank de 5000mAh, Salida: 5V 2.1A
● Soporte de madera para la RaspberryPi
● ServoMotor
● Raspbian, Webiopi Framework, Python
Planificación.
● Investigación sobre componentes necesarios para llevar a cabo el proyecto: 6
horas.
● Instalación de Raspbian y puesta a punto de la RaspberryPi: 1 hora.
● Montaje del chasis y conexionado con los dos motores: 2 horas.
● Instalación de webiopi y configuración con parcheado para RaspberryPi2: 4
horas
● Comprobación del framework webiopi con RaspberryPi2, manejando los pines
“GPIO”: 1 hora.
● Montaje de la cámara web: 1 hora.
● Montaje del servo y soporte para la cámara: 1 hora.
● Estudiar la manera de controlar nuestro servo con Webiopi, modificar el código
fuente del framework para que pueda trabajar con nuestro servo: 2 horas
● Montaje de los drivers de la cámara en la RaspberryPi, modificación de
parámetros del streaming, comprobación que todo funciona y se puede
gestionar perfectamente: 4 horas.
● Montaje de la tarjeta WiFi USB y puesta a punto: 1 hora.
● Conexionado de todos los cables y proceso de soldar: 2 hora.
● Crear punto de acceso con la tarjeta WiFi USB con servidor DHCP: 3 horas.
● Investigar sobre el envío de pulsos(PWM) a través de los pines “GPIO” a
nuestros motores: 5 horas.
● Aprender a controlar los pines “GPIO” a través de Python: 4 horas.
RaspberryPi Robot. Página 3
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
● Estudiar la estructura de Webiopi para poder crear los botones de dirección y el
“slider” para controlar el servo: 5 horas.
● Planificar las acciones de todos los botones de dirección, por ejemplo, si se le
da hacia delante, enviar un pulso “HIGH” al motor “A” y “B” en la patilla
positiva y establecer la velocidad máxima: 5 horas.
● Pruebas comprobando que funcionan todos los botones de direcciones: 3
horas.
● Pruebas comprobando que funciona el servo a través de la página web: 1 hora.
● Prueba de todo el proyecto en condiciones reales: 8 horas.
● Preparación de la documentación del proyecto: 6 horas.
Horas totales que se planifican para el proyecto: 61
Trabajos Realizados.
Una vez tengamos el chasis del coche con los motores y cables, empezaremos con el
montaje del mismo.
Montamos los soportes de los motores, necesitaremos dos tornillos y dos tuercas. Sólo
pondremos una parte del soporte ya que la otra parte se monta con el chasis. Hacemos
lo mismo con el otro motor.
Añadimos el motor con la otra parte del soporte al chasis. Debemos de introducir los
dos tornillos a través del soporte y del motor hasta sobrepasar el otro soporte. Lo
encajamos con la mueca que trae el chasis. Lo mismo con el otro motor.
RaspberryPi Robot. Página 4
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
RaspberryPi Robot. Página 5
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
Una vez tengamos los dos motores encajados perfectamente en el chasis, pondremos
las ruedas a los motores. Solamente es encajarlas haciendo un poco de fuerza.
Debemos asegurarnos que las dos ruedas están a la misma distancia del chasis.
Ahora instalaremos la rueda delantera en el chasis. Debemos de tener a mano ocho
tornillos, cuatro roscas y la rueda.
RaspberryPi Robot. Página 6
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
Atornillamos primero los cuatro tornillos con las roscas.
RaspberryPi Robot. Página 7
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
A continuación ponemos la rueda y la atornillamos.
Lo próximo que vamos a hacer es colocar el puente H encima del chasis mediante una
presilla.
Antes de ello colocaremos los cables que van hacia los motores a las entradas OUT1 y
2 para el motor A y OUT3 y 4 para el B.
RaspberryPi Robot. Página 8
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
Agarramos el puente H al chasis pasando la presilla por uno de los agujeros del mismo.
RaspberryPi Robot. Página 9
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
También pondremos presillas en la mitad del cable a modo de guía con el fin de no
sobresalir del chasis.
RaspberryPi Robot. Página 10
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
Ahora conectamos los cables del puente H a los motores, el orden es indiferente, ya
que después si queremos, lo podemos manipular mediante software en el caso de que
estén puestos al revés y hacer que la rueda gire hacia delante en vez de al contrario.
Fabricaremos un soporte de madera a medida para soportar la RaspberryPi. Solo
debemos medir las dimensiones de la RaspberryPi y dejarle un poco a cada lado para
que luego no sobresalga tanto el cable de alimentación de la RaspberryPi del soporte.
Tiene dos tornillos altos para dejarle espacio al soporte de pilas que instalaremos
después debajo. Los tornillos estarán sujetos mediante tuercas, en total usaremos 8
tuercas para los dos tornillos.
RaspberryPi Robot. Página 11
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
Instalamos el botón que se utilizará para alimentar los motores.
Soldamos los cables de la siguiente manera al interruptor. Uno de esos cables va al
puente H a la entrada de +12v y el otro cable al positivo del soporte de las pilas.
RaspberryPi Robot. Página 12
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
Ahora colocamos los cables para la parte lógica que se encargará la RaspberryPi.
El pin ENA se utiliza para controlar la velocidad del motor A, IN1 y IN2 se utiliza para
hacer funcionar al motor A. IN3 y IN4 se utiliza para el motor B. ENB se utiliza también
para controlar la velocidad, pero en éste caso, del motor B.
Antes de colocar todos los cables debemos de eliminar los jumpers que están en ENA y
ENB.
Estos jumpers serían útiles en el caso en el que no controlemos la velocidad.
Introducimos dos cables a la entrada GND(Tierra) del puente H. Un cable se utilizará
para el lado negativo del soporte de las pilas y otro iría a un GPIO GND de la
RaspberryPi
En la salida +5V metemos el cable que iría para alimentar el servomotor.
RaspberryPi Robot. Página 13
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
Montamos la RaspberryPi en el soporte de madera. La sujetamos mediante dos
gomillas para facilitar el desmontaje en el caso de que queramos acceder mejor a ella.
El servomotor lo montaremos encima del puerto USB en el cual está el adaptador WiFi
conectado de la RaspberryPi. Está sujeto mediante un alambre que se agarra al
soporte de madera. Debemos de darle forma hasta que quede de una manera que
sujete bien el servomotor.
Para la cámara web vamos a construir un pequeño soporte de madera y pegarlo al
servomotor con cualquier pegamento de fuerte fijación. La cámara es soportada
mediante fiso, ya que no es necesario un soporte tan fijado para el uso que le vamos a
dar.
Conectaremos la cámara a la entrada llamada “camera” de la RaspberryPi. Con un
destornillador plano podemos levantar la parte blanca del conector para luego
introducir el cable de la cámara. Una vez esté fijado apretamos la parte blanca.
Comprobaremos que el cable está correctamente introducido.
RaspberryPi Robot. Página 14
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
Sujetamos la batería para alimentar a la RaspberryPi mediante una presilla en la parte
trasera del chasis.
RaspberryPi Robot. Página 15
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
La batería para alimentar a los motores la colocaremos debajo del soporte de madera
sujetándola mediante otra presilla. Debemos de colocar la presilla de manera que pase
entre pila y pila para después cambiarlas en el caso de que se agoten.
RaspberryPi Robot. Página 16
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
Para ayudarnos a identificar los GPIO podemos utilizar el siguiente esquema.
Las conexiones son las siguientes del puente H a los GPIO:
● ENA => GPIO20
● ENB => GPIO21
● IN1 => GPIO17
● IN2 => GPIO27
● IN3 => GPIO5
● IN4 => GPIO6
Para conectar el servomotor debemos tener en cuenta lo siguiente.
El cable rojo de enmedio es para alimentarlo, tenemos que conectarlo a la salida de
+5V del puente H.
El cable marrón es el GND (Tierra) , debemos conectarlo a un pin de la RaspberryPi
GND.
Y por último, el cable naranja es para controlarlo mediante la RaspberryPi, lo
conectaremos al GPIO4.
RaspberryPi Robot. Página 17
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
Esquema de conexión de los componentes.
Observemos más detalladamente las conexiones lógicas del puente H a los GPIO. De
color verde tenemos las conexiones ENA y ENB, empezando por la izquierda, ENA se
conecta a GPIO20 y ENB a GPIO21. De color naranja tenemos IN1 e IN2, IN1 se conecta
RaspberryPi Robot. Página 18
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
a GPIO17 e IN2 a GPIO27. De color amarillo tenemos IN3 e IN4, IN3 se conecta a GPIO5
e IN4 a GPIO6.
Ahora continuaremos instalando el sistema operativo “Raspbian Jessie” , lo
descargamos en ​https://www.raspberrypi.org/downloads/raspbian/​.
Descargamos también “Win32 Disk Imager” para grabar la imagen en la tarjeta SD.
https://sourceforge.net/projects/win32diskimager/
Ejecutamos “Win32 Disk Imager” , seleccionamos nuestra imagen, la tarjeta SD en la
que se va a grabar y le damos a “Write”.
Conectamos nuestra Raspberry a una pantalla con HDMI para la realizar la
configuración más cómodamente. Nos aparecerá el programa “Raspi-Config”
automáticamente al iniciar, debemos de expandir nuestra tarjeta SD para que
tengamos toda la capacidad de la tarjeta SD ya que si no lo hacemos sólo tendremos
de almacenamiento 4GB. Para ello seleccionamos la opción “Expand Filesystem”.
RaspberryPi Robot. Página 19
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
Si queremos también podemos cambiar la contraseña del usuario “pi”.
Aprovechamos para habilitar la cámara seleccionando “Enable Camera”.
En “Internationalisation Options” configuraremos el idioma del sistema.
Una vez hayamos terminado con la configuración le damos a “Finish”.
A continuación vamos a empezar a hacer los scripts para controlar el robot.
Podemos hacerlo todo mediante SSH o con el cable HDMI conectado a un monitor.
Si queremos controlarla mediante SSH, en “raspi-config” tenemos una opción para
habilitar el servidor SSH, “Advanced options/A4 SSH”.
Nos aseguramos que estamos conectados a Internet mediante la tarjeta Ethernet de
nuestra Raspberry ya que nos va a hacer falta para actualizar y configurar varias cosas.
Ejecutamos “sudo apt-get update” y “sudo apt-upgrade”.
Lo primero que debemos hacer es instalar el framework webiopi, ya que lo
utilizaremos para desarrollar nuestro programa.
Descargamos este archivo:
http://sourceforge.net/projects/webiopi/files/WebIOPi-0.7.1.tar.gz/download
Ahora lo instalamos metiéndonos en el directorio en donde esté y ejecutando el script
de instalación “./setup.sh”.
Ésta versión de webiopi no funciona con nuestra “RaspberryPi2”, pero no hay porque
preocuparse, alguien se encargó de desarrollar un parche para solucionar el problema,
por lo que tendremos que parchearlo con los siguientes comandos:
$wget
https://raw.githubusercontent.com/doublebind/raspi/master/webiop
i-pi2bplus.patch
$ patch -p1 -i webiopi-pi2bplus.patch
$ sudo ./setup.sh
RaspberryPi Robot. Página 20
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
Una vez ejecutados esos comando ya tendremos “Webiopi” compatible para nuestra
RaspberryPi 2.
Ahora establecemos el inicio automático de webiopi cada vez que se inicie el sistema.
$ sudo update-rc.d webiopi defaults
Una vez tengamos webiopi funcionando continuamos con los scripts para controlar el
robot.
Crearemos un nuevo archivo con el nombre que queramos acabado en “.py” ya que
será un script en Python.
# Importamos la librería “webiopi” y “os”
import webiopi
import os
# Le asignamos un alias para trabajar más cómodo.
GPIO = webiopi.GPIO
# GPIOs motor izquierdo
L1=17 # H-Bridge 1
L2=27 # H-Bridge 2
ENB=20 # Velocidad
# GPIOs motor derecho
R1=5 # H-Bridge 3
R2=6 # H-Bridge 4
ENA=21 # Velocidad
Servo=4 # GPIO Servo
# Definición de Macros
RaspberryPi Robot. Página 21
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
# Ir hacia atrás.
@webiopi.macro
def go_backward():
GPIO.pulseRatio(ENA, 0.5)
GPIO.pulseRatio(ENB, 0.5)
GPIO.output(R1, GPIO.HIGH)
GPIO.output(R2, GPIO.LOW)
GPIO.output(L2, GPIO.HIGH)
GPIO.output(L1, GPIO.LOW)
# Ir hacia atrás verticalmente a la derecha.
@webiopi.macro
def go_backwardr():
GPIO.pulseRatio(ENA,0.5)
GPIO.pulseRatio(ENB, 0.3)
GPIO.output(R1, GPIO.HIGH)
GPIO.output(R2, GPIO.LOW)
GPIO.output(L2, GPIO.HIGH)
GPIO.output(L1, GPIO.LOW)
# Ir hacia atrás verticalmente a la izquierda.
@webiopi.macro
def go_backwardl():
GPIO.pulseRatio(ENA, 0.3)
GPIO.pulseRatio(ENB, 0.5)
GPIO.output(R1, GPIO.HIGH)
GPIO.output(R2, GPIO.LOW)
GPIO.output(L2, GPIO.HIGH)
GPIO.output(L1, GPIO.LOW)
# Ir hacia delante.
@webiopi.macro
RaspberryPi Robot. Página 22
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
def go_forward():
GPIO.pulseRatio(ENB, 0.5)
GPIO.pulseRatio(ENA, 0.5)
GPIO.output(R1, GPIO.LOW)
GPIO.output(R2, GPIO.HIGH)
GPIO.output(L2, GPIO.LOW)
GPIO.output(L1, GPIO.HIGH)
# Ir hacia delante verticalmente hacia la derecha.
@webiopi.macro
def go_forwardr():
GPIO.pulseRatio(ENB, 0.5)
GPIO.pulseRatio(ENA, 0.3)
GPIO.output(R1, GPIO.LOW)
GPIO.output(R2, GPIO.HIGH)
GPIO.output(L2, GPIO.LOW)
GPIO.output(L1, GPIO.HIGH)
# Ir hacia delante verticalmente hacia la izquierda.
@webiopi.macro
def go_forwardl():
GPIO.pulseRatio(ENB, 0.3)
GPIO.pulseRatio(ENA, 0.5)
GPIO.output(R1, GPIO.LOW)
GPIO.output(R2, GPIO.HIGH)
GPIO.output(L2, GPIO.LOW)
GPIO.output(L1, GPIO.HIGH)
# Girar a la izquierda.
@webiopi.macro
RaspberryPi Robot. Página 23
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
def turn_left():
GPIO.pulseRatio(ENB, 0.5)
GPIO.pulseRatio(ENA, 0.5)
GPIO.output(R1, GPIO.HIGH)
GPIO.output(R2, GPIO.LOW)
GPIO.output(L1, GPIO.HIGH)
GPIO.output(L2, GPIO.LOW)
# Girar a la derecha.
@webiopi.macro
def turn_right():
GPIO.pulseRatio(ENB, 0.5)
GPIO.pulseRatio(ENA, 0.5)
GPIO.output(L2, GPIO.HIGH)
GPIO.output(L1, GPIO.LOW)
GPIO.output(R2, GPIO.HIGH)
GPIO.output(R1, GPIO.LOW)
# Detenerse.
@webiopi.macro
def stop():
GPIO.output(R1, GPIO.LOW)
GPIO.output(R2, GPIO.LOW)
GPIO.output(L1, GPIO.LOW)
GPIO.output(L2, GPIO.LOW)
@webiopi.macro
def shutdown():
os.system(“halt”);
RaspberryPi Robot. Página 24
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
Esta función se utilizará para capturar fotos del streaming.
Se utiliza el método “strftime” para obtener la fecha y hora actual, después la utilizo
para el nombre de la foto.
A continuación se descarga mediante el comando “wget”.
@webiopi.macro
def foto():
tiempo=time.strftime("%d-%m-%y.%I:%M:%S")
ruta="/var/www/fotos/imagenes/"+tiempo+".jpeg"
os.system("wget
http://192.168.1.1:8080/stream/snapshot.jpeg?delay_s=0 -O
"+ruta)
# -------------------------------------------------- #
# Iniciacializacion #
# -------------------------------------------------- #
def setup():
# Instalación GPIOs
GPIO.setFunction(L1, GPIO.OUT)
GPIO.setFunction(L2, GPIO.OUT)
GPIO.setFunction(R1, GPIO.OUT)
GPIO.setFunction(R2, GPIO.OUT)
GPIO.setFunction(ENB, GPIO.PWM)
GPIO.setFunction(ENA, GPIO.PWM)
GPIO.setFunction(Servo, GPIO.PWM)
def destroy():
# Resetea las funciones GPIO
GPIO.setFunction(L1, GPIO.IN)
GPIO.setFunction(L2, GPIO.IN)
RaspberryPi Robot. Página 25
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
GPIO.setFunction(R1, GPIO.IN)
GPIO.setFunction(R2, GPIO.IN)
GPIO.setFunction(ENB, GPIO.IN)
GPIO.setFunction(ENA, GPIO.IN)
GPIO.setFunction(Servo, GPIO.IN)
Una vez tengamos el script creado y guardado, editamos el archivo
“/etc/webiopi/config” y en la parte de scripts introducimos la ruta de nuestro script.
[SCRIPTS]
# Load custom scripts syntax :
# name = sourcefile
# each sourcefile may have setup, loop and destroy functions
and macros
#myscript = /home/pi/webiopi/examples/scripts/macros/script.py
robot = /home/pi/scripts/robot.py
Aprovechamos para cambiarle la contraseña de acceso a la web de control del robot.
Con el comando “webiopi-passwd” generamos un fichero “passwd”.
En el fichero “/etc/webiopi/config” podemos introducir la ruta de nuestro archivo
“passwd”
# File containing sha256(base64("user:password"))
# Use webiopi-passwd command to generate it
passwd-file = /etc/webiopi/passwd
Ahora creamos el “.html” en el que aparecerán todos los controles del robot.
Llamamos al framework webiopi para poder usarlo en nuestro html.
<script type="text/javascript" src="/webiopi.js"></script>
Empezamos a crear los botones con la ayuda de webiopi y el
método “createButton”.
RaspberryPi Robot. Página 26
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
Los parámetros que recibe éste método son (“ID html con el que
aparecerá el botón”,”valor del botón”,función a la que llama
cuando hacemos click, función a la que llama cuando dejamos de
hacer click).
También hemos creado un botón para apagar el robot, para ello
utilizamos la función “shutdown” que llama a una macro en python
que se encarga de ejecutar el comando “halt” en el sistema.
<script type="text/javascript">
function init() {
var button;
button = webiopi().createButton("bt_upr", "/",
go_forwardr, stop);
$("#up").append(button);
button = webiopi().createButton("bt_up", "/",
go_forward, stop);
$("#up").append(button);
button = webiopi().createButton("bt_upl", "/",
go_forwardl, stop);
$("#up").append(button);
button = webiopi().createButton("bt_left", "<",
turn_left, stop);
$("#middle").append(button);
button = webiopi().createButton("bt_right", ">",
turn_right, stop);
$("#middle").append(button);
button = webiopi().createButton("bt_downl", "/",
go_backwardl, stop);
$("#down").append(button);
RaspberryPi Robot. Página 27
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
button = webiopi().createButton("bt_down", "/",
go_backward, stop);
$("#down").append(button);
button = webiopi().createButton("bt_downr", "/",
go_backwardr, stop);
$("#down").append(button);
button = webiopi().createAngleSlider(4);
$("#servo").append(button);
button = webiopi().createButton("shutdown", "O",
shutdown);
$("#down").append(button);
}
function go_forward() {
webiopi().callMacro("go_forward");
}
function go_forwardr() {
webiopi().callMacro("go_forwardr");
}
function go_forwardl() {
webiopi().callMacro("go_forwardl");
}
function go_backward() {
webiopi().callMacro("go_backward");
}
function go_backwardr() {
webiopi().callMacro("go_backwardr");
}
function go_backwardl() {
RaspberryPi Robot. Página 28
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
webiopi().callMacro("go_backwardl");
}
function turn_right() {
webiopi().callMacro("turn_right");
}
function turn_left() {
webiopi().callMacro("turn_left");
}
function stop() {
webiopi().callMacro("stop");
}
function shutdown() {
alert(“Apagando...”);
webiopi().callMacro(“shutdown”);
}
function foto() {
webiopi().callMacro(“foto”);
}
webiopi().ready(init);
</script>
</head>
<body>
Creamos los div para los botones y el servo.
Añadimos una etiqueta “IMG” con la ruta
“http://192.168.1.1:8080/stream/video.mjpeg” para el streaming
que instalaremos más adelante.
<div id="content" align="center">
RaspberryPi Robot. Página 29
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
<img class=”streaming” onclick=”foto()”
src="http://192.168.1.1:8080/stream/video.mjpeg"/>
<div id="up"></div>
<div id="middle"></div>
<div id="down"></div>
<div id="servo"></div>
<a href=”http://galeria.robot”>Galería de Imágenes</a>
</div>
</body>
</html>
Ahora empezaremos a configurar el streaming de video.
Para ello debemos de tener instalado los paquetes​ ​“libjpeg8-dev”, “imagemagick”
,”subversion”.
Ejecutaremos los siguientes comandos:
wget http://www.linux-projects.org/listing/uv4l_repo/lrkey.asc
&& sudo apt-key add ./lrkey.asc
echo "deb
http://www.linux-projects.org/listing/uv4l_repo/raspbian/ wheezy
main" | sudo tee -a /etc/apt/sources.list
sudo apt-get update
sudo apt-get install uv4l uv4l-raspicam uv4l-raspicam-extras
uv4l-server uv4l-uvc uv4l-xscreen uv4l-mjpegstream
sudo reboot
Una vez introducidos estos comandos, tendremos listo nuestro servidor de streaming.
Ahora configuraremos nuestra raspberry para que cree una red WiFi a la que nos
podamos conectar para controlar el robot.
Lo primero que debemos hacer es instalar un servidor DHCP para que de IP a los
clientes con el comando “apt-get install isc-dhcp-server”.
Después editamos el siguiente archivo "/etc/dhcp/dhcpd.conf” , buscamos estas lineas
y las comentamos.
RaspberryPi Robot. Página 30
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
# option domain-name "example.org";
# option domain-name-servers ns1.example.org, ns2.example.org;
Ahora buscamos estas lineas y descomentamos la parte de “authoritative”.
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;
Ahora abajo del todo introducimos nuestra configuración para dar IP a los clientes de
la siguiente manera.
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.2 192.168.1.3;
option broadcast-address 192.168.1.255;
option routers 192.168.1.1;
default-lease-time 600;
max-lease-time 7200;
option domain-name-servers: 192.168.1.1;
}
Guardamos los cambios y nos vamos ahora a editar el archivo
“/etc/default/isc-dhcp-server”. En la parte que aparece “INTERFACES” pondremos
“wlan0” y guardamos.
Ahora en “/etc/network/interfaces” establecemos una IP estática para nuestra
raspberry.
iface wlan0 inet static
address 192.168.1.1
netmask 255.255.255.0
Ya tenemos configurado nuestro servidor DHCP. Ahora vamos a configurar el punto de
acceso.
Creamos un archivo aquí “/etc/hostapd/hostapd.conf”.
Introducimos lo siguiente dentro de él.
interface=wlan0
driver=rtl871xdrv
ssid=Pi_AP
hw_mode=g
channel=6
macaddr_acl=0
RaspberryPi Robot. Página 31
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=Raspberry
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
Ahora le diremos a la raspberry donde esta el archivo de configuracion, entramos en
“/etc/default/hostapd” y en la parte que aparece “#DAEMON_CONF=""” introducimos
la ruta del archivo que creamos anteriormente. Quedaría de la siguiente manera.
DAEMON_CONF="/etc/hostapd/hostapd.conf"
Reiniciamos la Raspberry y ya tendremos nuestro punto de acceso funcionando.
Ahora configuraremos nuestra Raspberry para que redireccione las peticiones al
puerto 80 de Apache al 8000 de Webiopi, para ello necesitamos hacer un proxy inverso
con apache.
Debemos de tener en cuenta de que el servidor web de webiopi está escuchando en el
puerto 8000, para comprobarlo nos vamos a “/etc/webiopi/config” y en la línea donde
aparece “port” debe de aparecer “8000”.
Comenzamos con la instalación de Apache, para ello ejecutamos el comando “apt-get
install apache2”
Para que apache haga de proxy inverso debemos de tener los siguientes módulos:
● proxy
● proxy_ajp
● proxy_http
● rewrite
● deflate
● headers
● proxy_connect
● proxy_html
Los habilitaremos de la siguiente manera “a2enmod [nombre_módulo]”.
En nuestro caso nos hace falta instalar el módulo “proxy_html” ya que por defecto no
se encuentra instalado, para ello ejecutamos “apt-get install
libapache2-mod-proxy-html”. Ahora lo habilitamos con el comando “a2enmod”.
Una vez estén todos los módulos activados comenzamos con el archivo de
configuración, nos vamos a “/etc/apache2/sites-availables” ,borramos el sitio por
defecto y creamos uno nuevo con lo siguiente:
<VirtualHost *:80>
ProxyPreserveHost On
RaspberryPi Robot. Página 32
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
ServerName controles.robot
ProxyPass / http://192.168.1.1:8000/
ProxyPassReverse / http://192.168.1.1:8000/
</VirtualHost>
Ahora tenemos que instalar “bind9” para tener nuestro servidor DNS, ejecutamos
“apt-get install bind9”.
Nos vamos a “/etc/bind/” y creamos el archivo “db.robot” con lo siguiente:
; BIND reverse data file for empty rfc1918 zone
;
; DO NOT EDIT THIS FILE - it is used for multiple zones.
; Instead, copy it, edit named.conf, and use that copy.
;
$TTL 86400
@ IN SOA robot. root.robot. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
86400 ) ; Negative Cache TTL
;
@ IN NS ns1.robot.
ns1 IN A 192.168.1.1
controles IN A 192.168.1.1
galeria IN A 192.168.1.1
Editamos el archivo “named.conf.local” y añadimos una nueva zona:
//
// Do any local configuration here
//
// Consider adding the 1918 zones here, if they are not used in
your
// organization
RaspberryPi Robot. Página 33
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
//include "/etc/bind/zones.rfc1918";
zone "robot"{
type master;
file "/etc/bind/db.robot";
};
Configuramos la página web que mostrará las fotos realizadas con el robot. Para ello
creamos también un host virtual en apache para que pueda trabajar con nuestro DNS.
<VirtualHost *:80>
ServerName galeria.robot
DocumentRoot /var/www/fotos
</VirtualHost>
Aquí tenemos el código PHP que he utilizado para mostrar las fotos. Lo primero que
hago es mediante “scandir” meter todos los nombres de los ficheros que se
encuentran en el directorio en un array. A continuación compruebo si se encuentra
“.jpeg” en el nombre de esos ficheros, si es así, los muestro.
También es posible descargar la foto haciendo click sobre ella mediante el atributo de
HTML5 “download”.
<?php
$directorio = "imagenes/";
$ficheros = scandir($directorio);
for ($i = 0; $i<=count($ficheros); $i++){
if (strrpos("$ficheros[$i]",".jpeg") > 0)
echo "<a href='imagenes/$ficheros[$i]'
download='$ficheros[$i]'><img title='$ficheros[$i]' src='image$
}
?>
Una vez configurado todo el DNS reiniciamos Apache y Bind.
Ya está todo listo para funcionar, para entrar en la página web de controles del robot
nos conectamos a la red WiFi que crea y introducimos en nuestro navegador web la
RaspberryPi Robot. Página 34
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
dirección “controles.robot” y entraremos en la página web que creamos
anteriormente con todos sus controles junto al streaming.
Problemas encontrados.
Tuve que cambiarle las pilas a unas alcalinas con más amperaje y añadirle dos más, ya
que no tenía suficiente fuerza para realizar el PWM (control de pulsos) a los motores.
Al instalar WebioPi no pude controlar los GPIO del todo bien ya que, hasta la fecha,
WebioPi no ha sacado ninguna versión para la RaspberryPi2, tuve que bajarme un
parche hecho por un desarrollador en Github.
La tarjeta de red WiFi no es compatible del todo para establecerla como punto de
acceso mediante los archivos de configuración de Raspbian. Tuve que investigar sobre
ello y encontrar los archivos de configuración de Adafruit.
Tuve que sustituir la “PowerBank” que alimenta la Raspberry ya que la que tenía
inicialmente no ofrecía los suficientes amperios que necesitaba la Raspberry para
trabajar con todos los componentes conectados.
Modificaciones sobre el proyecto planeado inicialmente.
Al principio tenía pensado en controlar el robot mediante Python sin ayuda de ningún
framework, pero investigando encontré WebioPi y ví que tendría menos problemas.
También quería controlarlo mediante un adaptador Bluetooth, sin embargo decidí
hacerlo mediante WiFi ya que su cobertura es mejor.
RaspberryPi Robot. Página 35
Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz.
La cámara inicialmente no tenía pensado de que se pudiera controlar su posición
mediante un servo, sería fija, pero más adelante investigué sobre el control de servos
mediante WebioPi.
Posibles mejoras del proyecto.
Como principal mejora, sería interesante implementar el control remoto desde
Internet mediante VPN. También, sería una buena opción tener la misma aplicación
pero desarrollada en Android.
No sé si RaspberryPi 2 puede implementar la tecnología WOW (Wake On Wifi), he
estado investigando sobre ello y solo he encontrado que es posible mediante WOL
(Wake On Lan), esta opción no sería interesante para éste proyecto porque tendría
que estar conectado por Ethernet.
A modo de asistencia remota, sería interesante la opción de comunicarse mediante el
robot remotamente desde Internet a la casa como si de una llamada se tratase.
Bibliografía.
http://webiopi.trouch.com/
https://www.digitalocean.com/community/tutorials/how-to-use-apache-http-server-as-reverse-pr
oxy-using-mod_proxy-extension
http://www.home-automation-community.com/surveillance-with-raspberry-pi-noir-camera-howto
/
http://www.linux-projects.org/modules/sections/index.php?op=viewarticle&artid=14
https://learn.adafruit.com/setting-up-a-raspberry-pi-as-a-wifi-access-point/install-software
https://sourceforge.net/p/raspberry-gpio-python/wiki/Home/
https://www.raspberrypi.org/help/
RaspberryPi Robot. Página 36

Más contenido relacionado

Destacado

Destacado (16)

Porque Argumentamos texto de Navega, S.
Porque Argumentamos texto de Navega, S.Porque Argumentamos texto de Navega, S.
Porque Argumentamos texto de Navega, S.
 
สื่อการสอนการงานอาชีพและเทคโนโลยี
สื่อการสอนการงานอาชีพและเทคโนโลยีสื่อการสอนการงานอาชีพและเทคโนโลยี
สื่อการสอนการงานอาชีพและเทคโนโลยี
 
Changes in demand
Changes in demandChanges in demand
Changes in demand
 
Proyecto de capacitación 2
Proyecto de capacitación 2Proyecto de capacitación 2
Proyecto de capacitación 2
 
Comic rol del docente del siglo xxi
Comic rol del docente del siglo xxiComic rol del docente del siglo xxi
Comic rol del docente del siglo xxi
 
3D map.geo.admin.ch: Enwicklungen und Erfahrungen
3D map.geo.admin.ch: Enwicklungen und Erfahrungen3D map.geo.admin.ch: Enwicklungen und Erfahrungen
3D map.geo.admin.ch: Enwicklungen und Erfahrungen
 
Take control of your thoughts
Take control of your thoughtsTake control of your thoughts
Take control of your thoughts
 
Resumen libros de la biblia
Resumen libros de la bibliaResumen libros de la biblia
Resumen libros de la biblia
 
Zika y Embarazo
Zika y EmbarazoZika y Embarazo
Zika y Embarazo
 
Bio battery
Bio batteryBio battery
Bio battery
 
Polytronics
PolytronicsPolytronics
Polytronics
 
Atlanta Tribune Article
Atlanta Tribune ArticleAtlanta Tribune Article
Atlanta Tribune Article
 
Fire Department Of New York City
Fire Department Of New York CityFire Department Of New York City
Fire Department Of New York City
 
Diversity Plus Article Agl Resources 2009
Diversity Plus Article   Agl Resources 2009Diversity Plus Article   Agl Resources 2009
Diversity Plus Article Agl Resources 2009
 
bio battery ppt
bio battery pptbio battery ppt
bio battery ppt
 
WeBlogMCR Blogging Photography Workshop - Chiascuro Presentation
WeBlogMCR Blogging Photography Workshop - Chiascuro PresentationWeBlogMCR Blogging Photography Workshop - Chiascuro Presentation
WeBlogMCR Blogging Photography Workshop - Chiascuro Presentation
 

Similar a Raspberry Pi Python Rover

Proyecto slider
Proyecto sliderProyecto slider
Proyecto sliderMikeGran
 
Minivoltios fase3
Minivoltios fase3Minivoltios fase3
Minivoltios fase3josglods
 
(2) Prieto Antón - Diseño de la app y el control de una cámara video con Ardu...
(2) Prieto Antón - Diseño de la app y el control de una cámara video con Ardu...(2) Prieto Antón - Diseño de la app y el control de una cámara video con Ardu...
(2) Prieto Antón - Diseño de la app y el control de una cámara video con Ardu...XiomaraCorralesQuint
 
Como programar en Arduino
Como programar en ArduinoComo programar en Arduino
Como programar en ArduinoJavier Leyva
 
02 programarpic
02 programarpic02 programarpic
02 programarpicaserege66
 
Proyecto mecanico y rotico 666
Proyecto mecanico y rotico 666Proyecto mecanico y rotico 666
Proyecto mecanico y rotico 666Julian Aguilar
 
Carro a control remoto por Zigbee IEE802.15.4
Carro a control remoto por  Zigbee IEE802.15.4Carro a control remoto por  Zigbee IEE802.15.4
Carro a control remoto por Zigbee IEE802.15.4Fredy Serna
 
Manual spanish vag-com
Manual spanish vag-comManual spanish vag-com
Manual spanish vag-comdetector1985
 
Spain AI 2022 - ¡Oh, un modelo de ML, vamos a desplegarlo! - Machine Learning...
Spain AI 2022 - ¡Oh, un modelo de ML, vamos a desplegarlo! - Machine Learning...Spain AI 2022 - ¡Oh, un modelo de ML, vamos a desplegarlo! - Machine Learning...
Spain AI 2022 - ¡Oh, un modelo de ML, vamos a desplegarlo! - Machine Learning...Ricardo Guerrero Gómez-Olmedo
 
Emitir video por internet con raspberry
Emitir video por internet con raspberry Emitir video por internet con raspberry
Emitir video por internet con raspberry falso234
 
Actividades robotica
Actividades roboticaActividades robotica
Actividades roboticaesandemetrio
 

Similar a Raspberry Pi Python Rover (20)

Proyecto slider
Proyecto sliderProyecto slider
Proyecto slider
 
Minivoltios fase3
Minivoltios fase3Minivoltios fase3
Minivoltios fase3
 
Labview & pic
Labview & picLabview & pic
Labview & pic
 
Como crear un robot de sumo autónomo y barato
Como crear un robot de sumo autónomo y baratoComo crear un robot de sumo autónomo y barato
Como crear un robot de sumo autónomo y barato
 
Curso de-mcu-proteus
Curso de-mcu-proteusCurso de-mcu-proteus
Curso de-mcu-proteus
 
53592868 curso-de-mcu-proteus
53592868 curso-de-mcu-proteus53592868 curso-de-mcu-proteus
53592868 curso-de-mcu-proteus
 
(2) Prieto Antón - Diseño de la app y el control de una cámara video con Ardu...
(2) Prieto Antón - Diseño de la app y el control de una cámara video con Ardu...(2) Prieto Antón - Diseño de la app y el control de una cámara video con Ardu...
(2) Prieto Antón - Diseño de la app y el control de una cámara video con Ardu...
 
Como programar en Arduino
Como programar en ArduinoComo programar en Arduino
Como programar en Arduino
 
02 programar
02 programar02 programar
02 programar
 
02 programarpic
02 programarpic02 programarpic
02 programarpic
 
Proy iker4
Proy iker4Proy iker4
Proy iker4
 
Como programar un pic en 4 pasos
Como programar un pic en 4 pasosComo programar un pic en 4 pasos
Como programar un pic en 4 pasos
 
Proyecto mecanico y rotico 666
Proyecto mecanico y rotico 666Proyecto mecanico y rotico 666
Proyecto mecanico y rotico 666
 
Carro a control remoto por Zigbee IEE802.15.4
Carro a control remoto por  Zigbee IEE802.15.4Carro a control remoto por  Zigbee IEE802.15.4
Carro a control remoto por Zigbee IEE802.15.4
 
Manual spanish vag-com
Manual spanish vag-comManual spanish vag-com
Manual spanish vag-com
 
Manual spanish vag-com
Manual spanish vag-comManual spanish vag-com
Manual spanish vag-com
 
Spain AI 2022 - ¡Oh, un modelo de ML, vamos a desplegarlo! - Machine Learning...
Spain AI 2022 - ¡Oh, un modelo de ML, vamos a desplegarlo! - Machine Learning...Spain AI 2022 - ¡Oh, un modelo de ML, vamos a desplegarlo! - Machine Learning...
Spain AI 2022 - ¡Oh, un modelo de ML, vamos a desplegarlo! - Machine Learning...
 
Emitir video por internet con raspberry
Emitir video por internet con raspberry Emitir video por internet con raspberry
Emitir video por internet con raspberry
 
Curso de-mcu-proteus
Curso de-mcu-proteusCurso de-mcu-proteus
Curso de-mcu-proteus
 
Actividades robotica
Actividades roboticaActividades robotica
Actividades robotica
 

Último

¡Ya basta! Sanidad Interior - Angela Kellenberger.pdf
¡Ya basta! Sanidad Interior - Angela Kellenberger.pdf¡Ya basta! Sanidad Interior - Angela Kellenberger.pdf
¡Ya basta! Sanidad Interior - Angela Kellenberger.pdfjuan23xpx
 
BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).jcaballerosamayoa
 
Tipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de DatosTipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de DatosYOMIRAVILLARREAL1
 
Editorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdfEditorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdfYanitza28
 
De Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptxDe Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptxdoloresolmosantiago
 
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptxAVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptxdulcemonterroza
 
Redes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdfRedes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdfJosAndrRosarioVzquez
 
Función del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacionFunción del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacionEmanuelMuoz11
 
Introduccion-a-la-electronica-industrial.pptx
Introduccion-a-la-electronica-industrial.pptxIntroduccion-a-la-electronica-industrial.pptx
Introduccion-a-la-electronica-industrial.pptxcj12paz
 
Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.241534381
 
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfpresentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfaxelv9257
 
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...dramosbrise1403
 
microsoft word manuales para todos tipos de estudiamte
microsoft word manuales para todos tipos de estudiamtemicrosoft word manuales para todos tipos de estudiamte
microsoft word manuales para todos tipos de estudiamte2024020140
 
presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...axelv9257
 
Navegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la ComunicaciónNavegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la ComunicaciónAntonia Yamilet Perez Palomares
 
Tarea_sesion_15_Reportes Maestro - Detalle con el uso de AJAX.pptx
Tarea_sesion_15_Reportes Maestro - Detalle con el uso de AJAX.pptxTarea_sesion_15_Reportes Maestro - Detalle con el uso de AJAX.pptx
Tarea_sesion_15_Reportes Maestro - Detalle con el uso de AJAX.pptxVICTORMANUELBEASAGUI
 
10°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-810°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-8antoniopalmieriluna
 
el uso de las TIC en la vida cotidiana.pptx
el uso de las TIC en la vida cotidiana.pptxel uso de las TIC en la vida cotidiana.pptx
el uso de las TIC en la vida cotidiana.pptx221112876
 
Editorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdfEditorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdfYanitza28
 
Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024NicolleAndrade7
 

Último (20)

¡Ya basta! Sanidad Interior - Angela Kellenberger.pdf
¡Ya basta! Sanidad Interior - Angela Kellenberger.pdf¡Ya basta! Sanidad Interior - Angela Kellenberger.pdf
¡Ya basta! Sanidad Interior - Angela Kellenberger.pdf
 
BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).
 
Tipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de DatosTipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de Datos
 
Editorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdfEditorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdf
 
De Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptxDe Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptx
 
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptxAVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptx
 
Redes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdfRedes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdf
 
Función del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacionFunción del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacion
 
Introduccion-a-la-electronica-industrial.pptx
Introduccion-a-la-electronica-industrial.pptxIntroduccion-a-la-electronica-industrial.pptx
Introduccion-a-la-electronica-industrial.pptx
 
Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.
 
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfpresentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
 
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
 
microsoft word manuales para todos tipos de estudiamte
microsoft word manuales para todos tipos de estudiamtemicrosoft word manuales para todos tipos de estudiamte
microsoft word manuales para todos tipos de estudiamte
 
presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...
 
Navegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la ComunicaciónNavegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
 
Tarea_sesion_15_Reportes Maestro - Detalle con el uso de AJAX.pptx
Tarea_sesion_15_Reportes Maestro - Detalle con el uso de AJAX.pptxTarea_sesion_15_Reportes Maestro - Detalle con el uso de AJAX.pptx
Tarea_sesion_15_Reportes Maestro - Detalle con el uso de AJAX.pptx
 
10°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-810°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-8
 
el uso de las TIC en la vida cotidiana.pptx
el uso de las TIC en la vida cotidiana.pptxel uso de las TIC en la vida cotidiana.pptx
el uso de las TIC en la vida cotidiana.pptx
 
Editorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdfEditorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdf
 
Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024
 

Raspberry Pi Python Rover

  • 1. RaspberryPi Robot Autor: Manuel Fernández de Ginzo Muñoz Tutor: José Antonio Carrasco Díaz I.E.S. Francisco Romero Vargas (Jerez de la Frontera) Administración de Sistemas Informáticos en Red Curso: 2015/16
  • 2. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. Tabla de contenido Introducción. Introducción. Finalidad. Objetivos. Medios necesarios. Planificación. Realización del Proyecto. Trabajos realizados. Problemas encontrados. Modificaciones sobre el proyecto planteado inicialmente. Posibles mejoras al proyecto. Bibliografía. RaspberryPi Robot. Página 1
  • 3. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. Introducción. Introducción. Construir un robot que sea controlado remotamente a través de una página web, en dicha web aparecerán los controles y un video streaming por el cual podemos ver el camino que va siguiendo el robot a través de una webcam. Finalidad. Controlar un robot remotamente a través de una página web desde cualquier dispositivo que tenga navegador web. También se puede utilizar como cualquier otro juguete tipo coche teledirigido para niños. Objetivos. Controlaremos un robot incorporando una RaspberryPi2 en la cual hay un servidor web, a través de una página web en la que utilizaremos el framework “webiopi”, esto nos ayuda a controlar los “GPIO” de la Raspberry a través de una página web,lo que realmente hace es llamar a funciones escritas en python a través de macros, las cuales hacen que el robot se mueva, también es posible mover el robot diagonalmente, por ejemplo, para girar en diagonal hacia la izquierda se debe de reducir la velocidad del motor derecho y en el motor izquierdo dejar la velocidad por defecto. Podremos ver un streaming de video en la página web, el cual es ejecutado por la cámara web incorporada al robot. RaspberryPi Robot. Página 2
  • 4. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. Medios necesarios. Que se va a necesitar para realizar este proyecto, hay que indicar los medios físicos (hardware) y los medios lógicos (software). Ejemplo: Para la realización de este proyecto se necesita lo siguiente: ● RaspberryPi2 con caja acrílica. ● 2 motores DC con 2 ruedas ● Interruptor ● Chasis del robot ● Puente H (L298N) ● 6 Pilas AA Alcalinas con su respectivo soporte. ● Cámara para RaspberryPi 2 ● PowerBank de 5000mAh, Salida: 5V 2.1A ● Soporte de madera para la RaspberryPi ● ServoMotor ● Raspbian, Webiopi Framework, Python Planificación. ● Investigación sobre componentes necesarios para llevar a cabo el proyecto: 6 horas. ● Instalación de Raspbian y puesta a punto de la RaspberryPi: 1 hora. ● Montaje del chasis y conexionado con los dos motores: 2 horas. ● Instalación de webiopi y configuración con parcheado para RaspberryPi2: 4 horas ● Comprobación del framework webiopi con RaspberryPi2, manejando los pines “GPIO”: 1 hora. ● Montaje de la cámara web: 1 hora. ● Montaje del servo y soporte para la cámara: 1 hora. ● Estudiar la manera de controlar nuestro servo con Webiopi, modificar el código fuente del framework para que pueda trabajar con nuestro servo: 2 horas ● Montaje de los drivers de la cámara en la RaspberryPi, modificación de parámetros del streaming, comprobación que todo funciona y se puede gestionar perfectamente: 4 horas. ● Montaje de la tarjeta WiFi USB y puesta a punto: 1 hora. ● Conexionado de todos los cables y proceso de soldar: 2 hora. ● Crear punto de acceso con la tarjeta WiFi USB con servidor DHCP: 3 horas. ● Investigar sobre el envío de pulsos(PWM) a través de los pines “GPIO” a nuestros motores: 5 horas. ● Aprender a controlar los pines “GPIO” a través de Python: 4 horas. RaspberryPi Robot. Página 3
  • 5. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. ● Estudiar la estructura de Webiopi para poder crear los botones de dirección y el “slider” para controlar el servo: 5 horas. ● Planificar las acciones de todos los botones de dirección, por ejemplo, si se le da hacia delante, enviar un pulso “HIGH” al motor “A” y “B” en la patilla positiva y establecer la velocidad máxima: 5 horas. ● Pruebas comprobando que funcionan todos los botones de direcciones: 3 horas. ● Pruebas comprobando que funciona el servo a través de la página web: 1 hora. ● Prueba de todo el proyecto en condiciones reales: 8 horas. ● Preparación de la documentación del proyecto: 6 horas. Horas totales que se planifican para el proyecto: 61 Trabajos Realizados. Una vez tengamos el chasis del coche con los motores y cables, empezaremos con el montaje del mismo. Montamos los soportes de los motores, necesitaremos dos tornillos y dos tuercas. Sólo pondremos una parte del soporte ya que la otra parte se monta con el chasis. Hacemos lo mismo con el otro motor. Añadimos el motor con la otra parte del soporte al chasis. Debemos de introducir los dos tornillos a través del soporte y del motor hasta sobrepasar el otro soporte. Lo encajamos con la mueca que trae el chasis. Lo mismo con el otro motor. RaspberryPi Robot. Página 4
  • 6. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. RaspberryPi Robot. Página 5
  • 7. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. Una vez tengamos los dos motores encajados perfectamente en el chasis, pondremos las ruedas a los motores. Solamente es encajarlas haciendo un poco de fuerza. Debemos asegurarnos que las dos ruedas están a la misma distancia del chasis. Ahora instalaremos la rueda delantera en el chasis. Debemos de tener a mano ocho tornillos, cuatro roscas y la rueda. RaspberryPi Robot. Página 6
  • 8. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. Atornillamos primero los cuatro tornillos con las roscas. RaspberryPi Robot. Página 7
  • 9. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. A continuación ponemos la rueda y la atornillamos. Lo próximo que vamos a hacer es colocar el puente H encima del chasis mediante una presilla. Antes de ello colocaremos los cables que van hacia los motores a las entradas OUT1 y 2 para el motor A y OUT3 y 4 para el B. RaspberryPi Robot. Página 8
  • 10. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. Agarramos el puente H al chasis pasando la presilla por uno de los agujeros del mismo. RaspberryPi Robot. Página 9
  • 11. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. También pondremos presillas en la mitad del cable a modo de guía con el fin de no sobresalir del chasis. RaspberryPi Robot. Página 10
  • 12. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. Ahora conectamos los cables del puente H a los motores, el orden es indiferente, ya que después si queremos, lo podemos manipular mediante software en el caso de que estén puestos al revés y hacer que la rueda gire hacia delante en vez de al contrario. Fabricaremos un soporte de madera a medida para soportar la RaspberryPi. Solo debemos medir las dimensiones de la RaspberryPi y dejarle un poco a cada lado para que luego no sobresalga tanto el cable de alimentación de la RaspberryPi del soporte. Tiene dos tornillos altos para dejarle espacio al soporte de pilas que instalaremos después debajo. Los tornillos estarán sujetos mediante tuercas, en total usaremos 8 tuercas para los dos tornillos. RaspberryPi Robot. Página 11
  • 13. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. Instalamos el botón que se utilizará para alimentar los motores. Soldamos los cables de la siguiente manera al interruptor. Uno de esos cables va al puente H a la entrada de +12v y el otro cable al positivo del soporte de las pilas. RaspberryPi Robot. Página 12
  • 14. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. Ahora colocamos los cables para la parte lógica que se encargará la RaspberryPi. El pin ENA se utiliza para controlar la velocidad del motor A, IN1 y IN2 se utiliza para hacer funcionar al motor A. IN3 y IN4 se utiliza para el motor B. ENB se utiliza también para controlar la velocidad, pero en éste caso, del motor B. Antes de colocar todos los cables debemos de eliminar los jumpers que están en ENA y ENB. Estos jumpers serían útiles en el caso en el que no controlemos la velocidad. Introducimos dos cables a la entrada GND(Tierra) del puente H. Un cable se utilizará para el lado negativo del soporte de las pilas y otro iría a un GPIO GND de la RaspberryPi En la salida +5V metemos el cable que iría para alimentar el servomotor. RaspberryPi Robot. Página 13
  • 15. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. Montamos la RaspberryPi en el soporte de madera. La sujetamos mediante dos gomillas para facilitar el desmontaje en el caso de que queramos acceder mejor a ella. El servomotor lo montaremos encima del puerto USB en el cual está el adaptador WiFi conectado de la RaspberryPi. Está sujeto mediante un alambre que se agarra al soporte de madera. Debemos de darle forma hasta que quede de una manera que sujete bien el servomotor. Para la cámara web vamos a construir un pequeño soporte de madera y pegarlo al servomotor con cualquier pegamento de fuerte fijación. La cámara es soportada mediante fiso, ya que no es necesario un soporte tan fijado para el uso que le vamos a dar. Conectaremos la cámara a la entrada llamada “camera” de la RaspberryPi. Con un destornillador plano podemos levantar la parte blanca del conector para luego introducir el cable de la cámara. Una vez esté fijado apretamos la parte blanca. Comprobaremos que el cable está correctamente introducido. RaspberryPi Robot. Página 14
  • 16. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. Sujetamos la batería para alimentar a la RaspberryPi mediante una presilla en la parte trasera del chasis. RaspberryPi Robot. Página 15
  • 17. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. La batería para alimentar a los motores la colocaremos debajo del soporte de madera sujetándola mediante otra presilla. Debemos de colocar la presilla de manera que pase entre pila y pila para después cambiarlas en el caso de que se agoten. RaspberryPi Robot. Página 16
  • 18. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. Para ayudarnos a identificar los GPIO podemos utilizar el siguiente esquema. Las conexiones son las siguientes del puente H a los GPIO: ● ENA => GPIO20 ● ENB => GPIO21 ● IN1 => GPIO17 ● IN2 => GPIO27 ● IN3 => GPIO5 ● IN4 => GPIO6 Para conectar el servomotor debemos tener en cuenta lo siguiente. El cable rojo de enmedio es para alimentarlo, tenemos que conectarlo a la salida de +5V del puente H. El cable marrón es el GND (Tierra) , debemos conectarlo a un pin de la RaspberryPi GND. Y por último, el cable naranja es para controlarlo mediante la RaspberryPi, lo conectaremos al GPIO4. RaspberryPi Robot. Página 17
  • 19. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. Esquema de conexión de los componentes. Observemos más detalladamente las conexiones lógicas del puente H a los GPIO. De color verde tenemos las conexiones ENA y ENB, empezando por la izquierda, ENA se conecta a GPIO20 y ENB a GPIO21. De color naranja tenemos IN1 e IN2, IN1 se conecta RaspberryPi Robot. Página 18
  • 20. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. a GPIO17 e IN2 a GPIO27. De color amarillo tenemos IN3 e IN4, IN3 se conecta a GPIO5 e IN4 a GPIO6. Ahora continuaremos instalando el sistema operativo “Raspbian Jessie” , lo descargamos en ​https://www.raspberrypi.org/downloads/raspbian/​. Descargamos también “Win32 Disk Imager” para grabar la imagen en la tarjeta SD. https://sourceforge.net/projects/win32diskimager/ Ejecutamos “Win32 Disk Imager” , seleccionamos nuestra imagen, la tarjeta SD en la que se va a grabar y le damos a “Write”. Conectamos nuestra Raspberry a una pantalla con HDMI para la realizar la configuración más cómodamente. Nos aparecerá el programa “Raspi-Config” automáticamente al iniciar, debemos de expandir nuestra tarjeta SD para que tengamos toda la capacidad de la tarjeta SD ya que si no lo hacemos sólo tendremos de almacenamiento 4GB. Para ello seleccionamos la opción “Expand Filesystem”. RaspberryPi Robot. Página 19
  • 21. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. Si queremos también podemos cambiar la contraseña del usuario “pi”. Aprovechamos para habilitar la cámara seleccionando “Enable Camera”. En “Internationalisation Options” configuraremos el idioma del sistema. Una vez hayamos terminado con la configuración le damos a “Finish”. A continuación vamos a empezar a hacer los scripts para controlar el robot. Podemos hacerlo todo mediante SSH o con el cable HDMI conectado a un monitor. Si queremos controlarla mediante SSH, en “raspi-config” tenemos una opción para habilitar el servidor SSH, “Advanced options/A4 SSH”. Nos aseguramos que estamos conectados a Internet mediante la tarjeta Ethernet de nuestra Raspberry ya que nos va a hacer falta para actualizar y configurar varias cosas. Ejecutamos “sudo apt-get update” y “sudo apt-upgrade”. Lo primero que debemos hacer es instalar el framework webiopi, ya que lo utilizaremos para desarrollar nuestro programa. Descargamos este archivo: http://sourceforge.net/projects/webiopi/files/WebIOPi-0.7.1.tar.gz/download Ahora lo instalamos metiéndonos en el directorio en donde esté y ejecutando el script de instalación “./setup.sh”. Ésta versión de webiopi no funciona con nuestra “RaspberryPi2”, pero no hay porque preocuparse, alguien se encargó de desarrollar un parche para solucionar el problema, por lo que tendremos que parchearlo con los siguientes comandos: $wget https://raw.githubusercontent.com/doublebind/raspi/master/webiop i-pi2bplus.patch $ patch -p1 -i webiopi-pi2bplus.patch $ sudo ./setup.sh RaspberryPi Robot. Página 20
  • 22. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. Una vez ejecutados esos comando ya tendremos “Webiopi” compatible para nuestra RaspberryPi 2. Ahora establecemos el inicio automático de webiopi cada vez que se inicie el sistema. $ sudo update-rc.d webiopi defaults Una vez tengamos webiopi funcionando continuamos con los scripts para controlar el robot. Crearemos un nuevo archivo con el nombre que queramos acabado en “.py” ya que será un script en Python. # Importamos la librería “webiopi” y “os” import webiopi import os # Le asignamos un alias para trabajar más cómodo. GPIO = webiopi.GPIO # GPIOs motor izquierdo L1=17 # H-Bridge 1 L2=27 # H-Bridge 2 ENB=20 # Velocidad # GPIOs motor derecho R1=5 # H-Bridge 3 R2=6 # H-Bridge 4 ENA=21 # Velocidad Servo=4 # GPIO Servo # Definición de Macros RaspberryPi Robot. Página 21
  • 23. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. # Ir hacia atrás. @webiopi.macro def go_backward(): GPIO.pulseRatio(ENA, 0.5) GPIO.pulseRatio(ENB, 0.5) GPIO.output(R1, GPIO.HIGH) GPIO.output(R2, GPIO.LOW) GPIO.output(L2, GPIO.HIGH) GPIO.output(L1, GPIO.LOW) # Ir hacia atrás verticalmente a la derecha. @webiopi.macro def go_backwardr(): GPIO.pulseRatio(ENA,0.5) GPIO.pulseRatio(ENB, 0.3) GPIO.output(R1, GPIO.HIGH) GPIO.output(R2, GPIO.LOW) GPIO.output(L2, GPIO.HIGH) GPIO.output(L1, GPIO.LOW) # Ir hacia atrás verticalmente a la izquierda. @webiopi.macro def go_backwardl(): GPIO.pulseRatio(ENA, 0.3) GPIO.pulseRatio(ENB, 0.5) GPIO.output(R1, GPIO.HIGH) GPIO.output(R2, GPIO.LOW) GPIO.output(L2, GPIO.HIGH) GPIO.output(L1, GPIO.LOW) # Ir hacia delante. @webiopi.macro RaspberryPi Robot. Página 22
  • 24. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. def go_forward(): GPIO.pulseRatio(ENB, 0.5) GPIO.pulseRatio(ENA, 0.5) GPIO.output(R1, GPIO.LOW) GPIO.output(R2, GPIO.HIGH) GPIO.output(L2, GPIO.LOW) GPIO.output(L1, GPIO.HIGH) # Ir hacia delante verticalmente hacia la derecha. @webiopi.macro def go_forwardr(): GPIO.pulseRatio(ENB, 0.5) GPIO.pulseRatio(ENA, 0.3) GPIO.output(R1, GPIO.LOW) GPIO.output(R2, GPIO.HIGH) GPIO.output(L2, GPIO.LOW) GPIO.output(L1, GPIO.HIGH) # Ir hacia delante verticalmente hacia la izquierda. @webiopi.macro def go_forwardl(): GPIO.pulseRatio(ENB, 0.3) GPIO.pulseRatio(ENA, 0.5) GPIO.output(R1, GPIO.LOW) GPIO.output(R2, GPIO.HIGH) GPIO.output(L2, GPIO.LOW) GPIO.output(L1, GPIO.HIGH) # Girar a la izquierda. @webiopi.macro RaspberryPi Robot. Página 23
  • 25. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. def turn_left(): GPIO.pulseRatio(ENB, 0.5) GPIO.pulseRatio(ENA, 0.5) GPIO.output(R1, GPIO.HIGH) GPIO.output(R2, GPIO.LOW) GPIO.output(L1, GPIO.HIGH) GPIO.output(L2, GPIO.LOW) # Girar a la derecha. @webiopi.macro def turn_right(): GPIO.pulseRatio(ENB, 0.5) GPIO.pulseRatio(ENA, 0.5) GPIO.output(L2, GPIO.HIGH) GPIO.output(L1, GPIO.LOW) GPIO.output(R2, GPIO.HIGH) GPIO.output(R1, GPIO.LOW) # Detenerse. @webiopi.macro def stop(): GPIO.output(R1, GPIO.LOW) GPIO.output(R2, GPIO.LOW) GPIO.output(L1, GPIO.LOW) GPIO.output(L2, GPIO.LOW) @webiopi.macro def shutdown(): os.system(“halt”); RaspberryPi Robot. Página 24
  • 26. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. Esta función se utilizará para capturar fotos del streaming. Se utiliza el método “strftime” para obtener la fecha y hora actual, después la utilizo para el nombre de la foto. A continuación se descarga mediante el comando “wget”. @webiopi.macro def foto(): tiempo=time.strftime("%d-%m-%y.%I:%M:%S") ruta="/var/www/fotos/imagenes/"+tiempo+".jpeg" os.system("wget http://192.168.1.1:8080/stream/snapshot.jpeg?delay_s=0 -O "+ruta) # -------------------------------------------------- # # Iniciacializacion # # -------------------------------------------------- # def setup(): # Instalación GPIOs GPIO.setFunction(L1, GPIO.OUT) GPIO.setFunction(L2, GPIO.OUT) GPIO.setFunction(R1, GPIO.OUT) GPIO.setFunction(R2, GPIO.OUT) GPIO.setFunction(ENB, GPIO.PWM) GPIO.setFunction(ENA, GPIO.PWM) GPIO.setFunction(Servo, GPIO.PWM) def destroy(): # Resetea las funciones GPIO GPIO.setFunction(L1, GPIO.IN) GPIO.setFunction(L2, GPIO.IN) RaspberryPi Robot. Página 25
  • 27. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. GPIO.setFunction(R1, GPIO.IN) GPIO.setFunction(R2, GPIO.IN) GPIO.setFunction(ENB, GPIO.IN) GPIO.setFunction(ENA, GPIO.IN) GPIO.setFunction(Servo, GPIO.IN) Una vez tengamos el script creado y guardado, editamos el archivo “/etc/webiopi/config” y en la parte de scripts introducimos la ruta de nuestro script. [SCRIPTS] # Load custom scripts syntax : # name = sourcefile # each sourcefile may have setup, loop and destroy functions and macros #myscript = /home/pi/webiopi/examples/scripts/macros/script.py robot = /home/pi/scripts/robot.py Aprovechamos para cambiarle la contraseña de acceso a la web de control del robot. Con el comando “webiopi-passwd” generamos un fichero “passwd”. En el fichero “/etc/webiopi/config” podemos introducir la ruta de nuestro archivo “passwd” # File containing sha256(base64("user:password")) # Use webiopi-passwd command to generate it passwd-file = /etc/webiopi/passwd Ahora creamos el “.html” en el que aparecerán todos los controles del robot. Llamamos al framework webiopi para poder usarlo en nuestro html. <script type="text/javascript" src="/webiopi.js"></script> Empezamos a crear los botones con la ayuda de webiopi y el método “createButton”. RaspberryPi Robot. Página 26
  • 28. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. Los parámetros que recibe éste método son (“ID html con el que aparecerá el botón”,”valor del botón”,función a la que llama cuando hacemos click, función a la que llama cuando dejamos de hacer click). También hemos creado un botón para apagar el robot, para ello utilizamos la función “shutdown” que llama a una macro en python que se encarga de ejecutar el comando “halt” en el sistema. <script type="text/javascript"> function init() { var button; button = webiopi().createButton("bt_upr", "/", go_forwardr, stop); $("#up").append(button); button = webiopi().createButton("bt_up", "/", go_forward, stop); $("#up").append(button); button = webiopi().createButton("bt_upl", "/", go_forwardl, stop); $("#up").append(button); button = webiopi().createButton("bt_left", "<", turn_left, stop); $("#middle").append(button); button = webiopi().createButton("bt_right", ">", turn_right, stop); $("#middle").append(button); button = webiopi().createButton("bt_downl", "/", go_backwardl, stop); $("#down").append(button); RaspberryPi Robot. Página 27
  • 29. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. button = webiopi().createButton("bt_down", "/", go_backward, stop); $("#down").append(button); button = webiopi().createButton("bt_downr", "/", go_backwardr, stop); $("#down").append(button); button = webiopi().createAngleSlider(4); $("#servo").append(button); button = webiopi().createButton("shutdown", "O", shutdown); $("#down").append(button); } function go_forward() { webiopi().callMacro("go_forward"); } function go_forwardr() { webiopi().callMacro("go_forwardr"); } function go_forwardl() { webiopi().callMacro("go_forwardl"); } function go_backward() { webiopi().callMacro("go_backward"); } function go_backwardr() { webiopi().callMacro("go_backwardr"); } function go_backwardl() { RaspberryPi Robot. Página 28
  • 30. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. webiopi().callMacro("go_backwardl"); } function turn_right() { webiopi().callMacro("turn_right"); } function turn_left() { webiopi().callMacro("turn_left"); } function stop() { webiopi().callMacro("stop"); } function shutdown() { alert(“Apagando...”); webiopi().callMacro(“shutdown”); } function foto() { webiopi().callMacro(“foto”); } webiopi().ready(init); </script> </head> <body> Creamos los div para los botones y el servo. Añadimos una etiqueta “IMG” con la ruta “http://192.168.1.1:8080/stream/video.mjpeg” para el streaming que instalaremos más adelante. <div id="content" align="center"> RaspberryPi Robot. Página 29
  • 31. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. <img class=”streaming” onclick=”foto()” src="http://192.168.1.1:8080/stream/video.mjpeg"/> <div id="up"></div> <div id="middle"></div> <div id="down"></div> <div id="servo"></div> <a href=”http://galeria.robot”>Galería de Imágenes</a> </div> </body> </html> Ahora empezaremos a configurar el streaming de video. Para ello debemos de tener instalado los paquetes​ ​“libjpeg8-dev”, “imagemagick” ,”subversion”. Ejecutaremos los siguientes comandos: wget http://www.linux-projects.org/listing/uv4l_repo/lrkey.asc && sudo apt-key add ./lrkey.asc echo "deb http://www.linux-projects.org/listing/uv4l_repo/raspbian/ wheezy main" | sudo tee -a /etc/apt/sources.list sudo apt-get update sudo apt-get install uv4l uv4l-raspicam uv4l-raspicam-extras uv4l-server uv4l-uvc uv4l-xscreen uv4l-mjpegstream sudo reboot Una vez introducidos estos comandos, tendremos listo nuestro servidor de streaming. Ahora configuraremos nuestra raspberry para que cree una red WiFi a la que nos podamos conectar para controlar el robot. Lo primero que debemos hacer es instalar un servidor DHCP para que de IP a los clientes con el comando “apt-get install isc-dhcp-server”. Después editamos el siguiente archivo "/etc/dhcp/dhcpd.conf” , buscamos estas lineas y las comentamos. RaspberryPi Robot. Página 30
  • 32. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. # option domain-name "example.org"; # option domain-name-servers ns1.example.org, ns2.example.org; Ahora buscamos estas lineas y descomentamos la parte de “authoritative”. # If this DHCP server is the official DHCP server for the local # network, the authoritative directive should be uncommented. authoritative; Ahora abajo del todo introducimos nuestra configuración para dar IP a los clientes de la siguiente manera. subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.2 192.168.1.3; option broadcast-address 192.168.1.255; option routers 192.168.1.1; default-lease-time 600; max-lease-time 7200; option domain-name-servers: 192.168.1.1; } Guardamos los cambios y nos vamos ahora a editar el archivo “/etc/default/isc-dhcp-server”. En la parte que aparece “INTERFACES” pondremos “wlan0” y guardamos. Ahora en “/etc/network/interfaces” establecemos una IP estática para nuestra raspberry. iface wlan0 inet static address 192.168.1.1 netmask 255.255.255.0 Ya tenemos configurado nuestro servidor DHCP. Ahora vamos a configurar el punto de acceso. Creamos un archivo aquí “/etc/hostapd/hostapd.conf”. Introducimos lo siguiente dentro de él. interface=wlan0 driver=rtl871xdrv ssid=Pi_AP hw_mode=g channel=6 macaddr_acl=0 RaspberryPi Robot. Página 31
  • 33. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_passphrase=Raspberry wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP Ahora le diremos a la raspberry donde esta el archivo de configuracion, entramos en “/etc/default/hostapd” y en la parte que aparece “#DAEMON_CONF=""” introducimos la ruta del archivo que creamos anteriormente. Quedaría de la siguiente manera. DAEMON_CONF="/etc/hostapd/hostapd.conf" Reiniciamos la Raspberry y ya tendremos nuestro punto de acceso funcionando. Ahora configuraremos nuestra Raspberry para que redireccione las peticiones al puerto 80 de Apache al 8000 de Webiopi, para ello necesitamos hacer un proxy inverso con apache. Debemos de tener en cuenta de que el servidor web de webiopi está escuchando en el puerto 8000, para comprobarlo nos vamos a “/etc/webiopi/config” y en la línea donde aparece “port” debe de aparecer “8000”. Comenzamos con la instalación de Apache, para ello ejecutamos el comando “apt-get install apache2” Para que apache haga de proxy inverso debemos de tener los siguientes módulos: ● proxy ● proxy_ajp ● proxy_http ● rewrite ● deflate ● headers ● proxy_connect ● proxy_html Los habilitaremos de la siguiente manera “a2enmod [nombre_módulo]”. En nuestro caso nos hace falta instalar el módulo “proxy_html” ya que por defecto no se encuentra instalado, para ello ejecutamos “apt-get install libapache2-mod-proxy-html”. Ahora lo habilitamos con el comando “a2enmod”. Una vez estén todos los módulos activados comenzamos con el archivo de configuración, nos vamos a “/etc/apache2/sites-availables” ,borramos el sitio por defecto y creamos uno nuevo con lo siguiente: <VirtualHost *:80> ProxyPreserveHost On RaspberryPi Robot. Página 32
  • 34. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. ServerName controles.robot ProxyPass / http://192.168.1.1:8000/ ProxyPassReverse / http://192.168.1.1:8000/ </VirtualHost> Ahora tenemos que instalar “bind9” para tener nuestro servidor DNS, ejecutamos “apt-get install bind9”. Nos vamos a “/etc/bind/” y creamos el archivo “db.robot” con lo siguiente: ; BIND reverse data file for empty rfc1918 zone ; ; DO NOT EDIT THIS FILE - it is used for multiple zones. ; Instead, copy it, edit named.conf, and use that copy. ; $TTL 86400 @ IN SOA robot. root.robot. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 86400 ) ; Negative Cache TTL ; @ IN NS ns1.robot. ns1 IN A 192.168.1.1 controles IN A 192.168.1.1 galeria IN A 192.168.1.1 Editamos el archivo “named.conf.local” y añadimos una nueva zona: // // Do any local configuration here // // Consider adding the 1918 zones here, if they are not used in your // organization RaspberryPi Robot. Página 33
  • 35. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. //include "/etc/bind/zones.rfc1918"; zone "robot"{ type master; file "/etc/bind/db.robot"; }; Configuramos la página web que mostrará las fotos realizadas con el robot. Para ello creamos también un host virtual en apache para que pueda trabajar con nuestro DNS. <VirtualHost *:80> ServerName galeria.robot DocumentRoot /var/www/fotos </VirtualHost> Aquí tenemos el código PHP que he utilizado para mostrar las fotos. Lo primero que hago es mediante “scandir” meter todos los nombres de los ficheros que se encuentran en el directorio en un array. A continuación compruebo si se encuentra “.jpeg” en el nombre de esos ficheros, si es así, los muestro. También es posible descargar la foto haciendo click sobre ella mediante el atributo de HTML5 “download”. <?php $directorio = "imagenes/"; $ficheros = scandir($directorio); for ($i = 0; $i<=count($ficheros); $i++){ if (strrpos("$ficheros[$i]",".jpeg") > 0) echo "<a href='imagenes/$ficheros[$i]' download='$ficheros[$i]'><img title='$ficheros[$i]' src='image$ } ?> Una vez configurado todo el DNS reiniciamos Apache y Bind. Ya está todo listo para funcionar, para entrar en la página web de controles del robot nos conectamos a la red WiFi que crea y introducimos en nuestro navegador web la RaspberryPi Robot. Página 34
  • 36. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. dirección “controles.robot” y entraremos en la página web que creamos anteriormente con todos sus controles junto al streaming. Problemas encontrados. Tuve que cambiarle las pilas a unas alcalinas con más amperaje y añadirle dos más, ya que no tenía suficiente fuerza para realizar el PWM (control de pulsos) a los motores. Al instalar WebioPi no pude controlar los GPIO del todo bien ya que, hasta la fecha, WebioPi no ha sacado ninguna versión para la RaspberryPi2, tuve que bajarme un parche hecho por un desarrollador en Github. La tarjeta de red WiFi no es compatible del todo para establecerla como punto de acceso mediante los archivos de configuración de Raspbian. Tuve que investigar sobre ello y encontrar los archivos de configuración de Adafruit. Tuve que sustituir la “PowerBank” que alimenta la Raspberry ya que la que tenía inicialmente no ofrecía los suficientes amperios que necesitaba la Raspberry para trabajar con todos los componentes conectados. Modificaciones sobre el proyecto planeado inicialmente. Al principio tenía pensado en controlar el robot mediante Python sin ayuda de ningún framework, pero investigando encontré WebioPi y ví que tendría menos problemas. También quería controlarlo mediante un adaptador Bluetooth, sin embargo decidí hacerlo mediante WiFi ya que su cobertura es mejor. RaspberryPi Robot. Página 35
  • 37. Proyecto Integrado. ASIR 15/16. Manuel Fernández de Ginzo Muñoz. La cámara inicialmente no tenía pensado de que se pudiera controlar su posición mediante un servo, sería fija, pero más adelante investigué sobre el control de servos mediante WebioPi. Posibles mejoras del proyecto. Como principal mejora, sería interesante implementar el control remoto desde Internet mediante VPN. También, sería una buena opción tener la misma aplicación pero desarrollada en Android. No sé si RaspberryPi 2 puede implementar la tecnología WOW (Wake On Wifi), he estado investigando sobre ello y solo he encontrado que es posible mediante WOL (Wake On Lan), esta opción no sería interesante para éste proyecto porque tendría que estar conectado por Ethernet. A modo de asistencia remota, sería interesante la opción de comunicarse mediante el robot remotamente desde Internet a la casa como si de una llamada se tratase. Bibliografía. http://webiopi.trouch.com/ https://www.digitalocean.com/community/tutorials/how-to-use-apache-http-server-as-reverse-pr oxy-using-mod_proxy-extension http://www.home-automation-community.com/surveillance-with-raspberry-pi-noir-camera-howto / http://www.linux-projects.org/modules/sections/index.php?op=viewarticle&artid=14 https://learn.adafruit.com/setting-up-a-raspberry-pi-as-a-wifi-access-point/install-software https://sourceforge.net/p/raspberry-gpio-python/wiki/Home/ https://www.raspberrypi.org/help/ RaspberryPi Robot. Página 36