Front & Back

Blog sobre el Desarrollo de aplicaciones web

Laboratorio ¿Qué son los niveles lógicos? Conectando Arduino y Raspberry PI

Antes de empezar el “post” es conveniente tener clara la diferencia entre electrónica digital y analógica; llamamos electrónica digital a aquella basada en dos estados únicos (verdadero o falso) obtenidos a través de dos niveles de voltaje diferenciados que pueden variar en función del circuito. Estos niveles son tratados como 1 o 0, e interpretados por un circuito controlador que usando una estructura algebraica conocida como “lógica binaria” es capaz de realizar operaciones complejas.

La electrónica analógica por su parte no considera dos únicos niveles de tensión, éstos por el contrario son infinitos. Un ejemplo de aplicación de este tipo de circuitos podría ser un sensor de temperatura; un conductor que aumenta o disminuye su resistencia en función de la temperatura que se le aplique. El valor que obtendríamos como voltaje de salida podría constar de un número infinito de decimales. Nuestro circuito controlador (encargado de interpretar el dato) debería recoger el valor y aplicar un algoritmo para convertir los voltios en grados centígrados (por ejemplo).

¿Por qué es interesante conectar Arduino y Raspberry PI?

Arduino es capaz de realizar lecturas analógicas, mientras que el pin GPIO de Raspberry PI sólo se comunica con el exterior a través de señales digitales. Si hacemos coexistir los dos circuitos podríamos (por ejemplo) conectar el sensor de temperatura que describíamos en el párrafo anterior, y enviar su valor por el puerto serie o lanzar un 1 al GPIO si la temperatura alcanza cierto límite. Por su parte la Raspberry Pi nos proporciona una elevada capacidad de proceso y un entorno Linux para programar nuestras aplicaciones. Podríamos por ejemplo mostrar el dato del sensor en una aplicación web en tiempo real.

Los niveles lógicos

El asunto sin embargo no es tan sencillo como conectar un circuito con otro y listo. Para comprenderlo es conveniente explicar con un poco más de profundidad el concepto de “niveles lógicos”.

Dependiendo del tipo de circuito electrónico, el valor máximo de tensión que determina la escala a través de la que se obtendrá un 1 o un 0 (HIGH o LOW voltage) puede variar (1.5, 3.3, 5, etc.) Raspberry funciona con un nivel máximo de 3.3 mientras que Arduino trabaja con 5V. Ambos circuitos (como es habitual) usan lógica positiva; un 1 corresponde al nivel de tensión alta y un 0 a la baja. La escala para cada uno de los dispositivos sería la siguiente:


Niveles lógicos Arduino y Raspberry PI

Podemos ver en la imagen cómo para cada uno de los dos niveles existe una franja en la que el valor del voltaje se desprecia; no se considera ni un 1 ni un 0, de este modo se filtran posibles datos erróneos producidos por el fenómeno conocido como “histéresis” o posibles rebotes de tensión provenientes de dispositivos externos.

Conectando Arduino y Raspberry PI

Para traducir las señales que provienen de Arduino basadas en una escala de 5V a la escala de 3.3V que entiende la Raspberry (y viceversa) y de paso no cargárnosla, lo más sencillo es usar un conversor de niveles lógicos. Yo estoy usando uno de Sparkfun; os dejo el enlace por si lo queréis comprar.

Como veis en la imagen los niveles se regulan de forma bidireccional:

Conversor de niveles lógicos Arduino y Raspberry PI

A la hora de realizar las conexiones conectaríamos “LV” a uno de los pines de 3.3V de salida del GPIO de la Raspberry y su correspondiente GND a uno de los pines de tierra. “HV” lo conectaríamos a una de las salidas de 5V de Arduino y su GND a tierra. Ahora podríamos conectar (por ejemplo) el GPIO02 de Raspberry con TXI y el pin digital 1 de Arduino con TX0. De este modo ya habríamos comunicado ambos dispositivos.

Conversor de niveles lógicos Arduino y Raspberry PI cableado

Como veis en la imagen, yo he optado por soldar los cables de prototipado a la placa. Siguiendo una correspondencia de colores me resulta muy útil para realizar cambios rápidos durante el desarrollo y reutilizar el conversor en la “breadboard”.