Então galera eu estou ainda começando com arduino, e eu achei diversos projetos e o que eu escolhi foi o de um seguidor de linha com 2 sensores de refletancia, que eu ja consegui faze-lo funcionar perfeitamente, porem ele não é muito preciso e as vezes perde a linha
Mas eu estava olhando uns videos no youtube e eu achei um minicurso aonde o cara explica como fazer um seguidor de linha que utiliza uma MEDIA dos valores para seguir a linha que eu consegui reproduzir e percebi um aumento bem grande da precisão
Mas não entendi direito porque a utilização desta media melhora o desempenho do robo
Queria saber se alguem poderia me explicar porque essa media acaba por dar uma maior precisão a ele?
Sem dares mais informação acerca de como implementaste o teu robot e o que é que entendes por média, é impossível de dizer seja o que for...
vou colocar o codigo pra ver se ajuda a entender
Porque sinceramente eu não consegui entender muito bem a logica n rsrsrs
int Port_PonteH_in1 = 9;
int Port_PonteH_in2 = 10;
int Port_PonteH_in3 = 5;
int Port_PonteH_in4 = 6;
int SensorDireita = A0;
int SensorEsquerda = A1;
int ValorSensorDireita = 0;
int ValorSensorEsquerda = 0;
unsigned long media_sensor_direita =0;
unsigned long media_sensor_esquerda =0;
int ref_sensor_direita = 0;
int ref_sensor_esquerda = 0;
int cont =0;
void setup() {
pinMode(Port_PonteH_in1, OUTPUT);
pinMode(Port_PonteH_in2, OUTPUT);
pinMode(Port_PonteH_in3, OUTPUT);
pinMode(Port_PonteH_in4, OUTPUT);
}
void loop() {
unsigned long media_inicial_direita =0;
unsigned long media_inicial_esquerda =0;
for (int i=0; i <10; i++){
media_inicial_direita = media_inicial_direita + analogRead(SensorDireita);
media_inicial_esquerda = media_inicial_esquerda + analogRead(SensorEsquerda);
} //Valores iniciais para antes das 1000 leituras
ref_sensor_direita = media_inicial_direita /10;
ref_sensor_esquerda = media_inicial_esquerda /10;
while(1){
//Calculo da media
ValorSensorDireita =analogRead(SensorDireita);
ValorSensorEsquerda =analogRead(SensorEsquerda);
if(cont < 1000){
media_sensor_direita = media_sensor_direita + ValorSensorDireita;
media_sensor_esquerda = media_sensor_esquerda + ValorSensorEsquerda;
cont = cont + 1;
}
else{
cont = 0;
ref_sensor_direita = media_sensor_direita / 1000;
ref_sensor_esquerda = media_sensor_esquerda / 1000;
media_sensor_direita =0;
media_sensor_esquerda =0;
}
if(ValorSensorDireita > (ref_sensor_direita +100)){
if(ValorSensorEsquerda > (ref_sensor_esquerda +100)){
movimentar(1); // 2 Sensores na Linha preta
}
else{
movimentar(3); // Somente Direito na Linha preta
}
}
else {
if(ValorSensorEsquerda > (ref_sensor_esquerda + 100)){
// movimentar(4); //Somente Esquerdo na Linha Preta
}
else{
movimentar(1); //Todos fora da Linha preta
}
}
}
}
void controle_motor(int a, int b, int c, int d){
analogWrite(Port_PonteH_in1, a);
analogWrite(Port_PonteH_in2, b);
analogWrite(Port_PonteH_in3, c);
analogWrite(Port_PonteH_in4, d);
}
void movimentar(int code){
switch (code) {
case 1: //Frente
controle_motor(0,100,110,0);
break;
case 2: //Tras
controle_motor(100,0,0,100);
break;
case 3: //Horario
controle_motor(100,0,100,0);
break;
case 4: //Anti-Horario
controle_motor(0,100,0,100);
break;
default: //Stop
controle_motor(0,0,0,0);
break;
}
}