Professional Documents
Culture Documents
Cooler Final Documetation Report
Cooler Final Documetation Report
Group F
David Merigian
Quang Nguyen
Prashant
Adhikari
EGR 604
2
Project Description
The main objective of this project is to devise an operator controlled “Follow Me Cooler”
which follows the operator to a desired destination via GPS tracking and obstacle detection that
helps users by carrying beers cans inside the cooler. In this project, an Arduino is used to build a
“Follow Me Cooler” that connects to a smartphone via Bluetooth and uses GPS to navigate. The
“Follow Me Cooler” is the mechanical platform that is designed to hold the beer cooler and to
narrow the distance to the user by comparing the coordinate over the GPS module. This mechanical
platform adopted the Arduino Uno microcontroller, the Bluetooth module, the Adafruit compass
module, and the Parallax GPS module. Also, the “Follow Me Cooler” communicate with the
Android phone to determine the user’s location. Moreover, the cooler has the obstacle avoidance
features, that allows it to sense the obstacles and avoid them on its path. Another interesting
feature of the Cooler is measuring the temperature inside the Cooler using the thermocouple
module and displaying the temperature on the Liquid Crystal Display (LCD). The total cost of
Features
Physical Requirements
Appropriate dimensions
User display
Obstacles may be the wall, the people around, or any objects on the path that
maintained gravel (packed for normal foot traffic, average size not to exceed one-
half inch)
Moving forward/reverse
Steering/turning radius
Speed
Battery
Rechargeable
Affordable
Specifications
The specifications regarding the validation of the project are as follows:
Load Capacity - 12 beers, 5lb bag of ice 20 < load < 50 lbs
rectangular shape
tall
Forward and reverse speed to match the user 0 < speed < 3.0 mph
Turning radius Width of the cooler < radius < 3 times inches
width of cooler
Hours
Concepts
The design concepts that the team came up with during the design phase are shown and
described in the section below.
Concept 1
Description:
Propulsion: Tracks will allow movement across rough terrain, possibly stairs
Obstacle avoidance: Ultrasonic sensor mounted at a slight outward angle will allow
Concept 2
Description:
Concept 3
Description:
Frame: Wood
Propulsion: Tracks will allow movement across rough terrain, possibly stairs
Ground clearance: A ground clearance of 4 inch gets the motor underneath not to
The electrical connection used in the design of “Follow Me Cooler” is shown in Figure [3]. A 9V
cell is used to power the Arduino UNO and a 12V lipo battery is used to provide supply to the two
DC motors via a terminal block in the Polulu VNH5019 Dual Motor Driver Shield. The two DC
motors are connected to the terminal blocks M1A, M1B and M2A, M2B of the driver shield. The
motor driver shield supports peak current upto 30A which is sufficient to drive our cooler wheels.
The bluetooth module (HC-05), GPS module (Ultimate GPS Breakout V3), Compass module
(LSM303DLHC), and an Ultrasonic sensor (HC-SR04) are powered via 5V pin of driver shield.
The Tx pin of bluetooth module HC-05 and Tx pin of GPS module is connected to port 0 and port
3 respectively of the driver shield. The SCL and SDA of the compass module is connected to the
analog input pin A4 and A5 respectively. The Trig and Echo pin of an ultrasonic sensor is
Due to insufficient pins in Polulu motor driver shield, we used another Arduino Uno for
LCD and Thermocouple (MAX6675) connection. A 9V cell is used to power the arduino and LCD
along with thermocouple are powered via 5V pin of arduino. SDA and SCL pin of LCD are
connected to the analog input pins of an arduino and SCK, CS and S0 pin of thermocouple are
Power requirement
The starting and running current drawn by the motor connected in series with the motor driver is
tabulated below.
Table 1: Current drawn in different loading conditions
S.N Condition of Operation Starting current (A) Running Current value (A)
Similarly, the starting and running voltage draw by the motor connected in parallel with
the motor driver is tabulated below.
Table 2: Voltage drawn in different loading conditions
From the above two tables, the power (given by current * voltage) requirements for our cooler
under different loading conditions are tabulated below.
Table 3: Current drawn in different loading conditions
Torque calculation
Motors must be able to move cooler up a 5-degree
Radius of wheel:
0.127m Torque
Required:
UMI 218-1005 12V DC motor, 104RPM worm gear motor stall torque: 18
capacity
Increasing motor capacity significantly will allow for movement up significantly steeper terrain,
as well as delivering heavier payloads. Battery life will be reduced at high capacity
transportation.
Flowchart
Flowchart showing the ultrasonic, compass, GPS, Bluetooth, Arduino and a Polulu motor driver
shield is shown below.
Start
Is No
SensoDuino App Installed?
Install SensoDuino App
Yes
No
Is Mobile Turn ON Mobile GPS
GPS ON?
Yes
Is Mobile
Bluetooth connected to HC-05 NoConnect HC-05 module to Bluetooth module
module?
Yes
A 18
A
Is
No
SensoDuino App connected Connect SensoDuino app to HC-05 module
to HC-05?
Yes
Yes
19
B
Is serial data No
available from GPS module? Check wire connection of GPS module
Yes
Is data
Check wire
available from compass module andconnection
No of on-board compass module and Ultrasonic se
Ultrasonic ?
Yes
C
C
Calculate bearing angle using Azimuth angle formula from Phone and GPS module Latitude and Lo
Is bearing No
angle =~ Rotate cooler clockwise
heading angle – 30?
Yes
C
C
Yes
Is obstacle Rotate cooler anticlockwise
detected?
No
Is distance
=~ 5cm? Stop
D
Flowchart for some added extra feature which includes displaying degree Fahrenheit temperature
inside a cooler in a LCD monitor using a thermocouple as a temperature sensor is shown below.
Start
#include <Wire.h>
#include <Adafruit_Sensor.h> // including libraries for sensors
#include <Adafruit_LSM303_U.h> // including libraries for compass
#include<math.h> // including libraries for mathematical calculation
#include "DualVNH5019MotorShield.h" //including libraries for polulu motor driver
shield #include <Adafruit_GPS.h> // including libraries for adafruit GPS module
#include <SoftwareSerial.h> //inclusing libraries for serial communication
#include <HCSR04.h> // library for ultrasonic sensor
// Set GPSECHO to 'false' to turn off echoing the GPS data to the Serial console
// Set to 'true' if you want to debug and listen to the raw GPS sentences.
#define GPSECHO true
DualVNH5019MotorShield md; // md object initialized for motor driver shield
String inText;
float value0, value1, value2; // values initialized for storing latitude and longitude from mobile
app
const int trigPin1 = 13; // trigger pin defined for port 13 in
arduino const int echoPin1 = 11; // echo pin definef for port 11 in
arduino long duration1;
int ult_front;
void setup()
{
if(!mag.begin())
{
/* There was a problem detecting the LSM303 ... check your connections */
Serial.println("Ooops, no LSM303 detected ... Check your wiring!");
while(1);
}
// 9600 NMEA is the default baud rate for Adafruit MTK GPS's- some use 4800
GPS.begin(9600);
// uncomment this line to turn on RMC (recommended minimum) and GGA (fix data)
including altitude
GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
// uncomment this line to turn on only the "minimum recommended" data
//GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCONLY);
// For parsing data, we don't suggest using anything but either RMC only or RMC+GGA since
// the parser doesn't care about other sentences at this time
// delay(1000);
// Ask for firmware version
// mySerial.println(PMTK_Q_RELEASE);
}
// Interrupt is called once a millisecond, looks for any new GPS data, and stores
it SIGNAL(TIMER0_COMPA_vect) {
char c = GPS.read();
// if you want to debug, this is a good time to do
it! #ifdef UDR0
if (GPSECHO)
if (c) UDR0 = c;
// writing direct to UDR0 is much much faster than Serial.print
// but only one character can be written at a
time. #endif
}
void useInterrupt(boolean v) {
if (v) {
// Timer0 is already used for millis() - we'll just interrupt somewhere
// in the middle and call the "Compare A" function
above OCR0A = 0xAF;
TIMSK0 |= _BV(OCIE0A);
usingInterrupt = true;
} else {
// do not call the interrupt function COMPA
anymore TIMSK0 &= ~_BV(OCIE0A);
usingInterrupt = false;
}
}
serial
return; if (DEBUG) {
Serial.print("Sensor type: ");
Serial.println(sensorType);
Serial.print("Sensor log#: ");
Serial.println(logCount);
Serial.print("Val[0]: ");
Serial.println(value0);
Serial.print("Val[1]: ");
Serial.println(value1);
Serial.println(" ");
//delay(1000);
}
float Pi = 3.14159;
// Normalize to 0-360
if (heading < 0)
{
heading = 360 + heading;
}
Serial.print("Compass Heading: ");
Serial.println(heading);
}
}
float y= sin(diff)*cos(lat_end);
float x= cos(lat_start)*sin(lat_end)-sin(lat_start)*cos(lat_end)*cos(diff);
Arduino Source code for extra feature which includes displaying temperature inside the
cooler in a LCD
Source code for LCD display
#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(9600);
while (!Serial); // wait for serial
monitor Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address
0x"); if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "max6675.h"
//Declare variable
int ktcSO = 8;
int ktcCS = 9;
int ktcCLK = 10;
lcd.begin(16,2);
lcd.clear();
Serial.begin(9600);
// give the MAX a little time to
settle delay(500);
}
void loop() {
// basic readout
lcd.setCursor(1,0);
lcd.write("Deg F = ");//print the phase
lcd.print(ktc.readFahrenheit());//print the temperature
//Serial.println(ktc.readFahrenheit());
delay(2500);
}
Budget:
K-Thermocouple and
5 Module N/A CTYRZCH $12.99 1 $12.99
6 Ultrasonic Sensor N/A Osoyoo $1.00 4 $4.00
HC-05 Bluetooth
7 Bluetooth Module N/A Module $10.57 1 $10.57
8 GPS Module N/A Adafruit $41.00 1 $41.00
Aluminium Metal
13 Frames N/A N/A $4.00 1 $4.00
Total $217.01
User Manual
Battery installation
The system consists of 5200maH 12V LiPo battery which powers the motors. The system
is also equipped with 9v battery to supply the arduino and an electronics separately in
order to protect the main system from current fluctuation. The LiPo battery used is a
rechargeable one. It can be recharged with the adapter connected to the power supply.
Pay attention to the types and the polarities when installing the batteries
This follows me cooler contains two lipo batteries each 12 volts connected in parallel
for a motor driver, one 9 volt battery for the Arduino module, Bluetooth module, GPS
module, and Compass. Another 9-volt battery for another Arduino module which is
used for the temperature sensor and LCD display.
There is a switch for the motor driver power supply so that we can turn on and off
the follow me cooler.
Software installation
One can easily install and use the SensoDuino app in their phone through following steps:
Step 1:
Open Browser in your android cell phone and go to the link provided below and download
the .apk file of Sensoduino android application and install the application in your
phone.https://m.apkpure.com/sensoduino/com.techbitar.android.sensoduino?fbclid=IwAR1
zNMzC-riJV70zx9zxapH3vltPDTsLuExMWlGAYyrl2Fn-qxOjjIIAdus
Step 2:
Step 3:
Open SensoDuino application and click on the menu bar and connect Bluetooth to the HC-
Mark ✔ to the GPS as Virtual Shields on and mark ✔ to Tx to send GPS data and bearing
angle to Arduino through Bluetooth module. (Note: Bearing angle changes if and only if
Wheel alignment
The Follow me Cooler may turn slightly right or left while moving forward
wheels.
Always check the tightness the screws on the wheels and steering before using
When the follow me cooler is slowing down, the batteries should be replaced.
Safety
When the Follow Me Cooler is not used, please turn off the power switch.
Check the power switch, cord, enclosure and other parts regularly. Do not use if there
is any damages.
Be careful to avoid damage to the other object when using the Follow Me Cooler in
the room
Use the Follow Me Cooler in the proper outside condition, do not use on the road or in
crowd
Do not disassemble the Follow Me Cooler and modify the wiring and circuit board.
Do not turn off the Follow Me Cooler while it is still moving. This will cause the extremely
abrupt stop
Do not operate the Follow Me Cooler if it is not properly functioning
Do not put the heavy weight that exceeds the recommended weight in the Follow me
Cooler
Remove all batteries if the Follow Me Cooler will not be used for a long period of time
Transfer/ Carry
The Follow Me Cooler should be carried by at least two people because it is bulk and
heavy.