programação de um robô seguidor de linha

estou fazendo um robô seguidor de linha para uma competição na faculdade, a parte fisica ta pronta, um arduino, com dois sensores para verificar a faixa branca da pista, e outro para verificar o ponto de largada e chegada, estou com problema mesmo é no código

fiz um aqui mais ele não esta seguindo corretamente, ele sai da pista facil, alguem poderia ajudar? e queria introduzir pwm nesse código:

const int PinoSensor1= 0;
const int PinoSensor2= 1;
const int PinoSensor3= 2;
const int Motor1 = 3;
const int Motor2 = 5;

int ValorSensor1 = 0;
int ValorSensor2 = 0;
int ValorSensor3 = 0;
void setup (){
  pinMode(PinoSensor1, INPUT);
  pinMode(PinoSensor2, INPUT);
  pinMode(PinoSensor3, INPUT);
  pinMode(Motor1, OUTPUT);
  pinMode(Motor2,OUTPUT);
  
}

void loop(){
   
   ValorSensor1 = analogRead(PinoSensor1);
   ValorSensor2 = analogRead(PinoSensor2);
   ValorSensor3 = analogRead(PinoSensor3);
   
   
  if (ValorSensor1 >=750){
    digitalWrite(Motor1,LOW);
    
  }
    else{
      digitalWrite(Motor1,HIGH);
      
    }
    if (ValorSensor2 >=750){
      digitalWrite(Motor2,LOW);
      
    }
      
    else {
      digitalWrite(Motor2,HIGH);
      
    }
  if (ValorSensor3 <= 750){
    digitalWrite(Motor1,LOW);
    digitalWrite(Motor2,LOW);
    delay(2100);
  }
    
   else {
  }
    }

intaum queria introduzir pwm e fazer com que funcione, porque o robozinho tende a sair fora da pista, queria que inves de desligar os motores quando der a condição ele coloca-se 50% da velocidade só

Eu não vi os motores, ou o robot... mas parece-me que primeiro devias ter-te preocupado em controlar a velocidade dos motores e só depois fazê-lo seguir uma pista. Estás a fazer o projecto sem bases...

Como ligaste o hardware? Tens um controlador de potência para os motores? Um relé? Um transistor?

Se vires a documentacão do Arduino, tem lá como gerar PWM creio que é analogOutput() ou algo semelhante. Certamente que o que acontece é que o carro está a andar muito depressa para o código que tens. Além de que o teu código não tem como procurar a pista no caso de sair fora dela.

De resto, já verificaste os valores que o sensor dá quando "vê" a pista? Isto é um ponto óbvio para o programa falhar (e eu falo por experiência).

Quanto ao código, em vez de usares o analogInput para veres o sensor, tenta fazer isso com hardware a ligar/desligar um pino de entrada para saberes onde está o carro.
Para te dar um pouco mais de ajuda, como tens os sensores no carro? O que faz o sensor1, 2 e 3?

os motores tem 330 rpm cada um, eles estão bem rapidos, a parte de potencia, estou usando transistors, estaum bem dimensionados, estou usando acoplador optico para isolar do microcontrolador o 4n25, sou meio novato na area de programação, ainda mais a de um seguidor de linha que necessita de uma programação boa, o sensor 1 e 2, são os que ficam dentro da pista branca, são sensores infravermelho analogicos, feitos para seguidor de linha mesmo, o sensor 3 é para detectar a linha de largada e partida, o meu intuito, não é fazer um robô que ganhe a competição e sim conseguir fazer ele realizar o trajeto sem problemas, mais mesmo isso esta dificil, o programa esta muito fraco, naum esta respondendo direito, os motores estão muito rapidos, e ele não esta parando na pista, por isso queria colocar o PWM para diminuir a rotação deles, para ver se o robo realizaria o circuito

obrigado desde jah

Amigo,

330rpms??? putz, c vc tiver a essa rotação mesmo que os sensores acusem que o robo esta fora da linha, provavelmente, a inercia vai mandar ele para fora.

Vc vai ter de ir ajustando a velocidade e a programação aos poucos e ver o melhor posicionamento dos seus sensores, tecnicamente a programação e bem simples...

Poste detalhes do seu projeto, e se possivel videos para analizarmos..
att,

Experimenta ver isto analogWrite() - Arduino Reference.

E depois liga um motor a um pino marcado como PWM e experimenta essa função a enviar um valor de PWM entre 0 e 255 para veres a reacção do motor.

É provável que necessites de arranjar um transistor que comute mais rápido (FET???) para controlar o motor, ou então em vez de usar esta função, ler como usar o PWM via registos do Arduino para poderes alterar a frequência usada por essa função.

Mete aqui mais detalhes e se quiseres, eu meto um exemplo para alterar frequências de PWM nos pinos. :wink:

Obrigado a todos que colaboraram no tópico, consegui melhorar o código, introduzi o PWM , diminui a velocidade, ele fez o percurso inteiro, não esta perfeito ainda mais ta utilizavel, não estou em casa, estou no serviço, a tarde coloco o código aqui para quem quiser ver e copiar, é só colocar a autoria =]. a parte eletronica eu vou criar um diagrama aqui e até o final de semana eu coloco aqui tbm

Obrigado pessoal