Estamos acostumbrados a trabajar en digital es decir, todo son unos y ceros que transmitimos por redes o por circuitos para que hagan algo concreto: encender una luz, obtener temperatura, mostrar información y una infinidad de cosas más.
Son los fundamentos de los sistemas digitales.
Sin embargo, hay todavía dispositivos que resisten en el mundo analógico. Solo pueden ser activados con algún mecanismo. Normalmente lo accionamos con un dedo o con la mano.
Un ejemplo, una persiana o cortina sin motorizar. ¿Hay algo más analógico que esto?
En este sentido he visto proyectos muy curiosos con un alto contenido mecánico.
Hoy quiero hablarte de cómo hacer un interruptor mecánico para encender un servidor. Utiliza un solenoide para apretar el botón de encendido y está controlado a distancia por un control remoto por bluetooth.
Además hablaré de la proliferación de los entornos de desarrollo online como Visual Studio o el propio IDE de Arduino.
Por último quiero hablarte de CircuitPython y la última moda de programar microcontroladores con el lenguaje Python.
Ponte cómodo que vamos a empezar con el nuevo capítulo del podcast La Tecnología para Todos, el auténtico podcast que acerca la tecnología de una forma diferente para que todo el mundo lo entienda.

Indice de contenidos
Interruptor mecánico controlado en remoto
Estoy seguro que por casa tienes algún ordenador o aparato eléctrico que cuando se va la luz, tienes que encenderlo manualmente.
Lo típico es un servidor, un NAS o la propia Raspberry Pi. En estos casos puedes hacer dos cosas.
La primera sería encenderlo con la mano, como los cromañones.
La segunda es crear un dispositivo con hardware y software libre que nos permita encenderlo, apagarlo y controlarlo de forma remota.
¿Tú qué eliges?
Si has elegido la segunda opción puedes seguir leyendo este proyecto donde te explicaré cómo puedes hacerlo.
Está basado en un proyecto publicado en Adafruit. En este proyecto se utilizan dos placas Feather nRF52840 con conexión BLE (Bluetooth Low Energy) para fabricar un control remoto y un periférico.
La idea es que el control remoto permita monitorizar y controlar el encendido y apagado del servidor de forma remota.
En el proyecto no se utiliza C/C++ para programar las placas. Se utiliza CircuitPython, un lenguaje basado en Python para programar microcontroladores y del que hablaré más adelante.
El proyecto se divide en varias fases que vamos a ver a continuación.
Sensor para detectar la luz
Esta fase del proyecto se encarga de detectar si el dispositivo está encendido o apagado. Esto se puede hacer de varias formas.
Por ejemplo, puedes utilizar una pinza amperimétrica como la SCT-013 para comprobar si está consumiendo energía o no. O puedes medir el voltaje en la PCB del propio dispositivo.
Esta última opción puede que no sea muy interesante si todavía está en garantía.
La forma que nos propone Adafruit es detectando la luz de encendido que suelen tener muchos dispositivos.

Este típico piloto puede ser de muchos colores.
Algo que había oído pero que no terminaba de creer es que los LEDs a parte de ser excelentes para emitir luz, también pueden servir para detectar luz.
Pero esto no es solo exclusivo de los LEDs. Muchos dispositivos electrónicos pueden invertirse.
Por ejemplo, un motor eléctrico puede moverse al ser alimentado por electricidad o puede producir electricidad cuando se mueve.
Y un altavoz puede ser utilizado para emitir sonidos o para captar sonidos como si fuera un micrófono.
Vamos, que muchos dispositivos tienen esta particularidad.
Por lo tanto los LEDs pueden emitir luz o detectar la luz.
Pero no es sencillo hacer esta operación ya que para que se detecte con una buena precisión se requiere que el LED tenga una longitud de onda muy superior a la longitud de onda que se quiere detectar.
La luz se comporta como una onda y por lo tanto tiene longitud de onda, periodo y frecuencia. La longitud de onda es la distancia que recorre una onda periódica en un ciclo. Para que te hagas una idea, el espectro visible de la luz empieza entorno a la longitud de onda de los 400 nm es decir, cada ciclo avanza ese pequeño espacio.
Si nos fijamos en el espectro visible vemos que el azul está más o menos por los 450 nm, el verde entorno a los 525 nm y el rojo entorno a los 650 nm.

Por lo tanto, para detectar un LED verde (525 nm) se podría utilizar un LED amarillo (600 nm). Para detectar un LED azul se podría utilizar un LED verde.
Pero esto implica una cosa y es que se debe conocer la longitud de onda del LED emisor.
Adafruit propone utilizar una rejilla de difracción para conocer la longitud de onda del LED indicador. Lo veo algo complejo porque además hay que hacer ciertos cálculos para conocer exactamente dicha medida.
Pienso que una buena solución sería detectar la luz con una fotorresistencia o LDR. Si se consigue aislar la contaminación luminosa que pueda haber alrededor, sería un buen sistema.
Aún así, sería diferente en cada caso. Si no te convence ninguna de estas soluciones quizás la más práctica sea utilizar una pinza amperimétrica como la SCT-013.
Resuelto este tema pasamos a la siguiente fase donde hay que apretar físicamente un interruptor a través de la electrónica.
Interruptor con solenoide
La solución para apretar físicamente el botón de encendido y apagado es utilizar un mini solenoide lineal de 5V y 1,1A.
El funcionamiento de un solenoide es muy parecido a como funcionan los relés. Consiste básicamente en una bobina eléctrica enrollada alrededor de un tubo cilíndrico con un actuador ferromagnético o émbolo que es libre de moverse o deslizarse.

Tienes que imaginarte el típico pestillo de una puerta o cerrojo FAC. El solenoide lineal es parecido pero con un muelle y se encuentra dentro de una bobina.
La idea es que al aplicar una corriente a la bobina el émbolo se esconda y cuando se deje de aplicar salga.
Hay diferentes tipos de solenoides que funcionan a diferentes voltajes y corrientes. El de Adafruit funciona a 5V y 1,1A.
Con el voltaje no tendremos problema ahora con la corriente, no vas a encontrar ninguna placa que suministre esos amperios. La solución propuesta en el tutorial es utilizar un transistor MOSFET.
Un transistor puede ser utilizado como un interruptor es decir, cuando se aplica un voltaje en la puerta la corriente fluye entre el drenaje y la fuente.
Cuando se deja de suministrar ese voltaje en la puerta no permite el paso de corriente. Esto nos servirá para controlar cuando queremos activar o desactivar el solenoide conectando el MOSFET a una fuente que suministre los 1,1A que necesita.
El elegido es el modelo IRLB8721 ya que su puerta puede ser activada con voltajes de 3,3V, compatible con la placa Feather nRF52840.

En el circuito además se añade un diodo 1N4004 para amortiguar el voltaje de retorno que se puede producir en el solenoide cuando se corta la energía. Este diodo se debe situar el cátodo en el positivo del solenoide y el ánodo en el negativo lo más cercano a este.
La última parte es crear una PCB a partir del esquema eléctrico y hacer una carcasa con una impresora 3D para acoplar el circuito y el solenoide al dispositivo o servidor.

Esto ya dependerá del uso que queramos dar a nuestro proyecto.
Control remoto
Por último el control remoto utiliza una placa igual que la otra parte, Feather nRF52840 con conexión BLE para poder conectarse y así poder controlar y monitorizar el estado del servidor.
El control remoto funciona con baterías y va metido dentro de una carcasa. A parte, la placa Feather incorpora un NeoPixel que nos indicará el estado del dispositivo o servidor.
Y con esto tenemos todo lo necesario para poder controlar un encendido mecánico a través de un control remoto.
Mejoras y modificaciones
Viendo el proyecto en global está muy bien planteado sin embargo, yo haría unas cuantas mejoras y modificaciones:
- Utilizar un ESP8266 para poder conectar todo a Internet y poder controlarlo desde una app.
- Cambiaría la detección de la luz con un LED y probaría a utilizar una fotorresistencia o un sensor de color.
- Crear una app con Blynk para controlar el solenoide y el estado del dispositivo o servidor y así no tener que hacer un control remoto.
Si tienes alguna mejora que proponer puedes dejar tus comentarios en la parte de abajo de este artículo.
Entornos de desarrollo online
No cabe duda que la vida es un ciclo. Nacemos, crecemos, trabajamos como locos, nos reproducimos y algún día (espero que sea tarde) doblamos la servilleta.
Se trata de un ciclo vital que se repite una y otra vez.
Algo parecido está ocurriendo con los ordenadores.
Al principio los terminales eran tontos. Simplemente eran un teclado y una pantalla que se conectaban a un servidor que se encargaba de todo el proceso.
Luego, con la aparición de los ordenadores personales, la cosa cambió. Los ordenadores empezaron a ser independientes.
Podías tener un ordenador en casa sin tener que reservar una habitación para el servidor.
Con la llegada de Internet se está volviendo a cerrar el cículo. Cada vez hay menos software que se tiene que instalar en las máquinas y más que funciona online.
Un ejemplo claro es el Office. Un conjunto de programas destinados a la administración que actualmente solo está disponible de forma online, Office 365.
Lo mismo está sucediendo con los entornos de desarrollo. Ya podemos encontrar varios que dan servicio a través de Internet.
Visual Studio Online

Visual Studio, el famoso entorno de de desarrollo de Microsoft, ya está disponible en versión online. De momento lo puedes probar de forma gratuita ya que es una versión preliminar pública.
Necesitas tener una cuenta de Microsoft que, probablemente, si estás utilizando Windows ya tengas una dada de alta. A parte tendrás que crear una cuenta de Azure.
Tendremos que comprobar si el plugin Visual Micro para programar Arduino y ESP8266 también estará disponible de forma online.
Arduino Web Editor

El ya más que conocido (y poco utilizado) Arduino Web Editor ha empezado a soportar desarrollos con placas de terceros como el ESP8266.
Hasta ahora, este editor web estaba totalmente destinado a placas de la marca.
Sin embargo, según un comunicado del 29 de Octubre, con el último lanzamiento de Arduino IoT Cloud (versión 0.8.0) ha incorporado muchos cambios.
Entre ellos está el soporte a placas basadas en el ESP8266, NodeMCU, ESP Thing, ESPDuino y Wemos de Sparkfun.
Sin embargo esto no está accesible para todo el mundo ya que no entra dentro del plan gratuito. Para poder programar este tipo de placas tendrás que hacer un desembolso de unos 6€ mensuales en el plan anual.
Particle Web IDE

La verdad es que las placas de Particle son totalmente desconocidas para mi. Sin embargo, he oído hablar muy bien de ellas.
Una de las personas que las recomienda y que me ha dado a conocer el Web IDE para programarlas es @Arnuati de El Taller Diminuto.
En una conversación de Twitter recomendó este IDE. El único inconveniente es que necesitas tener una placa de la marca para poder utilizarlo.
CircuitPython
Como recurso de esta semana quiero hablar de CircuitPython. Se trata de un lenguaje de programación basado en Python para microcontroladores.

La gran ventaja es que no se requiere de ningún entorno de desarrollo o software para programar en CircuitPython. Con cualquier editor de textos es suficiente.
Hay un montón de placas compatibles con CircuitPython pero no todas las placas soportan este lenguaje. Por ejemplo, Adafruit decidió que a partir de la versión 4.0 ya no sería compatible con ESP8266 y ESP32.
Esto es debido a incompatibilidades del hardware como el USB y la memoria RAM.
Sin embargo, sí que se puede utilizar como coprocesador es decir, utiliza cualquier placa basada en ESP8266 y ESP32 como si fuera un periférico para conectarse a Internet a través de la WiFi.
Tampoco se soporta Arduino UNO o Arduino MEGA.
Para poder trabajar con CircuitPython primero hay que instalarlo en la placa. Se puede hacer a través de un archivo binario con la herramienta BOSSA tool o a través de un archivo con extensión uf2 (USB flasher version 2).
Una vez instalado, cargar un código con CircuitPython es tan sencillo como conectar la placa a tu ordenador y arrastrar el archivo de código a la unidad que ha detectado.
Sin duda alguna se trata de un lenguaje muy potente a la vez que sencillo debido a que proviene de Python.
Otra alternativa a CircuitPython es MicroPython de la cual hablaré en otro programa.
Cualquier duda o sugerencia lo puedes dejar en los comentarios de aquí abajo.
Gracias a Shutterstock por ceder los derechos de esta imagen.