New
Dependencies: SparkfunAnalogJoystick
Revision 7:ae7b2184b737, committed 2021-08-02
- Comitter:
- erodrz
- Date:
- Mon Aug 02 00:32:34 2021 +0000
- Parent:
- 6:7c987ba78aa3
- Commit message:
- v4
Changed in this revision
MPU6050.lib | Show annotated file Show diff for this revision Revisions of this file |
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 7c987ba78aa3 -r ae7b2184b737 MPU6050.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MPU6050.lib Mon Aug 02 00:32:34 2021 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/erodrz/code/MPU6050/#659d1b0342bd
diff -r 7c987ba78aa3 -r ae7b2184b737 main.cpp --- a/main.cpp Thu Jul 29 19:19:16 2021 +0000 +++ b/main.cpp Mon Aug 02 00:32:34 2021 +0000 @@ -2,6 +2,7 @@ #include "mbed.h" #include "platform/mbed_thread.h" #include "SparkfunAnalogJoystick.h" +#include "MPU6050.h" // Constantes de programación para procesos y funciones. // Valor en frecuencia de las notas reproducidas por el Buzzer que da avisos al usuario de la silla. @@ -17,6 +18,7 @@ Thread Thread5; // Hilo para manejar el joystick. Thread Thread6; // Hilo para manejar los comandos de voz recibidos por la Raspberry PI. Thread Thread7; // Hilo para manejar la selección de modo de la silla. +Thread Thread8; // Hilo para manejar la detección de caídas y movimientos bruscos. // Variables globales de distancias en el entorno de la silla de ruedas. int Distance1 = 0; // Distancia adelante de la silla. @@ -43,32 +45,79 @@ // Salida para manejar la señal del buzzer de alertas. PwmOut Buzzer(PE_14); -// Función para reproducir un sonido del buzzer cuando se detecta proximidad a un obstáculo. -void Reproducir_Buzzer_Proximidad(void) +// Objeto manejador del sensor acelerómetro y giroscopio. +MPU6050 MPUsensor(PB_11,PB_10); + +// Función para reproducir un sonido del buzzer cuando se detecta un movimiento brusco. +void Reproducir_Buzzer_Caidas() { Timer BuzzTime; BuzzTime.reset(); BuzzTime.start(); - while(BuzzTime.read_us() < 3000000) // Ejecutar sonido del buzzer por 3 segundos. + while(BuzzTime.read_us() < 1000000) // Ejecutar sonido del buzzer por 3 segundos. { Buzzer.period(1.0/Nota_C4); // Configurando el período, que es equivalente a frecuencia (veces que se reproducirá el tono por segundo). Buzzer.write(0.5); thread_sleep_for(200); - + } + Buzzer.write(0); + BuzzTime.stop(); +} + +// Función para detectar caídas y movimientos bruscos de la silla. +void Thread1_MPU6050() +{ + while(1) + { + float Acelerometro[3]; // Acelerometro[0] = X, Acelerometro[1] = Y, Acelerometro[2] = Z + MPUsensor.getAccelero(Acelerometro); // Obtener lectura del sensor + if(Acelerometro[0] >= 4) + { + PC.printf("Sensor de aceleracion: Movimiento brusco a la derecha.\n\r"); + Reproducir_Buzzer_Caidas(); + } + if(Acelerometro[0] <= -4) + { + PC.printf("Sensor de aceleracion: Movimiento brusco a la izquierda.\n\r"); + Reproducir_Buzzer_Caidas(); + } + if(Acelerometro[1] >= 4) + { + PC.printf("Sensor de aceleracion: Movimiento brusco adelante.\n\r"); + Reproducir_Buzzer_Caidas(); + } + if(Acelerometro[1] <= -4) + { + PC.printf("Sensor de aceleracion: Movimiento brusco atras.\n\r"); + Reproducir_Buzzer_Caidas(); + } + if(Acelerometro[2] <= -4) + { + PC.printf("Sensor de aceleracion: Silla girada de cabeza.\n\r"); + Reproducir_Buzzer_Caidas(); + } + thread_sleep_for(200); + } +} + +// Función para reproducir un sonido del buzzer cuando se detecta proximidad a un obstáculo. +void Reproducir_Buzzer_Proximidad() +{ + Timer BuzzTime; + BuzzTime.reset(); + BuzzTime.start(); + while(BuzzTime.read_us() < 1000000) // Ejecutar sonido del buzzer por 3 segundos. + { Buzzer.period(1.0/Nota_A4); // Configurando el período, que es equivalente a frecuencia (veces que se reproducirá el tono por segundo). Buzzer.write(0.5); thread_sleep_for(200); - - Buzzer.period(1.0/Nota_E4); // Configurando el período, que es equivalente a frecuencia (veces que se reproducirá el tono por segundo). - Buzzer.write(0.5); - thread_sleep_for(200); } Buzzer.write(0); BuzzTime.stop(); } // Función para limpiar caracteres presentes en el buffer de la interfaz serial. -void LimpiarSerialBuffer(void) +void LimpiarSerialBuffer() { char char1 = 0; while(PC.readable()) @@ -85,10 +134,10 @@ Direccion2 = 0; // En dirección de las manecillas del reloj. PWM_Velocidad1.period(0.0001f); // Declaramos el período. - PWM_Velocidad1.write(0.15f); // %25 del duty cicle. + PWM_Velocidad1.write(0.25f); // %25 del duty cicle. PWM_Velocidad2.period(0.0001f); // Declaramos el período. - PWM_Velocidad2.write(0.15f); // %25 del duty cicle. + PWM_Velocidad2.write(0.25f); // %25 del duty cicle. thread_sleep_for(Tiempo); @@ -103,10 +152,10 @@ Direccion2 = 1; // En dirección contraria a las manecillas del reloj. PWM_Velocidad1.period(0.0001f); // Declaramos el período. - PWM_Velocidad1.write(0.15f); // %25 del duty cicle. + PWM_Velocidad1.write(0.25f); // %25 del duty cicle. PWM_Velocidad2.period(0.0001f); // Declaramos el período. - PWM_Velocidad2.write(0.15f); // %25 del duty cicle. + PWM_Velocidad2.write(0.25f); // %25 del duty cicle. thread_sleep_for(Tiempo); @@ -121,10 +170,10 @@ Direccion2 = 0; // En dirección de las manecillas del reloj. PWM_Velocidad1.period(0.0001f); // Declaramos el período. - PWM_Velocidad1.write(0.15f); // %25 del duty cicle. + PWM_Velocidad1.write(0.25f); // %25 del duty cicle. PWM_Velocidad2.period(0.0001f); // Declaramos el período. - PWM_Velocidad2.write(0.15f); // %25 del duty cicle. + PWM_Velocidad2.write(0.25f); // %25 del duty cicle. thread_sleep_for(Tiempo); @@ -139,10 +188,10 @@ Direccion2 = 1; // En dirección contraria a las manecillas del reloj. PWM_Velocidad1.period(0.0001f); // Declaramos el período. - PWM_Velocidad1.write(0.15f); // %25 del duty cicle. + PWM_Velocidad1.write(0.25f); // %25 del duty cicle. PWM_Velocidad2.period(0.0001f); // Declaramos el período. - PWM_Velocidad2.write(0.15f); // %25 del duty cicle. + PWM_Velocidad2.write(0.25f); // %25 del duty cicle. thread_sleep_for(Tiempo); @@ -522,4 +571,6 @@ thread_sleep_for(200); Thread7.start(Thread7_IndicarModo); thread_sleep_for(200); + Thread8.start(Thread1_MPU6050); + thread_sleep_for(200); }