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

jueves, 26 de septiembre de 2013

Registro de humedad y temperatura con gráfico - DHT11 - Raspberry Pi


Página principal

Registro de humedad y temperatura con gráfico - DHT11

Raspberry Pi

xsetaseta@gmail.com

Buscando en internet algún montaje para hacer en Raspberry Pi, encontré  en la página
http://www.davidfraj.com/2013/04/crear-una-estacion-meteorologica-con.html , que es la creación de
Crear una estacion meteorologica con raspberry pi y un sensor dth11archivo.pdf
Como tengo todos los componentes incluido el DTH11, me he puesto a realizar el montaje propuesto.
He de comentar que existe diferentes páginas web donde comentan este montaje, no sé exactamente cual es la original, cada una tiene una cosa que la otra no tiene, pero en la que me he basado es en la que he comentado anteriormente.
http://chrisbaume.wordpress.com/author/chrisbaume/
http://www.rpiblog.com/2012/11/interfacing-temperature-and-humidity.html


Conexionado.
RPi VCC (pin 1) -> DHT11 pin 1
RPi GPIO4 (pin 7) -> DHT11 pin 2
RPi GND (pin 6) -> DHT11 pin 4

Imagen copiada de la página web.

En mi caso he colocado una resistencia de 10k.



Montaje eléctrico.

Todo el proyecto lo he realizado en un directorio creado en el directorio raiz llamado /aa , por lo cual todas la referencias se hacen a este directorio. Si alguno quiere cambiar el lugar del directorio, debera también modificar en el resto de programas la referencia a este directorio.

Este proyecto es una mezcla de varios tipos de programación.
En principio utiliza la librería wiringpi para manejar las entradas y salidas del Raspberry  mediante el lenguaje C . Recomiendo ver la página  https://projects.drogon.net/raspberry-pi/wiringpi/ donde te explica muchos proyectos para Raspberry  utilizando C. Gracias Gordons.
Para instalar la librería tecleamos en la consola:

cd /aa
sudo apt-get install git-core build-essential

git clone git://git.drogon.net/wiringPi
cd wiringPi
./build

Una vez instalada la librería, creamos un fichero llamado dth11.c en el directorio wiringPi y lo compilamos con la siguiente orden.

gcc -o dth11 dth11.c -L /usr/local/lib -l wiringPi

Una vez que se obtiene el fichero ejecutable ./dth11 , lo copiamos en el directorio de trabajo /aa .
Si ejecutamos el comando ./dth11 obtendremos la temperatura y la humedad.


dth11.c
//Incluimos librerias necesarias
#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

//Definimos constantes
#define MAX_TIME 85
#define DHT11PIN 7
#define ATTEMPTS 5

//Definimos un vector global
int dht11_val[5]={0,0,0,0,0};

/////////////////////////////////////////////////////////////
//Funcion principal para leer los valores del sensor.
int dht11_read_val(){
 uint8_t lststate=HIGH;
 uint8_t counter=0;
 uint8_t j=0,i;
 for(i=0;i<5;i++){
  dht11_val[i]=0;
 }
 pinMode(DHT11PIN,OUTPUT);
 digitalWrite(DHT11PIN,LOW);
 delay(18);
 digitalWrite(DHT11PIN,HIGH);
 delayMicroseconds(40);
 pinMode(DHT11PIN,INPUT);
 for(i=0;i<MAX_TIME;i++){
  counter=0;
  while(digitalRead(DHT11PIN)==lststate){
   counter++;
   delayMicroseconds(1);
   if(counter==255){
    break;
   }
  }
  lststate=digitalRead(DHT11PIN);
  if(counter==255){
   break;
  }
  //Las 3 primeras transiciones son ignoradas
  if((i>=4)&&(i%2==0))
    {
        dht11_val[j/8]<<=1;
        if(counter>16)  dht11_val[j/8]|=1;
        j++;
      }
 }
 
 // Hacemos una suma de comprobacion para ver si el dato es correcto. Si es asi, lo mostramos
 if((j>=40)&&(dht11_val[4]==((dht11_val[0]+dht11_val[1]+dht11_val[2]+dht11_val[3])& 0xFF)))
    {
       //printf("%d.%d,%d.%d\n",dht11_val[0],dht11_val[1],dht11_val[2],dht11_val[3]);
    //printf("data -> %02x, %02x, %02x, %02x  paridad %d\n",dht11_val[0],dht11_val[1],dht11_val[2],dht11_val[3],dht11_val[4]);
    //printf("Temperatura=%d ºC /10   Humedad=%d /10\n",dht11_val[2]*256+dht11_val[3],dht11_val[0]*256+dht11_val[1]);
    printf("%d,%d\n",dht11_val[0]*256+dht11_val[1],dht11_val[2]*256+dht11_val[3]);
       return 1;
    }
     else
    {
     //printf("Error\n");
       return 0;
     }
}

////////////////////////////////////////////////////////////////
//Empieza nuestro programa principal.
int main(void){
 //Establecemos el numero de intentos que vamos a realizar
 //la constante ATTEMPTS esta definida arriba
 int attempts=ATTEMPTS;

 //Si la libreria wiringPi, ve el GPIO no esta listo, salimos de la aplicacion
 if(wiringPiSetup()==-1){
  exit(1);
 }

 while(attempts){
  //Intentamos leer el valor del gpio, llamando a la funcion
  int success = dht11_read_val();
 
  //Si leemos con exito, salimos del while, y se acaba el programa
  if (success){
   break;
  }
 
  //Si no lee con exito, restamos 1, al numero de intentos
  attempts--;
 
  //Esperamos medio segundo antes del siguiente intento.
  delay(500);
 }
 return 0;
}



Mediante el comando cron creamos un script que se ejecute cada x tiempo, está realizado en Bash, y el resultado se almacena en /var/www/tempe.csv  . Para quitar todos los datos registrados borrar el contenido de tempe.csv menos la primera línea, que contiene el título de la serie de registros.
dth11.sh
#!/bin/bash
FECHA=$(date +\%Y\%m\%d\%H\%M)
COMA=","
TEMP=$(/aa/dth11)
echo "$FECHA$COMA$TEMP" >> /var/www/tempe.csv

Debemos dar permisos de ejecución a dth11.sh.

Ejemplo de tempe.csv .Para borrar el registro, quitar todo menos la primera línea.
Date,Humedad,Temperatura
201309241218,62.2,39.4
201309241219,60.2,44.1
201309241220,55,45
201309241221,54,40
201309241222,54,1
201309241223,54,-10
201309241224,54,-15

Para que ejecute cada minuto un registro de temperatura, editamos las tarea periódica a ejecutar mediante el comando, sudo crontab -e .
Y añadimos
* * * * * /aa/dth11.sh
El servidor apache sirve la página tempe.html , en la cual existe un código en javascript que realiza una grafica. Para realizar la gráfica se utiliza la librería dygraph-combined.js en javascript . Para más información recomiendo visitar la página http://dygraphs.com/index.html . Nunca había realizado nada en javascript por lo que me he tenido que poner las pilas y estudiar algún tutorial.

tempe.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
    <script type="text/javascript" src="dygraph-combined.js"></script>
  </head>
  <body>
    <h1><a href="index.html"><small><span style="font-weight: bold;
            color: rgb(0, 102, 0);">Volver</span></small></a></h1>
    <h1>Gr&aacute;fica con humedad y temperatura<br>
    </h1>
    <big><big><span style="font-weight: bold; color: rgb(0, 102, 0);"></span></big></big>
    <hr>
    <div id="normal" style="width:600px; height:300px;"></div>
    <span style="color: rgb(153, 0, 0); font-weight: bold;">Formato -
      Hora:minutos&nbsp;&nbsp;
      D&iacute;a/mes</span>
    <hr>
    <script type="text/javascript">


g4 = new Dygraph(
    document.getElementById("normal"),
    "tempe.csv",
    {
        title: 'Grafico Humedad-Temperatura',
        xlabel: ' ',
        ylabel: 'Humedad  -  Temperatura',
        labelsDivWidth: 150,
        labelsSeparateLines: true,

         axes: {
                    x: {
                   
                     axisLabelFormatter:
                         function(x)
                              {
                                var anyString=x.toString();
                                return (anyString.substring(8,10) + ":" + anyString.substring(10,12) + ".\n"+anyString.substring(6,8)+"/"+anyString.substring(4,6) );               
                              },                   
                           }

                },
    }
  );


</script>
  </body>
</html>



Si abrimos en un ordenador la página http://direcciónIPraspberry/tempe.html obtenemos el registro con la gráfica de la temperatura.



Quizás en la página de esté mejor explicado todo el proceso, pero yo he corregido algunos errores que tenía, modificando a mi gusto el javascript y el código C.

Saludos.
Juan Galaz


Bibliografía:

http://www.davidfraj.com/2013/04/crear-una-estacion-meteorologica-con.html
http://chrisbaume.wordpress.com/author/chrisbaume/
http://dygraphs.com/index.html
http://www.rpiblog.com/2012/11/interfacing-temperature-and-humidity.html
https://projects.drogon.net/raspberry-pi/wiringpi/

viernes, 30 de agosto de 2013

Control de 3 salidas - Raspberry Pi

Página principal

Control de 3 salidas

Raspberry Pi

xsetaseta@gmail.com

 El primer montaje con un microcontrolador sueles ser el parpadeo de un led. Para mi primer montaje con la Raspberry Pi he elegido el control de 3 leds mediante el teclado, o mediante un interface gráfico.
Navegando por internet encontre la siguiente página:
    http://www.diverteka.com/?p=1792#comment-3529


Explica como controlar un rele mediante Raspberry Pi, es un buen tutorial  realizado en lenguaje Python y las librerías ncurses. Yo lo único que he hecho es ampliarlo para que funcione con 3 leds.

Esquema eléctrico


Simulación de montaje


Montaje eléctrico.


Control mediante el teclado en consola.

# ==========================================
# -  Programa para manejo RELE de control  -
# ------------------------------------------
# -  J.C.G.P. - (c) Webtronika 2013 -
#
# Modificado el 22/08/2013 por SETA43
# ==========================================
#!/usr/bin/python
import sys
import curses
import time
import RPi.GPIO as GPIO
# ---------------------------------------------------------------
# - Rutina de configuracion de puertos en GPIO ------------------
# ---------------------------------------------------------------
def confiGPIO(param1):
        GPIO.setmode(GPIO.BCM)
        GPIO.setwarnings(False)
        GPIO.setup(23, GPIO.OUT)
        GPIO.setup(24, GPIO.OUT)
        GPIO.setup(25, GPIO.OUT)
        return 0
# ---------------------------------------------------------------
# ###############################################################
# - PROGRAMA PRINCIPAL ------------------------------------------
#
#   Utiliza curses para visualizar salida a pantalla
#
# ###############################################################
# ---------------------------------------------------------------
stdscr = curses.initscr()
curses.cbreak()
curses.start_color()
curses.init_pair(1, curses.COLOR_BLACK, curses.COLOR_GREEN)
hsize = curses.COLS
vsize = curses.LINES
curses.curs_set(0)
curses.noecho
stdscr.border(0)
stdscr.keypad(1)
stdscr.nodelay(1)
confiGPIO(0)
try:
        stdscr.bkgd(curses.color_pair(1))       
        while True:  # Rutina principal del programa
                char = stdscr.getch()
                time.sleep(.1)                                  ### Hace que el sistema no se sature
                if (char == 81 or char == 113): # Tecla Q/q
                        break  
                if (char == 49): # Tecla 1
                        GPIO.output(23, True)
                if (char == 50): # Tecla 2
                        GPIO.output(23, False)
                if (char == 51): # Tecla 3
                        GPIO.output(24, True)
                if (char == 52): # Tecla 4
                        GPIO.output(24, False)
                if (char == 53): # Tecla 5
                        GPIO.output(25, True)
                if (char == 54): # Tecla 6
                        GPIO.output(25, False)
                else:
                        stdscr.addstr(vsize/6, (hsize/2)-18,"Control de RELE via GPIO")
                        stdscr.addstr((vsize/5)+2, (hsize/2)- 22,"[1] - Activa el RELE1")
                        stdscr.addstr((vsize/5)+3, (hsize/2)- 22,"[2] - Desactiva el RELE1")
                        stdscr.addstr((vsize/5)+5, (hsize/2)- 22,"[3] - Activa el RELE2")
                        stdscr.addstr((vsize/5)+6, (hsize/2)- 22,"[4] - Desactiva el RELE2")
                        stdscr.addstr((vsize/5)+8, (hsize/2)- 22,"[5] - Activa el RELE3")
                        stdscr.addstr((vsize/5)+9, (hsize/2)- 22,"[6] - Desactiva el RELE3")
                        stdscr.addstr(vsize-8, (hsize/2)- 18," Pulsa [Q] para salir")                 
                        stdscr.refresh()

finally:
    curses.nocbreak()
    stdscr.keypad(0)
    curses.echo()
    curses.endwin()




Utilizando la librería Tcl/Tk he creado un interface gráfico.

Control gráfico.

#!/usr/bin/python

import Tkinter
import RPi.GPIO as GPIO

def confiGPIO(param1):
    GPIO.setmode(GPIO.BCM)
    GPIO.setwarnings(False)
    GPIO.setup(23, GPIO.OUT)
    GPIO.setup(24, GPIO.OUT)
    GPIO.setup(25, GPIO.OUT)
    return 0


def on1():
    print "on1"
    GPIO.output(23, True)
    return
def off1():
    print "off1"
    GPIO.output(23, False)
    return   
def on2():
    print "on2"
    GPIO.output(24, True)
    return
def off2():
    print "off2"
    GPIO.output(24, False)
    return   
def on3():
    print "on3"
    GPIO.output(25, True)
    return
def off3():
    print "off3"
    GPIO.output(25, False)
    return   

confiGPIO(0)


top = Tkinter.Tk()
top.geometry("200x250")
top.title("RELE_TK")
#top.config(bg="blue")


A = Tkinter.Button(top, text ="ON1 ", command = on1)
B = Tkinter.Button(top, text ="OFF1", command = off1)

C = Tkinter.Button(top, text ="ON2 ", command = on2)
D = Tkinter.Button(top, text ="OFF2", command = off2)

E = Tkinter.Button(top, text ="ON3 ", command = on3)
F = Tkinter.Button(top, text ="OFF3", command = off3)

Q = Tkinter.Button(top, text ="QUIT",fg="red", command = quit)

A.pack()
B.pack()
C.pack()
D.pack()
E.pack()
F.pack()
Q.pack()
top.mainloop()


Saludos
Juan Galaz


Bibliografía:

http://www.diverteka.com/?p=1792#comment-3529
http://docs.python.org/2/library/tkinter.html
http://www.tcl.tk/

jueves, 22 de agosto de 2013

Mis primeros pasos con Raspberry Pi

Mis primeros pasos con Raspberry Pi


La semana pasada me llego por correo la famosa placa llamada Raspberry Pi. He hecho muchos montajes con arduino, y he decidido dar un paso adelante con una placa mas potente.
Raspberry Pi es un ordenador de placa reducida (SBC) de bajo costo desarrollado en Reino Unido por la Fundación Raspberry Pi, con el objetivo de estimular la enseñanza de ciencias de la computación en las escuelas.
El diseño incluye un System-on-a-chip Broadcom BCM2835, que contiene un procesador central (CPU) ARM1176JZF-S a 700 MHz (el firmware incluye unos modos “Turbo” para que el usuario pueda hacerle overclock de hasta 1 GHz sin perder la garantía),9 un procesador gráfico (GPU) VideoCore IV, y 512 MB de memoria RAM aunque originalmente al ser lanzado eran 256 MB. El diseño no incluye un disco duro o una unidad de estado sólido, ya que usa una tarjeta SD para el almacenamiento permanente; tampoco incluye fuente de alimentación o carcasa.
Lo primero que hice fue ir a la página http://www.Raspberrypi.org/ y como recomendaba baje he instale en la tarjeta SD el NOOBS_v1_2_1 , según las instrucciones quick start guide . Noobs es un conjunto de distribuciones linux que se puede probar.
Conecte  ratón, teclado, alimentador usb 0.700mA, cable HDMI a la TV  a la placa y me puse a ver que pasaba.
Al arrancar te sale la opción de instalar una distribucion, en mi caso para probar el funcionamiento de la placa reproduciendo videos, instale XBMC. Después de esperar un rato quedo instalado el XBMC (Xbox Media Center). Es un centro multimedia de entretenimiento multiplataforma bajo la licencia GNU/GPL.
La reprodución de películas fue perfecta sin saltos, saliendo el audio por los altavoces de la TV, el cable HDMI lleva el sonido. No he tenido que configurar nada.

Como mi idea no era utilizar la Raspberry Pi  como reproductor multimedia, voy a instalar Raspbian, es la distribución debian para la Raspberry pi.  Se reinicia la placa y al arrancar y se pulsa la tecla que aparece en pantalla, con lo cual te da la opción de instalar otra distribución, en mi caso Raspbian. Cuando se instala una distribución se borra la distribución que existía anteriormente. Tarda un tiempo, hay que tener paciencia.
Cuando se termina la instalación y se reinicia la placa, empieza la carga del sistema linux. Tenemos al final la clásica  consola linux, para entrar como usuario debemos usar:
    Username: pi Password: raspberry
Para configurar el teclado, idioma y algunas cosas mas debemos teclear: sudo raspi-config
Ahora solo nos que arrancar el sistema gráfico con la orden startx.

Existen un montón de tutoriales de como instalar y configurar Raspberry Pi y sería pretencioso repetir mil veces otra vez lo mismo, por lo cual voy a poner unas cuantas páginas donde explican mucho mejor que yo lo explicaría.
Para poder manejar la Raspberry Pi en remoto, he activado la opción de ssh y he colocado un servidor vnc.
Siendo la dirección de mi Raspberry -> 192.168.2.106
Tecleo en la consola de mi ordenador -> ssh pi@192.168.2.106
Te pide la contraseña  que por defecto es: Raspberry
Ahora ya tenemos abierto una consola en remoto en nuestra Raspberry.


Si queremos controlar en remoto una sesión gráfica debemos instalar en la Raspberry un servidor vnc.
Desde un terminal  teclear:

    sudo apt-get update
    sudo apt-get install tightvncserver


y ahora desde el propio terminal teclear:

        vncserver :1

solo nos queda mediante un visor de escritorio remoto acceder a la Raspberry.



He añadido a la Raspberry un adaptador wifi EP-N8508, 4€
 Bus 001 Device 004: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter.
Y un conversor HDMI a DVI, de esta forma puedo trabajar cómodamente en mi monitor.

Saludos
Juan Galaz


Bibliografía:

http://www.Raspberrypi.org/
http://www.dgtallika.com/2013/07/como-preparar-por-primera-vez-su-Raspberry-pi/
http://www.dgtallika.com/2013/07/como-controlar-de-forma-remota-su-Raspberry-pi-mediante-vnc/
http://www.diverteka.com/



miércoles, 24 de julio de 2013

RTL2832-Radio definida por software. Linux Debian7

RTL2832-Radio definida por software

 Linux Debian7

xsetaseta@gmail.com

Plataforma Linux DEBIAN7

La radio definida por software o SDR ( del inglés Software Defined Radio) es un sistema de radiocomunicaciones donde los componentes típicamente implementados en hardware (mezcladores, filtros, amplificadores, moduladores/demoduladores, detectores, etc) son implementados en software.
Un programador de kernel Linux identificado como Antti Palosaari ha descubierto un modo no documentado en un chip Realtek RTL2832. Al RTL2832 puedes encontrarlo en pequeños sintonizadores de televisión digital DVB-T con un costo que difícilmente supere los 20€. El chip puede enviar a un ordenador muestras de ocho bits a un máximo teórico de 3.2 Mhz, y esto se utiliza para recibir las ondas de radio.

Mi intención es la de poder recibir señales de radio si tener que recompilar todas las fuentes. Tendréis razón los que me critiquéis diciendo que de esa forma no enseño a compilar nuestro propios programas, pero me he encontrado en la situación de tener que meter los programas en un portátil en el cual no quería meter todos los programas y las librerías para compilar.

He de comentar, que me he encontrado con un problema, si compilaba los programas en mi sobremesa con un AMD, al pasar las librerías y algunos programas al portátil con un Pentium me daba errores. Creo que en alguna de las compilaciones, utilizan optimizaciones para el procesador en el que se compila. Eso es bueno y malo, bueno debido a que el programa va a ser mas rápido, y malo, debido a que no se puede utilizar en ordenadores con microprocesador diferente al que se a compilado.
Por este motivo he realizado dos compilaciones diferentes, para AMD y para Pentium. Las compilaciones de Pentium si valen para el AMD de sobremesa.

Como programa para escuchar radio he utilizado el gqrx, esta realizado en torno a la librería QT, y en mi opinión funciona a la perfección.  http://gqrx.dk/
También distribuyo los binarios e indico las dependencias necesarias para su ejecución.

Empecemos con las malditas dependencias, seguro que a todos nos pasa que siempre nos falta una dependencia cuando instalamos algún programa.
De un golpe instalamos todos estos programas:

Debian7
apt-get install libboost-program-options1.49.0 libboost-system1.49.0 libboost-date-time1.49.0 libboost-filesystem1.49.0 libboost-thread1.49.0 libgnuradio-core3.5.3.2 libgruel3.5.3.2 libvolk0.0.0  libgsl0ldbl libvolk0.0.0 libqt4-svg libgnuradio-audio3.5.3.2 libgnuradio-fcd3.5.3.2 gstreamer0.10-pulseaudio libasound2-plugins libsystemd-daemon0 libwebrtc-audio-processing-0 pulseaudio pulseaudio-module-x11 pulseaudio-utils rtkit

El fichero que adjunto ra_rtl2.tar.gz  se descomprime en una carpeta.
Tenemos dos  carpetas amd o pentium, utilizar la que corresponda a vuestro ordenador. Siendo administrador del sistema o root, copiar las carpetas usr a la raíz de vuestro ordenador.
Ahora que hemos copiado las librerías y los programas necesarios, debemos actualizar las librerías y el lugar que por defecto busca las librerías.
Siendo root editamos el fichero  /etc/ld.so.conf y añadimos al final /usr/local/lib .
Quedando en mi caso:
            include /etc/ld.so.conf.d/*.conf
            /usr/local/lib
Solo nos queda actualizar las librerías con la orden   ldconfig  .Recuerden ejecutarlo como root.

Por ultimo debemos copiar el archivo rtl-sdr.rules  en el directorio /etc/udev/rules.d/ . Este fichero hace que identifique el modelo de TDT cuando se enchufa al usb.

Llegamos al final de este tutorial y solo nos queda ejecutar el programa gqrx , si todo fue bien nos saldrá la siguiente pantalla que nos pregunta el tipo de decodificador que tenemos. Nosotros indicamos  Realtek RTL2838UHIDIR, y ahora a disfrutar.



Mi TDT_USB es el siguiente: Bus 001 Device 008: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T
En ebay se puede comprar por 8€ RTL2832U


Saludos.
Juan Galaz

P.D.
Para hacer este tutorial me he vuelto loco en las compilaciones, esto de que el Linux tenga tantas distribuciones y que las versiones de las librerías suelen ser diferentes, te da muchos errores al compilar. Pero bueno, siempre hay alguien que le a pasa lo mismo y seguro que lo soluciono de alguna forma. Si quiere alguien que le indique la forma de compilar desde las fuentes, que me pase un correo.

Bibliografía:

http://sdr.osmocom.org/trac/wiki/GrOsmoSDR
http://vereniging.opensource.nl/wiki/index.php/Software-Defined_Radio_on_Ubuntu#Install_Gqrx
http://sdrlatino.wordpress.com/2013/05/23/162/#more-162