Boreas – 618 Un robot pompier – iNetTutor.com

Posted on


Boreas – 618: un robot pompier

Samuel III Ulric Antonio G. Espiña, Ronuel Joseph L. Pilla, Ravi Reese L. Tobongbanua

Abstrait

Les incendies sont un énorme problème non seulement ici aux Philippines, mais aussi à travers le monde. Selon les statistiques du BFP, plus de 10 000 incendies se sont produits au cours de l’année 2017. De nombreux systèmes construits pour lutter contre la propagation du feu dans les bâtiments ont tous leurs propres défauts et ne peuvent pas être utilisés dans certaines circonstances. Les chercheurs ont voulu développer un robot de lutte contre l’incendie automatisé pour aider à arrêter la propagation du feu dans les espaces urbanisés et de bureaux. Pour assembler tous les composants, un Arduino MEGA 2560 a été utilisé. Pour le mouvement du robot, quatre moteurs 5 V CC, à fixer aux modules de pont en H, ont été fixés sur des points spécifiques sur la face inférieure de la base du châssis et ont été utilisés pour propulser le robot vers l’avant et pour contourner d’éventuelles obstructions de la trajectoire du robot. Un capteur de télémétrie ultrasonique a été utilisé pour détecter les objets qui se trouvaient dans une portée suffisante et le robot a dû se déplacer. Une combinaison des fonctions d’un capteur de flamme et d’un capteur de température a été utilisée pour déterminer s’il y avait un incendie et où il se trouvait. Pour activer l’extincteur, un servomoteur a été utilisé pour serrer la poignée. Lors de la détection d’une augmentation de la chaleur, le robot enverrait un message texte au propriétaire, signalant qu’un incendie pourrait se produire. Ensuite, le robot se dirigeait alors vers la flamme nue jusqu’à ce qu’il soit à un mètre de distance et déchargeait l’extincteur dessus. Les tests ont prouvé que ce robot est efficace.

Diagramme schématique de Boreas - 618 Un robot pompier
Diagramme schématique de Boreas – 618 Un robot pompier

INTRODUCTION

Selon les statistiques du BFP pour l’année 2017, les Philippines ont été frappées par plus de 14000 incendies. À la suite de ces incidents, le peuple philippin a été confronté à environ 7,8 milliards de pesos palestiniens de dommages matériels, à l’exception du centre Metro Ayala Cebu, qui a été comptabilisé pour avoir coûté 809,3 millions de pesos dominants. Maintenant, selon le BFP au 18e de mars en 2018, il y a eu 1758 incendies enregistrés qui laissent et une estimation de P1 milliard de dommages et un nombre de corps de 3041.

À l’heure actuelle, il existe plusieurs systèmes en place pour prévenir ou retarder la progression des incendies, ainsi que pour avertir les habitants du danger entrant, dans la plupart des zones urbanisées. Ces systèmes comprennent des alarmes d’incendie, des systèmes de gicleurs et des emplacements dédiés aux extincteurs. Bien que ces systèmes soient efficaces dans ce qu’ils font, ils ont chacun des problèmes spécifiques qui peuvent entraîner des dysfonctionnements qui peuvent les empêcher de fonctionner de manière optimale, voire pas du tout.

Boreas – 618, inspiré par le Boreas de la mythologie grecque, est un robot automatisé qui localise et aide à l’extinction des incendies. Bien qu’il n’ait pas détecté d’incendie, il restera en mode «dormant» pour économiser l’énergie. À l’aide d’une carte Arduino 2560, une variété de capteurs ont été utilisés pour déterminer où déplacer et où pulvériser.

Généralement, cette étude vise à créer un prototype de robot de lutte contre l’incendie entièrement automatisé qui peut être amélioré pour répondre à des besoins plus élevés. Plus précisément, cette étude vise à créer un prototype de robot qui recherche automatiquement la source du feu et l’éteint. Cette étude est limitée aux surfaces planes car le robot n’a pas été construit pour traverser des terrains rocheux ou cahoteux. Cette étude est également limitée à la taille et à la capacité de l’extincteur, ou à la durée pendant laquelle il peut rester pulvérisé sans s’épuiser.

Fixation des composants

Les 4 moteurs à courant continu ont été fixés sous le châssis dans les positions qui leur ont été attribuées. La batterie a été fixée en place avec l’extincteur, ainsi que la carte Arduino et le reste des composants électriques. Les moteurs CC étaient attachés aux modules Hbridge et étaient alimentés à partir de là. Une fois les moteurs CC fixés, un servomoteur a été fixé à la poignée de l’extincteur pour l’activer si nécessaire. Après que tout a été mis à sa place, la carte Arduino a été attachée à la batterie 12v.

Code source:

#include 

#include 
#include 
#include 
#include 
#include 
#include 

#include 
#include 
#include 

#define DHT11PIN 37
#define DHT11TYPE DHT22
#define fireSensor A8
#define smokeDetectorPin A1
// Servos and Sensors
const int servoPin = 12;
const int fireServoPin = 10;
const int triggPin = 13;
const int echoPin = 9;
const int fireRelay = 40;
const int hostServoPin = 11;

// H-bridge motor pins
const int ENA = 2;
const int IN1 = 3;
const int IN2 = 4;
const int ENB = 6;
const int IN3 = 7;
const int IN4 = 8;

//SIM9000 pins
const int vr5RX = 51;
const int vt5TX = 53;

SoftwareSerial smsSerial(vt5TX, vr5RX);
Servo servo;
Servo fireServo;
Servo hostServo;
DHT dht11(DHT11PIN, DHT11TYPE);

int pos = 90;
int fireServoPos = 0;

int messageCount = 0;
bool messageSent = false;

int forSwitch;

Vector goBack;

void setup() {
Serial.begin(9600);

while (!Serial) {
// wait for serial port to connect. Needed for native USB port only
}

smsSerial.begin(9600);
dht11.begin();
pinMode(triggPin, OUTPUT);
pinMode(echoPin, INPUT);
servo.attach(servoPin);
fireServo.attach(fireServoPin);
hostServo.attach(hostServoPin);
delay(100);
servo.write(90);
fireServo.write(90);
hostServo.write(125);

pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);

pinMode(fireSensor, INPUT);
pinMode(fireRelay, OUTPUT);
pinMode(smokeDetectorPin, INPUT);

digitalWrite(fireRelay, HIGH);

delay(10000);
}

bool readSmoke(){
int smokeValue = analogRead(smokeDetectorPin);
if(smokeValue > 510){
return true;
}else{
return false;
}
}

void Nod() {
for (int i = 135; i < 175; i += 20) {
hostServo.write(i);
isFire();
delay(200);
}
for (int i = 175; i > 135; i -= 20) {
hostServo.write(i);
isFire();
delay(200);
}
}

void horizontal() {
for (fireServoPos = 0; fireServoPos < 180; fireServoPos += 10) {
fireServo.write(fireServoPos);
delay(100);
Nod();
}
fireServo.write(90);
}

void botMove() {
for (int i = 0; i < 3; i++) {
checkObject();
isFire();
forward(ENA, IN1, IN2);
forward(ENB, IN3, IN4);
delay(20);
}
}

void goToOrigin() {
for (int countdown = goBack.Size() - 1; countdown > -1; countdown--) {
forSwitch = goBack[countdown];
switch (forSwitch) {
case 1:
turnRight();
break;
case 2:
turnLeft();
break;
case 3:
reverse(ENA, IN1, IN2);
reverse(ENB, IN3, IN4);
break;
case 4:
forward(ENA, IN1, IN2);
forward(ENB, IN3, IN4);
break;
}
}
}
bool isObject(int angle) {
int distance = getDistance(angle);
if (distance < 40) {
return true;
} else {
return false;
}
}

int getDistance(int angle) {
servo.write(angle);
delay(1000);
digitalWrite(triggPin, LOW);
delayMicroseconds(10);
digitalWrite(triggPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggPin, LOW);
long echoResult = pulseIn(echoPin, HIGH);
int distance = echoResult * 0.034 / 2;

return distance;
}

int checkObject() {
bool objectResult = isObject(90);
if (objectResult) {
stopMotion(ENA, IN1, IN2);
stopMotion(ENB, IN3, IN4);
bool leftLook = isObject(26);
bool rightLook = isObject(130);

delay(200);

if (leftLook && rightLook) {
reverse(ENA, IN1, IN2);
reverse(ENB, IN3, IN4);
delay(2000);
stopMotion(ENA, IN1, IN2);
stopMotion(ENB, IN3, IN4);
int leftDistance = getDistance(26);
int rightDistance = getDistance(130);
if (leftDistance >= rightDistance) {
turnLeft();
}
else {
turnRight();
}
}
if (!leftLook && rightLook) {
turnRight();
}
if (leftLook && !rightLook) {
turnLeft();
}
}
servo.write(90);
}

bool checkHumidity() {
int secondTemp = dht11.readTemperature();
Serial.println("temp2: " + (String)secondTemp);
delay(500);
if (secondTemp > 20) {
return true;
} else {
return false;
}
}

void forward(int EN, int firstIN, int secondIN) {
analogWrite(EN, 250);
digitalWrite(firstIN, HIGH);
digitalWrite(secondIN, LOW);
goBack.PushBack(3);
}


void reverse(int EN, int firstIN, int secondIN) {
analogWrite(EN, 250);
digitalWrite(firstIN, LOW);
delay(150);
digitalWrite(secondIN, HIGH);
goBack.PushBack(4);
}

void stopMotion(int EN, int firstIN, int secondIN) {
analogWrite(EN, 0);
digitalWrite(firstIN, LOW);
digitalWrite(secondIN, LOW);
}

void turnLeft() {
stopMotion(ENA, IN1, IN2);
stopMotion(ENB, IN3, IN4);
delay(1000);
forward(ENB, IN3, IN4);
reverse(ENA, IN1, IN2);
delay(1000);
goBack.PushBack(1);
}

void turnRight() {
delay(1000);
forward(ENA, IN1, IN2);
reverse(ENB, IN3, IN4);
delay(1000);
goBack.PushBack(2);
}

void isFire() {
int fire;
fire = analogRead(fireSensor);
Serial.println("Fire value: " + (String)fire);
if (fire < 30) {
digitalWrite(fireRelay, LOW);
delay(5000);
digitalWrite(fireRelay, HIGH);
}
}


void sendMessage() {
if (!messageSent) {
smsSerial.println("AT+CMGF=1");
delay(1000);
smsSerial.println("AT+CMGS="+639499226042"r");
delay(1000);
smsSerial.println("Fire Detected:");
delay(200);
smsSerial.println((char)26);
delay(300);
if (messageCount == 2) {
messageSent = true;
}
}
}

void loop() {
bool highTemp = checkHumidity();
// bool highSmoke = readSmoke();
Serial.println("temp value: " + (String)highTemp);
botMove();
stopMotion(ENA, IN1, IN2);
stopMotion(ENB, IN3, IN4);
horizontal();
}

Remerciements aux auteurs du projet.

Vous pouvez visiter notre Facebook page pour plus d'informations, demandes de renseignements et commentaires.

Louer notre équipe pour faire le projet.

commentaires

commentaires





Telecharger ici

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *