Configurar módulo bluetooth HC-06
Para poder dar una nueva configuración a nuestro módulo de comunicación Bluetooth HC-06: NOMBRE (Nombre de 20 caracteres), PIN (Clave de cuatro numeros) y BPS (Velocidad de conexion en baudios), usamos las conexiones de la imagen y el siguiente código :
|
#include <SoftwareSerial.h>
SoftwareSerial blue(2, 3); //Crea conexion bluetooth PIN 2 a TX y PIN 3 a RX char NOMBRE[21] = "nuevonombre"; // Nombre de 20 caracteres maximo char BPS = '4'; // 1=1200 , 2=2400, 3=4800, 4=9600, 5=19200, 6=38400, 7=57600, 8=115200 char PASS[5] = "5555"; // PIN O CLAVE de 4 caracteres numericos void setup() { blue.begin(9600); // inicialmente a 9600 Baudios (velocidad de fabrica) pinMode(13,OUTPUT); digitalWrite(13,HIGH); // Enciende el LED 13 durante 4s delay(4000); digitalWrite(13,LOW); // Apaga el LED 13 para iniciar la programacion blue.print("AT"); // Inicializa comando AT delay(1000); blue.print("AT+NAME"); // Configura el nuevo nombre blue.print(NOMBRE); delay(1000); // espera 1 segundo blue.print("AT+BAUD"); // Configura la nueva velocidad blue.print(BPS); delay(1000); blue.print("AT+PIN"); // Configura el nuevo PIN blue.print(PASS); delay(1000); } void loop() { digitalWrite(13, !digitalRead(13)); // queda el LED 13 parpadeando delay(300); } |
Sensor de luz LDR
Control de un servo SG 90
El servo motor SG 90 puede moverse a distintas posiciones comprendidas entre 180 º de ángulo. Consta de 3 pines de conexión: rojo (Vcc), negro o marrón (GND) y amarillo (pin de control) y para simplificar su programación recurrimos a la librería <Servo.h>. Un ejemplo de programa es el siguiente:
#include <Servo.h> //incluimos librería Servo myservo; void setup() { myservo.attach(11); } void loop() { myservo.write(70); //posición inicial 70º delay(5000); //esperamos 5 s myservo.write(0); // posición final 0º delay(1000); /esperamos 1 s } |
Sensor de movimiento
Sensor infrarrojo FC-51
El sensor detecta la presencia de objetos a través de infrarrojos. En el programa ejemplo, se enciende un led (pin 10), cuando se detecta un objeto a cierta distancia mediante el sensor (pin analógico 5). En el monitor serie se puede observar el comportamiento del sensor.
|
int sensor;
int led = 10; void setup() { Serial.begin(9600); Serial.println(); pinMode(led, OUTPUT); } void loop() { Serial.println("Valor del sensor:"); sensor= analogRead (5); Serial.println(sensor); delay (50); if (sensor < 180) { digitalWrite(led, HIGH); } else { digitalWrite(led, LOW); } } |
Sensor de distancia (ultrasonidos)
En el siguiente ejemplo, vamos a encender un led cuando el sensor detecte la presencia de un objeto a poca distancia (a menos de 20 cm).
El sensor de ultrasonidos está formado por dos módulos diferentes, un emisor y un receptor. El emisor emite unas ondas de ultrasonidos, que son unas ondas sonoras que nosotros no podemos escuchar (como las de los murciélagos). Éstas avanzan hasta encontrar unos obstáculo, y cuando lo encuentran, rebotan y entonces avanzan hacia nuestro sensor, hasta que el ultrasonido es detectado por el módulo receptor. Este seria el esquema de conexión del sensor con la placa. Además, añadiremos un led al pin 11.
|
El sensor se basa simplemente en medir el tiempo entre el envío y la recepción de un pulso sonoro, siendo la velocidad del sonido es 343 m/s.
Por lo que si sabes el tiempo total, que es lo que tarda desde el sensor al objeto rebotado y desde el objeto rebotado al sensor, puedes saber la distancia. Para ello, simplemente, tomas el tiempo que tarda entre el sensor y el objeto (dividir entre 2 el tiempo total) y lo multiplicaras por la velocidad del sonido en el aire: Distancia = 343m/s * tiempo (segundos)/2 Transformando los metros/segundo en centímetros/ microsegundos: Velocidad= 343 m/s= 0,0343cm/µs Distancia =0,0 343cm/µs * tiempo (µs)/2 Código: int trigPin = 6; //Definimos los pines con los que trabajaremos int echoPin = 5; int LED = 11; float velocidad = 0.0343; //velocidad del sonido en cm/us long duracion, distancia ; void setup() { pinMode(trigPin, OUTPUT); //Declaramos el pin digital 6 como salida pinMode(echoPin, INPUT); //Declaramos el pin digital 5 como entrada pinMode(LED, OUTPUT); //Declaramos el pin digital 11 como salida digitalWrite (LED , LOW); //Definimos la salida digital 11 con un estado bajo Serial.begin(9600); // Iniciamos puerto serie } void loop() { digitalWrite(trigPin, LOW); // Ponemos el trigger desactivado delayMicroseconds(2); // Para asegurarnos de que el trigger está LOW digitalWrite(trigPin, HIGH); // Activamos el pulso de salida delayMicroseconds(10); // Esperamos 10µs con el pulso activo este tiempo digitalWrite(trigPin, LOW); // Cortamos el pulso y a esperar el ECHO duracion = pulseIn(echoPin, HIGH) ; //pulseIn mide el tiempo que pasa entre que el pin declarado (echoPin) cambia de estado bajo a alto (de 0 a 1) distancia = velocidad* duracion / 2; //Dividimos entre 2 porque queremos coger el tiempo de ida (y no ida y vuelta) Serial.print(" distancia: "); Serial.print(distancia); if ( distancia < 20){ digitalWrite (LED , HIGH); //Si el sensor detecta una distancia menor a 20 cm enciende el LED } else{ digitalWrite (LED , LOW); //apaga el led } } |
Control de alimentación mediante un relé
En este tutorial vamos a activar una bomba de agua para el riego automatizado en función del grado de humedad del suelo. Para ello, disponemos de un sensor de humedad que nos permite controlar la alimentación externa de la bomba. A continuación el código:
int bomba = 8; //pin digital donde conectar la bomba int riego; //variable de riego void setup() { Serial.begin(9600); //inicia comunicacion serial Serial.println(); //monitor serie pinMode(8,OUTPUT);//configuracion del pin 8 } void loop() { Serial.print("Sensor de Humedad valor:"); //escribe riego = analogRead(0); // puerto analogico para el riego Serial.print(riego); //escribe if (riego <= 300) digitalWrite(8,LOW); Serial.println(" encharcado"); if ((riego > 300) and (riego <= 700)) digitalWrite(8,LOW); Serial.println(" Humedo, no regar"); if (riego > 700) digitalWrite(8,HIGH); Serial.println(" seco, necesita regar"); delay(1000); } |