Embora aparente ter deixado este projecto de lado, tem estado ao lado do monitor em que me vou lembrando de pequenos detalhes para melhorar o programa e resolver problemas que não são poucos.
Depois de muito código, isto foi bem mais difícil do que esperava e não fica por aqui.
Versão actual:
http://youtu.be/90pSz0rKg_s (http://youtu.be/90pSz0rKg_s)
desculpem a qualidade de vídeo, não tenho outra forma de gravar :/
O som que se ouve de fundo e que parece estar a fritar alguma coisa é na verdade o papel que colei para formar a pista, devido a esta irregularidade tive de subir os sensores um bocadinho. (próximo passo centro de cópias)
Referi algures que a luz ambiente tem pouca influência, pois claro, se a leitura for apenas de uns e zeros funciona, agora obter níveis analógicos já não resulta lá grande coisa.
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Flh3.googleusercontent.com%2F-3k4nYucynWg%2FV0xXOgESVUI%2FAAAAAAAACSY%2FvOQoWQmyBQExFXr8TAhbldI921fvqV3kgCCo%2Fs800%2FDetalhe%252Bsensores.jpg&hash=4944f59f70fba1b43155dadee832dc8c6c126109)
350 amostras/seg
Nesta foto vêm-se os emissores-recetores IR, nos centrais cortei e poli o topo para a emissão e receção terem maior cobertura, desta forma consigo uma leitura de -255 a 255 de uma ponta à outra da barra dos sensores, mesmo nas zonas cegas foi possível simular a leitura através de código, uma coisa importante foi manter o centro, sendo a aquisição um pouco invulgar aos exemplos que se encontra na net.
O algoritmo PID é passível de ser implementado e ajustado pelo teclado, neste momento está apenas com o P, cheguei a colocar o I mas não gostei muito do resultado, talvez pela pista ser pequena e irregular como tudo... se estiver a uma velocidade mais baixa a ausência do I é notada, já o D justifica-se em grandes retas.
No caso de perder a linha tenho visto exemplos em que vão buscar o último valor lido, entretanto o funcionamento é caótico na estabilização, optei por fazer uma curva apertada correspondente ao lado que estava a tentar virar e não conseguiu, esta foi uma solução bastante satisfatória :)
Leituras sucessivas para se obter a média é irrelevante, cada sensor tem um offset e ganho independente, este valor é obtido na calibração sendo gravado em EEprom.