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

  • Leonardo Borges da Silva

    Boa Tarde !

  • cara vc pode me ajudar em uma coisa ?

  • 16:33
  • Eu

    Olá Leonardo. se estiver ao meu alcance...

  • 17:57
  • Leonardo Borges da Silva

    cara estou montando um robo autonomo

  • e estou apanhando com o código C

  • 17:59
  • Eu

    Do Arduino?

  • Leonardo Borges da Silva

    sim

  • Eu

    Que tipo de robo?

  • Leonardo Borges da Silva

    montei ele com duas rodas com motores DC

  • com uma ponte h

  • e um sonar

  • fiz os motores funcionarem

  • e o sonar tambem

  • mais não consigo criar a variavel que faz ele desviar das coisas

  • 18:01
  • Leonardo Borges da Silva

    criei um tópico

  • Eu

    Com o sensor é possível saber a que distância está o obstáculo?

  • Leonardo Borges da Silva

    sim

  • fiz um topico com algumas fotos e o código que estou tentando utilizar

  • Primeiro Projeto Arduino, Dúvidas

  • 18:04
  • Eu

    Então vc. precisa de 2 variáveis para controle a atual e a anterior, quando a atual for menor que a anterior, você deve comparar com o outro sensor. Se as variaveis atuais dos 2 sensores estiverem menores que a anterior, significa que o robo está se aproximando de um obstáculo sem chance de desviar. você deve retornar os 2 motores, se um dos lados estiver a atual maior que a anterior, significa que ali há um espaço de escape. deve acionar o motor do lado contrário e vice-versa.

  • 18:06
  • Eu

    Você está usando sensores sonares?

  • Leonardo Borges da Silva

    sim

  • entendi o que vc me explicou

  • Eu

    Consegue ter a medida de distância com eles?

  • Leonardo Borges da Silva

    mais não consigo colocar isso em C

  • consigo

  • Eu

    Você tem quantos sensores?

  • Leonardo Borges da Silva

    1 só

  • 18:08
  • Eu

    Então o máximo que pode fazer é tentar desviar para um só lado, e torcer para que haja espaço, ou então refazer o teste de distância e virar para o outro lado, ou dar marcha a ré.

  • Leonardo Borges da Silva

    é esse aqui o sensor

  • http://www.robocore.net/modules.php?name=GR_LojaVirtual&prod=190

  • você pode me mostrar um exemplo ?

  • se não for te trapalhar é claro

  • Eu

    Eu tenho um sensor desses aqui, mas ainda não o usei para este tipo de aplicação. Mas vc. entendeu a lógica que lhe expliquei?

  • Espere que vou lá ver se é igual ao meu.

  • Leonardo Borges da Silva

    entendi a lógica

  • mais como não entendo muito da linguagem

  • tenho dificuldades em digitar o código

  • 18:12
  • Eu

    Espere que vou dar uma olhada no manual.

  • Leonardo Borges da Silva

    Ok muito Obrigado

  • 18:14
  • Eu

    A conecção com o Arduino está TTL ou PWM?

  • Leonardo Borges da Silva

    PWM

  • 18:16
  • Eu

    Entre os motores e as rodas qual está sendo a redução?

  • 18:18
  • Leonardo Borges da Silva

    não esta especificado

  • eu comprei a base pronta

  • http://lojabrasilrobotics.blogspot.com.br/2011/10/plataforma-roboti...

  • é essa aqui

  • eu abri um topico e coloquei algumas fotos

  • 18:20
  • Eu

    Vc. chegou a ver isso: http://letsmakerobots.com/node/5629

  • Leonardo Borges da Silva

    olhei sim

  • 18:22
  • Leonardo Borges da Silva

    mais não entedi

  • entendi**

  • 18:22
  • Eu

    Este é o exemplo indicado lá no site do sensor. O meu é diferente do seu, não tem tantos pinos.

  • Leonardo Borges da Silva

    hummm entendi

  • você viu o código que eu fiz e não deu certo ?

  • Eu

    Ainda não vc. não passou o link. Veja como este tipo de robo e comporta:http://blog.makezine.com/2009/03/05/mr-green-an-arduino-robot/

  • 18:27
  • Leonardo Borges da Silva

    aqui o post

  • http://labdegaragem.com/forum/topics/primeiro-projeto-arduino-d-vid...

  • Eu

    Veja que o sensor é movido de um lado para o outro para que ele "veja" se há escapatória quando está em vias de se chocar com algo.

  • Leonardo Borges da Silva

    eu vi esse video

  • Eu

    Colocou isso no seu?

  • Leonardo Borges da Silva

    estava focando nesse projeto porem sem o LCD e o Buzzer

  • http://ferpinheiro.wordpress.com/2012/03/09/criando-robo-com-arduin...

  • Eu

    Isso poupa ter que colocar mais de um sensor no robo.

  • Vou lá no link que me passou.

  • Leonardo Borges da Silva

    ok obrigado

  • 18:30
  • Leonardo Borges da Silva

    um rapaz deixou um exemplo vc viu ?

  • 18:42
  • Eu

    Se vc. não alterou este código, está tentando usar o pino 5 para 2 coisas diferentes:

  • int URTRIG=5; // PWM trigger pin int E1 = 4; int M1 = 5;

  • URTRIG e M1 são diferentes certo?

  • Pode ser por isso que seu motor não está parando de girar.

  • Leonardo Borges da Silva

    sim o M1 é o motor

  • URTRIG é do sonar

  • verdade não tinha reparado nisso

  • Eu

    Altera lá e testa.

  • Leonardo Borges da Silva

    ok vou fazer issoagora

  • 18:45
  • Eu

    Outra, procure usar um padrão de nomes que inclua o uso do IO. Tipo variáveis de pinos de entrada inicie com "I_" (input) e variáveis de pinos de saídas inicie com "O_" (outputs), isso evita estas dúvidas.

  • I_Sensor = Input do sensor.

  • O_M1 = Saída de acionamento do motor 1.

  • Entendeu?

  • Leonardo Borges da Silva

    entendi

  • 18:49
  • Eu

    Isolando o que cada pino faz, acho que agora fica mais fácil. Leia novamente o que o Jonatas escreveu. Não dá para pular etapas, se não começar pelo Blink...vai faltar coisas no meio do caminho.

  • 18:51
  • Eu

    Leia a distância do sensor, e acione os motores de acordo com a lógica que vc. deseja que seja executada para que o robo não saia "batendo" em tudo por aí.

  • Leonardo Borges da Silva

    vou tentar aqui

  • Eu

    Mas importante: Os delays entre leituras e acionamentos tem que ser bem pensados, verifique as reduções entre os motores e as rodas e "equilibre" de acordo.

  • 18:53
  • Eu

    Tipo: Leia o sensor, mostre a distância, execute um delay( tempo) e faça um acionamento "lento" para que vc. possa entender em que parte do programa o que está ocorrendo está sendo executado. quando tiver tudo redondo, aí retire ou remarque os delays. Já que o Arduino é "pobre" em debug.

  • Acha que daqui pra frente vai?

  • Leonardo Borges da Silva

    eu alterei o pino mais não aconteceu nada

  • acho que vou começar do zero

  • como eu consigo "testar" tipo

  • 18:56
  • Leonardo Borges da Silva

    uma variavel

  • que eu consiga falar para o motor ligar com certa distancia

  • que o sonar me retornar

  • acho que assim eu entendendo um exemplo consiga o restante

  • 18:56
  • Eu

    if ( position <= 50){ faça alguma coisa...// delay(10);

  • };

  • verifique se vc. não está "mandando" sinal digital onde se espera um acionamento analógico.

  • Leonardo Borges da Silva

    ok vou tentar fazer esse teste

  • 19:01
  • Eu

    Afinal o controle dos motores está por PWM né?

  • 19:02
  • Eu

    Então nos pinos dos motores tem que ser AnalogWrite!

  • Leonardo Borges da Silva

    nossa verdade

  • Eu

    Aí se uma hora vc. manda Digital outra hora vc. manda Analog fica difícil...

  • Leonardo Borges da Silva

    não preciso do PLL

  • Eu

    Aí o motor não para, ou despara...ou repara...

  • 19:05
  • Eu

    Isso são "detalhezinhos" que todo programador deve ter no "sangue"....senão imagine quando aparecer coisas "complicadas"????....rsrsrsss...

  • Leonardo Borges da Silva

    hauhauahuauh verdade

  • to terminando aqui ai posso te enviar para vc dar uma olhada ?

  • 19:07
  • Eu

    Não tenho como testar aqui. Vou ver se copio este tópico lá e vc. coloca como resposta.

Olha como esta o codigo, ele esta rodando no proprio eixo ....


// # Conexão:
// # 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 M1 = 4;
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);
delay(10);
}
PWM_Mode();
delay(5);
}

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
}

if ( DistanceMeasured = 500 ){
digitalWrite(M1, LOW);
digitalWrite (M2, LOW);
delay(10);
}
else {

if ( DistanceMeasured > 500){
digitalWrite(M2, LOW);
digitalWrite (M1, LOW);
}
else{
digitalWrite (M1, HIGH);
digitalWrite (M2, HIGH);
}
}

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

  • Leonardo Borges da Silva

    não digo testar

  • mais ver se a logica esta certa

  • 19:09
  • Leonardo Borges da Silva

    agora um motor só esta funcionando :(

  • Eu

    Precisa verificar onde ele é acionado e onde o outro é acionado, e onde eles são desligados.

  • 19:11
  • Leonardo Borges da Silva

    entendi

  • o motor que esta ligado

  • agora responde quando eu coloco a mão perto do sonar

  • Eu

    Teste os motores, se estão ok. Tira os cabos deles e liga em uma fonte, para ter certeza que o outro não está com problema, onde os 2 devem funcionar.

  • Veja que não havendo obstáculo os 2 devem funcionar.

  • Não precisa po-lo para rodar ainda, basta testar com as mãos na frente do sensor.

  • troque os números dos pinos no programa para ver se o outro motor passa a funcionar.

  • Isso são testes de "exaustão" para ter certeza que o funcionamento de todos os itens estão de acordo com o que o sensor acusa.

  • Leonardo Borges da Silva

    vou tentar trocar os pinos para ver se o outro funciona

  • Eu

    Isso.

  • 19:16
  • Eu

    Imagine que um dos motores esteja com problemas, vai parecer que o programa está errado e vc. vai passar horas procurando...e não vai achar...mas se funcionar no outro pino, aí vc. pode ter certeza que o motor não é o problema, mas sim o programa, aí pensa...pensa...pensa...observa...observa...

  • ...e cedo ou trade vc. acha.

  • trade=tarde

  • 19:18
  • Eu

    Eu sou contra passar o fonte pronto (se eu tivesse, mas ainda não cheguei a usar este sensor, pretendo começar amanhã a tarde...para outro projeto, mas a lógica é a mesma). Mas sou a favor de "dar as dicas" de onde estão os erros. Você é que tem que "queimar o bigode" para achar...

  • Leonardo Borges da Silva

    consegui colocar para funcionar os dois

  • Eu

    Viu?

  • Leonardo Borges da Silva

    era o M2 esata em analogic ainda

  • coloquei para digital e funcionou

  • um motor esta para um lado

  • e o outro para o outro lado

  • o robo esta girando no proprio eixo

  • Eu

    Pegou o fio da meada, agora são "só" os outros 99% de "suor" que estão faltando...

  • 19:21
  • Eu

    Para dar a volta,gira no eixo, para dar a volta ao contrário, inverte a ponte, para dar marcha a ré os dois motores no sentido de por a roda girando para trás, para ir para frente, o contrário...e por aí vai.

  • 19:22
  • Eu

    É muito mais atenção que conhecimento, mas não se esqueça das dicas do Jonatas. Começar pelo começo e ir de exercício em exercício para "pegar o jeito".

  • Leonardo Borges da Silva

    eu fiz todos os exercicio da apostila

  • mais como é apra iniciante só teve as coisas basicas

  • a outra esta para chegar

  • intermediaria

  • Leonardo Borges da Silva

    coloquei o codigo lá

  • não consigo descobrir pq ele esta girando no proprio eixo

  • 19:25
  • Eu

    Porque a ponte está invertida ou os pinos dos motores. veja aí. Lembre-se que se vc. tem 2 motores um contraposto ao outro as rotações serão invertidas.

  • 19:27
  • Leonardo Borges da Silva

    entendi vou alterar

  • Eu

    É uma questão de referencial, se vc. colocar os 2 motores com os 2 eixos virados na mesma direção, estarão girando no mesmo sentido. se vc. girar um deles 180 graus, passarão a girar em sentidos opostos pelo referecial.

  • 19:29
  • Eu

    Daqui uns 30 anos vc. estará craque e estará pensando de trás pra frente, de dentro pra fora e em outras línguas....rsrsrssss...

  • Leonardo Borges da Silva

    ahuahuahauhua

  • caraca não estou entendo a questão dos motores

  • eles estão certos aqui

  • Eu

    inverte os cabos ou o acionamento da ponte.

  • Leonardo Borges da Silva

    vou tentar alterar a ponte

  • consegui agora os motores estão em uma direção só

  • Eu

    Boa!!! Agora pense o que precisa ser enviado para o controle dos motores quando o sensor sentir que está próximo de algum obstáculo.

  • 19:33
  • Eu

    "Leia" o sensor, tome uma "decisão", "acione" um dos motores. volte ao início. simples né?

  • Leonardo Borges da Silva

    kkkkkkk

  • parece

  • deixa eu ver

  • 19:35
  • Leonardo Borges da Silva

    estou calibrando o delay agora

  • ta dando certo

  • Eu

    Consegue sozinho agora?

  • Leonardo Borges da Silva

    consigo

  • vou finalizar aqui

  • gravar um video

  • Eu

    Conta aí quantas linhas de programas eu te passei????

  • Leonardo Borges da Silva

    ai eu posto e faço um agradecimento

  • quase nenhuma

  • vc é professor ?

  • kkkk

  • 19:46
  • Eu

    Não precisa agradecer não, eu colei esta conversa no tópico. Sou o que se chama de Polímata, vou atrás e aprendo...não tenho curso formal de nada. Só leio...leio...leio...e quando dá penso um pouco...e de preferência sem ter que "por a mão"...rsrsrsrsss....afinal, nada existe aí fora sem que "aqui dentro" a gente não tenha "sonhado" um pouco. Obrigado pela oportunidade. E até a próxima. Boa sorte.

Coloquei o video dele funcionando..... no final do Post, obrigado !

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço