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

Exibições: 3745

Responder esta

Respostas a este tópico

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

Amauri,
Em minhas experiências tenho notado que exterçar pelo cálculo do tempo fica condicionado a três fatores, no mínimo, no momento em que ela ocorre:
- atrito com o piso
- potência do motor dianteiro (que implica na potência da fonte, bateria)
- velocidade e sentido no qual o veículo está se movimentando (no meu caso)
Se não houver um jeito de ajustar os fatores dinamicamente, o ideal é manter a potencia total no motor e evitar mudancas drasticas no atrito.
Só não utilizei um servo para exterção dianteira porque não tinha um disponível, mas é a solução de melhor custo-benefício.
Mas se quiser um desafio, coloque o potenciometro.

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

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço