Índice:
- Etapa 1: Caixa Preta
- Etapa 2: Arduino
- Etapa 3: anexando o Arduino ao Blackbox
- Etapa 4: sensor ultrassônico
- Etapa 5: Conexão da placa de ensaio do sensor ao Arduino
- Etapa 6: blindagem do motor
- Etapa 7: Conectando a blindagem do motor ao Arduino
- Etapa 8: Conectando os 4 motores e baterias para blindar
- Etapa 9: programe o robô
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Como construir um robô para evitar obstáculos
Etapa 1: Caixa Preta
a primeira etapa usei uma caixa preta como base para meu robô.
Etapa 2: Arduino
O Arduino é o cérebro de todo o sistema e orquestra nossos motores
Etapa 3: anexando o Arduino ao Blackbox
Anexei o arduino à caixa preta usando cola quente
Etapa 4: sensor ultrassônico
Para fazer um robô que se mova sozinho, precisamos de algum tipo de entrada, um sensor que se ajuste ao nosso objetivo. Um sensor ultrassônico é um instrumento que mede a distância até um objeto usando ondas sonoras ultrassônicas. Um sensor ultrassônico usa um transdutor para enviar e receber pulsos ultrassônicos que retransmitem informações sobre a proximidade de um objeto
Etapa 5: Conexão da placa de ensaio do sensor ao Arduino
Usei fios para fazer a conexão entre a placa de ensaio e o arduino.
Preste atenção que seu sensor de ping pode ter um layout de pino diferente, mas deve ter um pino de tensão, pino de aterramento, pino de trigonometria e um pino de eco.
Etapa 6: blindagem do motor
As placas Arduino não podem controlar os motores CC por conta própria, porque as correntes que geram são muito baixas. Para resolver esse problema, usamos blindagem do motor. A blindagem do motor tem 2 canais, o que permite o controle de dois motores CC, ou 1 motor de passo. … Ao endereçar esses pinos, você pode selecionar um canal do motor para iniciar, especificar a direção do motor (polaridade), definir a velocidade do motor (PWM), parar e iniciar o motor e monitorar a absorção de corrente de cada canal
Etapa 7: Conectando a blindagem do motor ao Arduino
Basta conectar a blindagem do motor ao arduino com os fios do sensor triturados
Etapa 8: Conectando os 4 motores e baterias para blindar
Cada blindagem do motor tem (pelo menos) dois canais, um para os motores e um para uma fonte de alimentação, conecte-os um em relação ao outro
Etapa 9: programe o robô
execute este código
#include #include
Sonar NewPing (TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
AF_DCMotor motor1 (1, MOTOR12_1KHZ); AF_DCMotor motor2 (2, MOTOR12_1KHZ); AF_DCMotor motor3 (3, MOTOR34_1KHZ); AF_DCMotor motor4 (4, MOTOR34_1KHZ); Servo myservo;
#define TRIG_PIN A2 #define ECHO_PIN A3 #define MAX_DISTANCE 150 #define MAX_SPEED 100 #define MAX_SPEED_OFFSET 10
boolean goesForward = false; distância interna = 80; int speedSet = 0;
void setup () {
myservo.attach (10); myservo.write (115); atraso (2000); distância = leitura (); atraso (100); distância = leitura (); atraso (100); distância = leitura (); atraso (100); distância = leitura (); atraso (100); }
loop vazio () {distância interna R = 0; distância interna L = 0; atraso (40); if (distância <= 15) {moveStop (); atraso (50); mover para trás(); atraso (150); moveStop (); atraso (100); distanceR = lookRight (); atraso (100); distanceL = lookLeft (); atraso (100);
if (distanceR> = distanceL) {turnRight (); moveStop (); } else {turnLeft (); moveStop (); }} else {moveForward (); } distância = leitura (); }
int lookRight () {myservo.write (50); atraso (250); distância interna = leitura (); atraso (50); myservo.write (100); distância de retorno; }
int lookLeft () {myservo.write (120); atraso (300); distância interna = leitura (); atraso (100); myservo.write (115); distância de retorno; atraso (100); }
leitura interna () {atraso (70); int cm = sonar.ping_cm (); se (cm == 0) {cm = 200; } return cm; }
void moveStop () {motor1.run (RELEASE); motor2.run (RELEASE); motor3.run (RELEASE); motor4.run (RELEASE); } void moveForward () {
if (! vai para a frente) {vai para a frente = verdadeiro; motor1.run (FORWARD); motor2.run (FORWARD); motor3.run (FORWARD); motor4.run (FORWARD); para (speedSet = 0; speedSet <MAX_SPEED; speedSet + = 2) {motor1.setSpeed (speedSet); motor2.setSpeed (speedSet); motor3.setSpeed (speedSet); motor4.setSpeed (speedSet); atraso (5); }}}
void moveBackward () {goesForward = false; motor1.run (PARA TRÁS); motor2.run (PARA TRÁS); motor3.run (PARA TRÁS); motor4.run (PARA TRÁS); para (speedSet = 0; speedSet <MAX_SPEED; speedSet + = 2) {motor1.setSpeed (speedSet); motor2.setSpeed (speedSet); motor3.setSpeed (speedSet); motor4.setSpeed (speedSet); atraso (5); } void turnLeft () {motor1.run (BACKWARD); motor2.run (PARA TRÁS); motor3.run (FORWARD); motor4.run (FORWARD); atraso (500); motor1.run (FORWARD); motor2.run (FORWARD); motor3.run (FORWARD); motor4.run (FORWARD); }
void turnLeft () {motor1.run (BACKWARD); motor2.run (PARA TRÁS); motor3.run (FORWARD); motor4.run (FORWARD); atraso (500); motor1.run (FORWARD); motor2.run (FORWARD); motor3.run (FORWARD); motor4.run (FORWARD); }