Código de Pesquisa

Lição 27/31: Carro-5 SunFounder Smart Car Segue Sua Mão usando Arduino | Robojax

Lição 27/31: Carro-5 SunFounder Smart Car Segue Sua Mão usando Arduino | Robojax

Introdução

Você já quis construir um robô que responde intuitivamente à sua presença? Este projeto transforma um Smart Car padrão da SunFounder em um veículo controlado por gestos que segue sua mão. Em vez de usar um controle remoto ou um aplicativo de smartphone, este carro usa uma combinação de sensores ultrassônicos e infravermelhos para detectar a posição e a distância da sua mão, permitindo que você o guie para a esquerda, direita ou para frente com movimentos naturais simples.

27-SunFounder-Car-5-Follow-Hand

Este projeto faz parte do Curso de Arduino Robojax (Lição 27/31) e é construído usando o kit Arduino 3-em-1 da SunFounder. É uma excelente maneira de aprender sobre fusão de sensores, onde múltiplos sensores trabalham juntos para criar um comportamento mais complexo e responsivo. O valor no mundo real aqui está em entender como combinar diferentes tipos de entradas para tomar decisões, um conceito fundamental em robótica e automação.

Aqui estão algumas ideias práticas que você poderia desenvolver com base nessa lógica:

  • Exposições Interativas: Crie um display robótico pequeno que siga visitantes para chamar sua atenção.
  • Plataforma Autônoma de Desvio de Obstáculos: Modifique o código para que o carro navegue por uma sala desviando de obstáculos em vez de seguir uma mão.
  • Kit Educacional de Robótica: Use isso como um projeto fundamental para ensinar alunos sobre integração de sensores, lógica e controle de motores.
  • Carrinho Inteligente de Entrega: Em um ambiente controlado, essa lógica poderia ser adaptada para um pequeno carrinho que segue uma pessoa em um armazém ou fábrica.

Hardware & Componentes

Este projeto usa os componentes incluídos no kit Arduino 3-em-1 da SunFounder. Os componentes principais que você usará são:

  • Chassi do Smart Car SunFounder: A plataforma física com rodas e motores.
  • Placa Arduino: O "cérebro" do carro que executa o código.
  • Sensor Ultrassônico (HC-SR04): Usado para medir a distância até um objeto (sua mão) na frente do carro.
  • Dois Sensores de Desvio de Obstáculos IR (Infravermelho): Montados nos lados esquerdo e direito para detectar a presença da sua mão nesses lados.
  • Driver de Motor: Um módulo (frequentemente L298N ou similar) usado para controlar a velocidade e a direção dos motores do carro com base nos sinais do Arduino.
  • Fonte de Alimentação: Baterias para alimentar o Arduino e os motores.

Guia de Conexões

car_7_8_follow_hand

Como mencionado no vídeo, as conexões para este projeto são idênticas às explicadas nas lições anteriores para o carro de desvio de obstáculos. Os sensores e motores estão todos conectados aos pinos digitais e analógicos do Arduino. Para uma referência visual, consulte o diagrama de conexões do Smart Car SunFounder.

O código define os pinos específicos usados para cada componente, que são detalhados na próxima seção.

Explicação do Código

Esta seção foca nas partes configuráveis pelo usuário do código que você pode querer ajustar para o seu próprio carro. O programa completo está disponível para download na página de recursos do Robojax.

No topo do esboço, você encontrará as definições de pinos. Estas são as linhas mais críticas para entender se você conectou seu carro de forma diferente do instrutor.

const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;

const int rightIR=7;
const int leftIR=8;

const int trigPin = 3;
const int echoPin = 4;

Aqui está o que cada grupo de pinos faz:

  • Pinos do Motor (A_1A, A_1B, B_1A, B_1B): Estes são os pinos conectados ao driver de motor para controlar os dois motores. Os rótulos "A" e "B" geralmente se referem aos motores esquerdo e direito, respectivamente. Você deve alterá-los se o seu driver de motor estiver conectado a pinos diferentes do Arduino.
  • Pinos do Sensor IR (rightIR, leftIR): Estes pinos de entrada digital leem o sinal dos sensores de obstáculos infravermelhos esquerdo e direito. Um valor de 0 significa que um obstáculo (sua mão) foi detectado, enquanto 1 significa que o caminho está livre.
  • Pinos do Sensor Ultrassônico (trigPin, echoPin): O trigPin é uma saída que envia um pulso ultrassônico curto, e o echoPin é uma entrada que lê a duração do pulso refletido para calcular a distância.

Dentro da função loop(), você encontrará a lógica principal do comportamento. Há uma única variável que você pode querer ajustar:

int speed = 150;

Esta variável speed controla a potência enviada aos motores durante o movimento. Ela pode variar de 0 (parado) a 255 (velocidade máxima). Você pode aumentar este valor (por exemplo, para 200) para um carro mais rápido ou diminuí-lo (por exemplo, para 100) para movimentos mais controlados e lentos.

O código também contém funções como moveForward(), turnLeft() e turnRight(). Essas funções são usadas para controlar o movimento do carro e são chamadas com base nas leituras dos sensores. Você não precisa modificá-las, mas pode usá-las como blocos de construção para criar seus próprios comportamentos personalizados.

Como Funciona a Lógica de "Seguir Sua Mão"

A magia deste projeto está em como o Arduino interpreta os dados dos três sensores. A lógica é simples e é executada continuamente na função loop().

Primeiro, o carro mede a distância até um objeto diretamente à sua frente usando o sensor ultrassônico. Em seguida, ele verifica os dois sensores infravermelhos para ver se há um objeto à sua esquerda ou à sua direita. O processo de tomada de decisão é o seguinte:

  1. Mover para Frente: Se a distância medida pelo sensor ultrassônico for maior que 5 cm, mas menor que 10 cm, o carro se move para frente. Isso cria uma zona "ideal" onde o carro seguirá sua mão.
  2. Virar à Esquerda: Se a distância não estiver nessa zona, o carro verifica os sensores IR. Se o sensor esquerdo estiver bloqueado (sua mão está à esquerda) e o sensor direito estiver livre, o carro vira à esquerda.
  3. Virar à Direita: Por outro lado, se o sensor direito estiver bloqueado e o esquerdo estiver livre, o carro vira à direita.
  4. Parar: Se nenhuma dessas condições for atendida—por exemplo, se sua mão estiver muito longe ou muito perto—o carro para.

Este conjunto simples de regras permite que o carro reaja dinamicamente à posição da sua mão, criando um comportamento de seguir suave e intuitivo.

Demonstração ao Vivo do Projeto

Na demonstração em vídeo, o instrutor mostra o comportamento do carro em tempo real. O monitor serial é usado para exibir a distância lida pelo sensor ultrassônico. Quando o carro está parado e sua mão está longe (por exemplo, 36 cm), ele permanece parado. Assim que você coloca sua mão dentro da zona de 5-10 cm na frente do carro, ele começa a se mover para frente.

A demonstração também destaca a lógica de giro. Quando sua mão é colocada no lado esquerdo do carro, o sensor IR esquerdo é acionado, e o carro vira à esquerda. Da mesma forma, colocar sua mão no lado direito faz o carro virar à direita. O carro continuará a seguir sua mão enquanto você a move, parando somente quando sua mão for removida do alcance dos sensores ou estiver muito perto. Isso confirma que a fusão dos sensores e a lógica estão funcionando como pretendido, criando um projeto responsivo e divertido.

Capítulos

  • [00:00] Introdução ao Carro Inteligente que Segue a Mão
  • [00:35] Sobre o Curso e Kit Arduino Robojax
  • [01:41] Visão Geral do Projeto e Configuração do Código
  • [02:19] Explicação das Definições de Pinos e Configuração
  • [03:19] Lógica do Código para Seguir Sua Mão
  • [05:48] Demonstração ao Vivo do Carro em Ação
  • [07:28] Demonstração Final e Revisão de Desempenho

Imagens

Car 7 8 follow hand
Car 7 8 follow hand
27 SunFounder Car 5 follow hand
27 SunFounder Car 5 follow hand
898-Lesson 27/31: Car-5 SunFounder Smart Car Follows Your Hand
Idioma: C++
/*
Lesson 27/31: Car-5 SunFounder Smart Car Follows Your Hand
Get this code and watch video Download and resource page https://robojax.com/RJT610
YouTube video https://www.youtube.com/watch?v=mcbJlE7-8ro

*/
const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;

const int rightIR=7;
const int leftIR=8;

const int trigPin = 3;
const int echoPin = 4;

void setup() {
  Serial.begin(9600);

  //motor
  pinMode(A_1B, OUTPUT);
  pinMode(A_1A, OUTPUT);
  pinMode(B_1B, OUTPUT);
  pinMode(B_1A, OUTPUT);

  //IR obstacle
  pinMode(leftIR,INPUT);
  pinMode(rightIR,INPUT);
  
  //ultrasonic
  pinMode(echoPin, INPUT);
  pinMode(trigPin, OUTPUT);
}

void loop() {

  float distance = readSensorData();

  int left = digitalRead(leftIR);  // 0: Obstructed   1: Empty
  int right = digitalRead(rightIR);
  int speed = 150;

  if (distance>5 && distance<10){
    moveForward(speed);
  }else if(!left&&right){
    turnLeft(speed);
  }else if(left&&!right){
    turnRight(speed);
  }else{
    stopMove();
  }
}

float readSensorData() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  float distance = pulseIn(echoPin, HIGH) / 58.00; //Equivalent to (340m/s*1us)/2
  return distance;
}

void moveForward(int speed) {
  analogWrite(A_1B, 0);
  analogWrite(A_1A, speed);
  analogWrite(B_1B, speed);
  analogWrite(B_1A, 0);
}

void moveBackward(int speed) {
  analogWrite(A_1B, speed);
  analogWrite(A_1A, 0);
  analogWrite(B_1B, 0);
  analogWrite(B_1A, speed);
}

void turnRight(int speed) {
  analogWrite(A_1B, speed);
  analogWrite(A_1A, 0);
  analogWrite(B_1B, speed);
  analogWrite(B_1A, 0);
}

void turnLeft(int speed) {
  analogWrite(A_1B, 0);
  analogWrite(A_1A, speed);
  analogWrite(B_1B, 0);
  analogWrite(B_1A, speed);
}

void stopMove() {
  analogWrite(A_1B, 0);
  analogWrite(A_1A, 0);
  analogWrite(B_1B, 0);
  analogWrite(B_1A, 0);
}

Arquivos📁

Bibliotecas do Arduino (zip)