Depois vai acrescentando ao tópico testes que vás fazendo. :)
Bem.. com esta qualidade de projecto e de apresentação do mesmo.. só posso criticar uma coisa. Uma músiquinha no vídeo fazia falta (podes adicionar agora com o Audio Swamp no Youtube).
As bordas do acrilico estão perfeitas :o Cortaste á mão? Está com muito bom aspecto, continua :D
... a ver se alguma vez consiga fazer algo parecido ;D
... eu também não sou pessoa de desistir facilmente das coisas o máximo que pode acontecer era adiar, mas tal não acontece pois sou muito teimoso e quando meto uma coisa na cabeça....ui....
em relação a esses espaçadores não era necessário esse trabalho todo... existe barão roscado à venda... depois era so colocar as porcas e estava feito...
Boa Noite
A base tem 20 cm de diametro, é mais ou menos o suficiente para caber a breadboard com algum espaço de manobra.em relação a esses espaçadores não era necessário esse trabalho todo... existe barão roscado à venda... depois era so colocar as porcas e estava feito...
Nada contra... "o teu projecto as tuas ideias"...
Agora estou à espera do próximo xD
Sem duvida, é bem mais rápido, facil e barato. ;D
A primeira versão foi assim só que achei que com tubos de aluminio como são mais largos podiam ser mais estaveis para alem de mais agradaveis a vista. Decidi tentar colar as porcas so para ver se funcionava, fiquei tão satisfeito que fiz todos assim.
Abraço.
void progSegueLinhas() {
//Verificar se é necessário calibrar os sensores
if (bCalibrate==0) {
mBuzzer.playOnSound(); // Inicio Calibracao
int i;
for (i = 0; i < 250; i++) { // Processo de calibração demora 5 segundos
qtr.calibrate();
delay(20);
}
mBuzzer.playOffSound(); // Fim Calibração
bCalibrate=1; // Marcar Calibração como ja efectuada
}
// Get calibrated sensor values returned in the sensors array, along with the line position
// Position will range from 0 to 2000, with 1000 corresponding to the line over the middle sensor
unsigned int vSensors[8];
int iPosition = qtr.readLine(vSensors);
int iError = iPosition-3500;
int pd=0; // Power Difference
// Com PID Control - Set the motor speed based on proportional and derivative PID terms
// Note When doing PID, it's very important you get your signs right, or else the control loop will be unstable
float kP=0.1; // kP proportional constant (0.09)
float kI=0; // kI integral constant (Não utilizado)
float kD=0; // kD derivative constant (0.05)
int P = iError; // Proportional - Varia entre [-2500,2500] valor de 0 significa que esta centrado
int I = 0; // Integral - Soma dos varios P (Não utilizado)
int D = iError-lastError; // Derivative - Diferenca entre erro actual e erro anterior
lastError = iError; // Guardar ultimo erro
int power_difference = (P*kP)+(I*kI)+(D*kD);
// Evitar ultrapassar velocidades maximas
if(power_difference > maxSpeed) power_difference = maxSpeed;
if(power_difference < -maxSpeed) power_difference = -maxSpeed;
if(power_difference < 0)
mDrive.drive(maxSpeed, maxSpeed+power_difference); // Virar Direita
else
mDrive.drive(maxSpeed-power_difference, maxSpeed); // Virar Esquerda
// Impressão dos Valores para Debug
Serial.print("QTR Sensor:");
Serial.print(vSensors[0]); Serial.print(" ");
Serial.print(vSensors[1]); Serial.print(" ");
Serial.print(vSensors[2]); Serial.print(" ");
Serial.print(vSensors[3]); Serial.print(" ");
Serial.print(vSensors[4]); Serial.print(" ");
Serial.print(vSensors[5]); Serial.print(" ");
Serial.print(vSensors[6]); Serial.print(" ");
Serial.print(vSensors[7]); Serial.print(" ");
Serial.print(" Position:"); Serial.print(iPosition);
Serial.print(" Error:"); Serial.print(iError);
Serial.print(" PID:"); Serial.println(power_difference);
//delay(2000);
}
#include <PololuQTRSensors.h>
PololuQTRSensorsRC qtr((unsigned char[]) {1,2, 3, 4, 7, 8, 9,12}, 8); // Sensor QTR
void progDebugQTR() {
//Verificar se é necessário calibrar os sensores
if (bCalibrate==0) {
mBuzzer.playOnSound(); // Inicio Calibracao
int i;
for (i = 0; i < 250; i++) { // Processo de calibração demora 5 segundos
qtr.calibrate();
delay(20);
}
mBuzzer.playOffSound(); // Fim Calibração
bCalibrate=1; // Marcar Calibração como ja efectuada
}
unsigned int vSensors[8];
int iPosition = qtr.readLine(vSensors);
// Impressão dos Valores para Debug
Serial.print("QTR Sensor:");
Serial.print(vSensors[0]); Serial.print(" ");
Serial.print(vSensors[1]); Serial.print(" ");
Serial.print(vSensors[2]); Serial.print(" ");
Serial.print(vSensors[3]); Serial.print(" ");
Serial.print(vSensors[4]); Serial.print(" ");
Serial.print(vSensors[5]); Serial.print(" ");
Serial.print(vSensors[6]); Serial.print(" ");
Serial.print(vSensors[7]); Serial.print(" ");
Serial.print(" Position:"); Serial.println(iPosition);
delay(5000);
}
#include <PololuQTRSensors.h>
int bCalibrate=0;
PololuQTRSensorsRC qtr((unsigned char[]) {0,1,2,3,4,5,6,7,8}, 8);
void setup()
{
Serial.begin(9600);
}
void loop() {
if (bCalibrate==0) {
int i;
for (i = 0; i < 250; i++) { // Processo de calibração demora 5 segundos
qtr.calibrate();
delay(20);
}
bCalibrate=1; // Marcar Calibração como ja efectuada
}
unsigned int vSensors[8];
int iPosition = qtr.readLine(vSensors);
// Impressão dos Valores para Debug
Serial.print("QTR Sensor:");
Serial.print(vSensors[0]); Serial.print(" ");
Serial.print(vSensors[1]); Serial.print(" ");
Serial.print(vSensors[2]); Serial.print(" ");
Serial.print(vSensors[3]); Serial.print(" ");
Serial.print(vSensors[4]); Serial.print(" ");
Serial.print(vSensors[5]); Serial.print(" ");
Serial.print(vSensors[6]); Serial.print(" ");
Serial.print(vSensors[7]); Serial.print(" ");
Serial.print(" Position:"); Serial.println(iPosition);
delay(5000);
}
QTR Sensor:0 0 0 0 0 0 0 0 Position:0
QTR Sensor:0 0 0 0 0 0 0 0 Position:0
QTR Sensor:0 0 0 0 0 0 0 0 Position:0
QTR Sensor:0 0 0 0 0 0 0 0 Position:0
QTR Sensor:0 0 0 0 0 0 0 0 Position:0
QTR Sensor:0 0 0 0 0 0 0 0 Position:0
QTR Sensor:0 0 0 0 0 0 0 0 Position:0
QTR Sensor:0 0 0 0 0 0 0 0 Position:0
QTR Sensor:0 0 0 0 0 0 0 0 Position:0
QTR Sensor:0 0 0 0 0 0 0 0 Position:0
QTR Sensor:0 0 0 0 29703 511 28684 53513 Position:3000
QTR Sensor:0 0 0 0 29703 511 28684 53513 Position:3000
QTR Sensor:0 0 0 1000 29703 511 28684 53513 Position:3000
QTR Sensor:0 0 0 833 29703 511 28684 53513 Position:3000
QTR Sensor:0 0 1000 1000 29703 511 28684 53513 Position:2500
QTR Sensor:0 0 1000 0 29703 511 28684 53513 Position:2000
QTR Sensor:0 0 1000 0 29703 511 28684 53513 Position:2000
QTR Sensor:0 0 1000 0 29703 511 28684 53513 Position:2000
QTR Sensor:0 0 1000 1000 29703 511 28684 53513 Position:2500
QTR Sensor:0 0 0 1000 29703 511 28684 53513 Position:3000
QTR Sensor:0 0 1000 0 29703 511 28684 53513 Position:2000
QTR Sensor:0 0 1000 1000 29703 511 28684 53513 Position:2500
QTR Sensor:0 0 1000 1000 29703 511 28684 53513 Position:2500
#include <PololuQTRSensors.h>
int bCalibrate=0;
PololuQTRSensorsRC qtr((unsigned char[]) {2,3,4,7}, 4);
void setup()
{
Serial.begin(9600);
}
void loop() {
if (bCalibrate==0) {
int i;
for (i = 0; i < 250; i++) {
qtr.calibrate();
delay(20);
}
bCalibrate=1;
}
unsigned int vSensors[8];
int iPosition = qtr.readLine(vSensors);
// Impressão dos Valores para Debug
Serial.print("QTR Sensor:");
Serial.print(vSensors[0]);
Serial.print(" ");
Serial.print(vSensors[1]);
Serial.print(" ");
Serial.print(vSensors[2]);
Serial.print(" ");
Serial.print(vSensors[3]);
Serial.print(" ");
Serial.print(" Position:");
Serial.println(iPosition);
delay(5000);
}
#include <PololuQTRSensors.h>
int bCalibrate=0;
int motor1Pin1 = 5; // Ponte H
int motor1Pin2 = 6; // Ponte H
int motor2Pin1 = 10; // Ponte H
int motor2Pin2 = 11; // Ponte H
PololuQTRSensorsRC qtr((unsigned char[]) {2,3,4,7}, 4);
void setup()
{
Serial.begin(9600);
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(motor2Pin1, OUTPUT);
pinMode(motor2Pin2, OUTPUT);
}
void loop() {
if (bCalibrate==0) {
int i;
for (i = 0; i < 250; i++) {
qtr.calibrate();
delay(20);
}
bCalibrate=1;
}
if(bCalibrate > 10)
digitalWrite(motor1Pin1, HIGH); // Este pino HIGH, em conjunto com o de baixo LOW
digitalWrite(motor1Pin2, LOW); // Fazem com que o motor da direita ande em frente
digitalWrite(motor2Pin1, LOW); // Este pino LOW, em conjunto com o de baixo HIGH
digitalWrite(motor2Pin2, HIGH); // Fazem com que o motor da esquerda ande em frente
delay (1800);
digitalWrite(motor1Pin1, HIGH); // Este pino HIGH, em conjunto com o de baixo LOW
digitalWrite(motor1Pin2, LOW); // Fazem com que o motor da direita ande em frente
digitalWrite(motor2Pin1, HIGH); // Este pino LOW, em conjunto com o de baixo HIGH
digitalWrite(motor2Pin2, LOW); // Fazem com que o motor da esquerda ande em frente
delay (1800);
unsigned int vSensors[4];
int iPosition = qtr.readLine(vSensors);
// Impressão dos Valores para Debug
Serial.print("QTR Sensor:");
Serial.print(vSensors[0]);
Serial.print(" ");
Serial.print(vSensors[1]);
Serial.print(" ");
Serial.print(vSensors[2]);
Serial.print(" ");
Serial.print(vSensors[3]);
Serial.print(" ");
Serial.print(" Position:");
Serial.println(iPosition);
delay(5000);
}
#include <PololuQTRSensors.h>
int bCalibrate=0;
int motor1Pin1 = 5; // Ponte H
int motor1Pin2 = 6; // Ponte H
int motor2Pin1 = 10; // Ponte H
int motor2Pin2 = 11; // Ponte H
PololuQTRSensorsRC qtr((unsigned char[]) {2,7}, 2);
void setup(){
Serial.begin(9600);
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(motor2Pin1, OUTPUT);
pinMode(motor2Pin2, OUTPUT);
}
void loop() {
if (bCalibrate==0) {
int i;
for (i = 0; i < 250; i++) {
qtr.calibrate();
delay(20);
}
bCalibrate=1;
}
//Ler Valor dos sensores
unsigned int vSensors[2];
int iPosition = qtr.readLine(vSensors);
// Verificar se algum dos sensores encontrou a linha preta
if (vSensors[0]>900 || vSensors[1]>900) {
if (vSensors[0]>900) {
// Linha detectada pelo sensor 1 coloca aqui o codigo para virar para o outro lado
} else {
// Linha detectada pelo sensor 8 coloca aqui o codigo para virar para o outro lado
}
} else {
// Aqui nenhum sensor encontra a linha por isso podes andar em frente ou fazer outra coisa.
}
delay(100);
}
int motor1Pin1 = 5; // Ponte H
int motor1Pin2 = 6; // Ponte H
int motor2Pin1 = 10; // Ponte H
int motor2Pin2 = 11; // Ponte H
int IRpin = 0; // analog pin for reading the IR sensor
void setup() {
Serial.begin(9600);
// Definir os pinos outputs:
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(motor2Pin1, OUTPUT);
pinMode(motor2Pin2, OUTPUT); // start the serial port
}
void loop() {
float volts = analogRead(IRpin)*0.0048828125; // value from sensor * (5/1024) - if running 3.3.volts then change 5 to 3.3
float distance = 65*pow(volts, -1.10); // worked out from graph 65 = theretical distance / (1/Volts)S - luckylarry.co.uk
Serial.println(distance); // print the distance
delay(100); // arbitary wait time.
if (distance<55) {
digitalWrite(motor1Pin1, HIGH); // Este pino HIGH, em conjunto com o de baixo LOW
digitalWrite(motor1Pin2, LOW); // Fazem com que o motor da direita ande em frente
digitalWrite(motor2Pin1, HIGH); // Este pino LOW, em conjunto com o de baixo HIGH
digitalWrite(motor2Pin2, LOW); // Fazem com que o motor da esquerda ande em frente
delay (1800); // Tempo que vai ficar a fazer esta função
}
else
{
digitalWrite(motor1Pin1, HIGH); // Este pino HIGH, em conjunto com o de baixo LOW
digitalWrite(motor1Pin2, LOW); // Fazem com que o motor da direita ande em frente
digitalWrite(motor2Pin1, LOW); // Este pino LOW, em conjunto com o de baixo HIGH
digitalWrite(motor2Pin2, HIGH); // Fazem com que o motor da esquerda ande em frente
delay (3500); // Tempo que vai ficar a fazer esta função
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, HIGH);
digitalWrite(motor2Pin2, LOW);
delay (3000);
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, HIGH);
digitalWrite(motor2Pin1, HIGH);
digitalWrite(motor2Pin2, LOW);
delay (3500);
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, HIGH);
digitalWrite(motor2Pin1, LOW);
digitalWrite(motor2Pin2, HIGH);
delay (2500);
}
}
#include <PololuQTRSensors.h>
int bCalibrate=0;
int motor1Pin1 = 5; // Ponte H
int motor1Pin2 = 6; // Ponte H
int motor2Pin1 = 10; // Ponte H
int motor2Pin2 = 11; // Ponte H
PololuQTRSensorsRC qtr((unsigned char[]) {2,7}, 2);
void setup(){
Serial.begin(9600);
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(motor2Pin1, OUTPUT);
pinMode(motor2Pin2, OUTPUT);
}
void loop() {
if (bCalibrate==0) {
int i;
for (i = 0; i < 250; i++) {
qtr.calibrate();
delay(20);
}
bCalibrate=1;
}
//Ler Valor dos sensores
unsigned int vSensors[2];
int iPosition = qtr.readLine(vSensors);
// Verificar se algum dos sensores encontrou a linha preta
if (vSensors[0]>900 || vSensors[1]>900) {
if (vSensors[0]>900) {
// Linha detectada pelo sensor 1 coloca aqui o codigo para virar para o outro lado
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, HIGH);
digitalWrite(motor2Pin1, HIGH);
digitalWrite(motor2Pin2, LOW);
delay (3500);
} else {
// Linha detectada pelo sensor 8 coloca aqui o codigo para virar para o outro lado
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, HIGH);
digitalWrite(motor2Pin2, LOW);
delay (3500);
}
} else {
// Aqui nenhum sensor encontra a linha por isso podes andar em frente ou fazer outra coisa.
digitalWrite(motor1Pin1, HIGH); // Este pino HIGH, em conjunto com o de baixo LOW
digitalWrite(motor1Pin2, LOW); // Fazem com que o motor da direita ande em frente
digitalWrite(motor2Pin1, HIGH); // Este pino LOW, em conjunto com o de baixo HIGH
digitalWrite(motor2Pin2, LOW); // Fazem com que o motor da esquerda ande em frente
delay (80);
}
delay(20);
Serial.print("QTR Sensor:");
Serial.print(vSensors[0]); Serial.print(" ");
Serial.print(vSensors[1]); Serial.print(" ");
Serial.print(" Position:");
Serial.println(iPosition);
delay(10);
}
eu quero k o robo va de encontro com um object mas ou mesmo tempo k n sai d um certo sitio..
#include <PololuQTRSensors.h>
int motor1Pin1 = 5; // Ponte H
int motor1Pin2 = 6; // Ponte H
int motor2Pin1 = 10; // Ponte H
int motor2Pin2 = 11; // Ponte H
int IRpin = 0; // analog pin for reading the IR sensor
PololuQTRSensorsRC qtr((unsigned char[]) {2,7}, 2);
void setup(){
Serial.begin(9600);
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(motor2Pin1, OUTPUT);
pinMode(motor2Pin2, OUTPUT);
//Vamos Calibrar aqui os sensores
int i;
for (i = 0; i < 250; i++) {
qtr.calibrate();
delay(20);
}
}
void loop() {
// A ideia é bater num objecto mas nunca sair da area delimitada por isso vou dar prioridade ao controlo dos sensores qtr
//Ler Valor dos sensores
unsigned int vSensors[2];
int iPosition = qtr.readLine(vSensors);
// Verificar se algum dos sensores encontrou a linha preta
if (vSensors[0]>900 || vSensors[1]>900) {
if (vSensors[0]>900) {
// Linha detectada pelo sensor 1 coloca aqui o codigo para virar para o outro lado
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, HIGH);
digitalWrite(motor2Pin1, HIGH);
digitalWrite(motor2Pin2, LOW);
delay (3500);
} else {
// Linha detectada pelo sensor 8 coloca aqui o codigo para virar para o outro lado
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, HIGH);
digitalWrite(motor2Pin2, LOW);
delay (3500);
}
} else {
// Aqui nao fazer nada com os motores e passar esta decisao ao sensor IR
sensorIR();
}
//Debug QTR
Serial.print("QTR Sensor:");
Serial.print(vSensors[0]); Serial.print(" ");
Serial.print(vSensors[1]); Serial.print(" ");
Serial.print(" Position:");
Serial.println(iPosition);
}
void sensorIR() {
//Ler Distancia
float volts = analogRead(IRpin)*0.0048828125; // value from sensor * (5/1024) - if running 3.3.volts then change 5 to 3.3
float distance = 65*pow(volts, -1.10); // worked out from graph 65 = theretical distance / (1/Volts)S - luckylarry.co.uk
Serial.println(distance); // print the distance
delay(100); // arbitary wait time.
if (distance<55) {
digitalWrite(motor1Pin1, HIGH); // Este pino HIGH, em conjunto com o de baixo LOW
digitalWrite(motor1Pin2, LOW); // Fazem com que o motor da direita ande em frente
digitalWrite(motor2Pin1, HIGH); // Este pino LOW, em conjunto com o de baixo HIGH
digitalWrite(motor2Pin2, LOW); // Fazem com que o motor da esquerda ande em frente
delay (1800); // Tempo que vai ficar a fazer esta função
}
else
{
digitalWrite(motor1Pin1, HIGH); // Este pino HIGH, em conjunto com o de baixo LOW
digitalWrite(motor1Pin2, LOW); // Fazem com que o motor da direita ande em frente
digitalWrite(motor2Pin1, LOW); // Este pino LOW, em conjunto com o de baixo HIGH
digitalWrite(motor2Pin2, HIGH); // Fazem com que o motor da esquerda ande em frente
delay (3500); // Tempo que vai ficar a fazer esta função
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, HIGH);
digitalWrite(motor2Pin2, LOW);
delay (3000);
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, HIGH);
digitalWrite(motor2Pin1, HIGH);
digitalWrite(motor2Pin2, LOW);
delay (3500);
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, HIGH);
digitalWrite(motor2Pin1, LOW);
digitalWrite(motor2Pin2, HIGH);
delay (2500);
}
}