Mostrando entradas con la etiqueta GPIO. Mostrar todas las entradas
Mostrando entradas con la etiqueta GPIO. Mostrar todas las entradas

sábado, 16 de noviembre de 2013

The MagPi número 16

Ha salido un nuevo número de la revista The MagPi, el número 16. Este es el link.
Issue 16

Interesantes artículos, entre los que destaco:
  • SKUTTER I2C: Expanding your senses with I2C:  Interesante artículo que amplía y profundiza en el uso del bus I2C del conector GPIO incluyendo formas de convertir el voltaje del bus. Puede ser usado como base de futuras prácticas de Electrónica Digital.
  • LOGI-PI SPARTAN6 FPGA BOARD: Raspberry Pi meets FPGA: Artículo avanzado en el que vemos las utilidades del módulo Log-Pi para interactuar con multiples interfaces bajo la perspectiva FPGA (Field Programmable Gate Array)
  • XML for the Raspberry Pi: Uso de Python para interpretar y construir archivos XML

miércoles, 28 de agosto de 2013

The MagPi número 15

Ha salido un nuevo número de la revista The MagPi, el número 15. Este es el link.
Issue 15

Interesantes artículos, entre los que destaco:
  • USB ARDUINO LINK Using Nanpy to connect your Raspberry Pi to An Arduino: Este interesante artículo nos muestra como interconectar Arduino y Raspi a través del puerto USB y usar Python para enviar comandos a Arduino.
  • THE RASCLOCK Raspberry Pi timekeeping with a real time clock: Si para nuestros proyectos necesitamos que el reloj de Raspi esté siempre en hora y no tenemos acceso a Internet, este articulo nos explica como.
  • MY OS: BUILD A CUSTOMISED OPERATING SYSTEM: Introducción al proceso de creación de una distribución Linux adaptada a nuestras necesidades 

Expansiones I/O II

Como ya comenté en un post anterior, hay muchos módulos de expansión para RasPi.
En este artículo (EETimes) podeis ver otras posibilidades de expansión que nos facilitarán el desarrollo de nuestros proyectos.

Entre los mas interesantes tenemos:

The MagPi número 14

Ha salido un nuevo número de la revista The MagPi, el número 14. Este es el link.
Issue 14

Interesantes artículos, entre los que destaco:
  • RASPBERRY PI CAMERA MODULE Part 1: Nos introduce a la nueva cámara que se conecta directamente a RasPi.
  • PYTHON CONTROL: ROBOTIC ARM: Interesante articulo que nos enseña como se gestiona un brazo robot con Phyton.
  • FRESHLY ROASTED A beginners guide to Java: Si nuestro lenguaje de programación favorito es Java, este articulo es fundamental.

Expansiones I/O para hacer practicas Raspberry Pi

Como hemos visto en los anteriores posts de electrónica digital, se pueden hacer diseños y prácticas básicas trabajando directamente con el bus GPIO, pero si queremos ir un paso mas allá con proyectos mas complejos, necesitamos implementar interfaces de entrada salida.

Como vimos en este post, las capacidades eléctricas del bus GPIO son pobres para activar y manejar dispositivos complejos por lo que si queremos hacer proyectos mas complejos que conectar un LED, necesitamos circuitos de adaptación de tensión, impedancias, etc, para, entre otras cosas, proteger a Raspi.

Conociendo las características del bus GPIO podemos construirnos estos circuitos como una practica mas. Sin embargo, hay un número cada vez mas grande de módulos y tarjetas adaptables a RasPi para facilitarnos esta tarea.

A continuación enumero las que me parecen mas interesantes para empezar ha hacer proyectos complejos de electrónica digital, robótica y M2M.

Para prácticas genéricas de electrónica digital

Módulo Gertboard (link)

Gertboard y Raspberry Pi (Element14)
Gertboard es un de los módulos mas completos que hay para realizar todo tipo de practicas de desarrollo y electrónica digital con la que podemos gestionar sensores digitales y analógicos, motores bidireccionales, mostrar información binaria, programar y gestionar un chip Arduino, etc.
Características:

  • Se conecta directamente al puerto GPIO de RasPi
  • Controlador de motor bidireccional para motores de hasta 18V y 2A
  • 2 Convertidores Digital-Analógico 8-bits
  • 2 Convertidores Analógico-Digital 10-bits
  • Arduino (Atmel ATmega328) MCU programable y gestionable desde RasPi
  • 6 salidas colector abierto
  • 12 LEDs
  • 3 pulsadores

Módulo Tandy Multiface Gertboard Compatible

Tandy Multiface (Tandy)
Tandy Multiface es un módulo con capacidades similares a Gertboard desarrollado por Tandy. En este link teneis información del módulo.

Para prácticas de robotica y M2M

Módulo Piface (link)

PiFace (Element14)

El módulo Piface permite añadir a RasPi la capacidad de interactuar con elementos externos, tales como motores, sensores, interruptores, relés, etc.
Es muy sencillo gestionar Piface a través de librerías Python, C, etc.
Características:

  • 2 relés
  • 8 salidas de colector abierto
  • 8 entradas digitales
  • 8 indicadores LED


Para prácticas de robotica uniendo la potencia de RasPi y Lego Mindstorm

Módulo BrickPi (link)

Raspberry Pi y BrickPi (dexter industries)
El módulo BrickPi permite añadir a LEGO Technic/Mindstorm la potencia de proceso y almacenamiento de RasPi.
Características:

  • Gestionar hasta 4 motores NXT
  • Gestionar hasta 5 sensores (analógicos o digitales)
  • Alimentar RasPi
  • Librerías Python, Scratch y C
  • Simulador gráfico


Para prácticas con Arduino

Módulo AlaMode (link)

Raspberry Pi y AlaMode (seeed)
El módulo AlaMode es una tarjeta de ampliación compatible con Arduino. Con esta tarjeta sumamos a la potencia de proceso de RasPi la capacidad de control de dispositivos en tiempo real de Arduino. Se pueden gestionar las capacidades de Arduino, tanto desde los lenguajes de alto nivel de RasPi como desarrollar directamente con el IDE de Arduino.
Características:

  • Compatible con Arduino y Arduino shields
  • Se conecta al conector GPIO de RasPi
  • Adaptador de voltaje bidireccional 3.3V(RasPi)<->5V(Arduino)
  • Controladores Servo para manejar 3 servos
  • Tarjeta Micro-SD para uso de Arduino y almacenamiento de datos
  • Reloj en tiempo real para poner en hora y sincronizar, tanto RasPi como Arduino.


Para prácticas de desarrollo de SW y proceso de imágenes

Cámara Rasperry Pi (link) 

Cámara y Rasperry Pi (Element14)
Cámara desarrollada por el mismo equipo que desarrolló RasPi.  Se conecta directamente a RasPi a través del bus CSI (conexión directa al procesador SOC BCM2835).
Características:
  • Sensor 5 megapixeles
  • Fotos de 2592 x 1944 px de resolución
  • Video a 1080p30, 720p60 y 640x480p60/90

Para prácticas con varios módulos de expansión

PiRack Accessory board for Raspberry Pi (link)

PiRack (Element14)
Si tenemos que trabajar con varios módulos o queremos evitar conectar y desconectar los módulos de las prácticas, este módulo de expansión  nos permite tener conectados 4 módulos y elegir cuales están activos. También permite alimentar los módulos con una fuente externa para no sobrecargar a RasPi.

martes, 27 de agosto de 2013

The MagPi número 13

Ha salido un nuevo número de la revista The MagPi, el número 13. Este es el link.
Issue 13

Interesantes artículos, entre los que destaco:
  • PI MATRIX: An introduction to controlling 64 LEDs and programming the I2C bus: Interesante articulo en el que vemos como usar el bus I2C del conector GPIO .
  • A COCKTAIL OF EXPANSION BOARDS: Nos introduce a la creación de módulos de expansión basados en los chips ATtiny.
  • SCRATCH PATCH: Uno de los alicientes para que los chavales aprendan a programar es el desarrollo de juegos. En este artículo tenemos un ejemplo muy bueno.

viernes, 22 de marzo de 2013

Primera práctica de Electrónica Digital

Introducción: El Diodo LED

Para la primera práctica utilizaremos un diodo led. El diodo led es un diodo que emite luz. Su símbolo electrónico es el siguiente:

Estructura de un LED: A-Ánodo B-Cátodo 1-Lente 2-Contacto metálico 3-Cavidad reflectora 4-Terminación del semiconductor 5-Yunque 6-Plaqueta 8-Borde plano (Indica el Cátodo)
Para trabajar con un diodo led tenemos que tener en cuenta sus características y respetarlas, tanto para no dañar el LED, como para no dañar la RasPi.
Las características mas importantes a tener en cuenta son las siguientes:

  • Como cualquier diodo, el LED es semiconductor, es decir, solo permite el paso de la corriente en un sentido. Si no polarizamos bien el LED, no circulará la corriente y no se encenderá. El ánodo se conecta a la parte positiva del circuito y el cátodo a la parte negativa.
  • El LED tiene una tensión de trabajo en la que permite el paso de la corriente y por lo tanto empieza a iluminar. 
  • El led tiene un límite en la cantidad de corriente que circula por el. Si se sobrepasa este límite, dañaremos el LED.
  • La tensión normal de funcionamiento es de 1,8-2,2 v
  • La corriente máxima no debe exceder los 20mA, y con 10mA se iluminan bien.

Haciendo la práctica

Vamos a conectar un LED al bus GPIO de la RasPi y vamos a encenderlo y apagarlo a nuestra voluntad a través de comandos.
El bus GPIO tiene las siguientes características:
  • Tensión para un uno lógico: 3,3v
  • Corriente máxima: 16 mA.
por lo que no podemos conectar un LED directamente sin riesgo de dañar el LED o la RasPi. Vamos a usar un circuito con una resistencia para adaptar el LED al bus GPIO.
Resistencia 150Ohm. Código Marrón, Verde, Marrón (+ Oro que el la tolerancia)
Para calcular el valor de la resistencia utilizaremos la ley de ohm. Si el LED trabaja a 1,8v, en la resistencia tienen que "caer" (3,3v-1,8v) es decir, 1,5v. Como queremos que por el LED circulen 10mA, los mismos que circulan por la resitencia, tenemos:
R=V/I
1,5v/10mA=150Ohm
Es decir, necesitamos una resistencia de 150Ohm.

Usando una regleta de pruebas, nos quedaría así:
Para encender y apagar el led, usamos estos comandos:

Para configurar el pin 7 (GPIO4) como salida:
  echo "4" > /sys/class/gpio/export
  echo "out" > /sys/class/gpio/gpio4/direction
Para encender el LED
  echo "1" > /sys/class/gpio/gpio4/value
Para apagar el LED

  echo "0" > /sys/class/gpio/gpio4/value
Para dejar de usar el puerto

  echo "4" > /sys/class/gpio/unexport

domingo, 17 de marzo de 2013

Programación puerto GPIO

Una vez conocidos los pines del puerto GPIO, vamos a ver como se pueden gestionar desde código.

La programación del puerto se puede hacer utilizando diversos lenguajes, entre otros:
  • C
  • Java
  • Python
  • Perl
  • Bash shell script, usando sysfs
  • Shell script usando la libería wiringPi
  • Pascal
  • BASIC
  • Ruby
Para hacer las primeras practicas me parece mas sencillo usar shell script, utilizando el sistema de archivos sysfs que incorpora Raspbian y que permite controlar dispositivos como un sistema de ficheros. Un inconveniente de usar sysfs es que se necesitan permisos de root para usarlo, pero para hacer las prácticas me parece que es el método mas sencillo.
Un tema a tener en cuenta es que el número lógico I/O del chip BMC no coincide con el pinout del conector. Así, para usar el pin 7 del conector, tenemos que referirnos al BMC_GPIO_4

Los comandos para controlar los pines del puerto GPIO tanto para entrada como para salida son los siguientes:

  Primero cambiamos a usuario root. Para cerrar root, usamos el comando exit
  sudo -i 


  Para configurar el pin 7 (GPIO4) como salida:
  echo "4" > /sys/class/gpio/export
  echo "out" > /sys/class/gpio/gpio4/direction

  Para configurar el pin 26 (GPIO7) como entrada:
  echo "7" > /sys/class/gpio/export
  echo "in" > /sys/class/gpio/gpio7/direction

  Para poner un uno lógico en el pin 7 (GPIO4)
  echo "1" > /sys/class/gpio/gpio4/value

  Para leer el estado del pin 26 (GPIO7)
  cat /sys/class/gpio/gpio7/value 

  Para dejar de usar los puertos
  echo "4" > /sys/class/gpio/unexport
  echo "7" > /sys/class/gpio/unexport


Podemos encontrar información mas extensa sobre el puerto y su programación aquí.

domingo, 17 de febrero de 2013

GPIO (General Purpose Input/Output)

El puerto GPIO (General Purpose Input/Output) permite a la RasPi comunicarse con el exterior tanto para activar elementos como para leer el estado de los mismos. Como ya hemos visto, la tensión de trabajo del puerto es de 3,3v para un uno y 0v para un 0. Además, la corriente máxima que puede suministrar es de 16 mA.

Hay que tener cuidado conectando elementos al puerto GPIO porque se gestiona directamente desde el chip del procesador BCM2835 (system on a chip SOC) por lo que es muy facil dañar la RasPi o la tarjeta SD.

La configuración de los pines del conector GPIO es la siguiente:


Todos los pines BMC GPIO* se pueden gestionar directamente a través de código, ya sea para poner un valor o leer un valor de un elemento externo.

Además, se pueden configurar interfaces complejos de entrada/salida por lo que algunos pines pasan a ser gestionados directamente por el chip del procesador:
I²C es un bus de comunicaciones serie en el que se pueden conectar múltiples periféricos I²C esclavos. RasPi se configura como maestro del bus.
Pines del conector GPIO:
-3 SDA Data
-5 SCL Clock
SPI es un bus de comunicaciones serie síncrono (con reloj) en el que se pueden conectar múltiples periféricos SPI esclavos. RasPi se configura como maestro del bus.
Pines del conector GPIO:
-19 MOSI Master Out, Slave In
-21 MISO Master In, Slave Out
-23 SCLK Serial Clock
-24 CE0 Channel Enable 0. Also known as Slave Select (SS)
-26 CE1 Channel Enable 1. Also known as Slave Select (SS
UART es un bus de conexión serie asíncrono compatible con el estándar RS232 (prestar atención al circuito adaptador ya que el estándar RS232 trabaja a 12v y no a 3,3v)
Pines del conector GPIO:
-8 TX Transmit
-10 RX Receive

Electrónica digital y Raspi

Entendiendo que en electrónica digital se usan dos valores (0 y 1) para representar información, ahora vamos a ver como se implementan físicamente. Raspi es un dispositivo electrónico digital que procesa información binaria. Obtiene información (Sistemas de entrada/salida o I/O), procesa información (Procesador ARM o CPU), la almacena (Memoria) y la expone (Sistemas de entrada/salida o I/O) en formato binario, esto es, en unos y ceros.

Si bien hay muchas maneras de representar físicamente la información binaria, podemos simplificar diciendo que un 1 lógico se representa físicamente como la existencia de tensión, y un 0 lógico como la ausencia de tensión.

Aunque la alimentación de Raspi es de 5v, la tensión de operación de los diferentes elementos que tiene es de 3,3v, incluido el puerto GPIO. Esto significa que en el puerto GPIO hay un uno lógico cuando hay aplicada una tensión de 3,3v y hay un cero cuando no hay tensión aplicada (0v).

domingo, 3 de febrero de 2013

Electrónica Digital

Una de las ventajas de Raspi (Rasperry Pi) frente a otros equipos con los que trabajamos habitualmente es que tiene un bus GPIO (General Purpose Input/Output) que nos permite hacer prácticas y proyectos de electrónica digital en las que Raspi puede hacer muchos papeles: Controlador/Programador, Gestor de estados, M2M, etc.
Utilizando las utilidades que nos trae el Sistema Operativo Raspbian “wheezy” (Adaptación del S.O. Linux Debian para Raspi) podemos hacer muchas de las cosas que se nos ocurran.
Ahora bien, Raspbian, como cualquier sistema operativo multitarea, no es el mas indicado para hacer proyectos que requieran control certero en tiempo real de eventos. Para corregir este gap, podemos ayudarnos de terceros equipos como Arduino, que se integran perfectamente con Raspi y hacen un buen equipo.