ADS-B con un router casero con envio de tramas por wifi y/o LAN y rtl_tcp.

Una de las cosas que más me ha gustado desde que tengo un SDR es sin duda recibir la posición de las balizas de aviones ADS-B. Todos los que hemos tenido emisoras y nos han gustado las comunicaciones digitales, alguna vez hemos recibido ACARS en la banda aérea, pero tener un receptor que pudiera recibir en 1090 MHz con el ancho de banda necesario era casi una quimera. Ahora esto es posible y una vez comprado cualquier receptor SDR y casi con la propia antena que trae ya se puede probar.

Este proyecto sin embargo consiste en poder recibir las tramas de ADS-B sin necesidad de tener siempre un ordenador encendido, en realidad el trabajo lo hace un router  normal de casa, al que previamente le hemos cambiado el firmware a Openwrt. El router las enviará por wifi y podrás con el software adecuado posicionarlas en un mapa. También podrás compartirlas si quieres con otras personas siempre que abras los correspondientes puertos de tu router principal. Como complemento uso un cable de red con POE para alimentar el router y subirlo al tejado dónde tengo el resto de mis antenas y puedo igualmente recibir por LAN en caso de que no llegue el wifi. Por último puedo elegir entre recibir ADS-B o rtl_tcp y hacer de servidor para el SdrSharp y tener un receptor de SDR con una antena que funciona muy bien en frecuencias altas (mi antena una Diamond x-200 con un montón de metros de cable de bajada pierde toda la sensibilidad en esas frecuencias). En cambio con esta configuración tengo un receptor  con sólo 15 cms de longitud de cable hasta la antena.

Todo esto se ha hecho ya, tanto con routers como con una Raspberry Pi, pero el reto de este proyecto es poder hacer las dos cosas (ADS-B y servidor rtl_tcp) con un router casero o comprado de unos 25 euros y que yo sea capaz de explicarlo paso a paso para que cualquiera pueda hacerlo.

EL ROUTER:

Podría servir cualquier router que soporte Openwrt, que tenga un conector usb y que tenga la suficiente potencia y memoria para trabajar aceptablemente bién.

Yo he probado con:

  • Amper asl2655. Es el menos potente y algo complicado de instalar Openwrt.
  • Comtrend VR-3025u. Procesador doble núcleo. Muy fácil de instalar Openwrt, era el candidato para la instalación, pero era muy grande y muy problemático para meterlo en una caja estanca.
  • Comtrend ar5387un. Muy fácil de instalar Openwrt, al final el elegido. Tamaño y velocidad de proceso aceptable.

He probado con algún otro pero no han dado resultados satisfactorios, baja velocidad de proceso, cuelgues aleatorios, etc.

Si no tienes ninguno de éstos, puedes comprar:

GL-AR150-EXT, cuesta menos de 24 euros y es bastante potente y muy pequeño (fácil de mecanizar luego). Yo no lo he probado pero he leído de gente que lo tiene funcionando.

GL-MT300A-EXT, Para los exigentes del WIFI (300 Mbps). Tampoco lo he probado pero debería de funcionar.

CONFIGURACIÓN DEL ROUTER:

Suponemos que tienes instalado ya Openwrt, pero si no en los módems Comtrend es muy sencillo:

Si nuestro router principal tiene, como la mayoría, la dirección ip 192.168.1.1  debemos desconectar el cable  o latigullo desde nuestro ordenador a nuestro router principal. A continuación conectar el ordenador con el router ADS-B. Deberías cambiar la configuración de tu tarjeta de red si está en DHCP y ponerle dos direcciones ips que seguidamente nos harán falta: una en el rango 192.168.1.X por ejemplo: 192.168.1.5 y otra en el rango 192.168.2.X por ejemplo 192.168.2.5

 

Cargar el firmware apropiado para tu router. En nuestro caso vamos a trabajar con el  Comtrend ar5387un, para otros modelos hay que buscar el firmware adecuado a dicho modelo.

Descargamos el fichero:

https://downloads.openwrt.org/chaos_calmer/15.05/brcm63xx/generic/openwrt-15.05-brcm63xx-generic-AR-5387un-squashfs-cfe.bin

Con el router Comtrend  apagado, pulsamos y manteniendo pulsado el botón de “Reset” encendemos el router. Se debe mantener pulsado el botón de “Reset” aproximadamente 20 segundos. Pasado este tiempo soltamos reset.

Teclear: 192.168.1.1

Nos saldrá una ventana y subimos el fichero al router. Esperamos varios minutos hasta que reinicie.

Ahora necesitaremos un programa terminal para conectarnos por telnet, por ejemplo PUTTY.

Lo descargamos y entramos al router por telnet:

 

Una vez dentro

Empezamos a cambiar la configuración mediante comandos UCI. Cambiaremos la dirección ip del router tanto de LAN como de WIFI, también configuraremos el WIFI para que se conecte como cliente al router principal.

uci del network.wan

uci set network.lan=interface
uci set network.lan.ifname=’eth0.1′
uci set network.lan.force_link=’1′
uci set network.lan.type=’bridge’
uci set network.lan.proto=’static’
uci set network.lan.ipaddr=192.168.2.1
uci set network.lan.netmask=255.255.255.0
uci set network.lan.gateway=192.168.1.1
uci set network.lan.dns=8.8.8.8

uci set network.wan=interface
uci set network.wan._orig_ifname=’wlan0′
uci set network.wan._orig_bridge=’false’
uci set network.wan.proto=static
uci set network.wan.ipaddr=192.168.1.100
uci set network.wan.netmask=255.255.255.0
uci set network.wan.gateway=192.168.1.1
uci set network.wan.dns=8.8.8.8

uci set wireless.radio0.disabled=0

uci set wireless.radio0.channel=13
uci set wireless.@wifi-iface[0].ssid=XXXXXXX      —-> atención—-> cambia las X por el nombre de tu red WIFI
uci set wireless.@wifi-iface[0].mode=sta
uci set wireless.@wifi-iface[0].network=wan
uci set wireless.@wifi-iface[0].encryption=psk2
uci set wireless.@wifi-iface[0].key=XXXXXXXXXXX —> atención—> cambia las X por tu clave wifi
uci set firewall.@zone[1].input=ACCEPT
uci set firewall.@zone[1].masq=1
uci commit
reboot

Si todo ha ido bién ya tendrás conexión por wifi entre tu router principal y tu router ADS-B y cuando conectes el latiguillo a tu ordenador además lo tendrás por LAN también.

Ahora podemos conectar a la página web del router mediente LUCI ( es una interface Web para poder configurar el router) tecleamos http://192.168.1.100 (Para conexión por WIFI) o bién http://192.168.2.1 (para conexión por LAN). Si el firmware no incluye LUCI instalado lo instalamos nosotros.

opkg update
opkg install luci
/etc/init.d/uhttpd enable
/etc/init.d/uhttpd reload

Instalamos los paquetes para sdr y ADS-B.

 

opkg install rtl-sdr
opkg install dump1090

Con esto ya podemos probarlo : conectamos nuestro SDR en el puerto USB con su antena y con su filtro y desde una ventana telnet (con PUTTY) tecleamos:

dump1090 –net –net-ro-port 47806

Empezaremos entonces a ver las tramas.

O también con este comando:

dump1090 –net –net-ro-port 47806 –raw –gain -10 –interactive

Ya tenemos nuestro router preparado, pero queremos que cada vez que lo encendamos arranque en modo ADS-B, yo lo hago de esta manera que para mi es más cómoda , aunque hay varias más.

Entramos en la configuración del router con el navegador:

tecleamos http://192.168.1.100 (Para conexión por WIFI) o bién http://192.168.2.1 (para conexión por LAN)

 

Escribimos estos comandos:

dump1090 –net –net-ro-port 47806 –gain -10 –raw > /dev/null &
# rtl_tcp -a 192.168.2.1 -n 8 -b 8

No olvidemos guardar los cambios  con el botón  “SUBMIT”

Ya tenemos el servidor preparado.

EL CLIENTE

Para poder posicionar aviones yo suelo usar el software “Virtual Radar“, es muy completo con muchas opciones y además libre.

Después de instalarlo lo configuramos:

MENU—> TOOLS—-> OPTIONS —> RECEIVERS —>Receiver

Hacemos click el enlace:

 

Y todo listo nuestros aviones empezarán a estar posicionados.

Algunos ejemplos de aviones que algunas web con aviones posicionados:

http://www.virtualradarserver.co.uk/Directory.aspx

Este software entre otras muchas opciones tiene la de soportar muchos receptores simultáneos y podemos añadir los que queramos:

Con la opción Merged Feed los “uniremos”  todos en el mismo mapa:

 

LA ANTENA

De todas las antenas que he probado sin duda me quedo con la “Franklin”. Es bastante fácil de construir y los resultados son espectaculares.

 

Mis primeras pruebas fueron con alambre de cobre, pero no encontré del suficiente grosor y aunque funcionaba bien buscaba algo más sólido. probé con una varilla metálica que compré en unos conocidos almacenes. Fue un absoluto fiasco, difícil de doblar y los resultados malísimos. La solución me la dio Tino (EB7FSH), me proporcionó alambre de aluminio de 3 mm del que se usa en cables de alta tensión.  Fácil de manejar pero con la suficiente rigidez.  El único problema fue la soldadura, la solución arrollar unas vueltas de cable fino de cobre sobre los puntos donde había que soldar. Los resultados fueron simplemente espectaculares, con la antena dentro de casa era capaz de recibir aviones a 300 kms de distancia.

Y si la ponía en el exterior era capaz de recibir hasta 273 frames por segundo:

Éste es el alambre:

EL CLIENTE/SERVIDOR RTL_TCP

La siguiente opción de trabajo es hacerlo como servidor y cliente rtl_tcp, el router hará de servidor y pondremos un software cliente en nuestro ordenador. Yo he probado con estos dos SDRSharp y SDRConsole.

EL SERVIDOR:

Para poner el router en modo servidor:

Entramos en la configuración del router con el navegador:

tecleamos http://192.168.1.100 (Para conexión por WIFI) o bién http://192.168.2.1 (para conexión por LAN)

 

 

Aquí cambiamos quitamos la “#” de la línea rtl_tcp -a 192.168.2.1 -n 8 -b 8

y se la ponemos delante de: # dump1090 –net –net-ro-port 47806 –gain -10 –raw > /dev/null &

Recuerda: Aquí enviarás las tramas por LAN si quieres enviarlas por WIFI tendrías que poner la dirección IP WIFI:

rtl_tcp -a 192.168.1.100 -n 8 -b 8

EL CLIENTE:

Si usas SDRSharp la configuración es sencilla:

Ponemos la misma dirección ip del servidor y del puerto 1234 por defecto.

Ésta versión de SDRSharp es la 1.0.0.1525 y funciona bien, se da la circunstancia que antes hice pruebas con otra y se “crasheaba” contínuamente. Así que cuidado con las versiones.

Si vas a usarlo por wifi casi seguro que tendrás que bajar el “Sample Rate” a 0.25 MSPS, e incluso por LAN también tendrás que probar para comprobar a que “Sample Rate” es estable.

También se puede usar el SDRConsole:

 

EL RECEPTOR RTL-SDR

Varios son los que he probado y parece que el que va mejor es el de “FlightAware”, no en vano son una empresa que se dedica a esto del ADS-B. Lleva conector SMA y preamplificador incorporado y 0.5 PPM de desviación. Perfecto para esto. Por ponerle alguna pega, a veces el preamplificador se satura por lo que hay que tener cuidado con la ganancia. A veces empieza a recibir señales “fantasma”, me pasa mucho con algunas señales tipo DMR que suelen ser muy potentes. Son señales que aparecen en determinadas frecuencias que cuando las compruebas con otro receptor no existen. También le suele pasar a otro modelo también probado como el Nooelec SMART.

EL FILTRO

Como ya he puesto en post anteriores el filtro resulta imprescindible. Lo mejor para recibir ADS-B hubiera sido poner el filtro específico que FlightAware vende y que funciona bastante bién, pero tiene unas frecuencias de corte cercanas a las frecuencias de 1090 Mhz, por lo cual si además lo queríamos usar para el otro proyecto (receptor rtl_tcp) he usado el que vende la página http://www.rtl-sdr.com/rtl-sdr-com-broadcast-fm-band-stop-filter-88-108-mhz-reject-now-for-sale.

LA CAJA ESTANCA

Hemos metido todos los componentes en una caja estanca que prometía ser IP65 o sea contra polvo y agua con unas dimensiones de 21,5 x 16,5 x 9 cm. Si le pones un prensaestopa para pasar el cable debería ser hérmetico.

LA ALIMENTACIÓN DEL ROUTER

Para alimentar el router se hace por POE, existen cables que viene hechos que resuelven el problema y sería sólo comprarlos y enchufarles una fuente de alimentación. Yo he preferido hacerlo por mi mismo, como el router se alimenta a 12 V.  Le he conectado un regulador de tensión 7812, con un disipador generoso (al principio le puse uno muy pequeño y se calentada en exceso). El consumo del router es de aproximadamente 320 mA. y habrá que alimentarlo como mínimo a 15 voltios para que funcione bien el regulador, pero con casi 40 metros de cable de red tendrá algunas pérdidas de voltaje con lo cual lo suyo sería alimentarlo desde abajo con unos 18-20 V.

Este sería el conexionado en la caja estanca:

Cables 1,2,3,6 formarían los dos pares indispensables para conectar un equipo en red.

El par 4 y 5 lo unimos y llevará alimentación positiva.

El par 7 y 8 lo unimos y llevará alimentación negativa.

 

En el otro extremo del cable de red (estará en casa cerca de nuestro router principal) introducimos alimentación con una fuente a los cables azules (par 4 y 5 positivo) y  (par 7 y 8 negativo). Como esto tiene sus riesgos (si te equivocas es posible que frias el router o tu ordenador) quizá te interese mejor comprarlos hechos:

https://www.amazon.es/Passive-Ethernet-Adaptador-Inyector-Splitter/dp/B012AKXQE4/ref=sr_1_3?ie=UTF8&qid=1493223270&sr=8-3&keywords=poe

 

Disipador dentro de la caja estanca:

Esto es todo….Espero que alguien lo pueda aprovechar.

Seguimos con los filtros: filtro RTL-SDR

 

Desde la propia página www.rtl-sdr.com han puesto en venta un nuevo filtro para anular la banda de FM.

Aquí puedes ver sus características:

RTL-SDR.COM Broadcast FM Band-Stop Filter (88-108 MHz Reject) Now for Sale + RTL-SDR V3 Dongle Availability

Después de probarlo sólo puedo decir que funciona muy bien y comparándolo con el que describo en el post de mas abajo y comprado en EEUU, los dos son bastante similares y si tuviera que elegir uno me quedaría con éste  de RTL-SDR.

 

Interior del filtro RTL-SDR

 

Algunas pruebas entre ellos, la diferencia es mínima:

Filtro comprado en EEUU de mcmelectronics.com

Filtro RTL-SDR.

Empezando con Un RTL-SDR. El filtro de FM

Si tienes ya tu dispositivo RTL-SDR y lo has probado puedes pensar o bien que no sirve de mucho o que es el aparato receptor de radio más increíble que hayas visto por un precio tan barato. Todo esto dependerá de factores como la antena que usas o su emplazamiento por ejemplo. Pero si todavía crees que no recibe tan bien como una emisora o equipo comercial, prueba a ponerle un filtro anulador de FM.

Los RTL-SDR son aparatos muy sencillos y carecen de filtros, por ello la intermodulación de las potentes emisoras de FM lo saturan y lo dejan “sordo”.

Puedes comprar uno, aunque no es fácil, puesto que mayoritariamente lo venden en EE.UU y aunque no es muy caro, con el transporte se encarece bastante. Yo compré hace tiempo este:

fm trap

uno solo

El resultado es magnífico una vez puesto y al subir la ganancia se empiezan a recibir señales que antes no estaban.

Si quieres buscarlos en internet hazlo como “fm notch filter” o “fm trap“.

 

Si lo quieres hacer tu mismo, no es difícil, siempre que seas algo mañoso con el soldador, hay varios esquemas por la red y la verdad es que si haces las bobinas bien y los condensadores son los adecuados notarás la diferencia.

 

filtro

Esta es la primera prueba al que además le he puesto un condensador variable en paralelo.

 

Este otro también es un buen ejemplo, diseñado por Adam (9A4QV), que es el creador entre otras cosas de los famosos LNA o previos LNA4ALL.

http://lna4all.blogspot.com.es/2015/10/diy-fm-trap-or-88-108-mhz-band-stop.html

FM trap-1

FM trap (1)

Para hacerlo: hilo de cobre esmaltado de 0.35 mm de diámetro sobre un objeto redondo de 5 mm de diámetro, (una broca por ejemplo), dos bobinas a 2.5 vueltas y la otra con 5 vueltas.

Para la otra versión que hay más arriba: hilo de cobre esmaltado de 0.6 mm con 13 vueltas con 3 mm interior (1 bobina). 5 vueltas  4 mm de interior (2 bobinas). 2 condensadores de 30 pf y 1 otro de 12 pf. (Los dos filtros tienen el mismo esquema, sólo cambian los componentes).

Aquí algunas pruebas preliminares que hemos estado haciendo Tino EB7FSH y yo:

IMG_20160410_122127  IMG_20160412_192840

 

Una Imagen vale que mil palabras: Prueba de recepción con filtro y sin filtro. Se trata de sintonizar varias señales Tetra, son señales bastantes fuertes y además con portadora contínua por lo cual yo las suelo usar algunas veces para pruebas de recepción, más que nada porque sé que siempre están ahí. tetra sin filtro

Sin Filtro. La ganancia se puede poner como max. a 25.4 db 

tetra con filtro

 Con filtro. Podemos subir la ganancia hasta 37.2 db y entonces aparecen dos nuevas portadoras.

BT_SaberMas_ES

En este foro puedes encontrar más información.

http://www.avsforum.com/forum/25-hdtv-technical/1431548-fm-filter.html

 

 

 

¿Qué es el RTL-SDR?

SDR (Sofware Defined Radio), o lo que es lo mismo Radio Definida por Sofware. Es un dispositivo de radio sencillo con poca electrónica y que está conectado a un ordenador como medio de proceso para emular complejos filtros y otras partes de las que carece.

Desde hace mucho tiempo existen los receptores SDR, desde tarjetas PCI a otras que se son placas que se comunican con un ordenador por una conexión de red tipo RJ-45 o como  las actuales que lo hacen a través de USB.

Uno de éstos y desde hace hace años han  sido los USRP, de Ettus Research. Cuando  algún organismo público, universidad o alguien realizaba algún proyecto serio en este ámbito, se recurría a alguno de estos equipos. Son eficaces pero caros. Además para el aficionado a la radio no tenía  mucho interés porque podía comprarse una emisora por el mismo precio pero con muchísima más potencia y mejores prestaciones.

 

 

B210_dia_Slider_486x316_v02

 

 

ettus_research_usrp_n210_without_top_cover

 

Hace un par de años todo esto cambió, alguien descubrió que podía recibir audio con un simple receptor de TV digital que no vale más de 10 euros. Empezó la revolución.

rtl sdr

Como fue…Alguien estaba investigando en un driver para Linux de un receptor de TV Digital tipo Stick -USB, descubrió que quizá se podía alterar la frecuencia de recepción y lo publicó en un foro y poco después se desarrolló un driver que permitía recibir desde 24 hasta 1740 MHZ en todos los modos: FM, AM, USB, LSB etc. A partir de ese driver muchos entusiastas empezaron a desarrollar software. Ahora mismo hay muchísimo, tanto para Windows como para linux, y algo para OSX. Uno de lo más conocidos es el SdrSharp, el cual además tiene gran cantidad de plugins que se le pueden añadir. (Historia completa del descubrimiento: http://rtlsdr.org/#history_and_discovery_of_rtlsdr)

Si aún no sabes a que refiero sólo hay que pensar que puedes tener un receptor de 24-1700 mhz todo modo, que además es capaz de recibir con un ancho de banda de hasta 3,2 MHZ, (normalmente 2,4 MHz), o lo que es lo mismo, tendrás en la pantalla de tu PC recibiendo al mismo tiempo todas las señales que transmitan en ese rango, hablamos de casi 200 canales de 12,5 KHZ. si ponemos un ejemplo tendremos la banda de radioaficionado de 2 metros (144 a 146 Mhz) de un solo golpe de vista. Y todo ello por menos de 10 euros.

 

sdr rtl r820 vs 820t2

 

Pero todo no iba a ser maravilloso. Entre sus desventajas tenemos que decir que este aparato sufre de gran intermodulación, las potentes emisoras de FM de tu zona te provocarán interferencias. Su sensibilidad no es tan grande como la de un receptor comercial. Por supuesto es un aparato de solo recepción, no podrás transmitir. Y por último la antena que trae te dará unos pobres y exasperantes resultados por tanto necesitarás una buena antena exterior, y dependiendo de la calidad y sus características así serán esos resultados.

 

Cómo saber más:

www.rtl-sdr.com

Es diría yo la mejor página que habla de estos dispositivos. Podrás encontrar todo tipo de información técnica, software, drivers. Etc y además se actualiza con mucha frecuencia.

 

http://sdr.osmocom.org/trac/wiki/rtl-sdr

Es una página importante, no en vano ellos colaboraron en el descubrimiento del driver.

 

http://m.forocoches.com/foro/showthread.php?t=3805477

En este foro hay varios hilos hablando del tema y la información es buenísima, esta todo muy bien explicado y tanto para consulta como para iniciación es un hilo de obligada lectura.

 

http://www.reddit.com/r/RTLSDR

Foro donde se tratan aspectos técnicos y experimentación del mundo RTL-SDR.

 

 

 

 

Pasión por la radio.

Hace ya mucho tiempo que tuve mi primer transmisor de radio. Apenas tenía 14 años cuando con mi primer walkie talkie de juguete y subido al tejado intentaba recibir emisoras de 27 mhz, la también conocida Banda Ciudadana, donde con este simple walkie talkie era capaz de escuchar los camioneros en el canal 19 que pasaban por la antigua N-IV, muy cerquita de mi casa.

Años después conseguí mi licencia EB7DIJ y ya con una instalación con emisoras de VHF y UHF, formamos un buen equipo dedicado fundamentalmente a la experimentación y sobre todo a las comunicaciones digitales y principalmente al packet radio. Entre ellos citar a EB7FUJ el cual me inició, EA7CPB, EB7FQP y sobre todo EB7FSH juntos hicimos cientos de experimentos.

Construíamos nuestros propios módems como el conocido módem Baycom. Eso era principos de los 90 y nuestros modems funcionaban a 1200 y 9600 bps , casi a la misma velocidad a la que iba internet.

Los años fueron pasando y las responsabilidades familiares me apartaron de la radio, también la afición se fue disipando, Internet acabó prácticamente con ella. Tanto es así que mi licencia caducó y ya casi tenía pensado desmontar la estación y las antenas.

Hasta que hace unos meses descubrí un artículo sobre la posibilidad de usar un receptor de TV usb como receptor de radio. Leía las características y no salía de mi asombro, un aparato que es capaz de recibir entre 24 mhz y 1700Mhz en todos los modos AM-FM-USB-LSB y recibe con un ancho de banda de casi 3 mhz, que lo conectas a tu ordenador y puedes usar multitud de software que ha creado para él. y además cuesta menos de 10 euros. Me dije que esto tenía que probarlo. Esto era nada más y nada menos que el RTL-SDR. Aquel walkie talkie de juguete me costó 500 pesetas (3 euros de hoy) comprado de segunda mano a un compañero del instituto, quien me iba a decir que 30 años después, que un aparato de menos de 10 euros iba a hacerme volver al mundo de la radio.

 

LCD Nokia 5110 – PCD8544

Dentro de la gama de LCD´s que podemos conectar a Arduino, se ha hecho muy popular el display PCD8544 que llevaban los teléfonos móviles Nokia 5110 y 3310. Es un display gráfico de 84 x 48 pixels, monocromo y  con posibilidad de retroiluminación.

      Como quiera que desarmar uno de estos teléfonos  para sacar el display e intentar cablearlo es posible, pero poco recomendable, (porque soldar cables en ellos es bastante complicado), hay que decir que  los venden por menos de 3 euros en tiendas chinas por lo que más barato imposible.
  
Como cablearlo:   Yo uso normalmente este:  

LCD PCD 8544 NOKIA 5110

Patillaje LCD
   1- RST   2- CE  3- DC  4 – DIN   5 – CLK   6 – VCC   7-LIGHT     8-GND
6 7 5 4 3 3.3 V GND (*) GND
Patillaje Arduino

(*) a través  resistencia de 220 Ohmios

                                      

Para probarla podemos extraer varios ejemplos de esta página: http://playground.arduino.cc/Code/PCD8544

En estos ejemplos no hacen falta librerías adicionales porque los caracteres son definidos en el mismo código.

También podrías crear un nuevo símbolo o carácter si lo necesitas en ésta página:

http://www.carlos-rodrigues.com/projects/pcd8544/

 

Otros ejemplo sencillos para practicar:

http://www.securlab.es/files/otro_test_hello_world_LCDNokia5110_sin_librerias.ino http://www.securlab.es/files/reloj_digital_con_pantalla_nokia.ino

Si quieres otros ejemplos más elaborados, los que ha hecho Carlos Rodrigues me gustan bastante:

https://github.com/carlosefr/pcd8544/blob/master/examples/HelloWorld/HelloWorld.ino

https://github.com/carlosefr/pcd8544/blob/master/examples/Thermometer/Thermometer.ino

 

También lo puedes descargar todo completo con sus librerías:

https://pcd8544.googlecode.com/files/PCD8544-1.4.zip

 

Y por último está la famosa librería de Adafruit:

https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library

 

Importante: El código de Adafruit y el patillaje no es compatible con las anteriores, para hacerlo compatible tienes que cambiar la línea:

                            Adafruit_PCD8544 display = Adafruit_PCD8544(76543);

por:

                              Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 7, 6);

 

Puedes descargarlo aquí ya modificado:

http://www.securlab.es/files/pantalla_nokia_adafruit_patillaje_adaptado.ino

También hay que tener en cuenta que hay mucho código de LCD de este tipo con un  patillaje distinto, eso es debido a que el modelo anterior que vendían era diferente.

 

 

LCD´s reciclados

Es fácil encontrarse LCD´s en aparatos y antes de tirarlos se puede intentar reciclarlos para usos futuros, luego se comprueba con cierta alegría que son compatibles HD44780 y por tanto usables. Aunque hay que decir que alguna vez cambia la situación de algún pin, como por ejemplo la alimentación.

Aquí unos pocos que he encontrado:

 

 

 

Otras veces aún teniendo el datasheet y averiguando los distintos pins es imposible hacerlas funcionar aquí un par de ejemplos, son LCD de máquinas antiguas Olivetti:

 

Módulos LCD: Hitachi HD44780

Cuando queramos interactuar con nuestro aparato  lo primero que interesa es poder ver datos y para ello nada mejor que un display LCD. (si no tienes ningún display siempre podrás usar el puerto serie que lleva el propio soft de Arduino).

Este es el esquema del archiconocido display Hitachi HD44780. aunque implícitamente no lo ponga casi todos se basan en él, así que es posible que tengas uno y el conexionado sea idéntico.

16x2 char lcd pinout 4 bit interface 16x2 char lcd pinout 4 bit interface less2 HD44780_pins

 

Pin description
PIN NUMBER SYMBOL FUNCTION
1 Vss GND
2 Vdd  + 3V or + 5V
3 Vo Contrast Adjustment
4  RS H/L Register Select Signal
5 R/W H/L Read/Write Signal
6 E  H → L Enable Signal
7  DB0 H/L Data Bus Line
8  DB1 H/L Data Bus Line
9  DB2 H/L Data Bus Line
10  DB3 H/L Data Bus Line
11  DB4 H/L Data Bus Line
12  DB5 H/L Data Bus Line
13  DB6 H/L Data Bus Line
14  DB7 H/L Data Bus Line
15 A/Vee + 3.5V for LED/Negative Voltage Output
16 K K Power Supply for B/L (OV)

Si vas a probar una que hayas reciclado de otro proyecto y quieras hacerla funcionar no olvides poner una resistencia variable de 10 kΩ  para el control del contraste:

 

Pero si no quieres grandes quebraderos de cabeza por menos de 4 Euros tienes una que se pincha directamente sobre Arduino y tiene hasta botones para hacer un “hipotético menú”: (Algunas unidades que venían últimamente de tiendas de China venían defectuosas, esperemos que lo subsanen pronto).

lcd keypad

SKU083549k

Para el código y los pines:

 

/*
Metemos un texto fijo y la columna de abajo seleccionamos con teclas
*/
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int adc_key_val[5] = {50, 200, 400, 600, 800 };
int NUM_KEYS = 5;
int adc_key_in;
int key=-1;
int oldkey=-1;
boolean luzEncendida=true;
boolean cursorActivo=false;
unsigned long time;
int x=0;
char caracterActual = ‘A’;
void setup()
{
lcd.clear();
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print(“Hello World !!!”);
time = millis();
//  pinMode(10, OUTPUT);
}
void loop()
{
if (millis()-time > 10000) {  // Si han pasado mas de 10 segundos apagamos la luz
pinMode(10, OUTPUT);
digitalWrite(10, LOW);
luzEncendida=false;
}
if (millis()-time > 5000) {  // Si han pasado mas de 5 segundos apagamos el cursor
lcd.noBlink();
cursorActivo=false;
}
adc_key_in = analogRead(0);    // Leemos el valor de la pulsacion
key = get_key(adc_key_in);    // Obtenemos el boton pulsado
if (key != oldkey)   // if keypress is detected
{
delay(50);  // Espera para evitar los rebotes de las pulsaciones
adc_key_in = analogRead(0);    // Leemos el valor de la pulsacion
key = get_key(adc_key_in);    // Obtenemos el boton pulsado
if (key != oldkey)
{
time = millis();  // TODO: falta la comprobacion de si se ha desbordado el tiempo
if (!luzEncendida) {  // Al pulsar cualquier tecla encendemos la pantalla
pinMode(10, INPUT);
luzEncendida=true;
}
else {  // si la pantalla esta encendida seguimos funcionando normalmente
lcd.setCursor(x, 1);
oldkey = key;
if (key >=0){  // Si se ha pulsado cualquier tecla
lcd.blink();  // Mostramos el cursor parpadeando
cursorActivo=true;
}
if (key == 0){  // Se ha pulsado la tecla derecha
x++;
if (x>15) x=15;
caracterActual=’A’;
}
if (key == 1) {  // Se ha pulsado la tecla arriba
caracterActual++;
if (caracterActual > ‘Z’) caracterActual=’Z’;
lcd.write(caracterActual);
}
if (key == 2) {  // Se ha pulsado la tecla abajo
caracterActual–;
if (caracterActual < ‘A’) caracterActual=’A’;
lcd.write(caracterActual);
}
if (key == 3) {  // Se ha pulsado la tecla izquierda
x–;
if (x<0) x=0;
caracterActual=’A’;
}
if (key == 4){  // Se ha pulsado la tecla de seleccion
}
lcd.setCursor(x, 1);
}
}
}
delay(100);
}
// Convertimos el valor leido en analogico en un numero de boton pulsado
int get_key(unsigned int input)
{
int k;
for (k = 0; k < NUM_KEYS; k++)
{
if (input < adc_key_val[k])
{
return k;
}
}
if (k >= NUM_KEYS)k = -1;  // Error en la lectura
return k;
}

 

Descárgate el fichero: http://www.securlab.es/files/HD44780_con_botones.ino

 

 

Recuerda:

 – Si cargas otro ejemplo lo importante es decirle en el programa  donde están las patillas:
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
– Cambia si es necesario el número de líneas y longitud de caracteres de tu LCD:

lcd.begin(16, 2);          16 caracteres y dos líneas
lcd.begin(20, 4);          20 caracteres y 4 líneas
Esquema que uso yo con todos los LCD´s para que sean compatibles:
lcd_schem ARDUINO LCD nuevo patillaje

Arduino

Arduino

Dentro del mundo de la electrónica, hace unos años este aparato supuso una revolución. Básicamente es una plataforma que consta de un microprocesador  y numerosos pins de entradas y salidas, tanto analógicas como digitales, que nos permiten programar ese microprocesador con un software, que instalamos en nuestro pc y que lleva un compilador, que introduce los datos en el micro y otras características como que todo se hace por puerto usb, el cual incluso lo alimenta. En fin sencillito, cargar y listo.

Arduino_Uno_-_R3

Arduino Uno R3

800px-Arduino_Mega

Arduino Mega

Arduino Mega

 

Otra ventaja que tiene es que se van fabricando pequeños circuitos que se conectan a Arduino, todo ello para hacer todo tipo de cosas: LCD, controladores de motores, placas de relés, wifi, Ethernet, etc… Últimamente proliferan multitud de clones de circuitos, encontrar los patillajes y pins a veces no es sencillo, porque van saliendo versiones nuevas y cambian de una otras pero si los que tu tienes son como los que yo he probado,  todo debería ser pinchar y listo.

Y eso es en el fondo lo que pretende esta página dar esquemas y sencillos ejemplos que para profundizar más siempre podrás usar un buscador y encontrarás miles de ejemplos.