Secuenciador aleatorio con Arduino


Arduino Uno es una placa de microcontrolador basada en el microcontrolador ATmega328P de la compañía Atmel (ahora adquirida por Microchip Technology). Fue lanzada en 2010 y se convirtió en una de las placas más populares en la plataforma Arduino.

La placa Arduino Uno es una plataforma de hardware de código abierto que permite a los usuarios crear proyectos electrónicos interactivos y controlar dispositivos electrónicos usando software y hardware personalizado.

La placa Arduino Uno incluye pines de entrada y salida digitales y analógicos que permiten a los usuarios conectar sensores, actuadores y otros componentes electrónicos para crear proyectos personalizados. La placa se puede programar utilizando el entorno de desarrollo integrado (IDE) de Arduino, que se puede descargar gratuitamente desde el sitio web de Arduino, pero actualmente ya existen otras herramientas de desarrollo.

Vamos a ver una simple aplicación de una placa Arduino Uno conectada una placa de relés, lo cual puede servir como secuenciador por ejemplo para maquetas , juegos de luces, medidas eléctricas, escaparates , escenarios , SIMULAR LA ACTIVIDAD EN UNA VIVIENDA cuando estamos fuera, y un largo etc.

El aspecto del conjunto es el siguiente:

Como vemos en la iamgen anterior, solo usaremos 5 salidas binarias correspondientes a los pines d2, d3, d4, d5 las cuales conectaremos directaemente a las entradas de la placa de relés ( no olvidar la masa ).

Las conexiones no pueden ser mas simples ,porque se conectan las salidas binarias de la placa Arduino pin a pin a la placa de relés sin olvidar la masa o GND.

No recomendamos para nada alimentar desde la propia placa Arduino la placa de relés, porque esta puede consumir según el modelo de placa de relés mas energia de la que puede aportar la salida de Arduino de 5v y además casi todas las placas de relés de cierta calidad se alimentan a 12V, por lo que se recomienda alimentar la placa de relés externamente.

Y ahora presentamos el código Arduino del ejemplo , donde también sacamos por consola los nombres de las cargas que vamos encendiendo y el tiempo de conexión total.

Por supuesto los nombre de los aplicativos a conectar se deberían cambiar con el nombre de los dispositivos eléctricos que conectemos

Es de interes destacar que calculamos cualquier combinación de 5 bits , la cual sacamos por los puertos binarios.

Además del combinación de salidas activadas que es aleatoria, también permanece en un estado de tiempo aleatorio entre 6000 y 100.000 ( la variable se llama tiempoEncendido) así como también hay una breve pausa de todo apagado entre 10.000 y 60000 ( la variable se llama tiempo_pausa), ambas por supuesto que debemos cambiar en función de la utilidad que se desee.

El resto de la funcionalidad del programa es sacar por consola el / o los electrodomésticos a encender , el tiempo que se va a encender y luego apagar así como el tiempo total de funcionamiento

El código completo de todo el programa es el siguiente, el cual se debería adaptar y personalizar a las necesidades de cada caso concreto:




int soldador = 2;
int luz_led = 3;
int luz_halogena = 4;
int ordenador = 5;
int ventilador = 6;

unsigned long tiempoEncendidoTotal = 0; // tiempo total que se va invirtiendo en milisegundos

void setup() {
  Serial.begin(115200);
  Serial.println("Iniciando ..");
 
  pinMode(soldador, OUTPUT);
  pinMode(luz_led, OUTPUT);
  pinMode(luz_halogena, OUTPUT);
  pinMode(ordenador, OUTPUT);
  pinMode(ventilador, OUTPUT);
  
  randomSeed(analogRead(A0));


  digitalWrite(soldador, HIGH); // apaga el soldador
    digitalWrite(luz_led, HIGH); // apaga la luz LED
 digitalWrite(luz_halogena, HIGH); // apaga la luz halógena
   digitalWrite(ordenador, HIGH); // apaga el ordenador
digitalWrite(ventilador, HIGH); // apaga el ventilador


 delay (1000);
}

void loop() {
  long tiempo_pausa = random(10000, 60000); // tiempo aleatorio entre 10 y 60 segundos en milisegundos
  int dispositivo = random(0, 33); // número aleatorio entre 0 y 32
  Serial.print("Numero generado: ");
  Serial.println(dispositivo);
  String binaryString = String(dispositivo, BIN);
     Serial.print("Cadena:");
      Serial.println(binaryString);
      
  

   

  if (dispositivo & (1 << 0)) { // verifica si el bit 0 está activado
    digitalWrite(soldador, LOW); // enciende el soldador
    Serial.println("Soldador encendido");
  } else {
    digitalWrite(soldador, HIGH); // apaga el soldador
  }

  if (dispositivo & (1 << 1)) { // verifica si el bit 1 está activado
    digitalWrite(luz_led, LOW); // enciende la luz LED
    Serial.println("Luz LED encendida");
  } else {
    digitalWrite(luz_led, HIGH); // apaga la luz LED
  }

  if (dispositivo & (1 << 2)) { // verifica si el bit 2 está activado
    digitalWrite(luz_halogena, LOW); // enciende la luz halógena
    Serial.println("Luz halógena encendida");
  } else {
    digitalWrite(luz_halogena, HIGH); // apaga la luz halógena
  }

  if (dispositivo & (1 << 3)) { // verifica si el bit 3 está activado
    digitalWrite(ordenador, LOW); // enciende el ordenador
        Serial.println("Ordenador encendido");
  } else {
    digitalWrite(ordenador, HIGH); // apaga el ordenador
  }

  if (dispositivo & (1 << 4)) { // verifica si el bit 4 está activado
    digitalWrite(ventilador, LOW); // enciende el ventilador
       Serial.println("Ventilador encendido");
  } else {
    digitalWrite(ventilador, HIGH); // apaga el ventilador
  }



 
long tiempoEncendido = random(6000, 300000); //genera un número aleatorio entre 1 minuto (60000ms) y 5 minutos (300000ms)
  
Serial.print("Tiempo encendido nuevo estado: ");
Serial.println(tiempoEncendido/1000);


 Serial.print(" Tiempo de pausa tras nuevo estado: ");
  Serial.print(tiempo_pausa/1000); // muestra el tiempo en segundos
  Serial.println(" segundos");

  tiempoEncendidoTotal += tiempoEncendido;
  unsigned long tiempoAcumulado = tiempoEncendidoTotal / 1000;
  unsigned int horas = tiempoAcumulado / 3600;
  unsigned int minutos = (tiempoAcumulado % 3600) / 60;
  unsigned int segundos = tiempoAcumulado % 60;

 

delay(tiempoEncendido); //espera el tiempo aleatorio generado


  

  
  digitalWrite(soldador, HIGH);
  digitalWrite(luz_led, HIGH);
  digitalWrite(luz_halogena, HIGH);
  digitalWrite(ordenador, HIGH);
  digitalWrite(ventilador, HIGH);

  




  delay(tiempo_pausa);
   Serial.print("Tiempo encendido total: ");
  Serial.print(horas);
  Serial.print(":");
  if (minutos < 10) {
    Serial.print("0");
  }
  Serial.print(minutos);
  Serial.print(":");
  if (segundos < 10) {
    Serial.print("0");
  }
  Serial.println(segundos);
}

Extracto

Este código, escrito en el IDE de Arduino , controla el estado de encendido/apagado de varios dispositivos (soldador, luz_led, luz_halogena, ordenador, ventilador) basándose en números binarios generados aleatoriamente. Los dispositivos están conectados a pines digitales específicos de la placa Arduino y se encienden/apagan cambiando la señal digital de estos pines de alta a baja (encendido) o de baja a alta (apagado).

El programa también realiza un seguimiento del tiempo total de encendido de todos los dispositivos en segundos y lo muestra en horas, minutos y segundos. El tiempo de encendido de cada dispositivo se genera aleatoriamente y varía entre 1 minuto (6000ms) y 5 minutos (300000ms), mientras que el tiempo de pausa entre los tiempos de encendido de cada dispositivo también se genera aleatoriamente entre 10 y 60 segundos.

El programa comienza inicializando todos los dispositivos en el estado de apagado, luego entra en un bucle infinito que genera un nuevo número binario y enciende/apaga los dispositivos en consecuencia, basándose en el estado de cada bit en el número binario. Después de cada período de encendido, todos los dispositivos se apagan y se inserta un tiempo de pausa antes de que comience el siguiente ciclo.

Llega la revolución de los porteros automáticos


No siempre estamos cerca para oir la señal de llamada procedente del clásico telefono analógico del intercomunicador de una instalación comunitaria de portero automático (!y mucho menos por supuesto si estamos fuera de casa!). Además quizás sepa que hay nuevos sistemas de videoporteros de nueva generación, pero si hablamos de una instalación comunitaria no siempre es fácil convencer a los vecinos para cambiar el clásico portero automático con soporte de audio por uno nuevo con video y llamada por wifi, pues eso conlleva cambiar la red troncal , la placa de la centralita y por supuesto sustituir los porterillos por los nuevos videoporteros.

Es cierto que existen soluciones para reenviar el audio o el timbre de un porterillo o un interfono (como hemos visto en este blog) , siendo básicamente la mas popular la que se compone de un altavoz que hay que cablear hasta donde deseemos o otra muy común compuesta de un transmisor/receptor de RF (que tampoco es muy eficiente), pero la solución que vamos a ver ( Ring Interfono) , que acaba de salir al mercado, realmente «está a otro nivel» porque permite una serie de facilidades nunca vistas, y eso sin tener que cambiar la instalación comunitaria:

  • Contestar al interfono estés donde esté: da igual quién llegue a su portal, un amigo o el paquete que esperaba pues con el Ring Intercom, estará en casa aunque esté lejos. Reciba notificaciones en tiempo real cuando llamen al interfono de su edificio, hable con la persona que esté al otro lado y dele acceso al edificio, todo desde su móvil ( además todas las funcionalidades del Ring Intercom están disponibles sin suscripción, así que no tendrá que pagar ningún coste adicional ni comprometerse a nada).
  • Añadir funcionalidades a su interfono: hable con las personas que se encuentren en la entrada de su edificio permitiendo abrirles el portal desde su teléfono usando la app de Ring.
  • Conceda acceso a personas de confianza: La funcionalidad de verificación automática de invitados le permite enviar llaves de invitado a través de la app de Ring a los amigos y familiares que elija para que ellos mismos se abran el portal de tu edificio usando sus propios móviles. El propietario siempre tendrá el control sobre quién tiene acceso al edificio y cuándo. Defina si la llave de invitado es válida solo ciertos días u horas o haga que funcione de manera ininterrumpida, gestione el horario de acceso de cada persona, o revoque un permiso de acceso que haya concedido: todo esto en cualquier momento desde la app de Ring.
  • Verificación automática para entregas de Amazon: en efecto puede dejar que Amazon se ocupe de comprobar quién le lleva los paquetes de Amazon a su edificio. Si activa la verificación automática para las entregas de Amazon, el personal de reparto verificará su identidad a través de la app de entrega de Amazon antes de que se le conceda acceso temporal al edificio. El acceso temporal les permitirá entrar al edificio y dejar los paquetes dentro (Amazon trabaja con varios transportistas para garantizar que recibes tus pedidos lo más rápido posible y sólo los artículos enviados por Amazon son compatibles con la verificación automática).

Antes de continuar, destacar nuevamente que esta solución es perfecta para complementar el porterillo tradicional conectado a una instalación comunitaria pero quizás no sea la mas optima por ejemplo si vive en una vivienda unifamiliar con una instalación de audio porque quizás le convenga cambiar la instalación completa por el ring «normal » ( Ring Video Doorbell de Amazon), dispositivo destinado a sustituir al pulsador de timbre exterior, pero que tiene todas las mismas características comentadas anteriormente del Ring Intercom añadiendo soporte de video, resaltando además de requerir una instalación muchísimo més sencilla pues simplemente hay que fijarlo a la pared) .

La instalación

Antes de nada vamos a ver como se realiza  la instalación usando como base un viejo interfono de la marca Fermax 6201 tipo kit   que se vende en Amazon con el modelo de teléfono 80447 (la página web de ring dice que está soportado y compatible  por este dispositivo ring). El interfono solo cuenta con un solo pulsador  de llamada y es típicamente usado en edificios de apartamentos con un panel de muchos vecinos con muchos timbres y compartidos. Otros telefonillo similar a 5 hilos son los  Fermax 3391,pero existen infinidad de modelos similares cuya principal característica es el soporte de los mínimos hilos (Transmisión, Recepción y Timbre).

Lo primero a tener en cuenta, antes de lanzarnos a instalar este nuevo dispositivo es buscar el modelo instalado en la web del Ring Intercom donde citan una lista de compatibilidad. Dentro de los porteros automáticos hay multitud de tecnologías y formas. Si tiene un portero analógico de varios hilos, casí seguro que podrá hacer todas las funciones. Esto es abrir y atender la llamada remotamente, que cuando este cerca y llame, se abra automáticamente, incluso silenciar el timbre y que solo le llegue la notificación al telefono (muy útil por la noche o en barrios con jaleo nocturno).Pero….si tienes uno digital, o mixto como el Tegui M72, probablemente, no pueda disfrutar de todas las funciones.


Básicamente el punto de «mayor complejidad » por tanto es conectar el Ring intercom al telefonillo existente , pero lo bueno es que SOLO hay que conectar el ring intercom al telefonillo que hay dentro de casa , no hay que hacer nada en la placa que esta en la calle.

Lo primero que tiene que hacer al recibir el producto es dejar cargando la bateria pues el equipo se alimentara de esta. Como vemos en la foto la bateria tiene un indicador con luz verde y naranja . Cuando se apaga la luz naranja y se queda la de color verde esta completamente cargada ( puede tardar  más de 5 horas según como venga la bateria de cargada).


Una vez introducida la batería, necesitara descargar la aplicación ring en el teléfono explicando que quiere añadir un dispositivo. En este punto necesitara configurar los credenciales de su red wifi mas cercana y seguir el proceso.
Una vez introducidas dichas credenciales nos pide que digamos que dispositivo o modelo de telefonillo tenemos instalado y con esto, la app nos dirá el mazo de cables que tenemos que elegir  de los tres disponibles.

Procederemos en este punto a desmontar la tapa del porterillo ( según el modelo solo llevara un tornillo ) para conectar un pequeño mazo de cable que incluye que servirá para interconectarlo con el ring . Obviamente destacar que estos nuevos cables del mazo se conectan en paralelo con los antiguos manteniendo por tanto el cableado original .

Como ejemplo veremos el fermax 80447 ( uno de los mas usados ) y que usa el mazo de cables tipo A,que suele ser el mas usado, así que en ese caso los otros dos mas que son el B y el C  ya no los utilizaremos (puede ser que incluso que le sobre algun otro cable ,  pero eso no importa pues se lo dice el guiado de la aplicación).

Una vez conectados los colores del cable de ring suministrado con los números de telefonillo, pasa a un test de funcionamiento y de verificación de que puede llamar al timbre , establecer comunicación verbal y finalmente abrir la puerta.


Tenga en cuenta que NO nos debemos , en ningún caso que guiarnos por unir colores iguales ( los del mazo con los existentes en la instalación) . Solo haga caso a los colores del mazo enviado por ring y los números a los que tiene que conectarse pues no tienen el porque coincidir con los colores que utilizó el instalador del interfono en su dia.
En el caso del modelo fermax solo hay 5 cables importantes que son:

  • 4 llamada
  • 6 altavoz
  • 3 tierra/masa/ground
  • 2 micrófono
  • 1 apertura

Estos hilos como vemos en la imagen ya están numerados como 1,2,3 ,4 y 6 en la placa

Como vemos en la imagen los cablezilllos del mazo se conectan en paralelo observando con mucho cuiado el sentido de cada hilo: altavoz, microfono , llamada y tierrra:

Asi es como queda la instalación , donde podemos apreciar como se superpone los cablecillos del interfono con los cablecillos del mazo ( ojo por cierto con le orden de los hilos del mazo qeu puede variar segun el modelo del porterillo)

En las imágenes podemos ver los colores y a los números que tienen que ir (por supuesto deje puestos los que había originalmente).

Una vez hecho esto , conectaremos el mazo al ring, le añadiremos la bateria y ya podemos fijarlo a la pared

!Terminado!

Hemos visto pues que solo hemos tenido que retirar la cubierta frontal del auricular, introducir la marca y seguir las instrucciones de la app de Ring para conectar su Ring Intercom a nuestro interfono existente, de modo que cuando esté conectado, simplemente fijamos el Ring Intercom a la pared y volvemos a colocar la cubierta frontal del auricular y ya solo seguir las indicaciones de la app de Ring para comprobar que todo funciona correctamente. ¡Y listo! Ya podemos disfrutar de todas las ventajas de Ring partiendo de su viejo interfono.

El resultado final , bajo el punto de vista del que suscribe estas líneas es espectacular pues como comentábamos al principio tiene muchas funcionalidades «extra» como la llamada y apertura remota asi como incluso el poder autorizar a el repartidor de Amazon para que abra automáticamente cuando nos vaya a dejar un paquete

La aplicación en resumen está muy bien diseñada y robusta pues convierte un equipo analógico antiguo en un moderno interfono IP remoto.