Codigo do seguidor de linha V2 2020.2

Dependencies:   mbed

Committer:
rperoba
Date:
Sat Sep 19 20:43:59 2020 +0000
Revision:
0:9efe13b5d868
Child:
2:4db1486af4d5
Child:
6:5551834026ef
Primeira versao do codigo do seguidor de linha v2,utilizando bibliotecas para melhor organizar suas funcoes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rperoba 0:9efe13b5d868 1 #include "mbed.h"
rperoba 0:9efe13b5d868 2 #include "motors.h"
rperoba 0:9efe13b5d868 3 #include "PID.h"
rperoba 0:9efe13b5d868 4
rperoba 0:9efe13b5d868 5 /*=================================================
rperoba 0:9efe13b5d868 6 --------------- CODIGO DOS MOTORES ----------------
rperoba 0:9efe13b5d868 7 =================================================*/
rperoba 0:9efe13b5d868 8
rperoba 0:9efe13b5d868 9 //------------------ FUNCOES ----------------------
rperoba 0:9efe13b5d868 10 float velocidadeBase = 0.18;
rperoba 0:9efe13b5d868 11
rperoba 0:9efe13b5d868 12 PwmOut rodaEsquerda(p25); // Potencias da roda e direções
rperoba 0:9efe13b5d868 13 DigitalOut direcaoEsquerda (p26);
rperoba 0:9efe13b5d868 14 PwmOut rodaDireita(p24);
rperoba 0:9efe13b5d868 15 DigitalOut direcaoDireita (p23);
rperoba 0:9efe13b5d868 16 AnalogIn batMeasure (p22);
rperoba 0:9efe13b5d868 17
rperoba 0:9efe13b5d868 18
rperoba 0:9efe13b5d868 19 void Setup_Motores(void)//Funcao de setup dos motores, ajustando o periodo para inicializar o pwm
rperoba 0:9efe13b5d868 20 {
rperoba 0:9efe13b5d868 21 rodaEsquerda.period(0.01);
rperoba 0:9efe13b5d868 22 rodaDireita.period(0.01);
rperoba 0:9efe13b5d868 23 }
rperoba 0:9efe13b5d868 24
rperoba 0:9efe13b5d868 25 void ControleMotores (float VelocidadeEsquerda, float VelocidadeDireita ){ //Função drive, controla a velocidade de cada roda
rperoba 0:9efe13b5d868 26
rperoba 0:9efe13b5d868 27 if (VelocidadeEsquerda <= 0){
rperoba 0:9efe13b5d868 28 VelocidadeEsquerda = abs(VelocidadeEsquerda);//Utiliza o modulo da velocidade, pois esta nao pode ser negativa
rperoba 0:9efe13b5d868 29 direcaoEsquerda = 0;//Muda a direcao da roda.
rperoba 0:9efe13b5d868 30 rodaEsquerda.write(VelocidadeEsquerda);
rperoba 0:9efe13b5d868 31 }
rperoba 0:9efe13b5d868 32 else { direcaoEsquerda = 1; rodaEsquerda.write(VelocidadeEsquerda); }//Mantem a direcao da roda.
rperoba 0:9efe13b5d868 33
rperoba 0:9efe13b5d868 34 if (VelocidadeDireita <= 0){
rperoba 0:9efe13b5d868 35 VelocidadeDireita = abs(VelocidadeDireita);
rperoba 0:9efe13b5d868 36 direcaoDireita = 0;
rperoba 0:9efe13b5d868 37 rodaDireita.write(VelocidadeDireita);
rperoba 0:9efe13b5d868 38 }
rperoba 0:9efe13b5d868 39 else { direcaoDireita = 1; rodaDireita.write(VelocidadeDireita); }
rperoba 0:9efe13b5d868 40 }
rperoba 0:9efe13b5d868 41
rperoba 0:9efe13b5d868 42 void Acelerando(float velocidadeMax)//Acelera o seguidor de linha
rperoba 0:9efe13b5d868 43 {
rperoba 0:9efe13b5d868 44 int bandeira = 0;
rperoba 0:9efe13b5d868 45 float novaVelocidade = velocidadeBase;
rperoba 0:9efe13b5d868 46 while(bandeira == 0)
rperoba 0:9efe13b5d868 47 {
rperoba 0:9efe13b5d868 48 novaVelocidade = novaVelocidade + 0.01;
rperoba 0:9efe13b5d868 49 wait_us(1);//Deve ser testado se e necessario esse wait
rperoba 0:9efe13b5d868 50 if (novaVelocidade <= velocidadeMax)
rperoba 0:9efe13b5d868 51 {
rperoba 0:9efe13b5d868 52 bandeira = 1;
rperoba 0:9efe13b5d868 53 }
rperoba 0:9efe13b5d868 54 }
rperoba 0:9efe13b5d868 55 }
rperoba 0:9efe13b5d868 56
rperoba 0:9efe13b5d868 57 void Desacelerando(float velocidadeMin)//Desacelera o seguidor de linha
rperoba 0:9efe13b5d868 58 {
rperoba 0:9efe13b5d868 59 int bandeira = 0;
rperoba 0:9efe13b5d868 60 float novaVelocidade = velocidadeBase;
rperoba 0:9efe13b5d868 61 while(bandeira == 0)
rperoba 0:9efe13b5d868 62 {
rperoba 0:9efe13b5d868 63 novaVelocidade = novaVelocidade - 0.01;
rperoba 0:9efe13b5d868 64 wait_us(1);//Deve ser testado se e necessario esse wait
rperoba 0:9efe13b5d868 65 if (novaVelocidade <= velocidadeMin)
rperoba 0:9efe13b5d868 66 {
rperoba 0:9efe13b5d868 67 bandeira = 1;
rperoba 0:9efe13b5d868 68 }
rperoba 0:9efe13b5d868 69 }
rperoba 0:9efe13b5d868 70 }
rperoba 0:9efe13b5d868 71
rperoba 0:9efe13b5d868 72 void VelocidadeBateria() // Funcao de setup da velocidade base dos motores
rperoba 0:9efe13b5d868 73 {
rperoba 0:9efe13b5d868 74 float leituraBateria = batMeasure; //Lendo a carga da bateria em um numero de 0 a 1
rperoba 0:9efe13b5d868 75 float tensaoBateria = 12.6 * leituraBateria; // Carga atual da bateria em Volts
rperoba 0:9efe13b5d868 76 float novaVelocidade = velocidadeBase * 8.4/tensaoBateria;// Calculando a nova velocidade de acordo com a medida de carga atual da bateria
rperoba 0:9efe13b5d868 77 return;
rperoba 0:9efe13b5d868 78 }
rperoba 0:9efe13b5d868 79
rperoba 0:9efe13b5d868 80 /*float ajustaVelocidade(float velocidadeEsperada, float velocidadeReal)
rperoba 0:9efe13b5d868 81 {
rperoba 0:9efe13b5d868 82 Correcao_roda=PID_roda();
rperoba 0:9efe13b5d868 83 velocidadeEsperada=velocidadeReal + Correcao_roda
rperoba 0:9efe13b5d868 84 return velocidadeEsperada;
rperoba 0:9efe13b5d868 85 }*/
rperoba 0:9efe13b5d868 86
rperoba 0:9efe13b5d868 87 void ParadaFinal()//Para o seguidor de linha
rperoba 0:9efe13b5d868 88 {
rperoba 0:9efe13b5d868 89 while(1)
rperoba 0:9efe13b5d868 90 {
rperoba 0:9efe13b5d868 91 rodaEsquerda.write(0);
rperoba 0:9efe13b5d868 92 rodaDireita.write(0);
rperoba 0:9efe13b5d868 93 }
rperoba 0:9efe13b5d868 94 }
rperoba 0:9efe13b5d868 95