-->
Page 1 of 1

Fall Detector - Community Project?

PostPosted: Sat Feb 28, 2015 5:51 pm
by GengusKahn
A not insignificant portion of society rely on others in certain circumstances for aid, but this has varying levels and the most critical of these circumstances, speaking from personal experience is a FALL.

Current technology operates on a closed network via the telephone and a modem system, see picture for the obvious shortfall.

Image

What If the telephone is in my hand when I fall?

This is only my experience, everyone has elderly or vulnerable members of their social circle who would be safer with a WiFi enabled version that would not require contracts and large payments or the CLOSED infrastructure.

This would be Open Source but not Open Door.
ESP8266 Smallest off the shelf variant with integrated antennae.
MPU6050 or similar.
DS18B20 or similar.
SDCARD (only configuration via hard local copy while offline ).
Preferably small volume power cell CR123 or similar.

To facilitate security the device would only transit during activation, the mpu6050 would need its internals harnessed to allow shutdown (in as much as is possible) of the ESP, for power & security reasons, the mpu6050 could measure the impact and time to self right(get up), this could not be used to track but only activate on impact all other data would need to be invalidated prior to enabling the network communications the DS18B20 could monitor temperature because it is cold down there no matter if the heating is on or not. This could be used to trigger multiple events maybe best OPEN system would be via SMS or maybe email, only basic time date attitude and temp.

If all data from the user side was entered via the PC to the SDCARD this would allow the easy update of mobile no's or email addresses, but also allow the prevention of any changes by using the presence of the card as part of its configuration security this would probably need to be encrypted to prevent adding a vulnerability, the card would then be removed and reboot device.

This is no small project as the reliability of this would be KEY, but this is exactly the kind of thing this ESP8266 was made for, transmitting sensed data, but this, I will say again, would need to be intrinsically secure to allow any confidence in its use.

ESP Admin if you think this is The Appropriate Forum for this could you could point me to any assistance, this would be very much appreciated.

The best approach would be a multi layer 3D printed shell this would allow the enclosure of the 2 boards and battery with wire connections between temperature sensor, the other pins and battery there are very small USB chargers, this and the TF slot would be the only opening, plugged to allow use in the shower etc.

Shape could be imaginative but needs to be small enough to wear as a pendant or in the pocket, this would be an appeal to the artists within the community and their social circles.

This would need to be a FAILSAFE device therefore the security and reliability of each layer of the process would need to be primary consideration.

Thanks for looking.......

Re: Fall Detector - Community Project?

PostPosted: Sun Sep 27, 2015 3:50 am
by Rujo
How about using a rechargeable power bank? It provides already the housing and USB connections for charging and power outlet. Just remove one or two of the batteries and replace the with an ESP12 and acceleration sensor and maybe some electronics to turn the thing on when it senses a mechanical shock.
I find the idea very interesting. Maybe we ore some interested people could work together?

Re: Fall Detector - Community Project?

PostPosted: Tue Nov 17, 2015 6:29 pm
by GengusKahn
Hi there see the sketch here for the email etc... This was a success and is now emailing happily.........

https://github.com/EnvironmentMonitor/ESP8266-DHT11-WiFi_Sensor/blob/master/DDTMonitor.ino


The MPU6050 Code Start point.....

Code: Select all/*

See here for math assistance........

http://webcache.googleusercontent.com/search?q=cache:xgJAp3bDNhQJ:content.gpwiki.org/index.php/OpenGL:Tutorials:Using_Quaternions_to_represent_rotation&hl=en&gl=us&strip=1


RA_XA_OFFS_H        0x06 //[15:0] XA_OFFS
RA_XA_OFFS_L_TC     0x07
RA_YA_OFFS_H        0x08 //[15:0] YA_OFFS
RA_YA_OFFS_L_TC     0x09
RA_ZA_OFFS_H        0x0A //[15:0] ZA_OFFS
RA_ZA_OFFS_L_TC     0x0B
RA_XG_OFFS_USRH     0x13 //[15:0] XG_OFFS_USR
RA_XG_OFFS_USRL     0x14
RA_YG_OFFS_USRH     0x15 //[15:0] YG_OFFS_USR
RA_YG_OFFS_USRL     0x16
RA_ZG_OFFS_USRH     0x17 //[15:0] ZG_OFFS_USR
RA_ZG_OFFS_USRL     0x18



////////////////////////
  delay(1000);
  Wire.beginTransmission(0x68);
  Wire.write(0x06); // starting with register 0x06 (RA_XA_OFFS_H)  !!!NOTE THE DIFFERENCE FROM PREVIOUS ADDRESS!!!
  Wire.endTransmission(false);
  Wire.requestFrom(0x68, 12, true); // request a total of 12 registers NOTE THE DIFFERENCE FROM PREVIOUS ADDRESS!!!
  AcXo = Wire.read() << 8 | Wire.read(); // 0x06  RA_XA_OFFS_H) & 0x07 RA_XA_OFFS_L_TC XA_OFFS
  AcYo = Wire.read() << 8 | Wire.read(); // 0x08  RA_YA_OFFS_H  YA_OFFS
  AcZo = Wire.read() << 8 | Wire.read(); // 0x0A  RA_ZA_OFFS_H  ZA_OFFS 
  GyXo = Wire.read() << 8 | Wire.read(); // 0x13  & 0x04 XG_OFFS_USR
  GyYo = Wire.read() << 8 | Wire.read(); // 0x15 YG_OFFS_USR
  GyZo = Wire.read() << 8 | Wire.read(); // 0x17 ZG_OFFS_USR

//////////////////////////
*/
#include <ESP8266WiFi.h>
#include <Wire.h>
int16_t AcX, AcY, AcZ, Tmp, GyX, GyY, GyZ, AcXo, AcYo, AcZo, GyXo, GyYo, GyZo;

void setup(){
  Serial.begin(57400);
  Wire.begin();
  Wire.beginTransmission(0x68);                       // 0x68 I2C address of the MPU-6050
  Wire.write(0x6B);                                   // PWR_MGMT_1 register
  Wire.write(0);                                      // set to zero (wakes up the MPU-6050)
  Wire.endTransmission(true);
}

void loop(){
  delay(150);
 

  Wire.beginTransmission(0x68);
  Wire.write(0x3B);                                  // starting with register 0x3B (ACCEL_XOUT_H)
  Wire.endTransmission(false);
  Wire.requestFrom(0x68, 14, true);                  // request a total of 14 registers or What you need
  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)
  Wire.beginTransmission(0x68);
  Wire.write(0x06); // starting with register 0x06 (RA_XA_OFFS_H)  !!!NOTE THE DIFFERENCE FROM PREVIOUS ADDRESS!!!
  Wire.endTransmission(false);
  Wire.requestFrom(0x68, 12, true); // request a total of 12 registers NOTE THE DIFFERENCE FROM PREVIOUS ADDRESS!!!
  AcXo = Wire.read() << 8 | Wire.read(); // 0x06  RA_XA_OFFS_H) & 0x07 RA_XA_OFFS_L_TC XA_OFFS
  AcYo = Wire.read() << 8 | Wire.read(); // 0x08  RA_YA_OFFS_H  YA_OFFS
  AcZo = Wire.read() << 8 | Wire.read(); // 0x0A  RA_ZA_OFFS_H  ZA_OFFS
  GyXo = Wire.read() << 8 | Wire.read(); // 0x13  & 0x04 XG_OFFS_USR
  GyYo = Wire.read() << 8 | Wire.read(); // 0x15 YG_OFFS_USR
  GyZo = Wire.read() << 8 | Wire.read(); // 0x17 ZG_OFFS_USR
  Wire.endTransmission(true);
  Serial.println("______________________________________________");
  Serial.print(" | ADj GyX = "); Serial.print(GyX/100);
  Serial.print(" | ADj GyY = "); Serial.print(GyY/100);
  Serial.print(" | ADj GyZ = "); Serial.println(GyZ/100);
  Serial.print(" | ADj AcX = "); Serial.print(AcX/100);
  Serial.print(" | ADj AcY = "); Serial.print(AcY/100);
  Serial.print(" | ADj AcZ = "); Serial.println(AcZ/100);
  Serial.print(" | XA_OFFS = "); Serial.print(AcXo);
  Serial.print(" | YA_OFFS = "); Serial.print(AcYo);
  Serial.print(" | ZA_OFFS = "); Serial.print(AcZo);
  Serial.print(" | XG_OFFS_USR = "); Serial.print(GyXo);
  Serial.print(" | YG_OFFS_USR = "); Serial.print(GyYo);
  Serial.print(" | ZG_OFFS_USR = "); Serial.println(GyZo);
}