Um robô controlado por Bluetooth com datalogger

Tempo de leitura: 7 minutes

Os robôs estão apoiando comportamentos, atividades e trabalhos humanos de várias maneiras notáveis. De braços e mãos robóticos a robôs que fornecem tarefas de vigilância e manutenção, essa tecnologia está avançando rapidamente para ajudar de maneiras que tornam certas tarefas mais seguras, rápidas ou acessíveis.

Esses robôs são automáticos – o que significa que podem operar automaticamente sem qualquer intervenção humana – ou controlados remotamente, de modo que operam manualmente a partir de um local remoto. Os robôs controlados remotamente são normalmente sem fio.

Exemplos de robôs controlados remotamente incluem:

  • Robôs cobra – podem entrar em túneis ou dutos extremamente estreitos ou pequenos. Esses robôs são usados principalmente para encontrar problemas (como um vazamento em um duto), mas também podem ser usados para operações de busca e resgate.
  • Robôs de combate a incêndio – são usados como um extintor de incêndio que pulveriza água ou CO2 em um incêndio. Um operador controla este robô de um local seguro e tenta extinguir o fogo para que o bombeiro não tenha que colocar sua vida em perigo.
  • Robôs difusores de minas – são usados para difundir bombas vivas ou minas em um campo de batalha. Um operador pode controlar seus movimentos de uma distância remota e segura, difundindo bomba (ou mina) sem arriscar uma vida.

 

O robô controlado por Bluetooth

À medida que os robôs avançam, também aumenta a capacidade de se comunicar com eles. Os robôs de controle remoto de hoje geralmente são sem fio, o que normalmente é feito usando um smartphone via comunicação Bluetooth. Isso significa que qualquer pessoa pode controlar os movimentos do robô com o toque dos dedos.

Uma indústria que se beneficiou do suporte robótico é o setor agrícola. Esses robôs podem ser controlados sem fio ou programados para automatizar tarefas lentas ou repetitivas para os agricultores, permitindo que eles se concentrem mais em melhorar o rendimento geral da produção. Alguns dos robôs mais comuns na agricultura são usados para semear, pulverizar, colher, colher e controlar ervas daninhas.

 

O projeto

Para nossos objetivos, vamos construir um robô que pode ajudar no crescimento básico da planta. Quatro condições devem ser ideais para uma planta crescer saudável.

1. Temperatura
2. Umidade
3. Umidade do solo
4. Luz ambiente (intensidade da luz).

Três sensores serão usados em nosso robô para monitorar essas condições.

Além disso, para este projeto, o operador será:

  • Capaz de manobrar o robô em um raio de 10-30 metros enquanto faz medições e seleciona o melhor local ideal para o plantio.
  • Capaz de obter as medidas de temperatura, umidade, umidade do solo e luz ambiente após o plantio.
  • Capaz de tomar ações corretivas para alterar qualquer uma dessas quatro condições.

Embora este robô seja construído para cuidar da planta, é importante observar que o conceito pode ser facilmente usado para diferentes aplicações, alterando os sensores. Por exemplo, se equiparmos o robô com MQ2, MQ3 ou um sensor de gás semelhante, o robô pode ser usado para detectar vazamento de gás de qualquer GAS como CO2, CO, GPL, etc.

Mas, por enquanto, vamos nos concentrar no desenvolvimento de um robô para cuidar das plantas.

O diagrama de blocos do sistema

Os principais blocos de construção do sistema são três sensores para:

1. Umidade do solo: usado para medir o teor de umidade no solo e fornece a saída de tensão analógica de acordo com o nível de umidade medido. Sua tensão de saída diminui à medida que o teor de umidade aumenta.

2. Sensor de temperatura e umidade DHT11: mede a temperatura atmosférica e a umidade. Ele fornece valores digitais diretos para temperatura em Celsius e para umidade em% UR. É um sensor inteligente.

3. LDR, placa de desenvolvimento Arduino UNO, módulo Bluetooth, dois motores DC e chip de driver de motor.

O módulo Bluetooth é usado para fins de comando (para mover o robô para frente, para trás, para a esquerda e para a direita) de um smartphone. Ele fornece esses dados, em série, para o microcontrolador Arduino UNO.

A placa Arduino UNO executa as seguintes tarefas:

  • Lê a tensão de saída analógica do sensor de umidade do solo e a converte em digital. Em seguida, ele o calibra entre um nível de umidade de 0 – 100%.
  • Lê os valores de temperatura e umidade do sensor DHT11.
  • Lê a saída de tensão analógica do LDR e calibra a intensidade da luz entre 0-100%.
  • Recebe diferentes comandos do módulo Bluetooth e gira os dois motores DC para mover o
  • robô para frente, para trás, para a esquerda ou para a direita.
  • Envia (transmite) essas leituras de todos os três sensores para um smartphone por meio do módulo Bluetooth.

O driver do motor fornece tensão e corrente suficientes para ambos os motores para girá-los. Ele também amplifica a saída da placa Arduino e aciona os motores.

Os motores DC movem as rodas esquerda e direita do robô e movem o robô para frente, para trás, esquerda e direita.

Agora, vamos ver como o circuito é construído a partir deste diagrama de blocos.

O diagrama de circuito

 

A descrição do circuito

  • O módulo HC-05 opera no 5V fornecido pela placa Arduino. Ele se comunica com a placa Arduino com os pinos USART Tx-Rx. Isso significa que seu pino Tx está conectado ao pino Rx da placa Arduino e vice-versa.
  • O sensor DHT11 também fornece a alimentação de 5 V da placa Arduino. Sua saída digital é conectada ao pino digital D7 da placa Arduino.
  • A saída analógica do sensor de umidade do solo é conectada ao pino de entrada analógica A1 da placa Arduino. Requer tensão de polarização de 5 V da placa Arduino.
  • O LDR é configurado no modo pull-down com o resistor pull-down de 10 KΩ. Sua saída analógica é dada ao pino de entrada analógica A0.
  • Os pinos digitais D8, D9, D10 e D11 acionam os dois motores DC usando o chip L293D. Esses pinos são conectados às entradas do L293D e os dois motores são conectados à saída do chip.
  • O pino Vss de alimentação do motor de L293D (pino n ° 8) recebe 12 V da bateria.
  • A placa Arduino também recebe entrada de 12 V para seu pino Vin da bateria. Ele obtém entrada de 12 V e fornece 5 V de saída para todos os outros componentes.

 

Circuito funcionando e operação

A operação do circuito começa quando a bateria de 12 V é conectada à placa Arduino UNO e ao chip L293D.

  • Inicialmente, ambos os motores estão parados e o robô também está em repouso.
  • Para mover o robô em qualquer direção, temos que dar comandos do smartphone por meio do aplicativo Android baseado em Bluetooth.
  • Para fazer isso, temos que abrir (iniciar) o aplicativo Bluetooth Android no smartphone e, em seguida, procurar o módulo HC05 Bluetooth. Assim que o smartphone detecta o módulo HC05, é necessário emparelhar o módulo com o aplicativo para que ele possa enviar comandos do smartphone via Bluetooth para o módulo HC05 (observação: é necessário inserir a senha “1234” na primeira vez para emparelhar com o módulo HC05).
  • Agora, podemos enviar comandos para o robô avançar, retroceder, esquerda ou direita através do smartphone através do aplicativo.

Esses comandos são usados para mover o robô (todos esses comandos são definidos no aplicativo Android):

  • Quando algum dos comandos acima é enviado (enviando um caractere direto ou pressionando o botão no aplicativo), ele é recebido pelo módulo HC05. O módulo fornece ainda esse comando ao Arduino, em série, por meio dos pinos Tx-Rx.
  • O Arduino recebe esse comando e o compara com os comandos definidos. Se encontrar uma correspondência, ele girará os motores esquerdo e direito de acordo para mover o robô em qualquer uma das quatro direções apropriadas.
  • Uma vez que o robô começa seu movimento, ele se moverá continuamente até enviarmos o comando ‘S’ para parar.
  • Quando o robô para, ele começa a ler os valores do sensor do DHT11, umidade do solo e LDR. Ele irá ler a saída de tensão analógica do sensor de umidade do solo e do LDR e convertê-la em uma faixa de 0 a 100%. Ele também lerá os valores digitais de temperatura e umidade do sensor DHT11.
  • Em seguida, ele transmite todos os quatro valores de umidade do solo, intensidade da luz, temperatura e umidade para o smartphone por meio do módulo Bluetooth. Ele transmitirá continuamente esses quatro valores a cada dois segundos até que seja interrompido.
  • Ao receber o comando para começar a se mover novamente, ele irá parar de transmitir os valores.
  • O operador pode levar este robô ao local desejado e medir essas quatro condições. Ele obterá as leituras em seu smartphone enquanto move o robô com o toque de um dedo.
  • Deve ser fácil programar as condições ambientais de temperatura, umidade, umidade do solo e intensidade da luz na área próxima

 

O programa de software

O programa é escrito em linguagem C/C ++ usando a ferramenta de software Arduino IDE. Também é compilado e baixado na memória interna (FLASH) do microcontrolador ATMega328 usando este mesmo software.

Aqui está o código do programa:

#include <Servo.h>
#include <LiquidCrystal.h>
#include “DHT.h”
#define LDR_pin A0
#define soil_moisture_sensor_pin A1
#define DHTPIN 2
#define DHTTYPE DHT11

Servo soil_moisture_servo;
int light_intensity, soil_moisture;

LiquidCrystal lcd(12, 13, 8, 9, 10, 11);

DHT dht(DHTPIN, DHTTYPE);

int motor1Pin1 = 4; // pin 2 on L293D IC
int motor1Pin2 = 5; // pin 7 on L293D IC
int motor2Pin1 = 6; // pin 10 on L293D IC
int motor2Pin2 = 7; // pin 15 on L293D IC
int moisture_sensor_servo_pin = 3;
int state;
int stopflag = 0;

void setup()
{
  // define os pinos como saídas:
  pinMode(motor1Pin1, OUTPUT);
  pinMode(motor1Pin2, OUTPUT);
  pinMode(motor2Pin1, OUTPUT);
  pinMode(motor2Pin2, OUTPUT);
  soil_moisture_servo.attach(moisture_sensor_servo_pin); 
  soil_moisture_servo.write(0);
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.clear();
  lcd.setCursor(2, 0);
  dht.begin();
  lcd.print(“Data logger”);
  lcd.setCursor(6, 1);
  lcd.print(“Robot”);
  delay(5000);
  lcd.clear();
  lcd.print(” t*C H % L % M %”);
}

void loop()
{
  int h = dht.readHumidity();
  int t = dht.readTemperature();
  light_intensity = analogRead(LDR_pin);
  light_intensity = map(light_intensity, 750, 50, 5, 100);
  lcd.setCursor(9, 1);
  lcd.print(light_intensity);
  lcd.setCursor(1, 1);
  lcd.print(t);
  lcd.setCursor(5, 1);
  lcd.print(h);
  if (stopflag == 1)
  {
    soil_moisture = analogRead(soil_moisture_sensor_pin);
    soil_moisture = map(soil_moisture, 1015, 100, 0, 100);
    lcd.setCursor(13, 1);
    lcd.print(soil_moisture);
    Serial.print(“Humidity:”);
    Serial.println(h);
    Serial.print(“temp:”);
    Serial.println(t);
    Serial.print(“light:”);
    Serial.println(light_intensity);
    Serial.print(“moisture:”);
    Serial.println(soil_moisture);
    delay(1000);   
  }
  if (Serial.available() > 0)
  {
    state = Serial.read();
    // se o estado for '1', o motor DC irá avançar
    if (state == ‘1’)
    {
      digitalWrite(motor1Pin1, HIGH);
      digitalWrite(motor1Pin2, LOW);
      digitalWrite(motor2Pin1, HIGH);
      digitalWrite(motor2Pin2, LOW);
      stopflag = 0;    
      soil_moisture_servo.write(0);     
    } else if (state == ‘2’) {
      digitalWrite(motor1Pin1, HIGH);
      digitalWrite(motor1Pin2, LOW);
      digitalWrite(motor2Pin1, LOW);
      digitalWrite(motor2Pin2, LOW);
      stopflag = 0;     
      soil_moisture_servo.write(0);
    } else if (state == ‘3’) { // se o estado for '3' o motor irá parar
      digitalWrite(motor1Pin1, LOW);
      digitalWrite(motor1Pin2, LOW);
      digitalWrite(motor2Pin1, LOW);
      digitalWrite(motor2Pin2, LOW);
      stopflag = 1;
      delay(500);
      soil_moisture_servo.write(90);
      delay(500);
    } else if (state == ‘4’) { // se o estado for '4', o motor girará à direita
      digitalWrite(motor1Pin1, LOW);
      digitalWrite(motor1Pin2, LOW);
      digitalWrite(motor2Pin1, HIGH);
      digitalWrite(motor2Pin2, LOW);
      stopflag = 0;     
      soil_moisture_servo.write(0);
    }
  }
}