Notificador de emergencia otoño con botón de pánico (4 / 17 paso)

Paso 4: Programación ATmega328P microcontrolador con Arduino Uno

Se adjuntó el programa completo de Arduino. Puede que deba calibrar el sensor de la MPU para obtener un resultado exacto. Usted puede también requerido para ajustar los valores de umbral usados en el programa. Asegúrese de que está instalada la biblioteca de alambre de Arduino.

 // MPU-6050 Short Example Sketch// Public Domain#includeconst int MPU_addr=0x68; // I2C address of the MPU-6050int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;float ax=0, ay=0, az=0, gx=0, gy=0, gz=0; //int data[STORE_SIZE][5]; //array for saving past data//byte currentIndex=0; //stores current data array index (0-255)boolean fall = false; //stores if a fall has occurredboolean trigger1=false; //stores if first trigger (lower threshold) has occurredboolean trigger2=false; //stores if second trigger (upper threshold) has occurredboolean trigger3=false; //stores if third trigger (orientation change) has occurred byte trigger1count=0; //stores the counts past since trigger 1 was set truebyte trigger2count=0; //stores the counts past since trigger 2 was set truebyte trigger3count=0; //stores the counts past since trigger 3 was set trueint angleChange=0; void setup(){ Wire.begin(); Wire.beginTransmission(MPU_addr); Wire.write(0x6B); // PWR_MGMT_1 register Wire.write(0); // set to zero (wakes up the MPU-6050) Wire.endTransmission(true); Serial.begin(9600); pinMode(11, OUTPUT); digitalWrite(11, HIGH);}void loop(){ mpu_read(); //2050, 77, 1947 are values for calibration of accelerometer // values may be different for you ax = (AcX-2050)/16384.00; ay = (AcY-77)/16384.00; az = (AcZ-1947)/16384.00; //270, 351, 136 for gyroscope gx = (GyX+270)/131.07; gy = (GyY-351)/131.07; gz = (GyZ+136)/131.07; // calculating Amplitute vactor for 3 axis float Raw_AM = pow(pow(ax,2)+pow(ay,2)+pow(az,2),0.5); int AM = Raw_AM * 10; // as values are within 0 to 1, I multiplied // it by for using if else conditions Serial.println(AM); //Serial.println(PM); //delay(500); if (trigger3==true){ trigger3count++; //Serial.println(trigger3count); if (trigger3count>=10){ angleChange = pow(pow(gx,2)+pow(gy,2)+pow(gz,2),0.5); //delay(10); Serial.println(angleChange); if ((angleChange>=0) && (angleChange<=10)){ //if orientation changes remains between 0-10 degrees fall=true; trigger3=false; trigger3count=0; Serial.println(angleChange); } else{ //user regained normal orientation trigger3=false; trigger3count=0; Serial.println("TRIGGER 3 DEACTIVATED"); } } } if (fall==true){ //in event of a fall detection Serial.println("FALL DETECTED"); digitalWrite(11, LOW); delay(20); digitalWrite(11, HIGH); fall=false; // exit(1); } if (trigger2count>=6){ //allow 0.5s for orientation change trigger2=false; trigger2count=0; Serial.println("TRIGGER 2 DECACTIVATED"); } if (trigger1count>=6){ //allow 0.5s for AM to break upper threshold trigger1=false; trigger1count=0; Serial.println("TRIGGER 1 DECACTIVATED"); } if (trigger2==true){ trigger2count++; //angleChange=acos(((double)x*(double)bx+(double)y*(double)by+(double)z*(double)bz)/(double)AM/(double)BM); angleChange = pow(pow(gx,2)+pow(gy,2)+pow(gz,2),0.5); Serial.println(angleChange); if (angleChange>=30 && angleChange<=400){ //if orientation changes by between 80-100 degrees trigger3=true; trigger2=false; trigger2count=0; Serial.println(angleChange); Serial.println("TRIGGER 3 ACTIVATED"); } } if (trigger1==true){ trigger1count++; if (AM>=12){ //if AM breaks upper threshold (3g) trigger2=true; Serial.println("TRIGGER 2 ACTIVATED"); trigger1=false; trigger1count=0; } } if (AM<=2 && trigger2==false){ //if AM breaks lower threshold (0.4g) trigger1=true; Serial.println("TRIGGER 1 ACTIVATED"); }//It appears that delay is needed in order not to clog the port delay(100);} void mpu_read(){ Wire.beginTransmission(MPU_addr); Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H) Wire.endTransmission(false); Wire.requestFrom(MPU_addr,14,true); // request a total of 14 registers AcX=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L) AcY=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L) AcZ=Wire.read()<<8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L) Tmp=Wire.read()<<8|Wire.read(); // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L) GyX=Wire.read()<<8|Wire.read(); // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L) GyY=Wire.read()<<8|Wire.read(); // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L) GyZ=Wire.read()<<8|Wire.read(); // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L) } 

Artículos Relacionados

Divertido y Simple sirena de la emergencia: el botón de pánico

Divertido y Simple sirena de la emergencia: el botón de pánico

Hola a todosCuando creé este video, no tengo la intención de hacer un instructivo, pero pensé por qué no.  El esquema se habla al final del video.  Es muy fácil de armar.  No es necesario utilizar las mismas piezas que hice en el video.  Hay otros bo
Hombre de jengibre de Shrek y el gato con botas

Hombre de jengibre de Shrek y el gato con botas

hombre de jengibre casero de Shrek con el gato con botas.
El botón de pánico

El botón de pánico

Ok, pedazo de explicación primero.  Tenemos un PC como un 'jukebox democrático' en el Hackspace Manchester.  La idea es que cualquier persona puede poner música en él y él juega toda la biblioteca en shuffle durante nuestras sesiones de hack un poco
Botón de pánico Pro

Botón de pánico Pro

MotivaciónTío de mi amigo es vivir solos por mucho tiempo. Si podríamos había cuidado de él mejor, él sería todavía vivir sano y feliz. Millones de personas vulnerables podrían no tan afortunada de tener miembros de la familia para cuidar de. La mayo
Botón de pánico del escritorio

Botón de pánico del escritorio

Cuando yo era un niño mi padre tenía un botón de pánico bajo su escritorio que estaba conectado al llamar al 911. Mientras pensaba que esto fue muy bien en el momento, más tarde me ocurrio que tenía porque el barrio que su negocio se encuentra en era
Lápiz de NDS con un lápiz mecánico!

Lápiz de NDS con un lápiz mecánico!

Hola chicos & chicas! Este es mi primer instructivo, así que ir fácil en mí:) .i le enseñará cómo hacer un lápiz con un lápiz mecánico! he hecho dos, utilizar diferentes métodos para cada uno. Pero por ahora les enseñaré cómo hacer uno similar al roj
Botón de emergencia portátil con localización (linkit uno)

Botón de emergencia portátil con localización (linkit uno)

Hola todos :) quiero compartir con ustedes un pequeño proyecto. Es un botón de emergencia portable que hice a mi mamá (ella tiene cancer) y necesito saber cómo puedo encontrar le si ella me necesita. Este botón tiene un módulo GPS y GSM, que enviar u
Paracord brazalete con botón de puño de mono

Paracord brazalete con botón de puño de mono

vi la pulsera del paracord por Stormdrane un par de meses atrás y tuvo que hacer algunos; una noche, mientras insomniacking, inspirado y tuve una epifanía: ¿por qué no hacer un brazalete de paracord, usando un puño de mono y un lazo como un cierre, e
Cómo capturar colores de otoño con cinta Scotch

Cómo capturar colores de otoño con cinta Scotch

So. Quiere capturar la belleza del otoño, o estas solo aburrido porque (como yo) que siempre encontrar maneras inteligentes para hacer su tarea en el último minuto, muy muy. Y hacer algo más cuando se supone que para ser duro en el estudio de trabajo
RC Multi canal Arduino proporcional transmisor / receptor con botón trimmer

RC Multi canal Arduino proporcional transmisor / receptor con botón trimmer

¿Está buscando para hacer tu propio quadcopter abejón o coche RC con Arduino, pero no sabe por dónde empezar? ¿Tal vez ya comprado unos módulos de RF de 433MHz sólo para descubrir que no eran tan fáciles de usar como pensabas? ¡ Prueba esto!Aprenderá
Botón de pánico con SMS + GPS (Linkit uno)

Botón de pánico con SMS + GPS (Linkit uno)

Este proyecto es para el un Linkit. Esta placa de prototipo se programa como un Arduino pero tiene mucho más características. Este proyecto demuestra las unidades GSM (SMS) y GPS.Las características de este proyecto:Presione el botón para enviar SMS
Notificador de desbordamiento del tanque con LinkitONE de agua

Notificador de desbordamiento del tanque con LinkitONE de agua

¿Desborda el agua cada vez? ¿Se olvida de cerrar la válvula de agua cuando el depósito está lleno? Entonces tengo una solución al problema!Aquí te voy a mostrar cómo hacer un notificador de desbordamiento de agua que le avisa cuando alguna vez fugas
OpenTrashCan: Una Internet inteligente con bote de basura que habla

OpenTrashCan: Una Internet inteligente con bote de basura que habla

OpenTrashCan se conecta a tu red wifi y le envía un correo electrónico cuando su totalidad, te habla e incluso puede ser controlado desde la App de OpenTrashCan para los teléfonos Android. Verlo en acción aquí:¿ Quiere comprar uno? Regístrate en la l
Hacer tu propio jack de 3.5mm 4 polos con botón para Autocom 200

Hacer tu propio jack de 3.5mm 4 polos con botón para Autocom 200

mayor parte del razonamiento detrás de este proyecto es que no pude encontrar este cable de audio con un botón para contestar o iniciar una llamada de teléfono mientras se conduce una motocicleta.Autocom hace un cable para él, pero sin el botón para