Extintor Automático Controlado por Arduino

Este conjunto localiza un foco de luz con un solo LDR, orienta el soporte Pan-Tilt hacia el punto de luz y pone en marcha una pequeña bomba de agua que apaga la llama.

Extintor Arduino

Componentes:

Esquema Extintor Arduino

Compra los Materiales Necesarios en un Kit:




Montaje:

La estructura para servos trae su propio manual de instrucciones. La única complicación que tiene es el atornillar las piezas de plástico. Hay que hacerlo despacio para no romper el material. Para la tuerca que aparece en la ilustración nº 4 como “M3 Nylon nut” viene bien ayudarse de un alicate de puntas.

Estructura Servos Extintor Arduino

En nuestro caso, hemos intentado que ninguna posición del servo superior, haga que choquen las dos partes de la estructura. Para ello, antes de montar los servos, conviene colocar los servos en una posición conocida. Para este sencillo código asegura que la posición inicial del servo superior va a ser 0º y la del inferior 90º. Así podemos montar la parte superior de la estructura en la posición más baja (sin que llegue a tocar con la parte inferior.

Una vez que tenemos montada la estructura para los servos, vamos a montar el LDR. En nuestro caso hemos utilizado una pequeña pieza de poliespan de un largo 2 ó 3 mm superior que la cara interior de la estructura para que quede bien encajado.

En el centro, hemos clavado el LDR y lo hemos conectado por el otro lado con dos pines de conexión macho-hembra. Recuerda doblar bien las patillas del LDR para que quede bien fijado a la pieza de poliespan y no se desvíe.

Para el tubo que viene de la bomba, lo hemos insertado en una de las ranuras que tiene la estructura. Para ello, primero hay que aplastar un poco el extremo del tubo y cortarle una esquina para facilitar su inserción en la ranura. De nuevo el alicate de puntas facilita mucho este paso.

Una vez que ha entrado el tubo en la ranura, lo cortamos en una sección perpendicular a la dirección del tubo para que cuando salga el agua, lo haga en la dirección longitudinal del tubo y no en otra.

Ya tenemos todo montado. Solo falta introducir la bomba en un recipiente con agua asegurándonos de que la parte inferior de la misma queda sumergida en todo momento para que no funcione nunca en vacio.


Cableado:

En vez de una bomba aparece el motor porque, eléctricamente, lo que hay conectado al circuito es un motor de CC. El hecho de utilizar un relé se debe a que el Arduino UNO tiene una salida de 5v que no sería capaz de accionar la bomba. Por eso tenemos que utilizar una fuente de alimentación externa. Pero como no puede estar continuamente funcionando, es el programa el que decide cuándo se tiene que poner en marcha. Para esta función usamos un relé de 5v. La bobina del relé la alimentamos con una salida digital del Arduino y por los contactos hacemos pasar la corriente de la pila. De esta forma, cuando se activa la salida correspondiente del Arduino, el relé cierra el circuito de alimentación de la bomba poniéndola en marcha. Para proteger al Arduino del comportamiento eléctrico de la bobina del relé, utilizamos un transistor como se indica en el esquema.

Para la conexión de la bomba hay muchas opciones, en nuestro caso hemos optado por utilizar una regleta de conexiones, por un extremo los pines de la placa y por el otro los cables de alimentación de la bomba.
También puedes cortar los filamentos sobrantes de los extremos del cable hasta que puedas conectar la bomba directamente en la placa.

Para conectar el LDR se pueden soldar los pines de conexión a cada extremo del LDR una vez insertado en la pieza de poliespan. El relé puede ir conectado directamente en la placa, solo hay que tener cuidado de no doblar los terminales y de que estos queden correctamente conectados en los puntos que figuran en el esquema.


Programa:


//EXTINTOR CONTROLADO POR ARDUINO

  #include "Servo.h"         //INCLUIMOS LA BIBLIOTECA PARA SERVOS

  int posicion[18],luz[18];  //DECLARAMOS DOS VECTORES DE 18 COMPONENTES, DONDE GUARDAREMOS LOS 
                             //VALORES MEDIDOS
  int i,v,maxluz,maxpos;
  
  Servo servoA;              //DECLARAMOS DOS VARIABLES DE TIPO SERVO
  Servo servoB;
  
  void setup()
  {
  Serial.begin(9600);
  
  servoA.attach(5);          //CON LA FUNICION ATTACH DECIMOS DÓNDE ESTAMOS CONECTANDO
                             //CADA SERVO

  servoB.attach(6);
  
  pinMode(12,OUTPUT);        //DEFINIMOS EL PIN 12 COMO PIN DE SALIDA. SERÁ EL QUE ALIMENTE LA 
                             //BOBINA DEL RELÉ
  
  for(i=0; i< 18; i++)         //INICIALIZACIÓN DE VECTORES. LOS PONEMOS A CERO
  {posicion[i] = 0;luz[i] = 0;}
  }
  void loop()
  {
    i=0;v=0;maxpos=0;maxluz=0;
    servoB.write(140);        //COLOCAMOS EL SERVO SUPERIOR EN UNA POSICIÓN MEDIA
    delay(500);
  for (v=0;v<180;v=v+10)      //BARRIDO HORIZONTAL
  {
  servoA.write(v);            //EL SERVO INFERIOR VA GIRANDO DE 10 EN 10 GRADOS
  delay(1000);              
  posicion[i]=v;              //ALMACENAMOS CADA POSICIÓN EN LA QUE PARA Y EL VALOR RECIBIDO
                              //POR EL LDR
  luz[i]=analogRead(A2);
  i=i+1;
  }
  v=0;
  for (v=0;v<18;v++)          //IMPRIMIMOS POR EL PUERTO SERIE LOS VALORES DE LAS POSICIONES Y
                              //LOS VALORES DE INTENSIDAD DE LUZ
  {Serial.print(posicion[v]);
  Serial.print(" ");
  Serial.println(luz[v]);}
  i=0;v=0;maxluz=0;
  
  for (v=0;v<18;v++)          //VAMOS COMPROBANDO LAS MEDICIONES Y LA QUE SEA MAYOR, QUEDARÁ 
                              //ALMACENADA EN maxluz
{maxluz=max(maxluz,luz[v]);}
  for(i=0;i<18;i++)
  {if (maxluz==luz[i])        //LA POSICIÓN CORRESPONDIENTE AL PUNTO DE MAYOR INTENSIDAD
                              //DE LUZ QUEDARÁ ALMACENADA EN maxpos
  {maxpos=posicion[i];}}
    
  i=0;v=0;
  Serial.println(maxpos);      //IMPRIME EN EL PUERTO SERIE EL VALOR DE LA POSICIÓN
                               //CORRESPONDIENTE AL MAYOR NIVEL DE LUZ
  servoA.write(maxpos+5);      //GIRA EL SERVO INFERIOR HASTA ESE PUNTO CON LA CORRECCIÓN QUE
                               //SEA NECESARIA (+5)
  delay(2000);
    
  servoB.write(90);            //GIRAMOS EL SERVO SUPERIOR HASTA LA POSICIÓN MÁS ALTA
  delay(1000); 
  
  for (v=0;v<100;v=v+10)       //BARRIDO VERTICAL
  {
  servoB.write(v+90);          //ESTA VEZ, HACEMOS 10 MEDICIONES EN 10 POSICIONES
  posicion[i]=v+90;
  delay(1000);
  luz[i]=analogRead(A2);
  i=i+1;
  }
   v=0;
  for (v=0;v<10;v++)          //DE NUEVO IMPRIMIMOS EN EL PUERTO SERIE POSICIÓN Y NIVEL DE LUZ
  {Serial.print(posicion[v]);
  Serial.print(" ");
  Serial.println(luz[v]);}
  i=0;v=0;maxluz=0;
  
  for (v=0;v<10;v++)          //IGUAL QUE ANTES, EL MÁXIMO MEDIDO QUEDARÁ EN maxluz
  {maxluz=max(maxluz,luz[v]);}
  for(i=0;i<10;i++)           //Y LA POSICIÓN CORRESPONDIENTE A ESE MÁXIMO EN maxpos
  {if (maxluz==luz[i])
  {maxpos=posicion[i];}}
  i=0;v=0;
  Serial.println(maxpos);      //IMPRIMIMOS LA POSICIÓN CORRESPONDIENTE AL MÁXIMO
  servoB.write(maxpos-5);      //COLOCAMOS EL SERVO SUPERIOR EN POSICIÓN CON SU
                               //CORRECCIÓN CORRESPONDIENTE
  delay(2000);
  digitalWrite(12,HIGH);       //UNA VEZ EN POSICIÓN, EL PIN 12 ACTIVA LA BOBINA DEL RELÉ
  delay(2000);                 //BOMBEAMOS AGUA DURANTE 2 SEGUNDOS
  digitalWrite(12,LOW);        //APAGAMOS LA BOMBA  
  delay(10000);                //ESPERAMOS 10 SEGUNDOS HASTA LA SIGUIENTE OPERACIÓN
  }
Categorias
Fabricantes
Productos Recomendados

Electan utiliza cookies propias y de terceros para facilitar la tramitación de pedidos, recopilar estadísticas para optimizar la funcionalidad del sitio y ofrecerte contenido personalizado.

Aceptar y Cerrar

Más información aquí