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:
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg171.imageshack.us%2Fimg171%2F1025%2Ffotorobot.jpg&hash=c406e1828fd17a96032c15b881c6fec05994c3b3)
obstacle avoider (http://www.youtube.com/watch?v=bu8WNsoqxQs#)
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 (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);
}
}