Codigo do seguidor de linha V2 2020.2
Dependencies: mbed
motors.cpp@2:4db1486af4d5, 2020-09-26 (annotated)
- 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?
User | Revision | Line number | New 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 |