Um robô datalogger controlado por Bluetooth

Un robot registrador de datos controlado por Bluetooth

Los robots apoyan los comportamientos, las actividades y los trabajos humanos de varias maneras notables. Desde brazos y manos robóticos hasta robots que realizan tareas de vigilancia y mantenimiento, esta tecnología avanza rápidamente para ayudar a que ciertas tareas sean más seguras, más rápidas o más accesibles.

Estos robots son automáticos (lo que significa que pueden operar automáticamente sin ninguna intervención humana) o controlados remotamente, lo que significa que operan manualmente desde una ubicación remota. Los robots controlados remotamente suelen ser inalámbricos.

Ejemplos de robots controlados remotamente incluyen:

  • Robots serpiente : pueden entrar en túneles o tuberías extremadamente estrechos o pequeños; estos robots se utilizan principalmente para encontrar problemas (como una fuga en una tubería), pero también se pueden utilizar para operaciones de búsqueda y rescate.
  • Robots de extinción de incendios : se utilizan como extintores que rocían agua o CO2 sobre el fuego. Un operador controla este robot desde un lugar seguro e intenta apagar el fuego para que el bombero no tenga que poner en peligro su vida.
  • Mis robots difusores : se utilizan para difundir bombas o minas activas en el campo de batalla. Un operador puede controlar sus movimientos desde una distancia remota y segura, difundiendo una bomba (o una mina) sin poner en riesgo la vida.

El robot controlado por Bluetooth
A medida que los robots avanzan, también lo hace la capacidad de comunicarse con ellos. Los robots controlados a distancia de hoy en día son generalmente inalámbricos, lo que normalmente se hace utilizando un teléfono inteligente a través de comunicación Bluetooth. Esto significa que cualquiera puede controlar los movimientos del robot con solo tocar sus dedos.

Una industria que se ha beneficiado del soporte robótico es el sector agrícola. Estos robots se pueden controlar o programar de forma inalámbrica para automatizar tareas lentas o repetitivas para los agricultores, permitiéndoles centrarse más en mejorar el rendimiento general de la producción. Algunos de los robots más comunes en la agricultura se utilizan para sembrar, fumigar, cosechar, cosechar y controlar las malas hierbas.

El proyecto

Para nuestros propósitos, vamos a construir un robot que pueda ayudar con el crecimiento básico de las plantas. Cuatro condiciones deben ser ideales para que una planta crezca sana.

1. Temperatura
2. Humedad
3. Humedad del suelo
4. Luz ambiental (intensidad de la luz).

Se utilizarán tres sensores en nuestro robot para monitorear estas condiciones.

Además, para este proyecto, el operador será:

  • Capaz de maniobrar el robot en un radio de 10 a 30 metros mientras toma medidas y selecciona la ubicación ideal para plantar.
  • Capaz de lograr mediciones de temperatura, humedad, humedad del suelo y luz ambiental después de la siembra.
  • Capaz de tomar acciones correctivas para cambiar cualquiera de estas cuatro condiciones.

Aunque este robot está diseñado para cuidar plantas, es importante señalar que el concepto se puede utilizar fácilmente para diferentes aplicaciones cambiando los sensores. Por ejemplo, si equipamos el robot con MQ2, MQ3 o un sensor de gas similar, el robot se puede utilizar para detectar fugas de gas de cualquier GAS como CO2, CO, GLP, etc.

Pero por ahora centrémonos en desarrollar un robot para cuidar plantas.

El diagrama de bloques del sistema.
Los componentes principales del sistema son tres sensores para:

1. Humedad del suelo: se utiliza para medir el contenido de humedad del suelo y proporciona una salida de voltaje analógico de acuerdo con el nivel de humedad medido. Su voltaje de salida disminuye a medida que aumenta el contenido de humedad.

2. Sensor de temperatura y humedad DHT11: mide la temperatura y humedad atmosférica. Proporciona valores digitales directos de temperatura en grados Celsius y humedad en %RH. Es un sensor inteligente.

3. LDR, placa de desarrollo Arduino UNO, módulo Bluetooth, dos motores CC y chip controlador de motor.

El módulo Bluetooth se utiliza para realizar comandos (para mover el robot hacia adelante, hacia atrás, hacia la izquierda y hacia la derecha) desde un teléfono inteligente. Proporciona estos datos, en serie, al microcontrolador Arduino UNO.

La placa Arduino UNO realiza las siguientes tareas:

  • Lee el voltaje de salida analógico del sensor de humedad del suelo y lo convierte a digital. Luego calibra entre un nivel de humedad de 0 a 100%.
  • Lee los valores de temperatura y humedad del sensor DHT11.
  • Lee la salida de voltaje analógico del LDR y calibra la intensidad de la luz entre 0-100%.
  • Recibe diferentes comandos del módulo Bluetooth y gira los dos motores de CC para mover el robot hacia adelante, hacia atrás, hacia la izquierda o hacia la derecha.
  • Envía (transmite) estas lecturas desde los tres sensores a un teléfono inteligente a través del módulo Bluetooth.

El controlador del motor suministra suficiente voltaje y corriente a ambos motores para hacerlos girar. También amplifica la salida de la placa Arduino y acciona los motores.

Los motores de CC impulsan las ruedas izquierda y derecha del robot y mueven el robot hacia adelante, hacia atrás, hacia la izquierda y hacia la derecha.

Ahora, veamos cómo se construye el circuito a partir de este diagrama de bloques.

El diagrama del circuito

Descripción del circuito

  • El módulo HC-05 funciona con los 5V suministrados por la placa Arduino. Se comunica con la placa Arduino mediante pines USART Tx-Rx. Esto significa que su pin Tx está conectado al pin Rx de la placa Arduino y viceversa.
  • El sensor DHT11 también proporciona alimentación de 5 V desde la placa Arduino. Su salida digital está conectada al pin digital D7 de la placa Arduino.
  • La salida analógica del sensor de humedad del suelo está conectada al pin de entrada analógica A1 de la placa Arduino. Requiere un voltaje de polarización de 5 V de la placa Arduino.
  • El LDR está configurado en modo desplegable con la resistencia desplegable de 10 KΩ. Su salida analógica se entrega al pin de entrada analógica A0.
  • Los pines digitales D8, D9, D10 y D11 accionan los dos motores de CC utilizando el chip L293D. Estos pines están conectados a las entradas del L293D y los dos motores están conectados a la salida del chip.
  • El pin de alimentación del motor Vss del L293D (pin número 8) recibe 12 V de la batería.
  • La placa Arduino también recibe una entrada de 12 V de la batería en su pin Vin. Toma una entrada de 12 V y proporciona una salida de 5 V a todos los demás componentes.

Funcionamiento y operación del circuito.
El circuito funciona cuando la batería de 12V está conectada a la placa Arduino UNO y al chip L293D.

  • Inicialmente ambos motores están parados y el robot también está en reposo.
  • Para mover el robot en cualquier dirección, tenemos que dar órdenes desde el smartphone a través de la aplicación de Android basada en Bluetooth.
  • Para ello tenemos que abrir (iniciar) la aplicación Bluetooth de Android en el smartphone y luego buscar el módulo Bluetooth HC05. Una vez que el teléfono inteligente detecta el módulo HC05, debe emparejar el módulo con la aplicación para que pueda enviar comandos desde el teléfono inteligente a través de Bluetooth al módulo HC05 (nota: debe ingresar la contraseña "1234" la primera vez para emparejar con el módulo HC05).
  • Ahora podemos enviar comandos al robot para que avance, retroceda, izquierda o derecha a través del teléfono inteligente a través de la aplicación.

Estos comandos se utilizan para mover el robot (todos estos comandos están definidos en la aplicación de Android):

  • Cuando se envía cualquiera de los comandos anteriores (enviando un carácter directo o presionando el botón de la aplicación), el módulo HC05 lo recibe. El módulo también proporciona este comando al Arduino, en serie, a través de los pines Tx-Rx.
  • Arduino recibe este comando y lo compara con los comandos definidos. Si encuentra una coincidencia, girará los motores izquierdo y derecho en consecuencia para mover el robot en cualquiera de las cuatro direcciones apropiadas.
  • Una vez que el robot inicie su movimiento, se moverá de forma continua hasta que enviemos el comando 'S' para que se detenga.
  • Cuando el robot se detenga, comenzará a leer los valores del sensor DHT11, la humedad del suelo y el LDR. Leerá la salida de voltaje analógico del sensor de humedad del suelo y LDR y la convertirá a un rango de 0 a 100%. También leerá valores digitales de temperatura y humedad del sensor DHT11.
  • Luego transmite los cuatro valores de humedad del suelo, intensidad de la luz, temperatura y humedad al teléfono inteligente a través del módulo Bluetooth, transmitirá continuamente estos cuatro valores cada dos segundos hasta que se detenga.
  • Al recibir la orden de empezar a moverse nuevamente dejará de transmitir valores.
  • El operador puede llevar este robot a la ubicación deseada y medir estas cuatro condiciones. Él o ella obtendrá las lecturas en su teléfono inteligente mientras mueve el robot con solo tocar un dedo.
  • Debería ser fácil programar las condiciones ambientales de temperatura, humedad, humedad del suelo e intensidad de luz en el área cercana.

El programa de software
El programa está escrito en lenguaje C/C++ utilizando la herramienta de software Arduino IDE. También se compila y descarga en la memoria interna (FLASH) del microcontrolador ATMega328 mediante este mismo software.

Aquí está el código del programa:

#incluir
#incluir
#incluir “DHT.h”
#definir LDR_pin A0
#definir solo_moisture_sensor_pin A1
#definir DHTPIN2
#definir DHTTYPE DHT11
Servo solo_moisture_servo;
int intensidad_luz, humedad_suelo;
LCD de cristal líquido (12, 13, 8, 9, 10, 11);
DHT dht(DHTPIN, DHTTYPE);
int motor1Pin1 = 4; //pin 2 en IC L293D
int motor1Pin2 = 5; //pin 7 en IC L293D
int motor2Pin1 = 6; //pin 10 en IC L293D
int motor2Pin2 = 7; //pin 15 en IC L293D
int humedad_sensor_servo_pin = 3;
estado interno;
int bandera de parada = 0;
configuración nula
{
// define los pines como salidas:
pinMode(motor1Pin1, SALIDA);
pinMode(motor1Pin2, SALIDA);
pinMode(motor2Pin1, SALIDA);
pinMode(motor2Pin2, SALIDA);
solo_moisture_servo.attach(moisture_sensor_servo_pin);
solo_moisture_servo.write(0);
Serie.begin(9600);
lcd.comenzar(16, 2);
lcd.claro;
lcd.setCursor(2, 0);
dht.comenzar;
lcd.print(“Registrador de datos”);
lcd.setCursor(6, 1);
lcd.print(“Robot”);
retraso(5000);
lcd.claro;
lcd.print(”t*CH % L % M %”);
}
bucle vacío
{
int h = dht.readHumedad;
int t = dht.readTemperature;
intensidad_luz = analogRead(LDR_pin);
intensidad_luz = mapa(intensidad_luz, 750, 50, 5, 100);
lcd.setCursor(9, 1);
lcd.print(intensidad_luz);
lcd.setCursor(1, 1);
impresión.lcd
lcd.setCursor(5, 1);
lcd.imprimir(h);
si (bandera de parada == 1)
{
humedad_suelo = analogRead(sensor_humedad_suelo_pin);
humedad_suelo = mapa (humedad_suelo, 1015, 100, 0, 100);
lcd.setCursor(13, 1);
lcd.print(suelo_humedad);
Serial.print(“Humedad:”);
Serie.println(h);
Serie.print(“temp:”);
Serial.println
Serie.print(“luz:”);
Serial.println(intensidad_luz);
Serial.print(“humedad:”);
Serial.println(suelo_humedad);
retraso(1000);
}
si (Serie.disponible > 0)
{
estado = Serie.leer;
// si el estado es '1' el motor DC avanzará
si (estado == '1')
{
escritura digital (motor1Pin1, ALTO);
escritura digital (motor1Pin2, BAJO);
escritura digital (motor2Pin1, ALTO);
escritura digital (motor2Pin2, BAJO);
bandera de parada = 0;
solo_moisture_servo.write(0);
}
de lo contrario si (estado == '2')
{
escritura digital (motor1Pin1, ALTO);
escritura digital (motor1Pin2, BAJO);
escritura digital (motor2Pin1, BAJO);
escritura digital (motor2Pin2, BAJO);
bandera de parada = 0;
solo_moisture_servo.write(0);
}
// si el estado es '3' el motor se detendrá
de lo contrario si (estado == '3')
{
escritura digital (motor1Pin1, BAJO);
escritura digital (motor1Pin2, BAJO);
escritura digital (motor2Pin1, BAJO);
escritura digital (motor2Pin2, BAJO);
bandera de parada = 1;
retraso(500);
solo_moisture_servo.write(90);
retraso(500);
}
// si el estado es '4' el motor girará hacia la derecha
de lo contrario si (estado == '4')
{
escritura digital (motor1Pin1, BAJO);
escritura digital (motor1Pin2, BAJO);
escritura digital (motor2Pin1, ALTO);
escritura digital (motor2Pin2, BAJO);
bandera de parada = 0;
solo_moisture_servo.write(0);
}
}
}

(tagsToTranslate)Arduino

Volver al blog

Deja un comentario

Los comentarios deben ser aprobados antes de publicarse.