lunes, 28 de mayo de 2018

Medir temperatura e intensidad lumínica con LM35, LDR Y Arduino



Actualmente mantengo la intención de desarrollar pequeños robots y autómatas con fines didácticos y de ocio. Pero antes de acometer complejos y divertidos montajes, me encuentro con la necesidad de desarrollar e implementar sensores y actuadores. Tener las cosas bien claras a la hora de montarlos y los códigos de programa a mano para adaptarlos rápidamente a los proyectos en curso. Incluso dejarlos ya ensamblados en forma de bloques y no tener más que conectarlos.

Dos magnitudes muy comunes a la hora de aportar información a nuestros robots son la temperatura y la intensidad lumínica. Tras realizar breves consultas por internet, he visto dos componentes baratos y fáciles de usar: el LM35 y la fotocélula LDR.

En la red hay multitud de tutoriales que me han ayudado a desarrollar mi propio montaje con una tarjeta Arduino UNO y una placa protoboard. No considero malo copiar a otros, pero entendiendo lo que están haciendo y transformándolo y adaptándolo a mis necesidades y filosofía. Y por supuesto, mencionándoles debidamente.




Tanto el LM35 como la fotocélula LDR son sensores analógicos. Y dichos componentes pasivos son leídos por las tarjetas Arduino gracias a analogRead(). Se trata de una función que mide los valores de los pines analógicos especificados, que en Arduino UNO son 6, de A0 a A5. Detrás de dichos pines lo que hay es un conversor de analógico a digital de 6 canales. Tiene una resolución de 10 bits y proporciona al microcontrolador ATmega328p valores enteros entre 0 y 1023 bits. Comentar brevemente que estos pines también se pueden usar como digitales, por si nos vemos faltos de ellos.








El LM35 es un sensor de temperatura hecho con semiconductores. Puede medir temperaturas entre -55 ºC y 150 ºC. Trabaja con tensiones comprendidas entre los 4 y 30 V. Una variación de 1 ºC en la temperatura se traduce en una variación de 1 mV entre sus terminales. Pero como se ha comentado antes, el rango de valores binarios que le llega al microcontrolador va de 0 a 2023. Es decir, la señal analógica es "troceada" en 1024 valores. Para obtener la temperatura en grados Celsius hemos de escalar la lectura según la fórmula:



La fotorresistencia LDR es un componente pasivo cuya resistencia al paso de la electricidad varía en función de la intensidad de luz que incide sobre él. A medida que dicha intensidad aumenta, su resistencia óhmica disminuye. Además de la intensidad de luz, el LDR reacciona a una gama amplia de frecuencias, entre el infrarrojo y el ultravioleta. Con este transductor podemos hacer desde sistemas de encendido automático de luces hasta robots seguidores de líneas ya que es sensible a la luz emitida por un diodo led infrarrojo y reflejada en la superficie de una pista.  





De cara a programar la tarjeta Arduino UNO hay muchos tutoriales. Pero principalmente de forma separada: por un lado para LDR y por otro para LM35. Lo que he hecho ha sido un programa para obtener las lecturas de los dos sensores. En la placa  protoboard he montado un indicador de luminosidad con tres diodos led, especificando como umbrales máximos y mínimos de luz los valores de 100 y 50, respectivamente, leídos gracias a la función analogRead(). Por otro lado, para poder leer la temperatura medida en el monitor serie, he usado la función Serial.begin() configurada a la velocidad de 9600 bps. Un siguiente paso sería mostrar dicha lectura en una pantalla LCD, pero es algo que ya he practicado y prefiero dejarlo para proyectos definitivos.

Un aplicación inmediata que se me ocurre de lo realizado es la siguiente. De la misma manera que he configurado los leds, establecer una condición de luz ambiental mínima para la activación de un sistema de riego nocturno. Y con la temperatura leída, activar un ventilador o sistema de refrigeración.  

Código de programa

//declaración de las variables globales que vamos a usar

float tempC; // Variable para almacenar los valores proporcionados por LM35


const int LDRPin = A0; // Variable del pin de entrada A0 para el sensor LDR

const int LM35Pin = A1; // Variable del pin de entrada A1 para el sensor LM35

const int LED_verde = 2;

const int LED_amarillo = 3;
const int LED_rojo = 4;

const int limite_superior = 100;

const int limite_inferior = 50;

void setup() {


  Serial.begin(9600); // Configuramos el puerto serial a 9600 bps
  
   pinMode(LED_verde, OUTPUT);
   pinMode(LED_amarillo, OUTPUT);
   pinMode(LED_rojo, OUTPUT);
   pinMode(LDRPin, INPUT);
   pinMode(LM35Pin, INPUT);
}

void loop() {
  
int input = analogRead(LDRPin); // Asignamos  valores obtenidos de LDRPin a input

   // Establecemos 3 condiciones para el encendido de los diodos led

   
   if (input > limite_superior) 
   {
      digitalWrite(LED_verde, HIGH);
      digitalWrite(LED_amarillo, LOW);
      digitalWrite(LED_rojo, LOW);
   }

      if (input <= limite_superior &&  input >= limite_inferior) /

   {
      digitalWrite(LED_verde, LOW);
      digitalWrite(LED_amarillo, HIGH);
      digitalWrite(LED_rojo, LOW);
   }

       if (input < limite_inferior) 

   {
      digitalWrite(LED_verde, LOW);
      digitalWrite(LED_amarillo, LOW);
      digitalWrite(LED_rojo, HIGH);
   
   }

int input_temperatura = analogRead(LM35Pin);


 tempC = analogRead(LM35Pin); 

   
  
  tempC = (5.0 * tempC * 100.0)/1024.0; // Cálculo de la temperatura

  
  Serial.print(tempC); // Envia el dato al puerto serial
  
  Serial.print("\n"); // Salto de línea
  
  delay (1000); // Detenemos el programa 1 segundo entre cada lectura


}


Webs consultadas











domingo, 20 de mayo de 2018

KNITERATE


Por fascinación y envidia sana me siento obligado a escribir sobre esta máquina. Acabo de conocer su existencia gracias a Facebook y supone, a mi juicio, un importante paso para recuperar la manufactura textil de las manos de multinacionales de la moda y gigantes asiáticos.






Kniterate es una máquina para la fabricación de prendas de punto, personalizadas y adaptadas a la forma del usuario. No es que haga nada que no se hiciese antes con agujas o máquinas de coser. Pero lo hace en muchísimo menos tiempo y alejando al creador de la pericia manual para permitirle centrarse en diseño y negocio. Básicamente es una tejedora automatizada. Mediante un software incluido en el producto se concibe la prenda.




Otra cosa que me ha llamado la atención es que su creador es español. Se llama Gerard Rubio y lleva tiempo trabajando en Londres con otro socio para sacar adelante el proyecto. Según sus palabas, el objetivo es democratizar la producción textil. Por lo que he visto, el precio ronda los 6000 euros. Puede parecer caro para un consumidor doméstico. Pero pensemos, por ejemplo, en un negocio local que invierta en la máquina y al que puedan acudir usuarios con sus diseños contenidos en tarjetas SD. No la veo una cantidad desorbitada para un profesional de la moda que pretenda ofrecer un amplio catálogo de productos pudiendo prescindir de costes de almacenamiento para los productos terminados. Sólo habría que invertir en bobinas de lana y su stock. Y fabricar las prendas a medida que se reciben pedidos.

Mientras preparaba este texto me he acordado de lo que cuenta Chris Anderson en su libro MAKERS La nueva revolución industrial (Ediciones Urano 2013) sobre la hiladora Jenny. Fue una máquina hiladora multibobina inventada en 1764. Según el autor, cambió el mundo no por crear la planta productiva, sino por permitir crear la industria artesanal, que puede llegar a ser muy poderosa. Las hiladoras Jenny eran relativamente sencillas de construir, económicas y podían ser usadas dentro de los domicilios. Puede que, por primera vez, se lograse que trabajar en el hogar resultase más lucrativo que hacerlo fuera. Permitió también que personas normales se convirtiesen en emprendedores sin tener que pasar por periodos de aprendizaje establecidos por los gremios. Así se fueron creando redes de artesanos altamente especializados cuyo rendimiento se vio multiplicado por técnicas de microproducción.






jueves, 17 de mayo de 2018

Dos días con Oporto y sus tranvías

Afortunadamente aún quedan reductos de tranvías históricos en la Península Ibérica. Y principalmente en tierras lusas. Este fue unos de los motivos por los que me largué un par de días a Oporto. O tal vez el más potente.

Tres años antes que Madrid, en 1895, esta ciudad portuguesa estrenó su primera línea de tranvía eléctrico. Desde entonces comenzó el crecimiento de unas densa red de tranvías a medida que la ciudad crecía. Pero como en tantos otros sitios este medio de transporte sufrió los azotes de la industria del automóvil y del petróleo. Padeció tremendo proceso de cierre de líneas y desguace de vehículos en la segunda mitad del siglo XX. Pero el amor por la historia y la identidad urbana pesaron para la preservación de un mínimo trazado y parque móvil para usos turísticos y culturales. Justamente lo que desgraciadamente no se hizo en Madrid.










Pero a parte de tranvías históricos también los tienen modernos. La red de Metro viene a ser lo que en Madrid conocemos como Metro Ligero, pero con mejor criterio. Los vehículos son tranvías modernos que en hora punta circulan en doble composición. Los trazados combinan vía embutida en plataforma segregada del tráfico rodado o vía convencional con raíles y traviesas normales allí donde no es necesario el carril embutido. Donde es preciso, como es el centro de la ciudad, los trenes circulan dentro de túneles. Pero cuando no hay motivo para el soterramiento, circulan al aire libre. Esto incluye el histórico y mítico puente Luis I en convivencia con los peatones. Se aprecia que a la hora de proyectar las infraestructuras pesó el racionalismo económico y la lógica técnica.





Volviendo al tranvía histórico, mi primera toma de contacto fue de la siguiente manera. Salí del aeropuerto y tomé el Metro hacia el centro urbano. En Trindade hice transbordo a la línea D con sentido Santo Ovídio. Me bajé en Sao Bento y continué a pie hacia el inicio de la línea 1. Comentar que Oporto es una ciudad tremendamente en cuesta y que arrastro una fascitis plantar que viene a ser una inflamación crónica en unos tendones del pie. Lo que me hace tener que economizar esfuerzos en cuanto a caminatas. Un buen motivo para hacer uso de los medios de transporte que ofrece la urbe.




Tranvía y ocio conviven tranquilamente

Los peatones circulan tranquilamente junto a los tranvías



Cuando llegué a la parada de Infante me encontré un vehículo en la vía terminal esperando a un grupo que lo había alquilado. Su conductor amablemente me indicó que unos metros más adelante es donde me podía montar en los tranvías que realizan el recorrido de la línea 1. Ya había uno pero estaba colapsado de turistas. Tuve que esperar unos 20 minutos hasta la llegada del siguiente. Solo hay en servicio 6 vehículos para las 3 líneas históricas (1, 18 y 22). Pero ya es más de lo que tenemos en Madrid. Y tener que esperar me empujó a tener que tomarme la vida de otra manera en cuanto a prisas. También me entró susto al ver tanta gente. Temí que cada vez que fuese a subir a un tranvía la experiencia radicase en un hacinamiento humano con empujones y peleas por los asientos. Pero afortunadamente esto solo sucedió al principio. Un consejo: el sol pegaba con fuerza en esta parte de la ribera del Duero, por lo que no sobra llevar gorra. Y algo de protección para pieles sensibles y nórdicas.



Antes de nada, comentar que el billete sencillo vale 3€. Pero por 10 € podemos comprar un título que nos sirve para montar todo lo que queramos durante dos días. Algo fabuloso para nostálgicos y fetichistas de este férreo y vetusto medio de transporte.






El trayecto que es realizado por la línea 1 hasta Passeio Alegre es flipante. No exento de momentos de conflicto con vehículos que invaden la plataforma del tranvía. Pero que en nada de tiempo se resuelven y desmienten el papel del tranvía como un factor nocivo en la movilidad urbana. Comentar que lo habitual es que cuando llegamos al final de una línea, los conductores no hacen bajar del tranvía y volver a hacer cola para subir. Tiene su lógica ya que se podría dar el caso de grupos de viciosos del patrimonio que se quedarían enquistados dentro, asomados a la ventana sin parar de surcar la ciudad saboreando sus aromas, brisas y vistas.






Un yayo de los que exhalan poderío retira su bólido mientras el tranvía espera.

Tras recorrer unas cuantas veces la línea 1, me apee en la parada de Museu do Carro Eléctrico. Allí tomé el tranvía 18 para subir a la ciudad. Y nunca mejor dicho. El vehículo se tiene que enfrentar a una pendiente alucinante para lo que es un sistema ferroviario. Escuchar el rugido de sus motores de corriente continua ya es toda una experiencia. En la parada de Carmo cambié al tranvía 22, a bordo del cual di unas cuantas vueltas recorriendo el centro de Oporto. Esta línea tiene su punto de inversión en Guindais, donde podemos tomar un funicular que nos baja hasta la ribera del Duero, justo en la entrada inferior del puente Luis I. Este funicular, como obra de ingeniería, merece un artículo a parte. No sólo por su trazado de vértigo e irregular, sino por el sistema dinámico que hace que la cabina se mantenga constantemente horizontal respecto al bastidor y ejes.


Tranvía 22 estacionado junto al acceso al funicular de Guindais

Como he comentado antes, hay 6 vehículos haciendo las rutas turísticas durante el día. Y sólo uno para la línea 22 y otro para la 18. Pero también es cierto que el grado de ocupación que observé no demandaba más servicio. Al menos en estos días de mayo.




El tranvía gusta



 Parece que la convivencia entre diferentes patrimonios históricos es posible

La picaresca celtíbera sobrevive en Oporto

La mañana de mi segundo día la dediqué a visitar el Museu do Carro Eléctrico. Tiene una bien nutria y mantenida colección de vehículos históricos. Muchos de ellos listos para prestar servicio. De hecho pude presenciar cómo salía a circular uno cargado de escolares. Y antes de que se me olvide, decir que presentando el billete de 2 días, nos rebajan el precio de la entrada al museo de 8 a 4 euros. Además, también es museo eléctrico ya que conserva transformadores, rectificadores y paneles de mando de la antigua central eléctrica del tranvía.






Detalle de los accionamientos manuales del puente grúa de la central eléctrica de termoeléctrica de Massarelos

















Decir que Oporto tiene muchísimas más cosas. Unas fachadas impresionantes, rincones cargados de encanto e historia. Hay mucho para practicar arqueología industrial. Se nota que Portugal, además de ser un imperio militar y geográfico, lo fue económico y comercial. Está más que presente la huella de sus vinos, corchos y cerámicas. Andar por la ciudad se hace un pelín incomodo debido a las numerosas obras que se están llevando a cabo en edificios. Algo bueno ya que indica una voluntad fehaciente por recuperar su encanto y personalidad. A su vez se respira cierto aire que muchos denominan decadencia. Y debió de haberla. Sin conocer mucho la historia de Portugal me atrevo a imaginar años duros postcoloniales en las últimas décadas del siglo XX. Quedan muchos resquicios de aquello traducidos en personajes autóctonos deambulando por calles, bares y junto a fachadas sucias y abandonadas. Pero en cuestión de decadencia tampoco estamos los españoles para dar lecciones.



sábado, 14 de abril de 2018

Medidor e indicador de distancia con Arduino

A la hora de desarrollar proyectos mecatrónicos suele ser fundamental el poder cuantificar distancias y emplearlas como datos de entrada que permitan a nuestros autómatas tomar decisiones.

Usando como base de programación el Entorno de Desarrollo Integrado de Arduino (IDE), la adquisición de componentes se vuelve bastante económica. Pero aparece la complejidad a la que todo técnico debe enfrentarse con gratos resultados, que versa sobre la conexión e interacción entre distintos dispositivos.




Yo ya había programado un medidor de distancias mediante un sensor de ultrasonidos HC-SR04 de 45 x 20 mm y una placa programable Arduino UNO. Pero los valores medidos sólo los podía ver en el monitor serie del propio (IDE). Así que el siguiente reto ha sido poder mostrar dichos valores en un display LCD alfanumérico de 16 columnas por 2 filas.


Esquema de conexión entre el sensor de ultrasonidos y la placa programable Arduino UNO

Afortunadamente he podido simplificar bastante las conexiones del display gracias al módulo adaptador serie I2C. Se trata de un bus de comunicación serie que simplifica las conexiones a sólo dos líneas para transmitir la información. Una se dedica al tráfico de datos y la otra a la señal de reloj. Dado que los circuitos que se comunican mediante este bus suelen compartir la misma masa, no se considera necesaria una tercera línea. Como indica Luis Llamas en su web, el I2C es un bus síncrono. Todos los dispositivos que lo conforman permanecen sincronizados gracias a la señal de reloj proporcionada por el dispositivo maestro. Así se evita que cada dispositivo tenga su propio reloj, reduciendo la complejidad para mantener una transmisión sincronizada. Para ampliar y aclarar conocimientos, recomiendo visitar la web de Luis Llamas.







La conexión entre el módulo serie I2C y el display LCD la he realizado de la manera más simple pinchando sus patillas en la placa Protoboard. Para poder usarlo he necesitado descargar la librería LiquidCrystal_I2C y añadirla al IDE.
Para la realizar el código de programa me he servido de estos dos tutoriales en Internet:



El buen ingeniero tiende a ser vago y pesetero. Pero lejos de dedicarme a hacer un simple copia/pega, los códigos facilitados por los autores de las mencionadas webs me han servido de ingredientes base para la creación de mi propio programa. Considero que no merece la pena comenzar a realizar la programación desde cero. Si, en cambio, reservar fuerzas y tiempo para la adecuada comprensión de lo que estoy haciendo y adaptarlo a mi propio proyecto.





Programa


#include <Wire.h> // librería con las funciones necesarias para el control del hardware integrado
#include <LiquidCrystal_I2C.h> //  librería que gestiona el display LCD

LiquidCrystal_I2C lcd(0x3F,16,2); // creación objeto LCD de 16 columnas x 2 filas y dirección  0x3F  

const int EchoPin = 5;
const int TrigPin = 6;
const int LedPin = 13;

void setup()
{
  lcd.init(); // inicializamos el display LCD
  lcd.backlight(); // encendemos la luz de fondo del display LCD

   lcd.setCursor(0, 0); // cursor en la primera posición(columna:0) de la primera línea línea(fila:0)
   lcd.print("Medidor distancia"); // imprimimos en el display LCD la primera parte del texto
  
   Serial.begin(9600);
   pinMode(LedPin, OUTPUT);
   pinMode(TrigPin, OUTPUT);
   pinMode(EchoPin, INPUT);
  }

void loop()
{
   int cm = ping(TrigPin, EchoPin);
   Serial.print("Distancia: ");
   Serial.println(cm);
   delay(1000);
}
int ping(int TrigPin, int EchoPin) {
   long duration, distanceCm;
 
   digitalWrite(TrigPin, LOW); // para generar un pulso limpio ponemos a LOW 4 microsegundos
   delayMicroseconds(4);
   digitalWrite(TrigPin, HIGH); // generamos  un disparo de 10 microsegundos
   delayMicroseconds(10);
   digitalWrite(TrigPin, LOW);
  
   duration = pulseIn(EchoPin, HIGH); // medimos el tiempo entre pulsos, en microsegundos
  
   distanceCm = duration * 10 / 292/ 2; // convertimos a distancia, en cm
     
  long distancia = distanceCm;

 
  lcd.setCursor(0, 1); // cursor en la primera posición(columna:0) de la segunda línea(fila:1)
  lcd.print("    "); // dedicamos un espacio a la impresión del valor de la distancia 
  lcd.print(distancia);
  lcd.print("cm "); // imprimimos el texto "cm" en el display LCD 

  return distanceCm;

}

Una vez depurados los errores y superadas las dificultades, ya tenemos confeccionado este módulo para usarlo en próximos proyectos mecatrónicos. Tanto el código como el hardware son susceptibles de ser ampliados, añadiendo señales de alarma ante distancias críticas, actuación sobre motores y otros dispositivos de salida.