Project in progress
The Fireman is never late again !!!

The Fireman is never late again !!!

Emergency services First On Scene Drone for collecting vital information prior to arrival of response team

  • 8,853 views
  • 9 comments
  • 27 respects

Components and supplies

Necessary tools and machines

09507 01
Soldering iron (generic)

Apps and online services

About this project

INTRODUCTION

Please take note this is an on going build so it is updated daily, Please come back often to view the new information that i regularly add. I will do a final conclusion with all information and diagrams at the end, it will basically be a package with everything you need to copy this build

How many times have a fireman, or an ambulance or even the police gotten to the scene of a crime or been called on an emergency only to find that they are to late, I have been thinking about this for a long time, what if we can utilize a drone with all the correct sensors and materials to be able to be deployed the second an emergency call comes in, there will be no need for the drone to jump into a fire suit or drive a cop car through traffic so it will be able to get to the scene much faster, at the drones arrival it can canvas and scan the area and upload a 3D mapped environment scan of the scene, photograph potential suspects running away or go into a burning building while calculating the amount of survivors while sending there vital signs directly to the station or hospitals computer or even the responding officers car so that they can jump right into action the second they get there without hesitation, How many earth quakes and land slides has buried our loved ones, a group of drones working in unison like the collective mind of a bee hive can track people buried under deb-re and even fly into small spaces to find the or delver small glucose packs or maybe even shoot down a criminal with a stun-gun before he gets a chance to pull the trigger or get away from the bank, giving the police time to get there and arrest him... what if... I have lost people before and if you have not i can tell you know if only the ambulance got there faster...

Tools

The tools section is very crude so i have added a list of everything i needed for this project,

Dremmel with various bits

Hand Drill

screwdrivers Flat and phillips

Spanners 7 & 5.5mm

diamond file set

Heatgun

Soldering Iron

Stanley knife

Miscellaneous parts..

various coloured silicone wire .22AWG

male & female header pins

LED's

Super glue

Solder

Double sided PCB

The Basic Idea

This system can be used with a normal 2.4G R/C controlling system just by adding an R/C receiver to the Flight controller board. The original idea is that a link is established from any PC running the Hologram nova board that connects with the Raspberry Pi Zero wireless that is on the drone, Multiple ultrasonic sensors can map the surrounding area that the drone flies in and the use of the wave share NEO6 GPS module can pin point the location of the drone and also be given instructions as to where it should fly, The Thermal imaging camera and gas detection sensors will look for any dangerous environment surroundings and also track people stuck in the fire or debree from a rock slide, I am trying to find an option for a heart rate monitor that can work over a set distance wireless in order to scan for heart beats if the people that is in trouble is stuck. The drone can be controlled from a head office or set out automatically in a distress call. By doing this a lot of vital information can be sent back to the head office and the response team can know how many people are in danger and what their condition is as well as the dangers of the surrounding areas, thus better preparing them for their arrival on the scene. The Raspberry Pi handles all the collected information and decides what should be done with it, The arduino Mega is purely the Flight Controller to control all the sensors and motors for flight. There is also a "Black Box" that collects the same data that is sent wireless but it is collected on a micro Sim Card for in case the drone crashes or is badly damaged in order to review what went wrong. Their is a small Nokia 5110 LCD on board of the drone that can give vitals and statistics of anything it collects with its sensors, The drone operator can also use this LCD to communicate with a victim and give them instructions like telling them help is on the way, By doing this i thought it might also be a good idea to include a wireless two way communication system so that the injured person is able to talk to the drone operator at head office if necessary. The power system to make all of this work will be a rather powerful Li-polymer battery pack but i am still busy designing it and i t will only be added much later in the project. For now i am adding the flight controller schematics with the LCD and all the sensors connected, This should help start of the project as this is also probable the most important part of the drone other than the wireless connection with the Hologram Nova.

FLIGHT CONTROLLER

The flight controller is based on an Arduino Mega 2560 R3, it also makes use of a Wave share Neo6/7m GPS, there is 3 SR-HC04 Ultrasonic sensors, one VTX53 Laser sensors for the front of the drone, an additional DHT-11 temperature sensor to test ambient temperature and Humidity, a normal 12v Buzzer for alarms, a Nokia 5110 LCD, ( i have decided to change the LCD to a OLED 128x64 Display for the reason the original multiwii software was based on a OLED display and not on the 5110 so it will be easier to incorporate the OLED instead of trying to re-write the graffix for the 5110 LCD) And last but not least for the IMU i decided to use the new POLOLU altIMU-10 V5, this is an awesome sensor that incorporates an LSM6DS33 Accelerometer and Gyro combination, along with a LIS3MDL Magnetometer and a LPS25H digital Barometer. with this combination of sensors on one board it helps with the limited space requirements and makes communication over I2C very easy, The board also comes in at a very low price of only R250 South African Rand's and that is very cheap. It is a very good Quality sensor from Pololu but is not yet supported by Multi Wii, i will write the necessary data in Arduino IDE to add these new sensors to Multi Wii so it can be used within the flight controller. In addition to all of this sensors i am also adding a camera system taken out of a Wii Controller that can track up to four different objects at the same time, and then a secondary Cmos camera operating over 5.8G waveband. I will add a high power LED with Driver that will be attached to the view camera gimbals to act ass a powerful spotlight, RGB LED's will be attached underneath the drone to light it up with emergency response colors of choice like red or blue flashes. I have also added a HM-10 Bluetooth module, this module will operate appart from the rest of the unit and be programmed to use sensor information to seprately pinpoint the location of the drone, it will have a small back up power source that will only work for the BLE if there is any problems with the drone where it crashes or gets lost it can be tracked by activating the BLE beacon and using the last known location from the GPS, It is basicaly a secondary back up solution to protect the drone seeing that it might end up very expensive to build...

POWER DISTRIBUTION BOARD

Now with the FC completed i needed to build a power distribution board to power the 4 ESC's for the motors, Also i am using 4 7.4V li-polymer batteries with a 4000mAh capacity each the 4 batteries are connected in a 2S2P setting giving me 14.8V and 8000mAh, Each battery has an individual voltage divider to monitor each 7.4V pack and the i used a pololu Current sensor that monitors current flow over the entire 2S2P connection.

The current sensor that i used is a POLOLU ACS714 that is a hall effect based linear current sensor, for the voltage divider i used 2 resistors in series connecting the first leg to positive and the third leg to ground then where the two resistors join i added a connection to an analog pin of the micro controller, this analog pin will measure the voltage on the arduino, i used 2K2 resistors but u can calculate your own voltage dividers to work with the battery that you decide to use if you build this drone.If you need help calculating your resistor values and setting up your algorithm for your measurement you can mention it in the comments section with the type of battery you are using and i will help you out.

The power distribution PCB is a 2 sided copper Board, i used my dremmel tool with i 'CNC machine bit' to cut the copper tracks,i cut these tracks free hand with no circuit design because i find it easier to do it freehand like this in the design stage and then doing a printed layout after i have decide the best positions for all the components, this way you can easily see if the placement of the components works nicely with all the other stuff in the project, I will design a decent board when i Finnish, but for now this RAW board works just fine, There are many ways to etch PCB's and i can do all of them, i usually use etching solution to cut with and then print the circuit out on transfer paper but for this project i am going to use my CNC machine( another project i did with an arduino based xy plotter using an old scanner and electric DC motor, let me know in the comments if you would like me to do i project on the CNC machine)

TEST

The piece of code that i have added now is for testing your Hardware to make sure that everything is connected correctly, it will display some information on the LCD and spit out the rest in your IDE Serial monitor like the example below.

The code is very basic and very very RAW i needed something to test my equipment with before i continued building the drone so i took several examples from Arduino and pasted them all together in one big mess. Please remember this part of the build is just for testing purposes only and i don't advise anybody to use this bit of code for anything serious. Now that i know that all my sensors are connected and can work in unison i can continue with the build and add things like cameras and lights, the Camera will have OSD and i will explain in the following bit how to build the OSD i left a blank space on the power distribution board for this purpose. In the code i have commented out lines for the buzzer in order for it not to continually beep during testing, remember to comment them before loading the code to see if the buzzer works.

OSD

For the OSD i used a ATMega 32E5 micro controller basically because i had a couple lying around, I did not come up with this OSD design myself but instead made use of another designed by Dennis Frie, you can use his original post that can be found here http://www.rcgroups.com/forums/showthread.php?t=1473207

It is a very simple design and very simple to use, Just follow his step by step instructions and i'm sure you will have no problem creating your own text overlay for vital Drone information. Here is a schematic of the same circuit where i incorporated my own micro controller, Bare in mind this manner there is no boot loader and you can not talk to the micro-controller with conventional ways like with the Arduino boards so you will need a programmer like a Dragon, if you do not have one of these and do not know how to program without Arduino's boot loader i then suggest that you make use of Dennis's concept and just add another Arduino unit like he did.

Code

Basic FC test codeC/C++
This is just a bisc program to test hardware connections for BLE, GPS, LCD, IMU, BUZZER and temp
**Not to be used to control drone **
#include <LCD5110_Graph.h>
#include <stdio.h>
#include <SimpleDHT.h>
#include <Wire.h>
#include <LSM6.h>
#include <LIS3MDL.h>
#include <LPS.h>
#include <Adafruit_GPS.h>

LCD5110 myGLCD(52,50,51,48,53);
LSM6 imu;
LIS3MDL mag;
LPS ps;

extern unsigned char SmallFont[];
extern unsigned char TinyFont[];

float y;
uint8_t* bm;
int pacy;

int pinDHT11 = 35;
SimpleDHT11 dht11;

char bufferT[10];
char bufferH[10];
char reportAcc[80];
char reportMag[80];
char buffermBar[10];

int y0;
int y1;
int y2;
int y3;

#define GPSSerial Serial1
Adafruit_GPS GPS(&GPSSerial);
#define GPSECHO false
uint32_t timer = millis();

void setup()
{
  Serial.begin(115200);
  GPS.begin(9600);
  Serial2.begin(9600);
  
  myGLCD.InitLCD();
  myGLCD.setFont(SmallFont);
  randomSeed(analogRead(7));
  
  Wire.begin();
  pinMode(34, OUTPUT);
  
  GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
  GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); // 1 Hz update rate
  GPS.sendCommand(PGCMD_ANTENNA);
  delay(1000);
  GPSSerial.println(PMTK_Q_RELEASE);

if (!imu.init())
  {
    Serial.println("Failed to detect and initialize IMU!");
    while (1);
  }
  imu.enableDefault();
{
   if (!mag.init())
  {
    Serial.println("Failed to detect and initialize magnetometer!");
    while (1);
  }

  mag.enableDefault();
  {
      if (!ps.init())
  {
    Serial.println("Failed to autodetect pressure sensor!");
    while (1);
  }

  ps.enableDefault();

}
  }
}



void loop()

 {
  char c = GPS.read();
  if (GPSECHO)
    if (c) Serial.print(c);
  if (GPS.newNMEAreceived()) {
    //Serial.println(GPS.lastNMEA()); 
    if (!GPS.parse(GPS.lastNMEA())) 
    return;
  }
  if (timer > millis()) timer = millis();
     
  if (millis() - timer > 2000) {
    timer = millis(); // reset the timer
    Serial.print("\nTime: ");
    Serial.print(GPS.hour, DEC); Serial.print(':');
    Serial.print(GPS.minute, DEC); Serial.print(':');
    Serial.print(GPS.seconds, DEC); Serial.print('.');
    Serial.println(GPS.milliseconds);
    Serial.print("Date: ");
    Serial.print(GPS.day, DEC); Serial.print('/');
    Serial.print(GPS.month, DEC); Serial.print("/20");
    Serial.println(GPS.year, DEC);
    Serial.print("Fix: "); Serial.print((int)GPS.fix);
    Serial.print(" quality: "); Serial.println((int)GPS.fixquality);
    if (GPS.fix) {
      Serial.print("Location: ");
      Serial.print(GPS.latitude, 4); Serial.print(GPS.lat);
      Serial.print(", ");
      Serial.print(GPS.longitude, 4); Serial.println(GPS.lon);
      Serial.print("Speed (knots): "); Serial.println(GPS.speed);
      Serial.print("Angle: "); Serial.println(GPS.angle);
      Serial.print("Altitude: "); Serial.println(GPS.altitude);
      Serial.print("Satellites: "); Serial.println((int)GPS.satellites);
      Serial.println();
 {
  ble();
 {
   lcd1();
   {
    tempDHT();
    imu1();
    mag1();
    baro();
  //  {
  //digitalWrite(34, HIGH); 
 // delay(500); 
 // digitalWrite(34, LOW);  
 // delay(500);  
//}
}
}
}
}
}
}



void ble()
// BLE HM-10
 {
    if (Serial2.available()) {
    Serial.write(Serial2.read());
   
  }
    if (Serial.available()) {
    Serial2.write(Serial.read());
  }}

  void tempDHT()
  // temperatur sensor DHT-11
  {
  byte temperature = 0;
  byte humidity = 0;
  int err = SimpleDHTErrSuccess;
  if ((err = dht11.read(pinDHT11, &temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
    Serial.print("Read DHT11 failed, err="); Serial.println(err);delay(1000);
    return;
  }
  Serial.print("Temperature ");Serial.print((int)temperature); Serial.print(" *C ,"); 
  Serial.print("Humidity ");Serial.print((int)humidity); Serial.println(" H");
  dtostrf(temperature,2,0,bufferT);
  dtostrf(humidity,2,0,bufferH);
  Serial.println();
  delay(1500);
}

void imu1()
// LSM6DS33 3-axis accelrometer and gyroscope
{
  imu.read();

  snprintf(reportAcc, sizeof(reportAcc), "Accelerometer: %6d %6d %6d    Gyrometer: %6d %6d %6d",
  imu.a.x, imu.a.y, imu.a.z,
  imu.g.x, imu.g.y, imu.g.z);
  Serial.println(reportAcc);
  Serial.println();
  delay(100);
}

void mag1()
// LIS3MDL 3-axis magnetometer
{
  mag.read();

  snprintf(reportMag, sizeof(reportMag), "Magnetometer: %6d %6d %6d",
    mag.m.x, mag.m.y, mag.m.z);
  Serial.println(reportMag);
  Serial.println();
  delay(100);
}

void baro()
// LPS25H barometer
{
  float pressure = ps.readPressureMillibars();
  float altitude = ps.pressureToAltitudeMeters(pressure);
  float temperature = ps.readTemperatureC();
  
  Serial.print("Pressure: ");
  Serial.print(pressure);
  Serial.print(" mbar\ta: ");
  Serial.print(altitude);
  Serial.print(" m\tt: ");
  Serial.print(temperature);
  Serial.println(" deg C");
  dtostrf(pressure, 5, 0, buffermBar);
  Serial.println();
  delay(100);
}

void gps()
{
  char c = GPS.read();
  if (GPSECHO)
    if (c) Serial.print(c);
  if (GPS.newNMEAreceived()) {
    Serial.println(GPS.lastNMEA()); 
    if (!GPS.parse(GPS.lastNMEA())) 
    return;
  }
  if (timer > millis()) timer = millis();
     
  if (millis() - timer > 2000) {
    timer = millis(); // reset the timer
    Serial.print("\nTime: ");
    Serial.print(GPS.hour, DEC); Serial.print(':');
    Serial.print(GPS.minute, DEC); Serial.print(':');
    Serial.print(GPS.seconds, DEC); Serial.print('.');
    Serial.println(GPS.milliseconds);
    Serial.print("Date: ");
    Serial.print(GPS.day, DEC); Serial.print('/');
    Serial.print(GPS.month, DEC); Serial.print("/20");
    Serial.println(GPS.year, DEC);
    Serial.print("Fix: "); Serial.print((int)GPS.fix);
    Serial.print(" quality: "); Serial.println((int)GPS.fixquality);
    if (GPS.fix) {
      Serial.print("Location: ");
      Serial.print(GPS.latitude, 4); Serial.print(GPS.lat);
      Serial.print(", ");
      Serial.print(GPS.longitude, 4); Serial.println(GPS.lon);
      Serial.print("Speed (knots): "); Serial.println(GPS.speed);
      Serial.print("Angle: "); Serial.println(GPS.angle);
      Serial.print("Altitude: "); Serial.println(GPS.altitude);
      Serial.print("Satellites: "); Serial.println((int)GPS.satellites);
    }
  }
}

void lcd1()
{
  y0 = (0, 0);  /// change to move position of scrolling text
  y1 = (0, 16);
  y2 = (0, 24);
  y3 = (0, 32);
  for (int i=84; i>=-(34*6); i--)
 { 
  myGLCD.print("ATOM R/C EXAMPLE",i, y0);
  myGLCD.update();
  delay(50);
  {
   myGLCD.print(buffermBar, 0, 40);
   myGLCD.print("Mbar",40, 40);
   myGLCD.update();
   delay(50);
  {
  myGLCD.print(bufferT, 28, 8);
  myGLCD.print("Temp",0, 8);
  myGLCD.print(bufferH, 66, 8);
  myGLCD.print("Hum",45, 8);
  myGLCD.print("BLE Active", i, y1);
  myGLCD.print("IMU Active", i, y2);
  myGLCD.print("GPS Active", i, y3);
  myGLCD.update();
  delay(20);
 }
 }
}
}

Schematics

Flight controller schematics
Flight controller connections with all sensors , gps, ble , SD, and I2C
drone_fc_ToEW7fvjvy.sch

Comments

Team FrostedFocus

Default
Theo Rossouw
  • 1 project
  • 10 followers

Additional contributors

  • Thank you for your design on the diy thermal imaging camera hack by Brian Benchoff
  • Wii motion cammera hack done by himanshu, i used this project to save myself some time in the long run, the wii motion camera is easily obtainable and it is capable of tracking up to four objects at the same time and that makes it ideal for my project by Himanshu Lohia

Published on

October 16, 2017

Members who respect this project

DefaultLogo carp hjt8hkjthpBenstr ypgm0kzjcx17800334 1137984399662117 8907987200298980488 nDefaultSurajsarkarAdambenzProfile eooucbil68

and 20 others

See similar projects
you might like

Similar projects you might like

OH HAI! on Windows 10 IoT Core

Project in progress by BuddyC

  • 12,530 views
  • 3 comments
  • 48 respects

Laser Pointer Panther Tank

Project tutorial by Arduino “having11” Guy

  • 4,802 views
  • 1 comment
  • 10 respects

Android App-Based Home Automation System Using IOT

Project tutorial by Team Autoshack

  • 24,826 views
  • 17 comments
  • 75 respects

IoT arduino ESP Garage Door opener (UD)

Project in progress by David Smerkous

  • 10,854 views
  • 6 comments
  • 16 respects

The "Mars Rover" Emulator

Project tutorial by MJRoBot

  • 9,531 views
  • 3 comments
  • 47 respects
Add projectSign up / Login