¡Hola, amigos!. ¡Pasad, por favor!. ¡Ponéos cómodos! Hoy vamos a complicarnos la vida con una práctica basada en el uso de nuestra querida Arduino y su posibilidad de utilizar superficies conductoras (el Aluminio, en nuestro caso) como sensores capacitivos, con el uso de la librería #CapacitiveSensor, para construir un piano de suelo, al estilo de una de las escenas más recordadas de un viejo clásico de Tom Hanks, BIG. ¿Cómo hacerlo?. ¡Sigue leyendo!
¡Saludos, estudiantes!. ¡Bienvenidos!. ¡Pasad!, ¡pasad!. ¡Me alegro mucho de veros otra vez!.
En esta ocasión, vamos a tratar de llevar a cabo una práctica que nos sirva de introducción al puerto serie de Arduino. Ya hemos hecho algo así en otro texto en el que teníamos como intención realizar alguna cosita con Bluetooth en un segundo paso. Como el hombre propone y Dios dispone, esa intención de momento no ha abandonado el cielo de los buenos propósitos para encarnarse en un artículo como Dios manda. Sin embargo, y aprovechando que en estas fechas estoy introduciendo a mi alumnado de 4º de ESO de Tecnología Robótica al uso de este utilísimo puerto, vamos a enfocar este mismo aspecto de nuestra queridísima Arduino desde un punto de vista mucho más simplón.
Read more: Prácticas de introducción al puerto Serie de Arduino
MEDIR DISTANCIAS POR ULTRASONIDOS MEDIANTE EL SENSOR HC-SR04
El código referente a la medida de distancias con ultrasonidos es original de Luis Llamas (lo he modificado para que envíe los datos vía Bluetooth), y lo podéis encontrar aquí.
El sensor de ultrasonidos se conecta así:
El código para medir y enviar distancias al smartphone es éste:
[code][/code]
[code]
//CÓDIGO ARDUINO PARA MEDIR DISTANCIAS CON HC-SR04
const int EchoPin = 9;
const int TriggerPin = 8;
const int LedPin = 13;
void setup() {
Serial.begin(19200);
pinMode(LedPin, OUTPUT);
pinMode(TriggerPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
void loop() {
int cm = ping(TriggerPin, EchoPin);
Serial.print(cm);
Serial.println();
delay(100);
}
int ping(int TriggerPin, int EchoPin) {
long duration, distanceCm;
digitalWrite(TriggerPin, LOW); //para generar un pulso limpio ponemos a LOW 4us
delayMicroseconds(4);
digitalWrite(TriggerPin, HIGH); //generamos Trigger (disparo) de 10us
delayMicroseconds(10);
digitalWrite(TriggerPin, LOW);
duration = pulseIn(EchoPin, HIGH); //medimos el tiempo entre pulsos, en microsegundos
distanceCm = duration * 10 / 292/ 2; //convertimos a distancia, en cm
return distanceCm;
}
//HASTA AQUÍ EL CÓDIGO
[/code]
SENSOR DE TEMPERATURA Y HUMEDAD DHT11
A continuación, para usar el detector de Temperatura y Humedad (hay que instalar una librería, y quizás no seamos capaces; dejaremos esta parte de la práctica para el final), necesitaremos una resistencia de 10 kΩ para conectarlo:
Y el código:
//CÓDIGO PARA USAR SENSOR DE TEMPERATURA Y HUMEDAD DHT11
// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain
#include "DHT.h"
#define DHTPIN 2 // what digital pin we're connected to
// Uncomment whatever type you're using!
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors. This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println("DHTxx test!");
dht.begin();
}
void loop() {
// Wait a few seconds between measurements.
delay(2000);
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Compute heat index in Fahrenheit (the default)
float hif = dht.computeHeatIndex(f, h);
// Compute heat index in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *F\t");
Serial.print("Heat index: ");
Serial.print(hic);
Serial.print(" *C ");
Serial.print(hif);
Serial.println(" *F");
}
//HASTA AQUÍ EL CÓDIGO
USO DE SENSORES DE DOBLADO (FLEX SENSORS):
Son resistencias que varían su valor CUANDO SE DOBLAN. Así las cosas, necesitaremos conectarlas en divisor de tensión (al modo en que lo hacemos con las LDR a una de las entradas analógicas de nuestra Arduino, por ejemplo, con una resistencia de 10 kΩ:
Y utilizar un código para leer el valor. El más sencillo sería éste:
void setup() {
// put your setup code here, to run once:
Serial.begin(19200);
}
void loop() {
// put your main code here, to run repeatedly:
int valor=analogRead(A1);
Serial.println(valor);
delay(100);
}
//HASTA AQUÍ EL CÓDIGO
¡Y ya está!. ¡Eso sería todo por hoy!. ¿Qué os ha parecido?. ¡El próximo día, más y mejor!.
¡Hombreeeee, qué sorpresaaaaa!. ¡Cuánto tiempo sin veros por aquí!. ¡Pasad!, ¡pasad!. ¡Me alegro mucho de veros!.
Hoy vamos a aprovechar una característica muy útil que incorporan nuestras placas Arduino, y que muchas veces no aprovechamos en todo su potencial: el puerto serie. Y para ello, acabaremos haciendo una práctica muy sencilla en la que encenderemos o apagaremos un led RGB mediante una aplicación en nuestro móvil a través de Bluetooth.
El puerto serie
El puerto serie es el modo de comunicarse de Arduino con nuestro ordenador, a través del cable USB. Podría intentar profundizar un poco en su estructura y funcionalidad, pero hoy tengo algo de prisa. Además, posiblemente escribiría un texto muy por debajo de tutoriales como éste de Luis LLamas. ¡Echadle un vistazo después, si queréis!. ¡Está muy bien!
Lo que a nosotros nos interesa, a grandes rasgos, es que Arduino puede enviar y recibir datos de nuestro ordenador cuando está conectado a través del cable USB. Para ello, en el IDE de Arduino, tenemos que pulsar en el siguiente botón:
Ya hemos hecho alguna práctica al respecto, como por ejemplo la del sistema automático de iluminación por LDR. Pero hasta ahora, sólo habíamos utilizado el puerto Serie como un canal de SALIDA, esto es, para que Arduino ofreciera datos al ordenador. Nuestra intención hoy es aprender a utilizarlo también como canal de ENTRADA, de modo que podamos dar instrucciones a nuestra placa. Cuando nos hayamos familiarizado con estos conceptos, usaremos este canal de comunicación vía ondas de radio, a través de un canal Bluetooth.
Read more: Uso del puerto serie en Arduino: comunicación Bluetooth (1ª parte)
¡Hola, chicos!. ¡Pasad!. ¡Pasad!. ¡Hacía mucho que no veníais a visitarme!. ¡Poneos cómodos!.
Hoy quiero mostraros un pequeño montaje que se me ocurrió viendo un artículo de Leantec en el que hacían un pasador de diapositivas con un detector de ultrasonidos y una Arduino Leonardo. Como no encuentro por ninguna parte el único ejemplar de esta tarjeta que tengo, y los sensores de ultrasonidos son bastante más caros, se me ocurrió utilizar resistencias LDR (variables con la luz) en un montaje que tiene un enfoque distinto: un detector de barrido izquierda-derecha como el del vídeo, conectado a un programa en Processing (luego me enteré que los amigos de @JuegosRobotica habían lanzado este mismo reto en Twitter, pero eso es otra historia).