Our inspiration for this sentry bot was Navier-Stokes.
stoikey detects bad scents, and in a humorous manner, eliminates said scent with a spray of hawaiian breeze.
We built it through the use of solidworks, a few makerbots, an arduino mega, and a bit of creative enginuity. We used a mq135 sniffer to detect the terrible odors
some of the challenges we faced were Machining the parts, getting the code written out, giving our sentry a personality.
We learned quite a bit about the machining of parts, and how to program something as complicated as a sentry that sprays out air freshener.
We hope in the future that he may help eliminate more then just bad odors. Possibly even working on making labs and hazardous areas safer to work in.
Here's Our Code:
#include <Stepper.h>
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#include <Stepper.h>
#include <IRremote.h>
Stepper sprayer(100, 3, 4, 5, 6);
DFRobotDFPlayerMini sdCard;
long OK= 0xD7E84B1B; //remote hexa values
long ONE= 0xC101E57B;
long TWO= 0x97483BFB;
long THREE= 0xFFB04F;
long FOUR= 0xFF30CF;
long FIVE= 0xFF18E7;
long SIX= 0xFF7A85;
long SEVEN= 0xFF10EF;
long EIGHT= 0xFF38C7;
long NINE= 0xFF5AA5;
long AST= 0xFF42BD;
long ZERO= 0xFF4AB5;
long HASH= 0xFF52AD;
IRrecv ir(13);
decode_results r;
bool audio= true;
long lastSprayTime= millis();
bool needSpray= false;
int preval4A0= analogRead(A0);
int preval3A0= preval4A0;
int preval2A0= preval4A0;
int preval1A0= preval4A0;
int valA0= preval4A0;
int preval4A1= analogRead(A1);
int preval3A1= preval4A1;
int preval2A1= preval4A1;
int preval1A1= preval4A1;
int valA1= preval4A1;
int preval4A2= analogRead(A2);
int preval3A2= preval4A2;
int preval2A2= preval4A2;
int preval1A2= preval4A2;
int valA2= preval4A2;
int ran;
void setup() {
sprayer.setSpeed(500);
Serial.begin(115200);
SoftwareSerial s(10, 11);
s.begin(9600);
ir.enableIRIn();
if(sdCard.begin(s)){
Serial.println("Success");
}
sdCard.setTimeOut(500);
sdCard.volume(30);
sdCard.EQ(0);
short files= sdCard.readFileCounts(DFPLAYER_DEVICE_SD);
Serial.print("Files Detected: ");
Serial.println(files);
//sdCard.play(10);
}
void loop() {
preval4A0= preval3A0;
preval3A0= preval2A0;
preval2A0= preval1A0;
preval1A0= valA0;
valA0= analogRead(A0);
preval4A1= preval3A1;
preval3A1= preval2A1;
preval2A1= preval1A1;
preval1A1= valA1;
valA1= analogRead(A1);
preval4A2= preval3A2;
preval3A2= preval2A2;
preval2A2= preval1A2;
preval1A2= valA2;
valA2= analogRead(A2);
if((valA0-preval4A0) >=7 and (millis()-lastSprayTime) >10000){
//if(((valA0-preval4A0) >=7 or (valA1-preval4A1) >=7 or (valA2-preval4A2) >=7) and (millis()-lastSprayTime) >10000){
//GET LARGEST AND 2ND LARGEST READINGS//
needSpray=true;
int largestReading;
int secondReading;
int baseAngle;
int dir= 1;
if(valA0 > valA1){
largestReading= valA0;
secondReading= valA1;
baseAngle= 0;
if(valA2 > valA0){
largestReading= valA2;
secondReading= valA0;
baseAngle= 240;
}
else if(valA2 > valA1){
secondReading= valA2;
dir= -1;
}
}
else{
largestReading= valA1;
secondReading= valA0;
baseAngle= 120;
dir= -1;
if(valA2 > valA1){
largestReading= valA2;
secondReading= valA1;
baseAngle= 240;
dir= -1;
}
else if(valA2 > valA0){
secondReading= valA2;
}
}
int angle= baseAngle+ dir*60*(secondReading/largestReading);
if(angle < 0){
angle=angle+360;
}
////////////////////////////////////////
lastSprayTime= millis();
while(true){
Serial.println("here");
ran= random(1, 15);
if (not (ran==10 or ran==11)){
break;
}
}
if(audio){
sdCard.play(ran);
}
Serial.println("Hit!");
}
if(ir.decode(&r)){
Serial.println(r.value, HEX);
if(r.value== OK){
if(audio){
audio= not audio;
sdCard.play(10);
}
else{
audio= not audio;
sdCard.play(11);
}
}
if(r.value== ONE and audio){
sdCard.play(1);
}
if(r.value== TWO and audio){
sdCard.play(2);
}
if(r.value== THREE and audio){
sdCard.play(3);
}
if(r.value== FOUR and audio){
sdCard.play(4);
}
if(r.value== FIVE and audio){
sdCard.play(5);
}
if(r.value== SIX and audio){
sdCard.play(6);
}
if(r.value== SEVEN and audio){
sdCard.play(7);
}
if(r.value== EIGHT and audio){
sdCard.play(8);
}
if(r.value== NINE and audio){
sdCard.play(9);
}
if(r.value== ZERO and audio){
sdCard.play(12);
}
if(r.value== AST and audio){
sdCard.play(13);
}
if(r.value== HASH and audio){
sdCard.play(14);
}
ir.resume();
}
Serial.print("Concentration: ");
Serial.print(valA0);
Serial.print(" ");
Serial.println(preval4A0);
if(needSpray and (millis()-lastSprayTime) > 6000){
needSpray=false;
sprayer.step(2000);
delay(200);
sprayer.step(-2000);
delay(200);
//CODE TO SPRAY GOES HERE!!!!!!!!!!!!!!!!!!//////////////
}
delay(100);
}
Log in or sign up for Devpost to join the conversation.