• Welcome to LusoRobótica - Robótica em Português.
 

Arduino wall avoider (baseado no Smalluino)

Started by Stigma, 16 de January de 2011, 01:20

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Stigma

Bem, venho aqui apresentar o meu mini projecto.

Este bicho é baseado no smalluino v1.0. Com uma pequena diferença, tem um sensor de distancia IV para nao bater em objectos (encontra-se assente num mini servo de rotaçao limitada). A alimentaçao é realizado com uma pilha de 9V.

Depois de muita luta com os fios de alimentaçao, e de muita fita cola, isto foi o que resultou:

obstacle avoider

Nao tenho muito jeito para criar topicos, por isso qualquer duvida digam!

Quanto ao proximo passo, gostava de inserir talvez um fototransistor para criar um seguidor de linha, e talvez um receptor IV para fazer o robot mudar de "modo" (seguidor de linha, ou wall avoider). Que me aconselham em termos de material?
E quanto ao criar uma base maior para inserir isto td? lol
So mais uma pergunta: para expansao do meu "espaço de trabalho" acham melhor pegar numa breadboard ou talvez comprar um destes http://loja.lusorobotica.com/shields/36-arduino-protoshield-pcb.html?


Espero que tenham gostado do projecto! Vemo-nos no proximo :D


#include <Servo.h>
#include <math.h>
//tempo de rotaçao 1,15seg
//int MotorDir = 11;
//int MotorEsq = 10;
//int SensorIR = 9;
//Valor sensor 500
Servo MotorDir;
Servo MotorEsq;
Servo SensorIR;
//Parado = 50
//Esq frente = 0  Tras = 100
//Dir frente = 100 Tras = 0

int SensorPin;
unsigned int ValSensorIR = 0;
unsigned int ValSensorIRmem = 1000;
unsigned int Ang = 0;
unsigned int Velocidade = 0;
int Angulo = 0;

void setup()
{
  MotorDir.attach(11);
  MotorEsq.attach(10);
  SensorIR.attach(9);

  Serial.begin(9600);
}

void loop()
{

  Velocidade = 100;
  Andar(Velocidade);   
  ValSensorIR = analogRead(SensorPin);
  if( ValSensorIR > 250)
  {
    Parar();
    delay(100);
    Angulo = CalcDistancia();
    delay(100);
    Rodar(Angulo*2);
    delay(100);
  }
}
int CalcDistancia()
{
  ValSensorIRmem = 1000 ;
  delay(100);
  for(int i=0;i<180; i+=10)
  {
    SensorIR.write(i);
    delay(50);
    ValSensorIR = analogRead(SensorPin);
    if (ValSensorIR < ValSensorIRmem)
    {
      ValSensorIRmem = ValSensorIR;
      Ang = i;
      //Serial.println(Ang);
    }
    delay(50);
  }
  SensorIR.write(90);
  return Ang;
}



void Andar(int Velocidade)
{
  MotorEsq.write(100 - Velocidade);
  MotorDir.write(Velocidade);
}

void Parar()
{
  if(Velocidade > 50)
  {
    Andar(90);
    delay(100);
    Andar(80);
    delay(100);
    Andar(70);
    delay(100);
    Andar(60);
    delay(100);
    Andar(50);
  }
  else if (Velocidade < 50)
  {
    Andar(10);
    delay(100);
    Andar(20);
    delay(100);
    Andar(30);
    delay(100);
    Andar(40);
    delay(100);
    Andar(50);
  }
  else (Velocidade == 50);
}

void Rodar(int Angulo)
{
 
  if(Angulo > 0)
  {
    MotorEsq.write(100);
    MotorDir.write(100);
    delay((Angulo/0.285)/4);
    MotorEsq.write(90);
    MotorDir.write(90);
    delay((Angulo/0.285)/4);
    MotorEsq.write(80);
    MotorDir.write(80);
    delay((Angulo/0.285)/4);
    MotorEsq.write(70);
    MotorDir.write(70);
    delay((Angulo/0.285)/4);
    MotorEsq.write(60);
    MotorDir.write(60);
    delay((Angulo/0.285)/4);
    MotorEsq.write(50);
    MotorDir.write(50);
  }
  else if (Angulo < 0)
  {
    Angulo = abs(Angulo);
    MotorEsq.write(0);
    MotorDir.write(0);
    delay((Angulo/0.285)/4);
    MotorEsq.write(10);
    MotorDir.write(10);
    delay((Angulo/0.285)/4);
    MotorEsq.write(20);
    MotorDir.write(20);
    delay((Angulo/0.285)/4);
    MotorEsq.write(30);
    MotorDir.write(30);
    delay((Angulo/0.285)/4);
    MotorEsq.write(40);
    MotorDir.write(40);
    delay((Angulo/0.285)/4);
    MotorEsq.write(50);
    MotorDir.write(50);
  }

}








nunosilvarocha

Quote from: Stigma on 16 de January de 2011, 01:20

Nao tenho muito jeito para criar topicos, por isso qualquer duvida digam!

Quanto ao proximo passo, gostava de inserir talvez um fototransistor para criar um seguidor de linha, e talvez um receptor IV para fazer o robot mudar de "modo" (seguidor de linha, ou wall avoider). Que me aconselham em termos de material?
E quanto ao criar uma base maior para inserir isto td? lol
So mais uma pergunta: para expansao do meu "espaço de trabalho" acham melhor pegar numa breadboard ou talvez comprar um destes http://loja.lusorobotica.com/shields/36-arduino-protoshield-pcb.html?

Parece-me um bom projecto, está organizado e funcional.
Se queres tudo isso e queres construir tudo numa base nova, aconselho-te um base em acrílico.
Faz o desenho do que pretendes já com os furos e cortes que vai precisar, e mãos a obra.
Quanto a breadboard, como não vais precisar de muita coisa para este projecto acho que esta chega, http://loja.lusorobotica.com/prototipagem/23-breadboard-mini-self-adhesive.html.
Agora adapta la o isso para seguidor de linhas e aproveita o projecto que já tens para ele se desviar de obstáculos.
Um dia destes já te vai buscar minis ao frigorífico.
Força nisso, e vai deixando mais fotos para vermos a evolução.

Stigma

Pois, acho q vou msm seguir com a base em acrilico. Tenho é q ver onde é q vou fzr isso.
So espero é q os servos tenham força, nao queria tar a comprar motores DC.
Nos proximos tempos nao vou ter mt tempo, mas também nao ha pressa.

Stigma

Decidir ir aos chineses comprar um carro telecomandado. Por 6e (lol) arranjei um com funcionamento por radiofrequencia, o que é bem mlhr do que usar IV. Contudo, ainda tenho q decifrar o sistema que esta para aqui montado. Isto tem aqui um IC com uma referencia: RX-3 41008289. Mas nao encontrei nada sobre isto. Alguem me pode dar uma ajudazita?

nunosilvarocha

Quote from: Stigma on 16 de January de 2011, 17:40
Decidir ir aos chineses comprar um carro telecomandado. Por 6e (lol) arranjei um com funcionamento por radiofrequencia, o que é bem mlhr do que usar IV. Contudo, ainda tenho q decifrar o sistema que esta para aqui montado. Isto tem aqui um IC com uma referencia: RX-3 41008289. Mas nao encontrei nada sobre isto. Alguem me pode dar uma ajudazita?

Acho que era muito mais interessante seres tu a construir a base para o teu robo.
Se for um RC típico dos chineses vais ter que usar uma ponte H para controlar o motor que lhe da tracção, e o motor que controla a direcção.
Eu penso que os servos sejam capazes de aguentar, o robot não deve ficar muito pesado.
Isto para não falar, que em curvas mais apertadas o chassis dos chineses não se vai safar muito bem...

Stigma

Quote from: nunosilvarocha on 16 de January de 2011, 18:24
Quote from: Stigma on 16 de January de 2011, 17:40
Decidir ir aos chineses comprar um carro telecomandado. Por 6e (lol) arranjei um com funcionamento por radiofrequencia, o que é bem mlhr do que usar IV. Contudo, ainda tenho q decifrar o sistema que esta para aqui montado. Isto tem aqui um IC com uma referencia: RX-3 41008289. Mas nao encontrei nada sobre isto. Alguem me pode dar uma ajudazita?

Acho que era muito mais interessante seres tu a construir a base para o teu robo.
Se for um RC típico dos chineses vais ter que usar uma ponte H para controlar o motor que lhe da tracção, e o motor que controla a direcção.
Eu penso que os servos sejam capazes de aguentar, o robot não deve ficar muito pesado.
Isto para não falar, que em curvas mais apertadas o chassis dos chineses não se vai safar muito bem...

Mas eu so fui para ver se arranjava o receptor / emissor RF. Pq é bem mlhr q um IR. O resto é para arrumar no canto. lol
Só que agora estou a ver q é bem dificil descobrir o output do receptor.

nunosilvarocha

Quote from: Stigma on 16 de January de 2011, 18:38
Quote from: nunosilvarocha on 16 de January de 2011, 18:24
Quote from: Stigma on 16 de January de 2011, 17:40
Decidir ir aos chineses comprar um carro telecomandado. Por 6e (lol) arranjei um com funcionamento por radiofrequencia, o que é bem mlhr do que usar IV. Contudo, ainda tenho q decifrar o sistema que esta para aqui montado. Isto tem aqui um IC com uma referencia: RX-3 41008289. Mas nao encontrei nada sobre isto. Alguem me pode dar uma ajudazita?

Acho que era muito mais interessante seres tu a construir a base para o teu robo.
Se for um RC típico dos chineses vais ter que usar uma ponte H para controlar o motor que lhe da tracção, e o motor que controla a direcção.

Eu penso que os servos sejam capazes de aguentar, o robot não deve ficar muito pesado.
Isto para não falar, que em curvas mais apertadas o chassis dos chineses não se vai safar muito bem...

Mas eu so fui para ver se arranjava o receptor / emissor RF. Pq é bem mlhr q um IR. O resto é para arrumar no canto. lol
Só que agora estou a ver q é bem dificil descobrir o output do receptor.

Põe umas fotos e descreve o circuito, pode ser que alguém te ajude.
Força nisso!!

Stigma

Desisti de tentar trabalhar com RF. O nivel de complexidade parece me mt elevado, por isso decidi ficar me pelo receptor IR (um TSOP). Contudo agora estou com uns pequenos problemas. Coloquei nesta thread a minha duvida
http://lusorobotica.com/index.php?topic=1726.msg34980;topicseen#new
Visto que a thread me parece morta, devidi vir aqui para ver se alguem via.

senso

O RF é complexo porque?
Que modos RF tens?
Podes ter um TSOP para 38Khz e o comando funcionar a 36Khz, mas o próprio comando IR enviado pelo comando varia quando mantens o mesmo botão pressionado.
Já agora, onde compras-te o TSOP e qual é o modelo, podes dizer?
Avr fanboy

Stigma

Quote from: senso on 22 de January de 2011, 00:44
O RF é complexo porque?
Que modos RF tens?
Podes ter um TSOP para 38Khz e o comando funcionar a 36Khz, mas o próprio comando IR enviado pelo comando varia quando mantens o mesmo botão pressionado.
Já agora, onde compras-te o TSOP e qual é o modelo, podes dizer?

Eu digo complexo pq estava a tentar usar um de um carro telecomandado que arranjei. E nao me entendi com aquilo.
O TSOP comprei na Aquario, TSOP 1736.
Mas entao se o sinal recebido varia, como é q implemento o codigo? Se o valor difere para o msm botao...

senso

Só deves ter dois valores diferentes para um mesmo botão.
Bem, de um carro telecomandado não podes fazer muito mais que do lado do comando se é para ligar a pc, fazer o arduino usando ou transistores ou a mexer as saidas para HIGH e LOW replicar o que uma pessoa fazia, depois no lado do carro é ler as saidas do chip, passar pelo arduino se necessário e está feito, é claro que esses carros baratos só têm saidas HIGH e LOW, nada de pwm's para controlo de pontes H nem nada, não esperes mais que 4 ou 6 saidas.
Avr fanboy

Stigma

Eu tenho varios valores para o msm botao, mas ja me responderam no outro topico. Era como eu pensava, o emissor tmb precisa de funcionar com o protocolo RC5(dah).
Qt ao carro telecomandado so tem 2 saidas,por isso é q tmb decidi nao avançar mais com aquilo.

Stigma

Bem, ja consegui resolver este pequeno problema.
A unica coisa que me impede de avançar com o projecto neste momento é ainda nao ter uma base para isto. Ainda tenho que arranjar um sitio onde façam cortes em acrilico por medida...

Stigma

Uma pequena brincadeira enquanto testava o modulo de recepçao IR:

leds and ping pong balls