Difference between revisions of "RaspberryPi"
Line 5: | Line 5: | ||
---- | ---- | ||
− | = Diseños = | + | == Diseños == |
Todos los diseños disponibles se encuentran en el siguiente [[Piezas_3D_RPC#Raspberry_Pi|enlace]]. | Todos los diseños disponibles se encuentran en el siguiente [[Piezas_3D_RPC#Raspberry_Pi|enlace]]. | ||
− | = Sistemas Operativos = | + | == Sistemas Operativos == |
* [http://www.raspberrypi.org/downloads Sistemas Operativos] | * [http://www.raspberrypi.org/downloads Sistemas Operativos] | ||
Line 17: | Line 17: | ||
** [http://www.berryterminal.com/doku.php/berryboot Berryboot]: multibooting os | ** [http://www.berryterminal.com/doku.php/berryboot Berryboot]: multibooting os | ||
− | = Proyectos interesantes = | + | == Proyectos interesantes == |
* [http://www.taringa.net/posts/hazlo-tu-mismo/16139318/6-proyectos-que-puedes-hacer-con-la-Raspberry-Pi.html 6 proyectos para hacer con la RaspberryPi] | * [http://www.taringa.net/posts/hazlo-tu-mismo/16139318/6-proyectos-que-puedes-hacer-con-la-Raspberry-Pi.html 6 proyectos para hacer con la RaspberryPi] | ||
Line 36: | Line 36: | ||
* Sistema de control metereológico | * Sistema de control metereológico | ||
− | = Guías de instalación = | + | == Guías de instalación == |
− | = Configuración remota = | + | == Configuración remota == |
La raspberry pi debe estar conectada por ethernet al router de ASROB. El ordenador de trabajo debe estar conectado a la misma red mediante wifi o ethernet. | La raspberry pi debe estar conectada por ethernet al router de ASROB. El ordenador de trabajo debe estar conectado a la misma red mediante wifi o ethernet. | ||
Line 87: | Line 87: | ||
</pre> | </pre> | ||
− | == | + | === SSH === |
+ | |||
Mediante ssh se puede acceder a la raspberry desde un ordenador por terminal. Si se utiliza el comando -X se utilizan los recursos graficos del ordenador y no de la raspberry. | Mediante ssh se puede acceder a la raspberry desde un ordenador por terminal. Si se utiliza el comando -X se utilizan los recursos graficos del ordenador y no de la raspberry. | ||
Line 95: | Line 96: | ||
Esta IP es fija y ya está configurada desde el arranque de la raspberry pi. | Esta IP es fija y ya está configurada desde el arranque de la raspberry pi. | ||
− | == tightvnc server == | + | === tightvnc server === |
+ | |||
Está instalado un programa para trabajar en escritorio remoto. Como se ha explicado previamente, se lanza automáticamente el tightsvn server. | Está instalado un programa para trabajar en escritorio remoto. Como se ha explicado previamente, se lanza automáticamente el tightsvn server. | ||
− | === Para realizar la conexión en remoto === | + | ==== Para realizar la conexión en remoto ==== |
En el ordenador de trabajo se lanza el programa "remmina" en linux o cualquiera de vnc en Windows. | En el ordenador de trabajo se lanza el programa "remmina" en linux o cualquiera de vnc en Windows. | ||
Line 112: | Line 114: | ||
</pre> | </pre> | ||
− | === Problemas === | + | ==== Problemas ==== |
Que no exista la conexión en remoto: | Que no exista la conexión en remoto: | ||
Line 127: | Line 129: | ||
Con esto ya está configurado y ejecutándose el vnc de la raspberry pi. | Con esto ya está configurado y ejecutándose el vnc de la raspberry pi. | ||
− | == Updated == | + | === Updated === |
Info: http://xmodulo.com/how-to-detect-ip-address-conflicts-in.html | Info: http://xmodulo.com/how-to-detect-ip-address-conflicts-in.html | ||
Line 146: | Line 148: | ||
y la contraseña raspberry | y la contraseña raspberry | ||
− | = GPIO = | + | == GPIO == |
+ | |||
El puerto GPIO tiene las siguientes características: | El puerto GPIO tiene las siguientes características: | ||
Line 163: | Line 166: | ||
− | == Librerías == | + | === Librerías === |
+ | |||
+ | ==== C/C++ ==== | ||
− | |||
Configuración puerto GPIO | Configuración puerto GPIO | ||
Buen tutorial en C/C++ para controlar el GPIO | Buen tutorial en C/C++ para controlar el GPIO | ||
* [http://hertaville.com/2012/11/18/introduction-to-accessing-the-raspberry-pis-gpio-in-c/ GPIO C/C++] | * [http://hertaville.com/2012/11/18/introduction-to-accessing-the-raspberry-pis-gpio-in-c/ GPIO C/C++] | ||
− | === Python === | + | ==== Python ==== |
+ | |||
Existen dos librerías para poder controlar el GPIO de la Raspberry Pi: | Existen dos librerías para poder controlar el GPIO de la Raspberry Pi: | ||
− | ==== Adafruit ==== | + | |
+ | ===== Adafruit ===== | ||
+ | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ sudo apt-get install git | $ sudo apt-get install git | ||
Line 182: | Line 189: | ||
Para poder usarlos es necesario tener estas librerías instaladas | Para poder usarlos es necesario tener estas librerías instaladas | ||
− | ==== rpi.gpio ==== | + | ===== rpi.gpio ===== |
En el siguiente [http://learn.adafruit.com/playing-sounds-and-using-buttons-with-raspberry-pi/install-python-module-rpi-dot-gpio link] están los pasos a seguir. Se reducen a instalar las librerías de GPIO para la Raspberry: | En el siguiente [http://learn.adafruit.com/playing-sounds-and-using-buttons-with-raspberry-pi/install-python-module-rpi-dot-gpio link] están los pasos a seguir. Se reducen a instalar las librerías de GPIO para la Raspberry: | ||
Line 213: | Line 220: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | == PWM == | + | === PWM === |
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
Line 231: | Line 238: | ||
Este programa configura el pin 12 como salida pwm de 0.5 HZ. 1 vez cada 2 seg hace parpadear el led) | Este programa configura el pin 12 como salida pwm de 0.5 HZ. 1 vez cada 2 seg hace parpadear el led) | ||
− | === Servo === | + | ==== Servo ==== |
+ | |||
Instalar las librerías de RPIO localizadas en esta [http://pythonhosted.org/RPIO/#installation página] siguiendo las instrucciones: | Instalar las librerías de RPIO localizadas en esta [http://pythonhosted.org/RPIO/#installation página] siguiendo las instrucciones: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
Line 260: | Line 268: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | == I2C == | + | === I2C === |
+ | |||
En esta [http://learn.adafruit.com/adafruits-raspberry-pi-lesson-4-gpio-setup/configuring-i2c página] se recogen los pasos para la correcta configuración. | En esta [http://learn.adafruit.com/adafruits-raspberry-pi-lesson-4-gpio-setup/configuring-i2c página] se recogen los pasos para la correcta configuración. | ||
− | = Procesamiento de imagen = | + | == Procesamiento de imagen == |
+ | |||
Instalación y configuración de las librerías necesarias para controlar la Raspi Cam en C++ y utilizar openCv. Pasos extraídos del [http://thinkrpi.wordpress.com/opencv-and-pi-camera-board/ tutorial] | Instalación y configuración de las librerías necesarias para controlar la Raspi Cam en C++ y utilizar openCv. Pasos extraídos del [http://thinkrpi.wordpress.com/opencv-and-pi-camera-board/ tutorial] | ||
− | == C/C++ == | + | |
− | === OpenCV === | + | === C/C++ === |
+ | ==== OpenCV ==== | ||
Las librerías de openCV se instalan mediante un script autoejecutable. | Las librerías de openCV se instalan mediante un script autoejecutable. | ||
Line 276: | Line 287: | ||
</pre> | </pre> | ||
− | ==== Posibles problemas ==== | + | ===== Posibles problemas ===== |
+ | |||
No se pudieron obtener algunos archivos, ¿Quizá deba ejecutar <<apt-get update>> o deba intentarlo de nuevo con --fix-missing? | No se pudieron obtener algunos archivos, ¿Quizá deba ejecutar <<apt-get update>> o deba intentarlo de nuevo con --fix-missing? | ||
Line 366: | Line 378: | ||
En el archivo camcv.c a partir de la línea 232 está el código preparado para procesar la imagen con OpenCV. | En el archivo camcv.c a partir de la línea 232 está el código preparado para procesar la imagen con OpenCV. | ||
− | == Librerias raspicam == | + | === Librerias raspicam === |
Nueva librería del profe de Raúl. Habrá que probarla: [http://www.uco.es/investiga/grupos/ava/node/40 aqui] | Nueva librería del profe de Raúl. Habrá que probarla: [http://www.uco.es/investiga/grupos/ava/node/40 aqui] | ||
Line 372: | Line 384: | ||
Otra librerías para utilizar la [http://erget.wordpress.com/2013/12/17/using-opencv-with-the-raspberry-pi-camera/ raspicam] | Otra librerías para utilizar la [http://erget.wordpress.com/2013/12/17/using-opencv-with-the-raspberry-pi-camera/ raspicam] | ||
− | == Python == | + | === Python === |
− | === Raspi Cam === | + | ==== Raspi Cam ==== |
+ | |||
En este [http://picamera.readthedocs.org/en/release-1.2/quickstart.html link] están los primeros pasos y toda la documentación de la librería picamera en python. | En este [http://picamera.readthedocs.org/en/release-1.2/quickstart.html link] están los primeros pasos y toda la documentación de la librería picamera en python. | ||
− | === OpenCv === | + | ==== OpenCv ==== |
+ | |||
Leer estos [https://github.com/abidrahmank/OpenCV2-Python tutoriales] de opencv en python. | Leer estos [https://github.com/abidrahmank/OpenCV2-Python tutoriales] de opencv en python. | ||
Revision as of 19:38, 10 October 2014
Diseños
Todos los diseños disponibles se encuentran en el siguiente enlace.
Sistemas Operativos
Proyectos interesantes
- 6 proyectos para hacer con la RaspberryPi
- 10 proyectos para hacer con la RaspberryPi
- 10 mejores proyectos
- Página de proyectos para RaspberryPi
- Controlando la RaspberryPi con un Smartphone
- RaspberryPi con Android
- Sistema Ambilight para una TV
- Control por voz usando JASPER
- CMU Sphinx: Open Source Toolkit For Speech Recognition.
- Festival: framework for building speech synthesis systems.
- Reproductor de Radio por internet WIFI
- Detector de intrusos
- Sistema de control metereológico
Guías de instalación
Configuración remota
La raspberry pi debe estar conectada por ethernet al router de ASROB. El ordenador de trabajo debe estar conectado a la misma red mediante wifi o ethernet.
Existen dos formas de configuración de acceso a la raspberry. Una es por ssh, la otra mediante una vnc.
Se ha generado un archivo con las siguientes líneas de código para que se arranque el svn server automáticamente cuando se carga raspbian.
### BEGIN INIT INFO # Provides: vncserver # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start VNC Server at boot time # Description: Start VNC Server at boot time. ### END INIT INFO #!/bin/sh # /etc/init.d/vncserver # Set the VNCUSER variable to the name of the user to start tightvncserver under VNCUSER='pi' case "$1" in start) su $VNCUSER -c '/usr/bin/tightvncserver :1' echo "Tightvncserver started" ;; stop) /usr/bin/tightvncserver -kill :1 echo "Tightvncserver stopped" ;; *) echo "Usage: /etc/init.d/vncserver {start|stop}" exit 1 ;; esac exit 0
Para que arranque automáticamente en un terminal:
$ sudo nano /etc/init.d/vncserver $ sudo chmod 755 /etc/init.d/vncserver $ sudo update-rc.d vncserver defaults $ sudo reboot
SSH
Mediante ssh se puede acceder a la raspberry desde un ordenador por terminal. Si se utiliza el comando -X se utilizan los recursos graficos del ordenador y no de la raspberry.
$ ssh -X pi@222.1.1.220
Esta IP es fija y ya está configurada desde el arranque de la raspberry pi.
tightvnc server
Está instalado un programa para trabajar en escritorio remoto. Como se ha explicado previamente, se lanza automáticamente el tightsvn server.
Para realizar la conexión en remoto
En el ordenador de trabajo se lanza el programa "remmina" en linux o cualquiera de vnc en Windows.
En el programa "remmina" se añade una nueva conexión seleccionando vnc:
protocol: vnc server: 222.1.1.220:5902 user: pi password: raspberry Si por alguna razón pidiera una clave extra de conexión: raspbian
Problemas
Que no exista la conexión en remoto:
@ordenador:$ ssh -XC pi@222.1.1.220 @pi:$ cd Desktop @pi:$ ./startvnc
Una vez lanzado el script en remoto se inicia una conexión remota:
222.1.1.220:5900
Con esto ya está configurado y ejecutándose el vnc de la raspberry pi.
Updated
Info: http://xmodulo.com/how-to-detect-ip-address-conflicts-in.html
La nueva placa ya no lleva instalado el thighvncserver y no se va a instalar por problemas previos de reseteo. A partir de ahora se configurará la raspberry para que acepte conexiones sólo por SSH de la siguiente forma:
PC/Portatil: edit connections -> ipv4 -> shared with other computers (compartir con otros ordenadores) Esto generará una ip aleatoria para la raspberry pi similar a esta: 10.42.0.30 Para averiguar la ip de la raspberry pi desde el portátil existe un programa llamado ip-scaner Una vez instalada se lanza desde el terminal con ipscan y con el gui se le dice que busque desde 10.42.0.0 hasta la 10.42.0.220 Habrá dos ips vivas y la que no sea del pc o portatil será la de la kinect.
Para conectar con la raspberry: $ ssh -XC pi@10.42.0.30 (si salta un mensaje de aceptar conexion fiable escribir "yes" con todas las letras el user es pi y la contraseña raspberry
GPIO
El puerto GPIO tiene las siguientes características:
The GPIO connector actually has a number of different types of connection on them. There are:
- True GPIO (General Purpose Input Output) pins that you can use to turn LEDs on and off etc. - I2C interface pins that allow you to connect hardware modules with just two control pins - SPI interface with SPI devices, a similar concept to I2C but a different standard - Serial Rx and Tx pins for communication with serial peripherals
In addition, some of the pins can be used for PWM (pulse Width Modulation) for power control and another type of pulse generation for controlling servo motors called PPM (Pulse Position Modulation). In this tutorial, you are not actually build anything, but you will learn how to configure your Raspberry Pi and install useful libraries ready to start attaching some external electronics to it.
En la página aparece un overview y los primeros pasos para configurar el puerto.
Librerías
C/C++
Configuración puerto GPIO Buen tutorial en C/C++ para controlar el GPIO
Python
Existen dos librerías para poder controlar el GPIO de la Raspberry Pi:
Adafruit
$ sudo apt-get install git
$ git clone http://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git
$ cd Adafruit-Raspberry-Pi-Python-Code
Es un repositorio de proyectos-ejempos en Python para gobernar el puerto GPIO. Para poder usarlos es necesario tener estas librerías instaladas
rpi.gpio
En el siguiente link están los pasos a seguir. Se reducen a instalar las librerías de GPIO para la Raspberry:
$sudo apt-get update
$sudo apt-get install python-dev
$sudo apt-get install python-rpi.gpio
Para ejemplos visitar esta página
- Ejemplo
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
channel = 15
GPIO.setmode(GPIO.BOARD)
GPIO.setup(channel, GPIO.OUT)
for i in range (10):
GPIO.output(channel, GPIO.LOW)
time.sleep(3)
GPIO.output(channel, GPIO.HIGH)
time.sleep(3)
GPIO.cleanup(channel)
PWM
#!/usr/bin/python
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD) # pin GPIO
GPIO.setup(12, GPIO.OUT) # salida
p = GPIO.PWM(12, 0.5) # channel=12 frequency=0.5Hz
p.start(1) # duty cycle (en este caso 1%)
input('Press return to stop:') # use raw_input for Python 2
p.stop()
GPIO.cleanup()
Este programa configura el pin 12 como salida pwm de 0.5 HZ. 1 vez cada 2 seg hace parpadear el led)
Servo
Instalar las librerías de RPIO localizadas en esta página siguiendo las instrucciones:
$ sudo apt-get install python-setuptools
$ sudo easy_install -U RPIO
Para poder controlar un servo, no es posible alimentarlo directamente desde la raspberry pi. En vez de eso, es necesaria una fuerte externa de alimentación ya sea una pila o un transformador. El control del servo se realiza mediante el ancho de pulso PWM. Para más info
El ancho de puslo determina el ángulo del servo: - 300us de 20ms serán 0 grados - 2500us de 20ms será el tope 180 grados
Existe una librería llamada RPIO que se utiliza para controlar los motores:
from RPIO import PWM
servo = PW:.Servo()
r=1460
while r is not "q":
r = imput("ancho de pulso en microsegundos:")
servo.set_servo(18,r)
servo.stop_servo(18)
I2C
En esta página se recogen los pasos para la correcta configuración.
Procesamiento de imagen
Instalación y configuración de las librerías necesarias para controlar la Raspi Cam en C++ y utilizar openCv. Pasos extraídos del tutorial
C/C++
OpenCV
Las librerías de openCV se instalan mediante un script autoejecutable.
$ wget https://raw.github.com/jayrambhia/Install-OpenCV/master/Ubuntu/2.4/opencv2_4_5.sh $ chmod +x opencv2_4_5.sh $ ./opencv2_4_5.sh
Posibles problemas
No se pudieron obtener algunos archivos, ¿Quizá deba ejecutar <<apt-get update>> o deba intentarlo de nuevo con --fix-missing?
Para resolver, dejar instalar y cuando acabe, hacer:
$ sudo apt-get update
Y volver a ejecutar
$./opencv2_4_5.sh
Una vez compilado despues de unas cuatro horas y media:
$ cd programs/OpenCv/opencv-2.4.5/build $ sudo make install
A partir de aquí es necesario seguir el tutorial del la siguiente página.
El paso 2 trata sobre instalar userland que es un programa llamado rapistill que usa el acceso a la cámara de la raspberry y demás.
El paso 3 es para crear el primer programa y poner a prueba los pasos anteriores.
A la hora de compilar con make (una vez modificado el CMakeLists.txt)
fatal error EGL/egl.h: no such file or directory
Se soluciona instalando las librerías legl de synaptic que son las genéricas. Se han instalado las siguientes:
eglibc-source libegl-0.2-0 libegl-dev
Se instalarán algunas dependencias más pero con estas valen. El último paso es modificar el CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(camcv)
SET(COMPILE_DEFINITIONS -Werror)
include_directories(/opt/vc/host_applications/linux/libs/bcm_host/include)
include_directories(/opt/vc/interface/vcos)
include_directories(/opt/vc/)
include_directories(/opt/vc/interface/vcos/pthreads)
include_directories(/opt/vc/interface/vmcs_host/linux)
include_directories(/opt/vc/interface/khronos/include)
include_directories(/opt/vc/interface/khronos/common)
add_executable(camcv RaspiCamControl.c RaspiCLI.c RaspiPreview.c camcv.c RaspiTex.c RaspiTexUtil.c teapot.c models.c square.c mirror.c)
target_link_libraries(camcv /opt/vc/lib/libmmal_core.so /opt/vc/lib/libmmal_util.so /opt/vc/lib/libmmal_vc_client.so /opt/vc/lib/libvcos.so /opt/vc/lib/libbcm_host.so /opt/vc/lib/libGLESv2.so /opt/vc/lib/libEGL.so)
Ahora sí se puede compilar con make y no da problemas.
Finalmente para añadir opencv al programa seguir el paso 4 del tutorial
Para esta parte es necesario haber instalado el lilbfacerec (reconocimiento facial) <c lang="make"> projects $ git clone https://github.com/bytefish/libfacerec.git $ cd libfacerec $ mkdir build $ cd build $ cmake .. $ make </syntaxhighlight lang="make"> Ya se puede modificar el CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(camcv)
SET(COMPILE_DEFINITIONS -Werror)
#OPENCV
find_package( OpenCV REQUIRED )
link_directories( /home/pi/projects/libfacerec )
include_directories(/opt/vc/host_applications/linux/libs/bcm_host/include)
include_directories(/opt/vc/interface/vcos)
include_directories(/opt/vc)
include_directories(/opt/vc/interface/vcos/pthreads)
include_directories(/opt/vc/interface/vmcs_host/linux)
include_directories(/opt/vc/interface/khronos/include)
include_directories(/opt/vc/interface/khronos/common)
add_executable(camcv RaspiCamControl.c RaspiCLI.c RaspiPreview.c camcv.c RaspiTex.c RaspiTexUtil.c teapot.c models.c square.c mirror.c)
target_link_libraries(camcv /opt/vc/lib/libmmal_core.so /opt/vc/lib/libmmal_util.so /opt/vc/lib/libmmal_vc_client.so /opt/vc/lib/libvcos.so /opt/vc/lib/libbcm_host.so /opt/vc/lib/libGLESv2.so /opt/vc/lib/libEGL.so /home/pi/projects/libfacerec/build/libopencv_facerec.a ${OpenCV_LIBS})
En el archivo camcv.c a partir de la línea 232 está el código preparado para procesar la imagen con OpenCV.
Librerias raspicam
Nueva librería del profe de Raúl. Habrá que probarla: aqui
Otra librerías para utilizar la raspicam
Python
Raspi Cam
En este link están los primeros pasos y toda la documentación de la librería picamera en python.
OpenCv
Leer estos tutoriales de opencv en python.
Proyecto rastreador mediante procesamiento de imagen
Este proyecto se basa en un rastreador con un chasis de protobot al cual se le ha incorporado una raspberry Pi. Esta raspberry Pi es capaz de controlar dos servos que actuan de sistema motriz del protobot. La forma de seguir las líneas es mediante visión por computador. La cámara de raspberry está colocada en la parte frontal del vehículo ajustando la información visual entre 10 y 20 cm. Mediante librerías de OpenCv se pretende procesar la imagen y sacar la desviación del robot con respecto a la linea y realizar un control acorde a ese error.
Repositorio
En el siguiente enlace podréis ver de manera online el REPOSITORIO.
Para poder trabajar con el repositorio, en la ubicación deseada abrir una terminal y poner lo siguiente:
git clone https://github.com/asrob-uc3m/rpc_rpi.git asrob_rpc_rpi
Para más información sobre el uso de Git seguir este TUTORIAL.
Este obra está bajo una licencia de Creative Commons Reconocimiento-CompartirIgual 3.0 Unported.