Mostrando entradas con la etiqueta control. Mostrar todas las entradas
Mostrando entradas con la etiqueta control. Mostrar todas las entradas

23 jun 2016

Cacharros en mi container: ¡Experimentando con Arduino y la Domótica!


De mis experimentos con Arduino algunos artículos de este blog han ido recogiendo aquello que -por curioso o fascinante- fui aprendiendo con la experiencia. Decidí en algún momento dar un paso atrás, dejar de investigar acerca del código concreto que es necesario para correr la máquina, en el como y con que para contemplar el cuadro con otra perspectiva. Y para ello empleé Libre Draw de la suite de LibreOffice, un "must" del software Libre, si es que tal cosa existe en realidad. Y esto es lo que dibujé:

Cuadrados y círculos de muchos colores, con lineas que los unen... fascinante ¿no es así? ...Tantos estudios para esto...
A medio camino entre lo que tengo y lo que quiero, este diagrama intenta hacer comprensible las posibilidades y rendimientos, así como el potencial que encierra una herramienta como Arduino (tengo tres plaquitas ahora operativas para los experimentos), una Raspberry pi por emplear, un puñado de sensores, relés, luces, sonidos, pantallas y teclados y un largo etcétera de posibilidades para cacharrear. Una pasada.

dos unidades de arduino, unos cuantos relés, conexiones, un sensor de luz junto a la pantalla LCD, un sensor de humedad y temperatura en la parte superior...


¡Ah claro se me olvidaba!, también hace falta un par de versos de idioma máquina para hacerlo funcionar junto. Algo del código esta por ahí en articulos anteriores pero prometo publicar lo que creo que esta ahora corriendo en los artefactos solo para el Marca. ¡¡El "marcachonedo" después!!

La pantalla LCD, el sensor de luminosidad y un interruptor para apagar la luz que se activa con el sensor de ultrasonidos
actualizado: Pongo el código que creo esta corriendo en los cacharros, aunque no garantizo que sea la misma versión. En cualquier caso, con fines didácticos, muestra en gran medida el objetivo de mi experimento personal:

Esta placa de arduino tiene un shield ethernet pero no me atrevo a conectarlo a la red... ¡hay que ser un valiente para hacer eso!
ARDUCAN 001:
//     _____                
//    /    /____
//   /    /    /____
//  /____/    /    /____
//  |   /____/    /    /|
//  |___|   /____/    / |
//      |___|   /____/  /
//          |___|    | /
//              |____|/

//___________________________
//habiController is habitat automation code for Arduino.
//any questions or comments are welcome.
//contact habitainer@gmail.com

int HALLPin = 5;
int waterSensor = 10;
int LEDPin = 12;
int FotoRpin = A0;
int lightLevel;
int Relay = 4;
int pumpRelay = 11;
int sendSound = 6;
int getSound = 7;
int lightRelay = 3;
long distancia;
long tiempo;

//___________________________

void setup() {
  pinMode(LEDPin, OUTPUT);
  pinMode(HALLPin, INPUT);
  pinMode(Relay, OUTPUT);
  pinMode(waterSensor, INPUT);
  pinMode(pumpRelay,OUTPUT);
  pinMode(sendSound, OUTPUT);
  pinMode(getSound, INPUT);
  pinMode(lightRelay, OUTPUT);
  Serial.begin(9600);
}

//___________________________

void loop() {

//...........................  


lightLevel=analogRead(FotoRpin);


{
  if (lightLevel > 560)
  {
    digitalWrite(Relay,HIGH);
    Serial.println("room light on");
  }
 
if (lightLevel <= 560)
  {
    digitalWrite(Relay,LOW);
    Serial.println("room light off");
  }
 
//...........................

  if(digitalRead(HALLPin)==HIGH)
  {
    digitalWrite(LEDPin, HIGH);   
    Serial.println("open door");
  }
  else
  {
    digitalWrite(LEDPin, LOW);
    Serial.println("closed door");
  }
 
//...........................   


   if(digitalRead(waterSensor)==LOW)
  {
    digitalWrite(pumpRelay, LOW),
    Serial.println("pump on");
    delay(6846);   
  }
  else
  {
    digitalWrite(pumpRelay, HIGH);
    Serial.println("pump off");
  }
 
 
//...........................


  digitalWrite(sendSound, LOW);
  delayMicroseconds(3);
  digitalWrite(sendSound, HIGH);
  delayMicroseconds(10);
  tiempo=pulseIn(getSound, HIGH);
  distancia= int(0.017*tiempo);
 
  Serial.print("Distancia ");
  Serial.print(distancia);
  Serial.println(" cms");
 
 
  if(distancia <50 span="">
  {digitalWrite(lightRelay, LOW);
  Serial.println("mehane lights on");
  }
 
  if(distancia >=50)
  {digitalWrite(lightRelay, HIGH);
  Serial.println("mekhane lights off");
  }
 
//...........................
Serial.println("________________________");
  delay(2468);
}
}


 
//......................................................................
// Luis Rodriguez Alonso. October 2015. habitainer@gmail.com
// http://habican.blogspot.com.es/
// publicado bajo GNU GENERAL PUBLIC LICENSE
// https://gnu.org/licenses/gpl-3.0.en.html 



 ARDUCAN 002:



//     ____                 //
//    /    /___             //
//   /    /    /___         //
//  /____/    /    /____    //
//  |   /____/    /    /|   //
//  |___|   /____/    / |   //
//      |___|   /____/  /   //
//          |___|    | /    //
//              |____|/     //
#include
#include
#include
#include
#define DHTPIN 9
#define DHTTYPE DHT11
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

int DS18S20_Pin = 12;
int sensorPin1 = A0;
int sensorPin2 = A1;
int Relay = 8;
int photoRPin = A3;
int lightLevel;
int LEDpin = 13;
int alarm = 7;

OneWire ds(DS18S20_Pin);
DHT dht(DHTPIN, DHTTYPE);

void setup(void) {
   
 Serial.begin(9600);

 pinMode(alarm,OUTPUT);

 dht.begin();
 lcd.begin(16,2);

 pinMode(Relay, OUTPUT);
 digitalWrite(7, LOW);
  delay(220);
  digitalWrite(7,HIGH);
  delay(880);
  digitalWrite(7,LOW);
  delay(160);
  digitalWrite(7,HIGH);
  delay(620);
 for(int i = 0; i< 3; i++)
  {
    lcd.backlight();
    delay(250);
    lcd.noBacklight();
    delay(250);
  }
  lcd.backlight();  
 
  lcd.setCursor(0,0);
  lcd.print("Habican-Habitainer");
  delay(260);

  lcd.setCursor(0,1);
  lcd.print("smart container ;)");
  delay(680);  
  lcd.clear();
 

 
  lcd.setCursor(0,0);
  lcd.print("DIYdomotics sys");
  lcd.setCursor(0,1);
  lcd.print("ARDUino_habiCAN");  
  delay(1358);
}

void loop(void) {
  int h = dht.readHumidity();
  int t = dht.readTemperature();
 
 
lightLevel=analogRead(photoRPin);
float lecture = lightLevel * (5.0 / 1023);

lcd.clear();
lcd.setCursor(12,1);
lcd.print(lecture);
   
 if(lightLevel > 526 )
 {
   digitalWrite(LEDpin, HIGH);
   
  lcd.backlight();
 }
  else if(lightLevel < 526 )
 {
 digitalWrite(LEDpin, LOW);
  lcd.noBacklight();
 }

 float temperature = getTemp();

 int reading1 = analogRead(sensorPin1);
 float voltage1 = reading1 * 5.0;
 voltage1 /= 1024.0;
 float temperatureC1 = (voltage1 - 0.5) * 100;


 int reading2 = analogRead(sensorPin2);
 float voltage2 = reading2 * 5.0;
 voltage2 /= 1024.0;
 float temperatureC2 = (voltage2 - 0.5) * 100;

float diferencialT = temperatureC1 - temperatureC2;

float diferencialTE = t - temperature;

 lcd.setCursor(6,0);
 lcd.print(temperature);
 lcd.setCursor(8,0);
 lcd.print("   ");

 lcd.setCursor(0,1);
 lcd.print(h);


 lcd.setCursor(0,0);
 lcd.print(t);


 lcd.setCursor(13,0);
 lcd.print(diferencialTE);

 

 lcd.setCursor(12,1);
lcd.print(temperatureC2);


if( t < temperature + 6.00 )
{
  digitalWrite(Relay, HIGH);
  lcd.setCursor(6,1);
  lcd.print("=]");
}
else if( abs(diferencialT) > 99.00 )
{
  digitalWrite(Relay, HIGH);

lcd.setCursor(6,0);
lcd.print("read error");
}
else
{
  digitalWrite(Relay, LOW);
  lcd.setCursor(6,1);
  lcd.print("=>");
}

 delay(3260);
}

float getTemp(){

 byte data[12];
 byte addr[8];

 if ( !ds.search(addr)) {
   
   ds.reset_search();
   return -1000;
 }

 if ( OneWire::crc8( addr, 7) != addr[7]) {
   Serial.println("CRC is not valid!");
   return -1000;
 }

 if ( addr[0] != 0x10 && addr[0] != 0x28) {
   Serial.print("Device is not recognized");
   return -1000;
 }

 ds.reset();
 ds.select(addr);
 ds.write(0x44,1);

 byte present = ds.reset();
 ds.select(addr);  
 ds.write(0xBE);

 for (int i = 0; i < 9; i++) {
  data[i] = ds.read();
 }

 ds.reset_search();

 byte MSB = data[1];
 byte LSB = data[0];

 float tempRead = ((MSB << 8) | LSB);
 float TemperatureSum = tempRead / 16;

 return TemperatureSum;
} 

//......................................................................
// Luis Rodriguez Alonso. October 2015. habitainer@gmail.com
// http://habican.blogspot.com.es/
// publicado bajo GNU GENERAL PUBLIC LICENSE
// https://gnu.org/licenses/gpl-3.0.en.html

ARDUCAN 003:

 //     ____                 //
 //    /    /___             //
 //   /    /    /___         //
 //  /____/    /    /____    //
 //  |   /____/    /    /|   //
 //  |___|   /____/    / |   //
 //      |___|   /____/  /   //
 //          |___|    | /    //
 //              |____|/     //


// ArduLightResponseSystem
// Led on (only when) the light is out.


int photoRPin = 0; 
int lightLevel;
int LEDpin = 13;


void setup()
{
 Serial.begin(9600);
}

void loop()
{
 lightLevel=analogRead(photoRPin);

 Serial.println(lightLevel);{       
   
 if(lightLevel > 526)
 {
   digitalWrite(13, HIGH);

 }
 else if(lightLevel <= 526){
 digitalWrite(13, LOW);
 }


 delay(250);

}
}


//......................................................................
// Luis Rodriguez Alonso. October 2015. habitainer@gmail.com
// http://habican.blogspot.com.es/
// publicado bajo GNU GENERAL PUBLIC LICENSE
// https://gnu.org/licenses/gpl-3.0.en.html



Y recuerda: El conocimiento es libre. ¡Compártelo!

8 may 2016

Simple Automated Light Control Arduino Implementation - SALCAI_0.2.1


// Simple Automated Light Control Arduino Implementation 
// SALCAI_0.2.1 


int lightSensor = A2;
int lightLevel;
int led = 13;
int rele = 12;

void setup() {
  pinMode(rele, OUTPUT);
  pinMode(led, OUTPUT);
  pinMode(lightSensor, INPUT);
  Serial.begin(9600);
}

void loop(){

  lightLevel=analogRead(lightSensor);
  Serial.println(lightLevel);
  {
    if(lightLevel > 560)
    {digitalWrite(led, HIGH);
   digitalWrite(rele, HIGH);
  
    delay(24560);
    }
   

    if(lightLevel <= 560)
   
  
    {digitalWrite(led, LOW);
    digitalWrite(rele,LOW);
    }
  }
 
  delay(120);
 
}


// Creative Commons Licence
// Luis Rodriguez

28 nov 2015

Let's play... Arduino - Controladores para tod@s

¡Controladores para todos!: Arduino ya llegó, y está aquí para crecer junto a quienquiera este interesado en ello. ¿Cansado del monopolio privativo de los controladores electrónicos? Hasta hace nada, poco tenías que hacer. Pero ahora, mas fácil no es posible. (bueno, tampoco es tan fácil, pero no es imposible).

Poder diseñar una instalación personalizada, única y modular, poder añadir y quitar sensores y sobretodo disponer de un control absoluto sobre el código que corren estas pequeñas placas no tiene precio. Repito, NO TIENE PRECIO. (especialmente en los tiempos que corren, donde las marcas comerciales se han enfrascado en una carrera de cajas cada vez mas oscuras (BlackBox) donde la inseguridad parece venir de serie.

¿Como defenderse de los artefactos que se conectan a internet con la tan proclamada Internet de las cosas (IoT) y sus ataques sistemáticos a las personas (voluntarios o no)? ¿Como reducir al menos en un cero a la derecha (sí, de 1.000 a 100 €) el coste del hardware y los dispositivos necesarios para el diseño de sistemas, control de procesos, automatismos y tantas cosas mas que aún están por pensar y por experimentar?: Yo no lo dudo: ARDUINO.

Tiempo al tiempo. Combinémoslo con las carcasas diseñadas a medida para cada caso, lugar y acción, e impresas en 3D allí donde sea necesario. Desarrollemos el código para controlar estos aparatos. Larga vida para Arduino. Y gracias a todos los que lo hacen posible. De verdad...: GRACIAS.




¿Quieres copiar y pegar el código de la caja que detecta de presencia?. Todo tuyo:


//     ____                 //
//    /    /___             //
//   /    /    /___         //
//  /____/    /    /____    //
//  |   /____/    /    /|   //
//  |___|   /____/    / |   //
//      |___|   /____/  /   //
//          |___|    | /    //
//              |____|/     //


// Easy copy'n'paste arduino code. 
// Set up your autonoumous ultrasound precence detector
long distancia;
long tiempo;
int led = 13;
int alarm = 7;
//check your led and buzzer are plugged in the correct pins

void setup(){
  Serial.begin(9600);
  pinMode(led,OUTPUT);
  pinMode(9, OUTPUT); 
  pinMode(8, INPUT); 
  pinMode(alarm,OUTPUT);
}

void loop(){
  digitalWrite(7,HIGH);
  digitalWrite(9,LOW); 
  delayMicroseconds(3);
  //I lost reference to the post where I found this code. Sorry.
  //I had to change this parameter from 5 to 3 miliseconsd so it would capture me even running fast 
  digitalWrite(9, HIGH);
  delayMicroseconds(10);
  tiempo=pulseIn(8, HIGH);
  distancia= int(0.017*tiempo); 

Serial.println(distancia);


// 45 cms is the detection range. 
// Strech this value to suit your needs
if(distancia <45>
{digitalWrite(led,HIGH);
digitalWrite(7, LOW);
 delay(120);
 digitalWrite(7, HIGH);
 delay(240);
 digitalWrite(7, LOW);
 delay(120);
 digitalWrite(7, HIGH);
 delay(240);
digitalWrite(led,LOW);
delay(640);
}
}
//......................................................................
// Luis Rodriguez Alonso. November 2015. habitainer@gmail.com
// http://habican.blogspot.com.es/
// published under GNU GENERAL PUBLIC LICENSE
// https://gnu.org/licenses/gpl-3.0.en.html// Visit: habican.blogspot.com

// November 2015

Y recuerda: Comparte lo que puedas. Es bueno para ti, es bueno para todos.

2 abr 2014

El engaño de la factura de la electricidad - ¿Qué son las energías renovables?

La electricidad es cultura y civilización. Sin electricidad simplemente vivimos de otra manera. Es pues un pilar básico de nuestra sociedad, y el acceso racional a la misma debiera ser un derecho fundamental del ser humano, tantas veces pisoteado. Hace ya tiempo que veo el gran engaño en lo relativo al cómo, cuánto y a qué precio disponemos de la electricidad. Expondré a continuación el quid de la cuestión:

El agua, a diferencia de la electricidad, tiene masa, volumen y además es incompresible. Es decir, cuando hay una cierta cantidad de agua en un estanque y se la deja bajar para llegar a otro estanque, la que ahora esta abajo antes estaba arriba. Parece lógico y sencillo, pero es necesario remarcarlo para comprender esta argumentación: El agua se puede contar, medir en unidades de masa. Por lo tanto, en la factura del agua nos llega un volumen, generalmente en metros cúbicos (m3) y medido en el contador a un precio determinado. Hasta aquí correcto.

Lo no esta bien es extrapolar esta manera de contar el consumo de agua al campo de la electricidad. La corriente eléctrica es algo totalmente distinto. Digamos que, o hay electricidad, o no hay electricidad en absoluto. O está o no está. Producción y consumo deben estar equilibrados, es decir, toda la electricidad que podemos crear de manera simultanea, por ejemplo en la central eléctrica - que no es sino un gigantesco motor que usa combustible -, toda esa potencia electrica debe ser consumida de forma instantánea. El trabajo de mantenimiento de la red consiste esencialmente en mantener el equilibrio, el "debe haber".

Si introducimos demasiada electricidad en la red, ya sea en la de todos los ciudadanos o en un pequeño circuito casero, y no la consumimos, es probable que las estaciones transformadas se rompan en el primer caso, o se fundan los fusibles (que pueden ser fundidos) en el segundo. En ámbos se produce el colapso del sistema. Si sobra electricidad, hay que "descargarla" a tierra.

Por otro lado, si solicitamos demasiada electricidad a la red y esta no puede suministrarla, el sistema también colapsa. En verano, cuando todo el mundo enchufa sus potentes máquinas refrigeradoras, y en invierno cuando todo el mundo enchufa sus radiadores, se producen los picos de consumo, y puede ser que "se vaya la luz". Esto es porque la correcta gestión de la electricidad obliga a "podar el árbol eléctrico" por zonas, sectores y horas, dejando sin luz a unos cuantos por turnos, hasta que se normaliza el consumo.

Considero maquiavélico el haber ideado un sistema de "contadores eléctricos" - eso es una falacia, se llaman medidores de diferencial de potencial y tan solo miden la diferencia de potencia que hay entre los cables-. Me parece como si quisieran reírse de nuestra ignorancia sobre el funcionamiento de las cosas, y de paso sacar la máxima tajada.

En el sistema eléctrico hay producción, distribución y consumo. El equilibrio y la gestión lo es todo. No existe tal cosa como una cantidad de electricidad que uno consume o no. La red puede ser grande o pequeña, pero debe haber equilibrio siempre. Esta naturaleza nada tiene que ver con el agua y su con su distribución.

Respecto a la producción de la electricidad, puede ser centralizada o descentralizada. Puede provenir de fuentes no renovables, es decir, que se van acabando y hay que buscar mas, como gasolina, gasoil, nuclear y lo que quiera que se pueda gastar como combustible; o puede ser renovable, es decir, que no se gasta mientras esta en marcha. Suele contemplarse como tales la solar y la eólica, pero las turbinas de agua en cursos constantes son formas de energía renovable anteriores, y hay muchas maneras de obtener electricidad de forma renovable, como son los míticos generadores eléctricos a base de imanes, o los que aprovechan la marea para obtener fluido eléctrico, o tantos otros medios que deben estar encerrados en algún oscuro sótano.

La distribución consiste en hacer llegar la electricidad al usuario. Torres de alta tensión y transformadores conforman el paisaje de una producción centralizada. El consumo es el equivalente a las células del árbol donde se produce la fotosíntesis, o los alvéolos de los pulmones dónde se intercambia el oxigeno y el dióxido de carbono. Son el objeto y sentido de la red.

Mientras sigamos centrando la discusión en si es ecológico o no (los coches eléctricos son, a mi juicio, nada ecológicos ya que al enchufarlos a la red eléctrica pierdes el control del origen de la electricidad), si es renovable o no, perdemos de vista el verdadero problema:

¿Cuanto cuesta hacer la electricidad?¿Cuanto cuesta mantener la red de distribución? ¿Cuanto dinero ganan las compañías eléctricas por el camino? ¿Hasta cuando nos van a seguir engañando con cifras de 8 y mas decimales -que es el factor para multiplicar el kWh -, síntoma inequívoco de que oscuros intereses se disfrazan detrás de la apariencia matemática? El conocimiento es poder.