Boa tarde a todos,
estou tentando programar um robô que anda normalmente e quando encontra algo a menos de 15cm de distância ele, da ré e vira para a direita.
Estou usando um carrinho de controle remoto com 2 motores, 1 na frente e 1 atrás.
O da frente movimenta as rodas para a direita e para a esquerda e o de trás é a tração.
Quando eu adicionar corrente no da frente, passando do fio amarelo para o verde(como podem ver na segunda imagem), ele vira para a direita e se eu
inverter o sentido ele vira para a direção contrária.
Como podem ver essa é uma imagem do motor dianteiro.
Aquela parte branca mais a direita da imagem é que fica conectada ao motor. Quando o motor for ligado, movimenta esta peça que por
sua vez faz com que as rodas virem para a direita ou para a esquerda, simultaneamente.
Um dos problemas está ai, pois se o motor der mais do que uma volta aquela peça desencaixa e não volta mais, deixando as rodas "livres".
Estou medindo a distância com o sensor Ultra-sônico, que me devolve a distância em cm.
Mas como sou leigo em programação acredito que eu esteja fazendo algo errado na
programação, pois os motores M1 e M2 não são acionados e minha programação está muito básica,
muito leiga.
A tensão que chega a eles é de 0.08V.
Eu sinto eles tentando girar, mas não conseguem devido a baixa tensão.
Minha programação:
#include <AFMotor.h>
#include "Ultrasonic.h"
Ultrasonic ultrasonic(2,5);
int Echo_pin = 5;
int Trig_pin = 2;
AF_DCMotor motor (1, MOTOR12_64KHZ); // Motor cc em M1
AF_DCMotor motor2 (2, MOTOR12_64KHZ); //motor CC em M2
void setup() {
Serial.begin(9600);
pinMode(Echo_pin, INPUT);
pinMode(Trig_pin, OUTPUT);
motor.setSpeed(255);
motor2.setSpeed(100);
}
// Liga o motor (tração)
void loop() {
motor.run(FORWARD);
digitalWrite(Trig_pin, LOW);
delayMicroseconds(2);
digitalWrite(Trig_pin, HIGH);
delayMicroseconds(10);
digitalWrite(Trig_pin, LOW);
int i = (ultrasonic.Ranging(CM));
Serial.print("Distancia em CM: ");
Serial.println(i);
if (i < 10) {
motor.run(RELEASE);
motor2.run(FORWARD);
delay(10);
motor2.run(RELEASE);
motor.run(BACKWARD);
}
}
Quando cito motor.run(FORWARD) ou motor2.run(FORWARD)
a tensão(0.08V) segue do fio amarelo para o fio verde.
OBS: Tem o Arduino que vai abaixo do MotorShield e é alimentado com 6V.
Muito Obrigado,
Amauri
Tags:
Acredito que se não der certo com um potenciômetro e cálculo do tempo que o motor demore para fazer isso eu estou pensando em trocar pelo servo motor..
Será muito difícil se eu precisar implementar mais um motor na roda traseira, pois estou usando um motor com engrenagens de diferencial, assim como o Edson citou.
Muito obrigado por mais uma dica.
Abraços,
Amauri
Aqui tem a documentação completa deste Adafruit Motor Shield, inclusive das bibliotecas AF_Motor e AccellStepper.
http://learn.adafruit.com/downloads/pdf/adafruit-motor-shield.pdf
Obrigado,
tenho que certeza que irá me ajudar.
Abraços,
Amauri
Amauri
A algum tempo atrás construí um robô com as mesmas características do seu. O meu foi baseado em uma antiga publicação do "Marcio José Soares" na revista "Mecatrônica Fácil" e você pode ver no site do autor: http://www.arnerobotics.com.br/ > Robótica > "Robô Inteligente I"
Neste projeto ele utiliza dois motores independentes na frente e uma roda boba atrás e também um servo-motor que é utilizado para guiar o sonar. Construí o mesmo com algumas modificações na parte mecânica e na eletrônica, mas a versão original realiza exatamente o que você quer.
Muito obrigado Celso.
Muito interessante o site.
Abraços,
Amauri
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por