Redemption (parte 2ª) Arduino CH-924 LCD

En el post anterior, se planteaba la intención de realizar una capilla portátil con la que ironizar sobre algo tan matemático y a la vez tan difuso como el dinero, su valor y lo que puede llegar a implicar. Después de haber realizado los proyectos de pintura y software de realidad aumentada Pintura Aumentada y Never Gone Forever, Redemption pretende abrir la puerta a un nuevo formato en mi imaginario personal, en este caso la robótica, usando Arduino, un aceptador de monedas CH-924, una pantalla LCD y una tira de LEDs.

Arte y robótica, Juanma Moreno Sánchez

El ser capaz de combinar arte con software, y ahora también con hardware (chips, circuitos, sensores, etc..) abre un mundo de posibilidades.

Tras realizar algunos bocetos sobre un cuaderno y comprobar la viabilidad técnica de la componente robótica, me puse a darle forma al boceto. La idea incluía, sobre el papel, hardware, software y también ebanistería y pintura, para de esta forma no solo experimentar con la tecnología sino también conseguir una obra de arte y robótica estética y expresiva, no limitándose la componente plástica a ser una carcasa o un recubrimiento.

Arte y robótica, Juanma Moreno Sánchez

El altar de mi abuela

El origen de todo esto está en un recuerdo de la infancia que últimamente se ha convertido en recurrente: una capilla portátil sobre el mueble del salón de la casa de mi abuela. Una imagen de una virgen que se iban pasando las vecinas de casa en casa.

La capilla portátil tenía una ranura para introducir limosnas, con lo que conforme la imagen iba pasando de casa en casa, ésta se iba llenando de monedas.

Si bien son difíciles de encontrar, hoy en día siguen existiendo las capillas portátiles, en incluso se venden en portales de segunda mano.

La capilla portátil automatizada que yo estoy construyendo contiene una pintura en su interior, que solo es visible mediante un juego de cristales. La robótica nos permite construir un sistema en el que, al introducir una moneda, active una iluminación interna durante unos segundos. Al haber más luz en el interior que en el exterior, el cristal se hace transparente y la pintura se hace visible.

Arduino y pantalla LCD

Si hay dinero, hay luz, hay redención, hay esperanza. Si no hay dinero, la búsqueda de consuelo solo te devuelve tu imagen reflejada, como un espejo.

Un espejo es lo contrario a una pintura. Una pintura invita a adentrarse en lo invisible, mientras que un espejo se limita a reflejar la superficie cruda de las cosas.

La realidad

Tras realizar algunos bocetos, y empezar a ocuparme de las diferentes partes de la obra descubro que, desgraciadamente, encargar un trabajo de ebanistería como el que tengo en mente cuesta demasiado dinero. Mientras que encuentro la forma de sortear este obstáculo, decido fabricar un prototipo. Una versión low-cost con la que pretendo aprender y sacar conclusiones, de cara a una materialización futura del altar definitivo.

Arte y robótica, Juanma Moreno Sánchez

Este prototipo en el que estoy trabajando está montado sobre una caja de cartón reciclada. Unas pocas bridas y unos tornillos sujetan los componentes a la carcasa de cartón.

Arduino, aceptador de monedas CH-924 y pantalla LCD.

Este es el código programado para ejecutarse en la placa Arduino UNO. El software escucha la señal que viene del aceptador de monedas. Dicho aceptador (CH-924) es capaz de reconocer 4 tipos de monedas diferentes, funciona con 12V y se puede programar de forma autónoma. En función de la señal que el aceptador envíe a la placa, ésta activará uno u otro comportamiento. Al pasar la moneda, el mensaje de la pantalla LCD cambia, se apaga el LED que hay en el aceptador y se encienden las luces dentro de la caja. Un cristal con un alto índice de reflexión de la luz hace el juego de mostrar y ocultar el contenido.


#include LiquidCrystal lcd(12, 11, 5, 4, 3, 7);
volatile boolean newCoin = false;
volatile int pulseCount;
volatile int timeOut = 0;

void setup() {
lcd.begin(16, 2);
defaultMessage();
attachInterrupt(0, coinInserted, RISING);
pinMode(8, OUTPUT);
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
}

void loop() {
if (newCoin == true){
if(pulseCount == 4 || timeOut>25){ //asegura que dé tiempo a contar la señal del aceptador
coinSwitch();
}
timeOut++;
delay(25); //con delay al 20, al 25 y al 10 hace señales raras de vez en cuando
}
}

void coinInserted(){
newCoin = true;
pulseCount++;
timeOut = 0;
}

void defaultMessage(){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(“Insert coin”);
lcd.setCursor(0,1);
lcd.print(“20 cents minimum”);
}

void coinSwitch(){
newCoin = false;
digitalWrite(8, HIGH);
digitalWrite(13, LOW);
lcd.clear();
lcd.setCursor(0, 0);
switch (pulseCount) {
case 1:
lcd.print(“20 cents worth”);
lcd.setCursor(0, 1);
lcd.print(“of salvation”);
pulseCount = 0;
delay(2000);
defaultMessage();
digitalWrite(13, HIGH);
digitalWrite(8, LOW);
break;
case 2:
lcd.print(“50 cents worth”);
lcd.setCursor(0, 1);
lcd.print(“of salvation”);
pulseCount = 0;
delay(5000);
defaultMessage();
digitalWrite(13, HIGH);
digitalWrite(8, LOW);
break;
case 3:
lcd.print(“1 euro worth”);
lcd.setCursor(0, 1);
lcd.print(“of salvation”);
pulseCount = 0;
delay(10000);
defaultMessage();
digitalWrite(13, HIGH);
digitalWrite(8, LOW);
break;
case 4:
lcd.print(“2 euros worth”);
lcd.setCursor(0, 1);
lcd.print(“of salvation”);
pulseCount = 0;
delay(20000);
defaultMessage();
digitalWrite(13, HIGH);
digitalWrite(8, LOW);
break;
}
}