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
Esse é o código:
Fotos:
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:
https://www.youtube.com/watch?v=te0-hLSKplg&feature=youtu.be
Tags:
As respostas para este tópico estão encerradas.
Boa Tarde !
cara vc pode me ajudar em uma coisa ?
Olá Leonardo. se estiver ao meu alcance...
cara estou montando um robo autonomo
e estou apanhando com o código C
Do Arduino?
sim
Que tipo de robo?
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
criei um tópico
Com o sensor é possível saber a que distância está o obstáculo?
sim
fiz um topico com algumas fotos e o código que estou tentando utilizar
Primeiro Projeto Arduino, Dúvidas
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.
Você está usando sensores sonares?
sim
entendi o que vc me explicou
Consegue ter a medida de distância com eles?
mais não consigo colocar isso em C
consigo
Você tem quantos sensores?
1 só
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é.
é 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 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.
entendi a lógica
mais como não entendo muito da linguagem
tenho dificuldades em digitar o código
Espere que vou dar uma olhada no manual.
Ok muito Obrigado
A conecção com o Arduino está TTL ou PWM?
PWM
Entre os motores e as rodas qual está sendo a redução?
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
Vc. chegou a ver isso: http://letsmakerobots.com/node/5629
olhei sim
mais não entedi
entendi**
Este é o exemplo indicado lá no site do sensor. O meu é diferente do seu, não tem tantos pinos.
hummm entendi
você viu o código que eu fiz e não deu certo ?
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/
aqui o post
http://labdegaragem.com/forum/topics/primeiro-projeto-arduino-d-vid...
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.
eu vi esse video
Colocou isso no seu?
estava focando nesse projeto porem sem o LCD e o Buzzer
http://ferpinheiro.wordpress.com/2012/03/09/criando-robo-com-arduin...
Isso poupa ter que colocar mais de um sensor no robo.
Vou lá no link que me passou.
ok obrigado
um rapaz deixou um exemplo vc viu ?
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.
sim o M1 é o motor
URTRIG é do sonar
verdade não tinha reparado nisso
Altera lá e testa.
ok vou fazer issoagora
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?
entendi
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.
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í.
vou tentar aqui
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.
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?
eu alterei o pino mais não aconteceu nada
acho que vou começar do zero
como eu consigo "testar" tipo
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
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.
ok vou tentar fazer esse teste
Afinal o controle dos motores está por PWM né?
Então nos pinos dos motores tem que ser AnalogWrite!
nossa verdade
Aí se uma hora vc. manda Digital outra hora vc. manda Analog fica difícil...
não preciso do PLL
Aí o motor não para, ou despara...ou repara...
Isso são "detalhezinhos" que todo programador deve ter no "sangue"....senão imagine quando aparecer coisas "complicadas"????....rsrsrsss...
hauhauahuauh verdade
to terminando aqui ai posso te enviar para vc dar uma olhada ?
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");
}
não digo testar
mais ver se a logica esta certa
agora um motor só esta funcionando :(
Precisa verificar onde ele é acionado e onde o outro é acionado, e onde eles são desligados.
entendi
o motor que esta ligado
agora responde quando eu coloco a mão perto do sonar
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.
vou tentar trocar os pinos para ver se o outro funciona
Isso.
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
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...
consegui colocar para funcionar os dois
Viu?
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
Pegou o fio da meada, agora são "só" os outros 99% de "suor" que estão faltando...
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.
É 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".
eu fiz todos os exercicio da apostila
mais como é apra iniciante só teve as coisas basicas
a outra esta para chegar
intermediaria
coloquei o codigo lá
não consigo descobrir pq ele esta girando no proprio eixo
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.
entendi vou alterar
É 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.
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...
ahuahuahauhua
caraca não estou entendo a questão dos motores
eles estão certos aqui
inverte os cabos ou o acionamento da ponte.
vou tentar alterar a ponte
consegui agora os motores estão em uma direção só
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.
"Leia" o sensor, tome uma "decisão", "acione" um dos motores. volte ao início. simples né?
kkkkkkk
parece
deixa eu ver
estou calibrando o delay agora
ta dando certo
Consegue sozinho agora?
consigo
vou finalizar aqui
gravar um video
Conta aí quantas linhas de programas eu te passei????
ai eu posto e faço um agradecimento
quase nenhuma
vc é professor ?
kkkk
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 !
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por