jueves, 17 de octubre de 2013

Control de salidas Raspberry - Arduino -Python

Control de salidas

Raspberry - Arduino -Python

 Raspberry Pi

xsetaseta@gmail.com

En este montaje realizó una comunicación entre la raspberry y el arduino mediante el cable USB.
Además de realizar la comunicación a través del cable usb, el arduino se alimenta de él.
Se basa en un anterior montaje aserie.html que activaba o desactivaba todas las salidas del arduino mediante un interface gráfica realizada en C y con la librería SDL.
En este caso hacemos lo mismo pero programando en python y con la librería tk.
Como realmente la raspberry es un ordenador con linux como sistema operativo, la realización se efectúa en el PC con debian por cuestión de velocidad, y luego se pasa a la raspberry donde funciona perfectamente.
El programa de arduino consiste en que se lee constantemente el puerto serie. Cuando se recibe una orden "1Dig13" el arduino interpreta que tiene que poner a 5V la salida de arduino Digital13. Si recibe la orden "0Dig13" el arduino pone la salida Digital13 a 0V.
Para mandar las ordenes al arduino se puede utilizar la consola del programador de arduino o cualquier otro programa de comunicaciones como por ejemplo CuteCom o minicom en  Linux.
void WriteComand()
{
  
   
    if(!strcmp(entrada,"0An0"))
      {
       digitalWrite(14, LOW);
       goto salir1;
      }
    if(!strcmp(entrada,"1An0"))
      {
      digitalWrite(14, HIGH);
       goto salir1;
      }
    
    if(!strcmp(entrada,"0An1"))
      {
      digitalWrite(15, LOW);
       goto salir1;
      }
    if(!strcmp(entrada,"1An1"))
      {
      digitalWrite(15, HIGH);
       goto salir1;
      }
................
Ejemplo de como interpreta el arduino las ordenes a través del interface serie.


def fAn0():
                global An0
                if An0  ==  0:
                        An0=1
                        ser.write('1An0\n')
                else:
                        An0=0
                        ser.write('0An0\n')
                print  "An0",An0                
                return

def fAn0():
                global An0
                if An0  ==  0:
                        An0=1
                        ser.write('1An0\n')
                else:
                        An0=0
                        ser.write('0An0\n')
                print  "An0",An0                
                return
Ejemplo de como manda la raspberry las ordenes a través de interface serie.


El programa funcionando en la rapberry.


Circuito montado y funcionando.

Nos puede surgir algun problema como este:

Traceback (most recent call last):

  File "./raArPy.py", line 5, in <module>
    import serial
ImportError: No module named serial

Significa que no tenemos instalado el modulo serie, se instala con la orden:

sudo apt-get install python-serial

Otro problema que puede surgir es que no tengamos permisos para escribir el los puertos serie, /dev/ttyACMx/dev/ttyUSBx , depende del modelo de arduino que tengamos . Para solucionarlo, debemos dar permisos al usuario que ejecuta el programa con la orden :

adduser usuario dialout

Arreglado estos problemas, ya solo nos queda ejecutar el programa ./raArPy.py .

Archivos del montaje

Un saludo
Juan Galaz

Bibliografía:

http://www.safecreative.org/work/1207302042960-curso-python-para-principiantes
http://docs.python.org/2/contents.html
http://gmendezm.blogspot.com.es/2012/12/tutorial-tkinter-python-gui.html

sábado, 12 de octubre de 2013

Receptor ADS-B con Raspberry - dump1090

Página principal

Receptor ADS-B con Raspberry - dump1090

 Raspberry Pi

xsetaseta@gmail.com

En un artículo anterior había realizado un receptor de ADS-B con linux. Como la raspberry pi es un mini ordenador, con linux de sistema operativo, me he dispuesto a realizar el montaje en la raspberry.
Lo primero es bajar y compilar los programas:

    git clone http://git.osmocom.org/rtl-sdr
    cd rtl-sdr/
    mkdir build
    cd build
    cmake ../ -DINSTALL_UDEV_RULES=ON
    make
    sudo make install
    sudo ldconfig

Con esto hemos compilado las librerías rtl-sdr necesarias.
Ahora debemos bajar y compilar el programa dump1090.

    git clone https://github.com/antirez/dump1090
    cd dump1090/
    make

Ya tenemos todo listo para que funcione.
Conectamos el receptor de TDT-USB  RTL2832U y ejecutamos la orden:

./dump1090 --interactive --net --metric

Para ver los aviones en un mapa, abrimos la dirección:
http://Dirección_IP_raspberry:8080/



Vista de los aviones en la raspberry.
El renderizado en la raspberry es bastante lenta.



Vista de los aviones desde el PC, es muy rápido la presentación de los aviones.



TDT-USB  RTL2832U utilizado. Debido al consumo del TDT he tenido que utilizar un alimentador de mas amperios para la raspberry.

Saludos.
Juan Galaz


Bibliografía:
http://www.stackspace.info/category/raspberry/#Accessing_Hardware
http://www.satsignal.eu/raspberry-pi/dump1090.html


lunes, 7 de octubre de 2013

Transmisor de FM con el Raspberry Pi

Página principal

Transmisor de FM con el Raspberry Pi

xsetaseta@gmail.com

Buscando en internet algún montaje fácil para hacer en Raspberry Pi,  encontré un transmisor de FM.
http://www.icrobotics.co.uk/wiki/index.php/Turning_the_Raspberry_Pi_Into_an_FM_Transmitter
 Al principio me parecía un poco difícil que pudiera hacer esto por si solo, por lo que me puse a bajar el programa  y ponerlo a funcionar.
Se baja el programa de la misma ṕagina y se compila con la orden:

gcc -lm -std=c99 pifm.c


Ahora tecleamos:

 ./pifm sound.wav 103.0

Donde sound.wav es el archivo de sonido codificado en mono y con un muestreo de 22Khz.
Por defecto la frecuencia de transmisión es de 103.3Mhz, pero si se quiere cambiar la tenemos que especificar al final de la línea.


Debemos colocar un pequeño cable al pin GPIO 4, a modo de antena, para que la señal llegue mas lejos.


El resultado ha sido perfecto, en mi radio la música suena bastante bien, y la señal llega por toda la casa.



Según lo expuesto en el artículo se utiliza un sintetizador PLLD integrado el el própio chip, con un cristal a 500MHZ el cual se puede programar desde 1 Mhz hasta 250Mhz. Esto puede ser muy útil para otros montajes,


Saludos
Juan Galaz

Bibliografía:

http://www.icrobotics.co.uk/wiki/index.php/Turning_the_Raspberry_Pi_Into_an_FM_Transmitter