Boa Tarde a todos !

Estou montando um Robo autônomo como sou iniciante em linguagem C, esse código achei na net, porem o meu robô não tem buzzer e LCD, (o site que achei o projeto que eu queria fazer http://ferpinheiro.wordpress.com/2012/03/09/criando-robo-com-arduin...) tenho um sonar que é esse aqui (http://www.robocore.net/modules.php?name=GR_LojaVirtual&prod=190) estou utilizando o arduino, como eu uso motores DC uso essa placa para controlar os motores com uma  Ponte H (http://www.robocore.net/modules.php?name=GR_LojaVirtual&prod=200) porem com o código que eu estou usando meu sensor não consegue me informar distâncias pois creio eu que a biblioteca é diferente e não esta funcionando, outra coisa é que uma das rodas a direita fica ligada direta. Não sei como arrumar. Gostaria muito da ajuda de vocês, estou anexando as fotos e o código.

Obrigado desde já.

Abaixo o código e as fotos do meu projeto

Abs a todos.

Esse é o código:

C%C3%B3digo_v1.txt

Fotos:

2012-10-17%2022.48.07.jpg

2012-10-17%2022.46.22.jpg

2012-10-17%2022.47.25.jpg

2012-10-17%2022.47.59.jpg

2012-10-17%2022.46.39.jpg

Consegui galera ! Obrigado a todos que me ajudaram, agora é estudar mais e aperfeiçoar a técnica, queria agradecer em especial ao  Euclides Franco de Rezende e  Jonatas Freitas pela força. Segue Video:

Judite_v1.mp4

https://www.youtube.com/watch?v=te0-hLSKplg&feature=youtu.be

Exibições: 2276

Anexos

As respostas para este tópico estão encerradas.

Respostas a este tópico

sobre a biblioteca do ultrasonico, faz um teste para saber se esta funcionando.

Eu sei que com este sensor funciona.

http://ferpinheiro.wordpress.com/2011/04/29/meu-primeiro-projeto-ar...

Sobre as rodas vc deu uma olhada no manual do seu shield motor.

Não entendi o uso da biblioteca servo.h, você nao esta usando motor DC?

Meu primeiro projeto foi o Blink. o.O

Te recomendo a não desistir do robô, mas comece a estudar o básico, senão você vai ser só mais um dos milhares de especialistas em "Copiar+Colar". Ou seja, conhecimento e intimidade com a tecnologia = Zero.

Outra, código pronto é só como inspiração para novas soluções. Esse projeto ai por exemplo, você só tira o sonar, o restante, nada serve pra você.

Mas vamos para o seu projeto:

No código que você postou são usado servos modificados para rotação continua. Já no seu projeto, pelo que entendi você ta usando motores DC controlados por um L298n. Ou seja, tchau pra Servo.h

Minha dica é: Se queres pular toda aquela parte de estudo sobre como funciona a programação para microcontroladores, Arduino e tal (os Exemplos básicos da IDE), o que eu NÃO RECOMENDO, começa a pesquisar primeiro sobre como funciona uma ponte H. Te adianto que é absurdamente simples, só precisas saber usar a função digitalWrite(); e o IF.

Já o sensor de distância, vai lá, baixa a biblioteca, pega o programa exemplo que vem junto, estuda ele, fez funcionar? Agora sim, integra os dois programas. Ai você vai ter o seu robozinho funcionando e você sabendo pelo menos o mínimo necessário sobre como ele funciona.

Obrigado Andre e Jonatas,

Jonatas, eu to lendo sobre programação e tal, pois quero muito aprender essa linguagem, porem como tenho um trabalho para entregar to correndo com isso aqui ... rsrsrs a ponte H eu até consegui fazer funcionar indo para traz para frente, rodar no proprio eixo e tal, mais ainda não tenho a a habilidade de compilar as duas informação sonar + Ponte H, referente ao sonar percebi que o que eu tenho Sensor Ultrasonico V3.2 URM37, que é bem diferente dos outros que eu vi por ai, existem 3 modulos nele, eu fiz ele funcionar já me mostrando a distância e tal, mais o que eu gostaria de saber mesmo é como eu consigo juntar as duas informações. Obrigado mais uma vez (coloquei um video mostrando os motores funcioando).

 

Abraços

 

 

 

qual o teu algorítimo?

Escreve ai em pseudocódigo mesmo a relação (Velocidade+sentido de cada motor) pela Distancia.

Como faço isso ?

O Código que coloquei para os motores foi esse

//Arduino PWM Speed Control:
int E1 = 5; 
int M1 = 4;
int E2 = 6;                     
int M2 = 7;                       
 
void setup()
{
    pinMode(M1, OUTPUT);  
    pinMode(M2, OUTPUT);
}
 
void loop()
{
  int value;
  for(value = 0 ; value <= 255; value+=5)
  {
    digitalWrite(M1,LOW);  
    digitalWrite(M2, LOW);      
    analogWrite(E1, value);   //PWM Speed Control
    analogWrite(E2, value);   //PWM Speed Control
    delay(30);
  
}
Mias uma coisa tentei colocar o sonar para funcionar apareceu esse erro
avrdude: stk500_getsync(): not in sync: resp=0x00
O que pode ser ?

O sonar  usa os pinos 0 e 1 (RX-TX)?

Se usa você tem q desconectar ele para programar o Arduino.

Mas o que eu disse do algoritmo é: QUal o comportamento que você quer pro seu robô?

QUer que ele vire pra esquerda quando achar um obstaculo a 50mm, pra direita? quer que ele pare e dê a ré? O que ele faz quando nao tem nada na frente dele, anda reto ou executa uma trajetória randômica?

Ola Jonatas, consegui fazer o sonar funcionar e a ponte H, eu quero que o robo quando identificar um obstaculo 5cm vire a direita, se tiver obstaculo na esquerda ele de ré, quando não tiver nada siga em frente, deixa eu te fazer uma pergunta com esses dois códigos eu coloco as variáveis que eu quero (IF) ou salvo eles primeiros em CPP ou H para depois quando eu colocar o # include coloco as variaveis que eu quero ? você consegue me mostrar um exemplo ? para que eu possa fazer o código ?

Obrigado pela paciência.

um exemplo:

    if ( position > x ){
      analogWrite(5,Output);
      digitalWrite (6, LOW);
//      delay(10);
    }
    else {

      if ( position < x){
        analogWrite(6,Output);
        digitalWrite (5, LOW);
      }
      else{
        digitalWrite (5, HIGH);
        digitalWrite (6, HIGH);
      }
    }
  }
  else{
    digitalWrite (5, HIGH);
    digitalWrite (6, HIGH);
  }

Aqui estou mudando o sentido e a velocidade de um motor de acordo com a leitura de um encoder optico. O output é o valor gerado por uma função PID, mas seria o teu valor do PWM.

Estou começando a entender, o output é o que o sonar vai transmitir certo ? eu defino um valor para ele correto ? assim conforme o sonar enviar uma posição e é igual a posição que eu defini no output ele executa o if ?

No SEU caso, oq o sonar vai transmitir seria o X do meu código. E o output seria a velocidade do motor (0-255).

Jonatas,

Conversei com o meu amigo e chegamos nesse código, nao testei ainda pq to fora de casa sera que atende o que eu quero fazer ? 

// # Connection:
// # Pin 1 VCC (URM V3.2) -> VCC (Arduino)
// # Pin 2 GND (URM V3.2) -> GND (Arduino)
// # Pin 4 PWM (URM V3.2) -> Pin 3 (Arduino)
// # Pin 6 COMP/TRIG (URM V3.2) -> Pin 5 (Arduino)
// #
int URPWM = 3; // PWM Output 0-25000US,Every 50US represent 1cm
int URTRIG=5; // PWM trigger pin
int E1 = 4;
int M1 = 5;
int E2 = 7;
int M2 = 6;

unsigned int Distance=0;
uint8_t EnPwmCmd[4]={0x44,0x02,0xbb,0x01}; // distance measure command

void setup(){ // Serial initialization
Serial.begin(9600); // Sets the baud rate to 9600
PWM_Mode_Setup();
pinMode(M1, OUTPUT);
pinMode(M2, OUTPUT);
}

void loop()
{
int value;
for(value = 0 ; value <= 255; value+=5)
{
digitalWrite(M1,HIGH);
digitalWrite(M2, HIGH);
analogWrite(E1, value); //PLL Speed Control
analogWrite(E2, value); //PLL Speed Control
delay(30);
}
PWM_Mode();
delay(20);
} //PWM mode setup function

void PWM_Mode_Setup(){
pinMode(URTRIG,OUTPUT); // A low pull on pin COMP/TRIG
digitalWrite(URTRIG,HIGH); // Set to HIGH

pinMode(URPWM, INPUT); // Sending Enable PWM mode command

for(int i=0;i<4;i++){
Serial.write(EnPwmCmd[i]);
}
}

void PWM_Mode(){ // a low pull on pin COMP/TRIG triggering a sensor reading
digitalWrite(URTRIG, LOW);
digitalWrite(URTRIG, HIGH); // reading Pin PWM will output pulses

unsigned long DistanceMeasured=pulseIn(URPWM,LOW);

if(DistanceMeasured==50000){ // the reading is invalid.
Serial.print("Invalid");
}
else{
Distance=DistanceMeasured/50; // every 50us low level stands for 1cm
}
Serial.print("Distance=");
Serial.print(Distance);
Serial.println("cm");
}

Abs

Consegui usar este código para que os motores funcionassem junto com a leitura do sonar, mais estou tendo dificuldades em incluir a variável que você me mostrou .... olha como eu fiz:

// # Connection:
// # Pin 1 VCC (URM V3.2) -> VCC (Arduino)
// # Pin 2 GND (URM V3.2) -> GND (Arduino)
// # Pin 4 PWM (URM V3.2) -> Pin 3 (Arduino)
// # Pin 6 COMP/TRIG (URM V3.2) -> Pin 5 (Arduino)
// #
int URPWM = 3; // PWM Output 0-25000US,Every 50US represent 1cm
int URTRIG=5; // PWM trigger pin
int E1 = 4;
int M1 = 5;
int E2 = 7;
int M2 = 6;

unsigned int Distance=0;
uint8_t EnPwmCmd[4]={0x44,0x02,0xbb,0x01}; // distance measure command

void setup(){ // Serial initialization
Serial.begin(9600); // Sets the baud rate to 9600
PWM_Mode_Setup();
pinMode(M1, OUTPUT);
pinMode(M2, OUTPUT);
}

void loop()
{
int value;
for(value = 0 ; value <= 255; value+=5)
{
digitalWrite(M1,HIGH);
digitalWrite(M2, HIGH);
analogWrite(E1, value); //PLL Speed Control
analogWrite(E2, value); //PLL Speed Control
delay(30);
}
PWM_Mode();
delay(20);
} //PWM mode setup function

void PWM_Mode_Setup(){
pinMode(URTRIG,OUTPUT); // A low pull on pin COMP/TRIG
digitalWrite(URTRIG,HIGH); // Set to HIGH

pinMode(URPWM, INPUT); // Sending Enable PWM mode command

for(int i=0;i<4;i++){
Serial.write(EnPwmCmd[i]);
}
}

void PWM_Mode(){ // a low pull on pin COMP/TRIG triggering a sensor reading
digitalWrite(URTRIG, LOW);
digitalWrite(URTRIG, HIGH); // reading Pin PWM will output pulses

unsigned long DistanceMeasured=pulseIn(URPWM,LOW);

if ( position > 10){
analogWrite(5, 255);
digitalWrite (6, LOW);
// delay(10);
}
else {

if ( position < 10){
analogWrite(6,255);
digitalWrite (5, LOW);
}
else{
digitalWrite (5, HIGH);
digitalWrite (6, HIGH);
}
}
}
else{
digitalWrite (5, HIGH);
digitalWrite (6, HIGH);
}

Serial.print("Distance=");
Serial.print(Distance);
Serial.println("cm");
}

Esta aparecendo esse erro:

sketch_oct21a.cpp: In function 'void PWM_Mode()':
sketch_oct21a:55: error: 'position' was not declared in this scope
sketch_oct21a.cpp: At global scope:
sketch_oct21a:72: error: expected unqualified-id before 'else'
sketch_oct21a:78: error: expected constructor, destructor, or type conversion before '.' token
sketch_oct21a:79: error: expected constructor, destructor, or type conversion before '.' token
sketch_oct21a:80: error: expected constructor, destructor, or type conversion before '.' token
sketch_oct21a:81: error: expected declaration before '}' token

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço