Se leen comando por el puerto serial realiza las siguientes funciones según el comando: - Genera distintos tonos por un buzzer. - Controla el movimiento de un carro (con 2 motores) con comandos - Controla el movimiento de un carro (con 2 motores) con Joystick. - Lee y envía el color leido por el puerto serial al PC
Motor.h@0:3a37f6734913, 2021-09-03 (annotated)
- Committer:
- CCastrop1012
- Date:
- Fri Sep 03 05:22:19 2021 +0000
- Revision:
- 0:3a37f6734913
Programa finalizado y funcional.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
CCastrop1012 | 0:3a37f6734913 | 1 | #ifndef Motor_H |
CCastrop1012 | 0:3a37f6734913 | 2 | #define Motor_H |
CCastrop1012 | 0:3a37f6734913 | 3 | #include "mbed.h" |
CCastrop1012 | 0:3a37f6734913 | 4 | /* ************************************************************************** |
CCastrop1012 | 0:3a37f6734913 | 5 | |
CCastrop1012 | 0:3a37f6734913 | 6 | @CCastrop |
CCastrop1012 | 0:3a37f6734913 | 7 | cristiank.castrop@ecci.edu.co |
CCastrop1012 | 0:3a37f6734913 | 8 | |
CCastrop1012 | 0:3a37f6734913 | 9 | L1 Terminal A del motor |
CCastrop1012 | 0:3a37f6734913 | 10 | L2 Terminal B del motor |
CCastrop1012 | 0:3a37f6734913 | 11 | SpeedPin Pin de salida PWM |
CCastrop1012 | 0:3a37f6734913 | 12 | |
CCastrop1012 | 0:3a37f6734913 | 13 | LastVersion: 21 - Abril - 2019 7:45pm |
CCastrop1012 | 0:3a37f6734913 | 14 | ******************************************************************************/ |
CCastrop1012 | 0:3a37f6734913 | 15 | |
CCastrop1012 | 0:3a37f6734913 | 16 | |
CCastrop1012 | 0:3a37f6734913 | 17 | class MotorContinuo { |
CCastrop1012 | 0:3a37f6734913 | 18 | public: |
CCastrop1012 | 0:3a37f6734913 | 19 | /// Constructores para Motores Continuos |
CCastrop1012 | 0:3a37f6734913 | 20 | MotorContinuo(PinName _L1, PinName _L2, PinName _speedPin, PinName _encodin, PinName _PosInicial, int _EncodPulses); |
CCastrop1012 | 0:3a37f6734913 | 21 | |
CCastrop1012 | 0:3a37f6734913 | 22 | void Forward(); // Da un sentido de giro al motor |
CCastrop1012 | 0:3a37f6734913 | 23 | void Back(); // Genera un sentido de giro contrario al de Forward |
CCastrop1012 | 0:3a37f6734913 | 24 | void Stop(); // Detiene el motor dejando el movimiento libre |
CCastrop1012 | 0:3a37f6734913 | 25 | void StopT(); // Detiene el motor truncando o enclavando el movimiento(Lo mantiene quieto). |
CCastrop1012 | 0:3a37f6734913 | 26 | void SpeedDuty(int v); // Varia la velocidad de giro del motor de 0 a 100% |
CCastrop1012 | 0:3a37f6734913 | 27 | void SpinLength_ms(float t); // Duración del giro en ms |
CCastrop1012 | 0:3a37f6734913 | 28 | void SpinLength(float t); // Duración del giro |
CCastrop1012 | 0:3a37f6734913 | 29 | |
CCastrop1012 | 0:3a37f6734913 | 30 | private: |
CCastrop1012 | 0:3a37f6734913 | 31 | |
CCastrop1012 | 0:3a37f6734913 | 32 | DigitalOut L1; |
CCastrop1012 | 0:3a37f6734913 | 33 | DigitalOut L2; |
CCastrop1012 | 0:3a37f6734913 | 34 | PwmOut speedPin; |
CCastrop1012 | 0:3a37f6734913 | 35 | DigitalIn encodin; |
CCastrop1012 | 0:3a37f6734913 | 36 | DigitalIn PosInicial; |
CCastrop1012 | 0:3a37f6734913 | 37 | int EncodPulses; |
CCastrop1012 | 0:3a37f6734913 | 38 | |
CCastrop1012 | 0:3a37f6734913 | 39 | |
CCastrop1012 | 0:3a37f6734913 | 40 | |
CCastrop1012 | 0:3a37f6734913 | 41 | |
CCastrop1012 | 0:3a37f6734913 | 42 | }; |
CCastrop1012 | 0:3a37f6734913 | 43 | |
CCastrop1012 | 0:3a37f6734913 | 44 | |
CCastrop1012 | 0:3a37f6734913 | 45 | class MotorDiscreto { |
CCastrop1012 | 0:3a37f6734913 | 46 | public: |
CCastrop1012 | 0:3a37f6734913 | 47 | /// Constructores para Motores Continuos |
CCastrop1012 | 0:3a37f6734913 | 48 | MotorDiscreto(PinName _Dir, PinName _Step, int _NPasos, PinName _encodin, PinName _PosInicial, int _EncodPulses); |
CCastrop1012 | 0:3a37f6734913 | 49 | |
CCastrop1012 | 0:3a37f6734913 | 50 | MotorDiscreto(void); |
CCastrop1012 | 0:3a37f6734913 | 51 | |
CCastrop1012 | 0:3a37f6734913 | 52 | void Forward(); // Da un sentido de giro al motor |
CCastrop1012 | 0:3a37f6734913 | 53 | void Back(); // Genera un sentido de giro contrario al de Forward |
CCastrop1012 | 0:3a37f6734913 | 54 | void Stop(); // Detiene el motor dejando el movimiento libre. Pin Enable = 0 |
CCastrop1012 | 0:3a37f6734913 | 55 | void StopT(); // Detiene el motor truncando o enclavando el movimiento(Lo mantiene quieto). |
CCastrop1012 | 0:3a37f6734913 | 56 | void StepFreq(long n); // Configura la Velocidad en Número(n) de pasos por segundos. Es decir la Frecuencia de paso. |
CCastrop1012 | 0:3a37f6734913 | 57 | void RunStep(long n); // Se mueve el motor la cantidad de pasos ingresada |
CCastrop1012 | 0:3a37f6734913 | 58 | void Run(float t); // Gira el motor durante el tiempo ingresado, si es 0 indefinidamente hasta llamada a Stop(). |
CCastrop1012 | 0:3a37f6734913 | 59 | void RunRound(int n); // Girar n vueltas |
CCastrop1012 | 0:3a37f6734913 | 60 | void Ustep(int resolucion, PinName M0, PinName M1, PinName M2); |
CCastrop1012 | 0:3a37f6734913 | 61 | // Configura los pasos a 1/2, 1/4, 1/8, 1/16, 1/32 |
CCastrop1012 | 0:3a37f6734913 | 62 | long getStepOnHold(void); |
CCastrop1012 | 0:3a37f6734913 | 63 | |
CCastrop1012 | 0:3a37f6734913 | 64 | long StepOnHold; // Pasos faltantes por ejecutar |
CCastrop1012 | 0:3a37f6734913 | 65 | long StepsBySecond; // Pasos por segundo |
CCastrop1012 | 0:3a37f6734913 | 66 | |
CCastrop1012 | 0:3a37f6734913 | 67 | private: |
CCastrop1012 | 0:3a37f6734913 | 68 | |
CCastrop1012 | 0:3a37f6734913 | 69 | void moveMotor(void); |
CCastrop1012 | 0:3a37f6734913 | 70 | |
CCastrop1012 | 0:3a37f6734913 | 71 | DigitalOut Dir; |
CCastrop1012 | 0:3a37f6734913 | 72 | DigitalOut Step; |
CCastrop1012 | 0:3a37f6734913 | 73 | int NPasos; |
CCastrop1012 | 0:3a37f6734913 | 74 | DigitalIn encodin; |
CCastrop1012 | 0:3a37f6734913 | 75 | DigitalIn PosInicial; |
CCastrop1012 | 0:3a37f6734913 | 76 | int EncodPulses; |
CCastrop1012 | 0:3a37f6734913 | 77 | |
CCastrop1012 | 0:3a37f6734913 | 78 | DigitalOut* EnablePin; |
CCastrop1012 | 0:3a37f6734913 | 79 | DigitalOut* M0; |
CCastrop1012 | 0:3a37f6734913 | 80 | DigitalOut* M1; |
CCastrop1012 | 0:3a37f6734913 | 81 | DigitalOut* M2; |
CCastrop1012 | 0:3a37f6734913 | 82 | |
CCastrop1012 | 0:3a37f6734913 | 83 | Ticker Move; /// Timer de interrupcion |
CCastrop1012 | 0:3a37f6734913 | 84 | float TStep; /// periodo del paso TStep = 1/StepsBySecond; |
CCastrop1012 | 0:3a37f6734913 | 85 | |
CCastrop1012 | 0:3a37f6734913 | 86 | int entradas; /// registra cada 2 ingresos a la interrupcion |
CCastrop1012 | 0:3a37f6734913 | 87 | bool _moveMotorStopped; // en 1 cuando se da la orden al motor de detenerse |
CCastrop1012 | 0:3a37f6734913 | 88 | }; |
CCastrop1012 | 0:3a37f6734913 | 89 | |
CCastrop1012 | 0:3a37f6734913 | 90 | |
CCastrop1012 | 0:3a37f6734913 | 91 | |
CCastrop1012 | 0:3a37f6734913 | 92 | |
CCastrop1012 | 0:3a37f6734913 | 93 | class TraccionD |
CCastrop1012 | 0:3a37f6734913 | 94 | { |
CCastrop1012 | 0:3a37f6734913 | 95 | |
CCastrop1012 | 0:3a37f6734913 | 96 | public: |
CCastrop1012 | 0:3a37f6734913 | 97 | |
CCastrop1012 | 0:3a37f6734913 | 98 | TraccionD(PinName _StepMI, PinName _DirMI, PinName _StepMD, PinName _DirMD, int _NPasos, float _r, float _L); // para giro declarar primero la frecuencia de paso |
CCastrop1012 | 0:3a37f6734913 | 99 | |
CCastrop1012 | 0:3a37f6734913 | 100 | void Forward(); // Da un sentido de giro al motor |
CCastrop1012 | 0:3a37f6734913 | 101 | void Back(); // Genera un sentido de giro contrario al de Forward |
CCastrop1012 | 0:3a37f6734913 | 102 | void Left(); // Configura el sentido de giro de ambos motores de manera contraria para girar hacia la izquierda |
CCastrop1012 | 0:3a37f6734913 | 103 | void Right(); // Configura el sentido de giro de ambos motores de manera contraria e inverso al de Left() para girar hacia la derecha |
CCastrop1012 | 0:3a37f6734913 | 104 | void Stop(); // Detiene el motor dejando el movimiento libre. Pin Enable = 0 |
CCastrop1012 | 0:3a37f6734913 | 105 | void StopT(); // Detiene el motor truncando o enclavando el movimiento(Lo mantiene quieto). |
CCastrop1012 | 0:3a37f6734913 | 106 | void StepFreq(long n);//maximo~350 // Configura la Velocidad en Número(n) de pasos por segundos. Es decir la Frecuencia de paso. |
CCastrop1012 | 0:3a37f6734913 | 107 | void RunStep(long n); // Se mueve el motor la cantidad de pasos ingresada |
CCastrop1012 | 0:3a37f6734913 | 108 | void Run(float t); // Gira el motor durante el tiempo ingresado, si es 0 indefinidamente hasta llamada a Stop(). |
CCastrop1012 | 0:3a37f6734913 | 109 | void RunRound(int n); // Girar n vueltas |
CCastrop1012 | 0:3a37f6734913 | 110 | void Giro(long grados, bool sentido); // IMPORTANTE: Para llamar esta funcino PRIMERO se debe definir la frecuencia de paso |
CCastrop1012 | 0:3a37f6734913 | 111 | // Gira el movil la cantidad de grados indicados en sentido indicado. |
CCastrop1012 | 0:3a37f6734913 | 112 | // en función del radio de las llantas y el radio del eje que une las llantas. |
CCastrop1012 | 0:3a37f6734913 | 113 | // ejemplo: (90, Horario) o (120, AntiHorario) |
CCastrop1012 | 0:3a37f6734913 | 114 | |
CCastrop1012 | 0:3a37f6734913 | 115 | long getStepOnHold(void); |
CCastrop1012 | 0:3a37f6734913 | 116 | |
CCastrop1012 | 0:3a37f6734913 | 117 | |
CCastrop1012 | 0:3a37f6734913 | 118 | private: |
CCastrop1012 | 0:3a37f6734913 | 119 | |
CCastrop1012 | 0:3a37f6734913 | 120 | void moveMotor(void); // Funcion que es ejecutada cada interupcion del Ticker Move |
CCastrop1012 | 0:3a37f6734913 | 121 | |
CCastrop1012 | 0:3a37f6734913 | 122 | // Configuracion de los pines |
CCastrop1012 | 0:3a37f6734913 | 123 | DigitalOut StepMI,DirMI; |
CCastrop1012 | 0:3a37f6734913 | 124 | DigitalOut StepMD, DirMD; |
CCastrop1012 | 0:3a37f6734913 | 125 | int NPasos; |
CCastrop1012 | 0:3a37f6734913 | 126 | float r; // Radio de la llanta |
CCastrop1012 | 0:3a37f6734913 | 127 | float L; // Longitud desde del eje medido entre las 2 llantas dividido en 2. |
CCastrop1012 | 0:3a37f6734913 | 128 | float Rl; // Relacion(Rl) de distacia entre los dos Radios(r y L) |
CCastrop1012 | 0:3a37f6734913 | 129 | long StepOnHold; // Pasos faltantes por ejecutar |
CCastrop1012 | 0:3a37f6734913 | 130 | long StepsBySecond; // Pasos por segundo |
CCastrop1012 | 0:3a37f6734913 | 131 | |
CCastrop1012 | 0:3a37f6734913 | 132 | DigitalOut* EnablePinM1; |
CCastrop1012 | 0:3a37f6734913 | 133 | DigitalOut* EnablePinM2; |
CCastrop1012 | 0:3a37f6734913 | 134 | |
CCastrop1012 | 0:3a37f6734913 | 135 | Ticker Move; /// Timer de interrupcion |
CCastrop1012 | 0:3a37f6734913 | 136 | float TStep; /// periodo del paso TStep = 1/StepsBySecond; |
CCastrop1012 | 0:3a37f6734913 | 137 | |
CCastrop1012 | 0:3a37f6734913 | 138 | int entradas; /// registra cada 2 ingresos a la interrupcion |
CCastrop1012 | 0:3a37f6734913 | 139 | |
CCastrop1012 | 0:3a37f6734913 | 140 | |
CCastrop1012 | 0:3a37f6734913 | 141 | |
CCastrop1012 | 0:3a37f6734913 | 142 | |
CCastrop1012 | 0:3a37f6734913 | 143 | |
CCastrop1012 | 0:3a37f6734913 | 144 | }; |
CCastrop1012 | 0:3a37f6734913 | 145 | #endif |
CCastrop1012 | 0:3a37f6734913 | 146 | |
CCastrop1012 | 0:3a37f6734913 | 147 | |
CCastrop1012 | 0:3a37f6734913 | 148 | |
CCastrop1012 | 0:3a37f6734913 | 149 | |
CCastrop1012 | 0:3a37f6734913 | 150 | |
CCastrop1012 | 0:3a37f6734913 | 151 | |
CCastrop1012 | 0:3a37f6734913 | 152 | |
CCastrop1012 | 0:3a37f6734913 | 153 | |
CCastrop1012 | 0:3a37f6734913 | 154 | |
CCastrop1012 | 0:3a37f6734913 | 155 | |
CCastrop1012 | 0:3a37f6734913 | 156 | |
CCastrop1012 | 0:3a37f6734913 | 157 | |
CCastrop1012 | 0:3a37f6734913 | 158 | |
CCastrop1012 | 0:3a37f6734913 | 159 | |
CCastrop1012 | 0:3a37f6734913 | 160 |