Codigo do seguidor de linha V2 2020.2

Dependencies:   mbed

Committer:
rperoba
Date:
Sat Sep 26 14:36:55 2020 -0300
Revision:
2:4db1486af4d5
Parent:
0:9efe13b5d868
Child:
5:b07a3cfe017d
V?rias pequenas mudan?as

-Bluetooth: Bugs consertados
-Encoder:Adicionada fun??es para retornar as velocidades reais das rodas
E bugs foram consertados
-Motors:Mudada a fun??o que calcula a velocidade de acordo com a bateria
-Main: Criado o caso 2 e o caso 1 foi completado

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 2:4db1486af4d5 10 float velocidadePadrao = 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 2:4db1486af4d5 45 float novaVelocidade = velocidadePadrao;
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 2:4db1486af4d5 60 float novaVelocidade = velocidadePadrao;
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 2:4db1486af4d5 72 float VelocidadeBateria(float velocidadeBase) // 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 2:4db1486af4d5 77 return novaVelocidade;
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