in Web viewCome già presentato nella relazione iniziale il nostro progetto di Arduino...

14

Click here to load reader

Transcript of in Web viewCome già presentato nella relazione iniziale il nostro progetto di Arduino...

Page 1: in   Web viewCome già presentato nella relazione iniziale il nostro progetto di Arduino consiste nella creazione di un ... il puntamento grazie alla connessione di uno

PROGETTO ARDUINOTORRETTA ALLARME ISPIRATA AL GIOCO FREE TO PLAY TEAM FORTRESS 2

INTRODUZIONE:

Come già presentato nella relazione iniziale il nostro progetto di Arduino consiste nella creazione di un dispositivo di allarme non convenzionale dove una torretta, munita di sensori, analizza lo spazio attorno ad essa e, in caso rilevi qualche cosa, punta il bersaglio emettendo un suono.

MATERIALI UTILIZZATI:

Cartone per la realizzazione del corpo principale Tubi metallici come sostegno del corpo principale e per ancorare il tutto a terra Vernice blu e nera per la colorazione Arduino Sensori ad ultrasuoni Breadboard Buzzer e Speaker Servomotore Led Resistori Condensatore

IDEA DEL PROGETTO:

Appena presentato il lavoro di gruppo abbiamo iniziato a fare un brain storming sulle varie idee da realizzare con Arduino, si è pensato ad un defibrillatore, poi abbiamo optato per un dispositivo d’allarme ed infine, dopo aver valutato attentamente i progetti, si è deciso di realizzare la torretta del gioco TF2. La torretta da guardia aveva come scopo quello di sorvegliare l’area limitrofa al dispositivo per un’angolazione di circa 180°.Una volta individuato il bersaglio la torretta avrebbe dovuto “neutralizzare” l’intruso tramite una scarica di palline di cartone. Una volta realizzato che non avevamo abbastanza tempo per la creazione del meccanismo di sparo abbiamo optato per cambiare la natura della torretta.Il progetto finale, come si è potuto vedere dall’introduzione, è quello di una torretta allarme che segnala la presenza di intrusi nel suo raggio d’azione.

REALIZZAZIONE:

La realizzazione si è sviluppata in diversi tempi: in primo luogo abbiamo iniziato a pensare come creare il codice per poter far funzionare il servomotore che muove la torretta; una volta risolto il problema, aiutandoci anche con la modifica di alcuni programmi presenti in rete abbiamo integrato la parte sonora che la torretta deve emettere durante lo scanner e il puntamento grazie alla connessione di uno speaker; per la “fase audio” abbiamo testato diversi tipi di melodie per verificare l’effettivo funzionamento dello speaker, poiché è stato preso da delle vecchie cuffie e saldato a due cavi con l’ausilio del saldatore a stagno.

Page 2: in   Web viewCome già presentato nella relazione iniziale il nostro progetto di Arduino consiste nella creazione di un ... il puntamento grazie alla connessione di uno

Una volta risolto il problema dell’audio abbiamo pensato che il servomotore presente nel kit standard di Arduino non fosse sufficientemente potente, così per ovviare il problema abbiamo implementato un motore passo passo di una vecchia stampante, ma questo aveva un problema, possedeva quattro ping e, nonostante i nostri tentativi, non siamo riusciti a farlo funzionare. Così siamo ritornati al servomotore e abbiamo visto che, effettivamente, era abbastanza potente per spostare il peso del corpo principale della torretta e quindi alla fine è stato utilizzato quello.Per far individuare un bersaglio alla torretta era ovviamente necessario utilizzare dei sensori, in primo luogo si era pensato a quelli infrarossi, poi invece siamo passati a quelli ad ultrasuoni poiché erano più pratici per il nostro scopo; in principio dovevamo utilizzarne solo uno, nella parte frontale, poi però abbiamo deciso di usarne tre, uno centrale e due laterali, in modo da poter scannerizzare un’area più vasta attorno alla torretta.Allo scopo di rendere più fedele la nostra torretta a quella originale, sulla faccia anteriore è presente un led blu che nel gioco sarebbe il sensore che permette al dispositivo di individuare i nemici. La struttura portante, quella che ancora la torretta a terra e che sostiene il corpo principale è un treppiede.Il corpo principale è costituito da una scatola di cartone assemblata con una striscia circolare dello stesso materiale; la funzione di questa scatola è quella di alloggiare e proteggere Arduino, la breadboard e tutti i cavi di collegamento; la struttura di cartone è stata dipinta dei colori originali della torretta del gioco, ovvero il blu per la parte posteriore e il nero per la parte anteriore; per poter modificare i collegamenti elettrici, la disposizione di Arduino e della breadbord abbiamo realizzato un coperchio mobile di cartone fissato sulla parte alta del corpo principale grazie a del nastro adesivo. L’alimentazione della torretta è garantita dall’alimentatore; non abbiamo inserito una batteria poiché poteva aumentare il peso e quindi rendere instabile il corpo principale.

DIFFICOLTA’ RISCONTRATE:

Abbiamo avuto diverse difficoltà nella programmazione del codice e anche a sistemare la sincronizzazione dell’audio con l’arrivo del servomotore. Sono stati riscontrati anche dei problemi nel far funzionare correttamente e contemporaneamente i tre sensori ad ultrasuoni. La torretta presentava malfunzionamenti durante il ciclo di scanner, poi successivamente risolti; i sensori sono stati spostati nella parte bassa della torretta.Un led è stato fulminato in principio per un errore di inversione dei poli. In ultimo, non ci è stato possibile far ruotare il corpo principale di 180° poiché, per cause a noi non note, nonostante il codice sorgente fosse corretto e già utilizzato in precedenza, ha smesso di funzionare.

Page 3: in   Web viewCome già presentato nella relazione iniziale il nostro progetto di Arduino consiste nella creazione di un ... il puntamento grazie alla connessione di uno

SCHEMA:

CODICE:

#include <Servo.h>

const int buzzer2 = 8;

Servo myservo;

int portarossa = 10;

int portaverde = 12;

int portablu = 11;

const int pump = 10;

Page 4: in   Web viewCome già presentato nella relazione iniziale il nostro progetto di Arduino consiste nella creazione di un ... il puntamento grazie alla connessione di uno

const int trig1 = 3;

const int echo1 = 2;

const int trig2 = 4;

const int echo2 = 5;

const int trig3 = 7;

const int echo3 = 6;

const int servo = 13;

const int position1 = 35;

const int position1_5 = 20 + 45;

const int position2 = 90;

const int position2_5 = 90 + 45;

const int position3 = 150;

int distance1 = 0;

int distance2 = 0;

int distance3 = 0;

const int maximum = 50;

void colore ( unsigned char rosso, unsigned char verde, unsigned char blu)

{

analogWrite(portarossa, rosso);

analogWrite(portablu, blu);

analogWrite(portaverde, verde);

}

Page 5: in   Web viewCome già presentato nella relazione iniziale il nostro progetto di Arduino consiste nella creazione di un ... il puntamento grazie alla connessione di uno

void setup() {

myservo.attach(servo);

pinMode(buzzer2, OUTPUT);

pinMode(pump, OUTPUT);

pinMode(trig1, OUTPUT);

pinMode(trig2, OUTPUT);

pinMode(trig3, OUTPUT);

pinMode(echo1, INPUT);

pinMode(echo2, INPUT);

pinMode(echo3, INPUT);

pinMode(servo, OUTPUT);

pinMode(portarossa, OUTPUT);

pinMode(portaverde, OUTPUT);

pinMode(portablu, OUTPUT);

}

void loop() {

distance1 = getDistance1();

distance2 = getDistance2();

distance3 = getDistance3();

colore(0, 0, 255);

if (distance1 < maximum) {

myservo.write(position3);

colore(0, 255, 0);

delay(100);

Page 6: in   Web viewCome già presentato nella relazione iniziale il nostro progetto di Arduino consiste nella creazione di un ... il puntamento grazie alla connessione di uno

spray(1);

tone(buzzer2, 750);

delay(20);

noTone(buzzer2);

delay(50);

tone(buzzer2, 750);

delay(20);

noTone(buzzer2);

delay(50);

tone(buzzer2, 750);

delay(20);

noTone(buzzer2);

}

else if (distance2 < maximum) {

myservo.write(position2);

colore(0, 255, 0);

delay(100);

spray(2);

tone(buzzer2, 750);

delay(20);

noTone(buzzer2);

delay(50);

tone(buzzer2, 750);

delay(20);

noTone(buzzer2);

Page 7: in   Web viewCome già presentato nella relazione iniziale il nostro progetto di Arduino consiste nella creazione di un ... il puntamento grazie alla connessione di uno

delay(50);

tone(buzzer2, 750);

delay(20);

noTone(buzzer2);

}

else if (distance3 < maximum) {

myservo.write(position1);

colore(0, 255, 0);

delay(100);

spray(3);

tone(buzzer2, 750);

delay(20);

noTone(buzzer2);

delay(50);

tone(buzzer2, 750);

delay(20);

noTone(buzzer2);

delay(50);

tone(buzzer2, 750);

delay(20);

noTone(buzzer2);

}

else if (distance2 < maximum && distance3 < maximum) {

colore(0, 255, 0);

Page 8: in   Web viewCome già presentato nella relazione iniziale il nostro progetto di Arduino consiste nella creazione di un ... il puntamento grazie alla connessione di uno

myservo.write(position2_5);

delay(100);

spray(4);

tone(buzzer2, 750);

delay(20);

noTone(buzzer2);

delay(50);

tone(buzzer2, 750);

delay(20);

noTone(buzzer2);

delay(50);

tone(buzzer2, 750);

delay(20);

noTone(buzzer2);

}

else if (distance1 < maximum && distance2 < maximum) {

colore(0, 255, 0);

myservo.write(position1_5);

delay(100);

spray(5);

tone(buzzer2, 750);

delay(20);

noTone(buzzer2);

delay(50);

tone(buzzer2, 750);

delay(20);

noTone(buzzer2);

Page 9: in   Web viewCome già presentato nella relazione iniziale il nostro progetto di Arduino consiste nella creazione di un ... il puntamento grazie alla connessione di uno

delay(50);

tone(buzzer2, 750);

delay(20);

noTone(buzzer2);

}

}

void spray(int position) {

if (position == 1) {

while (distance1 < maximum) {

colore(0, 255, 0);

distance1 = getDistance1();

analogWrite(pump, 255);

}

analogWrite(pump, 0);

return;

}

else if (position == 2) {

while (distance2 < maximum) {

colore(0, 255, 0);

distance2 = getDistance2();

analogWrite(pump, 255);

}

analogWrite(pump, 0);

Page 10: in   Web viewCome già presentato nella relazione iniziale il nostro progetto di Arduino consiste nella creazione di un ... il puntamento grazie alla connessione di uno

return;

}

else if (position == 3) {

while (distance3 < maximum) {

colore(0, 255, 0);

distance3 = getDistance3();

analogWrite(pump, 255);

}

analogWrite(pump, 0);

return;

}

else if (position == 4) {

while (distance2 < maximum && distance3 < maximum) {

colore(0, 255, 0);

distance3 = getDistance3();

distance2 = getDistance2();

analogWrite(pump, 255);

}

analogWrite(pump, 0);

return;

}

else if (position == 5) {

while (distance1 < maximum && distance2 < maximum) {

colore(0, 255, 0);

Page 11: in   Web viewCome già presentato nella relazione iniziale il nostro progetto di Arduino consiste nella creazione di un ... il puntamento grazie alla connessione di uno

distance1 = getDistance1();

distance2 = getDistance2();

analogWrite(pump, 255);

}

analogWrite(pump, 0);

return;

}

}

int getDistance1() {

long duration, distance1;

digitalWrite(trig1, LOW);

delayMicroseconds(2);

digitalWrite(trig1, HIGH);

delayMicroseconds(10);

digitalWrite(trig1, LOW);

duration = pulseIn(echo1, HIGH);

distance1 = (duration/2) / 29.1;

return distance1;

}

int getDistance2() {

long duration, distance1;

digitalWrite(trig2, LOW);

delayMicroseconds(2);

digitalWrite(trig2, HIGH);

delayMicroseconds(10);

Page 12: in   Web viewCome già presentato nella relazione iniziale il nostro progetto di Arduino consiste nella creazione di un ... il puntamento grazie alla connessione di uno

digitalWrite(trig2, LOW);

duration = pulseIn(echo2, HIGH);

distance1 = (duration/2) / 29.1;

return distance1;

}

int getDistance3() {

long duration, distance1;

digitalWrite(trig3, LOW);

delayMicroseconds(2);

digitalWrite(trig3, HIGH);

delayMicroseconds(10);

digitalWrite(trig3, LOW);

duration = pulseIn(echo3, HIGH);

distance1 = (duration/2) / 29.1;

return distance1;

}

REALIZZATO DA:

Marinini Camilla Peruzzi Thomas Melillo Gabriele

Si ringrazia Gelmi Lorenzo per la gentile collaborazione nella realizzazione della struttura della torretta.

IV B Scientifico S.A. A.S. 2016/2017