Bonjour à tous,
Voici les plans d'une réalisation faites il y a quelques mois pour ma team (ACT - Yonne) pour apporter du solide lors de notre OP.
Il s'agit d'une valise qui peux faire office de bombe solo ou, par un menu, nécessiter le raccordement d'une base de lancement de missiles.
La valise est entièrement de moi pour l'idée générale, tandis que les missiles sont inspirés du tuto d'eyeshield.
Voici une photo de l'ensemble final :
Valise+missiles
Valise solo
Place au tuto !!!!!!
Pour ce tuto, vous aurez besoin de quelques petites choses.
_ Un fer à souder et ce qui faut pour s'en servir
_ Savoir lire un plan électronique simple
_ Un ordinateur pour programmer l'Arduino
Matériel
_ 1 valise
_ 1 arduino duemilanove
_ 1 écran LCD 2 * 16 ( j'ai pris un écran LCD "shield" pour plus de simplicité. Cela veut dire que j'ai juste a le clipser sur l'arduino)
_ 3 LED pour la valise
_ 7 résistances 220ohms
_ 1 sirène 12V
_ 4 transistor NPN ( BD135 pour moi il me semble. L'important c'est qu'ils soient commandés par un état HAUT sur la base ( petite doc sur les transistor en général ICI )
_ 1 batterie 12V de scooter ( au gel de préférence, environ 30€, mais au moins, sa se met dans tout les sens sans couler)
_ 4 interrupteurs à clé (pour ma part, des vieux neimann/antivol de scoot)
_ 3 bouton poussoir
_ 1 interrupteur type bascule aviation ( un membre m'a trouvé CE BOUTON qui est plutot classe )
_ 2 embases MIDI 4fils
_ 1 cable MIDI 4fils (on a pris du 3m que j'ai sertis moi même)
Réalisation
Je ne dirais rien ici pour les missiles, les tutos d'eyeshield sont merveilleusement bien fait, je ne pourrais pas faire mieux.
Pour l'arduino, je vous conseil CE SITE pour débuter et comprendre comment envoyer le programme dans la carte.
Voici le programme :
Avec ce code, vous avez un bip toute les 10min, puis 1 bip toute les minutes en dessous de 10minutes de temps restant
Ensuite, il suffit de souder autour de l'arduino les éléments du schéma suivant
Pour l'arduino, je l'ai alimenté directement avec la batterie de 12V en mettant le +12V en coupure sur un neimann (non présent sur le schéma). Il suffit de relier le - dela batterie à une borne "ground" de l'arduino et le +12V à la borne Vin
Pas grand chose à dire si ce n'est de faire attention, et d'être très minutieux. Les arduino sont assez costaud, mais par mesure de sécurité, je ne saurais que trop vous conseiller de revérifier 2 fois avant de brancher la batterie de 12V
Pour ceux qui veulent tester sans mettre la sirène, sachez que celle-ci est reliée à la broche 13, qui est nativement équipée d'une LED
Chez moi, pour la décoration, il s'agit d'une plaque en inox faite par un membre de la team. L’intérieur de la valise comporte un cadre en bois pour structurer le tout.
Comme on voit, beaucoup de filasse, mais je n'ai pas trouver moyen de faire plus propre sans utiliser de CI.
Pour le câble de test de présence des missiles, il s'agit d'une simple boucle avec la masse dans un boitier sur le pied des missiles. Les 2 autres fils servent a alimenter une ampoule pour indiquer le bon raccordement.
EDIT :
Voici un petit aperçue des missiles V2.
Au programme :
_ Missiles démontables (reste à trouver la caisse)
_ Possibilité d'activer la détection de la présence des missiles sur le pieds
J'ai repris le principe de la boucle de contrôle, sauf que cette fois je fait passer ma boucle par les 3 missiles, grâce à des prises JACK 5mm ( grosses prises, simple a câble, résistantes, et surtout pas chère en cas de besoin de changement)
Voici la vidéo démonstrative
__________________________________________________________________________________________________
Ajout des LEDs sous le logo et du grillage (simple bande a LEDs reliée sur le neimann de contrôle général)
Ressources informatiques
Ce lien vous mènera a mon dossier skydrive contenant en consultation toutes mes ressources pour cette valise avec la notice, le schéma, les photos...
DOSSIER SKYDRIVE
Ajout des script/photos sur le skydrive
Voici les plans d'une réalisation faites il y a quelques mois pour ma team (ACT - Yonne) pour apporter du solide lors de notre OP.
Il s'agit d'une valise qui peux faire office de bombe solo ou, par un menu, nécessiter le raccordement d'une base de lancement de missiles.
La valise est entièrement de moi pour l'idée générale, tandis que les missiles sont inspirés du tuto d'eyeshield.
Voici une photo de l'ensemble final :
Valise+missiles
Valise solo
Place au tuto !!!!!!
Pour ce tuto, vous aurez besoin de quelques petites choses.
_ Un fer à souder et ce qui faut pour s'en servir
_ Savoir lire un plan électronique simple
_ Un ordinateur pour programmer l'Arduino
Matériel
_ 1 valise
_ 1 arduino duemilanove
_ 1 écran LCD 2 * 16 ( j'ai pris un écran LCD "shield" pour plus de simplicité. Cela veut dire que j'ai juste a le clipser sur l'arduino)
_ 3 LED pour la valise
_ 7 résistances 220ohms
_ 1 sirène 12V
_ 4 transistor NPN ( BD135 pour moi il me semble. L'important c'est qu'ils soient commandés par un état HAUT sur la base ( petite doc sur les transistor en général ICI )
_ 1 batterie 12V de scooter ( au gel de préférence, environ 30€, mais au moins, sa se met dans tout les sens sans couler)
_ 4 interrupteurs à clé (pour ma part, des vieux neimann/antivol de scoot)
_ 3 bouton poussoir
_ 1 interrupteur type bascule aviation ( un membre m'a trouvé CE BOUTON qui est plutot classe )
_ 2 embases MIDI 4fils
_ 1 cable MIDI 4fils (on a pris du 3m que j'ai sertis moi même)
Réalisation
Je ne dirais rien ici pour les missiles, les tutos d'eyeshield sont merveilleusement bien fait, je ne pourrais pas faire mieux.
Pour l'arduino, je vous conseil CE SITE pour débuter et comprendre comment envoyer le programme dans la carte.
Voici le programme :
- Spoiler:
- Code:
//Programme de la bombe d'airsoft
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
//Definition des broches:
int bouton1 = 0;
int etat1;
int bouton2 = 1;
int etat2;
int bouton_cle1 = 2;
int LED_1 = 3;
int bouton_cle2 = 11;
int LED_2 = 12;
int bouton_bascule = 15;
int alim_led_bascule = 16; //alimenter led bascule transistor
int bouton_poussoir = 17;
int sirene = 13;
int verif_cable = 19;
int bouton_autodestruction = 18;
//variable de controle
int test1 = 0; //progressiond ans le programme
int test2 = 0; // controle pour ne compter chaque appuie sur bouton qu'une fois
int compteur = 0;
int arret = 0;
int auto_destruction = 0; // controlle pour si activation apr cle ou autodestruction
int cligno_led = 0; //controle de clignotement de la led du bouton a bascule
int verification_cable = 0; // controle de cable, mise a 1 quand le controle est actif
//variable de minutage
int H = 0;
int M = 0;
int min_tmp = 0;
int S = 0;
//initialisation
void setup()
{
//definition des entrees
pinMode(bouton1, INPUT);
pinMode(bouton2, INPUT);
pinMode(bouton_cle1, INPUT);
pinMode(bouton_cle2, INPUT);
pinMode(bouton_bascule, INPUT);
pinMode(bouton_poussoir, INPUT);
pinMode(bouton_autodestruction, INPUT);
pinMode(verif_cable, INPUT);
//6entrees utilisees
//definition des sorties
pinMode(LED_1, OUTPUT);
pinMode(LED_2, OUTPUT);
pinMode(alim_led_bascule, OUTPUT);
pinMode(sirene, OUTPUT);
//4sorties utilisees
//definition des pullup
digitalWrite(bouton1, HIGH);
digitalWrite(bouton2, HIGH);
digitalWrite(bouton_cle1, HIGH);
digitalWrite(LED_1, LOW);
digitalWrite(bouton_cle2, HIGH);
digitalWrite(LED_2, LOW);
digitalWrite(bouton_bascule, HIGH);
digitalWrite(alim_led_bascule, LOW);
digitalWrite(bouton_poussoir, HIGH);
digitalWrite(bouton_autodestruction, HIGH);
digitalWrite(sirene, LOW);
digitalWrite(verif_cable, HIGH);
lcd.begin(16, 2);
}
//programme
void loop()
{
//reset des valeurs
digitalWrite(sirene, LOW);
digitalWrite(LED_1, LOW);
digitalWrite(LED_2, LOW);
auto_destruction = 0;
arret = 0;
H = 0;
M = 0;
S = 0;
// definition du Timer
do
{
if (digitalRead(bouton1) == LOW)
{
test1 = 1;
}
delay (500);
lcd.clear();
do
{
lcd.setCursor(0, 0);
lcd.print("Verif cable?");
lcd.setCursor(0, 1);
lcd.print("NON");
lcd.setCursor(10,1);
lcd.print("OUI");
if (digitalRead(bouton1) == LOW)
{
verification_cable = 1;
delay (500);
}
if (digitalRead(bouton2) == LOW)
{
verification_cable = 0;
delay (500);
}
} while ( (digitalRead(bouton1) == HIGH) && (digitalRead(bouton2) == HIGH) );
lcd.clear();
//definition de la valeur des heures
do //incrementation heure
{
lcd.setCursor(0, 0);
lcd.print("HEURES");
lcd.setCursor(0, 1);
lcd.print(H);
lcd.setCursor(1, 1);
lcd.print(":");
lcd.setCursor(2, 1);
lcd.print(M);
lcd.setCursor(4, 1);
lcd.print(":");
lcd.setCursor(5, 1);
lcd.print(S);
etat2 = digitalRead(bouton2);
if (etat2 == LOW)
{
/*digitalWrite(13, HIGH);
delay (1000);
digitalWrite(13, LOW);
delay (1000);*/
if (test2 == 0)
{
H = H + 1;
if ( H % 10 == 0)
{
H = 0;
lcd.clear();
}
test2 = 1;
}
}
else
{
test2 = 0;
}
etat1 = digitalRead(bouton1);
if (etat1 == LOW)
{
test1 = 2;
}
} while (test1 != 2);
delay (500);
lcd.clear();
//definition de la valeur des minutes
do //incrementation minutes
{
lcd.setCursor(0, 0);
lcd.print("MINUTES");
lcd.setCursor(0, 1);
lcd.print(H);
lcd.setCursor(1, 1);
lcd.print(":");
lcd.setCursor(2, 1);
lcd.print(M);
lcd.setCursor(4, 1);
lcd.print(":");
lcd.setCursor(5, 1);
lcd.print(S);
etat2 = digitalRead(bouton2);
if (etat2 == LOW)
{
if (test2 == 0)
{
M = M + 1;
if ( M % 60 == 0)
{
M = 00;
lcd.clear();
}
test2 = 1;
}
}
else
{
test2 = 0;
}
etat1 = digitalRead(bouton1);
if (etat1 == LOW)
{
test1 = 3;
}
} while (test1 != 3);
delay (500);
lcd.clear();
//definition de la valeur des secondes
do //incrementation secondes
{
lcd.setCursor(0, 0);
lcd.print("SECONDES");
lcd.setCursor(0, 1);
lcd.print(H);
lcd.setCursor(1, 1);
lcd.print(":");
lcd.setCursor(2, 1);
lcd.print(M);
lcd.setCursor(4, 1);
lcd.print(":");
lcd.setCursor(5, 1);
lcd.print(S);
etat2 = digitalRead(bouton2);
if (etat2 == LOW)
{
if (test2 == 0)
{
S = S + 1;
if ( S % 60 == 0)
{
S = 0;
lcd.clear();
}
test2 = 1;
}
}
else
{
test2 = 0;
}
etat1 = digitalRead(bouton1);
if (etat1 == LOW)
{
test1 = 4;
}
} while (test1 != 4);
delay (500);
lcd.clear();
//choix de la validation ou de la correction. Bouton1 pour recommencer, Bouton2 pour valider
do
{
lcd.setCursor(0, 0);
lcd.print("VALIDER ?");
lcd.setCursor(0, 1);
lcd.print(H);
lcd.setCursor(1, 1);
lcd.print(":");
lcd.setCursor(2, 1);
lcd.print(M);
lcd.setCursor(4, 1);
lcd.print(":");
lcd.setCursor(5, 1);
lcd.print(S);
etat2 = digitalRead(bouton2);
if (etat2 == LOW)
{
if (test2 == 0)
{
test1 = 5;
test2 = 1;
}
}
else
{
test2 = 0;
}
etat1 = digitalRead(bouton1);
if (etat1 == LOW)
{
test1 = 1;
}
} while (test1 == 4);
} while (test1 < 5);
if (verification_cable == 1)
{
lcd.clear();
do
{
lcd.setCursor(0, 0);
lcd.print("ATTENTION");
lcd.setCursor(0, 1);
lcd.print("Cable debranche");
} while ( digitalRead(verif_cable) == LOW);
}
//attente
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ATTENTE");
lcd.setCursor(0, 1);
lcd.print(H);
lcd.setCursor(1, 1);
lcd.print(":");
lcd.setCursor(2, 1);
lcd.print(M);
lcd.setCursor(4, 1);
lcd.print(":");
lcd.setCursor(5, 1);
lcd.print(S);
do
{
//controle LED_1
if(digitalRead(bouton_cle1) == LOW)
{
digitalWrite(LED_1, HIGH);
}
else
{
digitalWrite(LED_1, LOW);
}
//controle LED_2
if(digitalRead(bouton_cle2) == LOW)
{
digitalWrite(LED_2, HIGH);
}
else
{
digitalWrite(LED_2, LOW);
}
//controle des interrupteurs
if (digitalRead(bouton_cle1) == LOW && digitalRead(bouton_cle2) == LOW)
{
//digitalWrite(alim_bouton_bascule, LOW);
if (digitalRead(bouton_bascule) == LOW)
{
digitalWrite(alim_led_bascule, HIGH); //alimentation du transistor de la led bascule
if (digitalRead(bouton_poussoir) == LOW)
{
digitalWrite(alim_led_bascule, LOW);
test1 = 6;
}
}
}
//test bouton autodestruction
if (digitalRead(bouton_autodestruction) == LOW)
{
cligno_led = 1;
while(cligno_led == 1 && digitalRead(bouton_autodestruction) == LOW) //tand que la variable est a 1, on fait clignoter la led : mise en etat haut de la led + 10 tests espacés de 50 ms, puis idem mais en led etat bas
{
digitalWrite(alim_led_bascule, HIGH);
for (int j=0 ; j <= 10 ; j++)
{
if (digitalRead(bouton_poussoir) == LOW)
{
digitalWrite(alim_led_bascule, LOW);
auto_destruction = 1;
test1 = 6;
cligno_led = 0;
}
delay(50);
}
digitalWrite(alim_led_bascule, LOW);
for (int j=0 ; j <= 10 ; j++)
{
if (digitalRead(bouton_poussoir) == LOW)
{
digitalWrite(alim_led_bascule, LOW);
auto_destruction = 1;
test1 = 6;
cligno_led = 0;
}
delay(50);
}
}
}
else
{
cligno_led = 0;
digitalWrite(alim_led_bascule, LOW);
}
} while (test1 < 6);
//Signal d'activation si activation par autodestruction, 2sec + 1sec de silence + 2sec / Si activation apr clé 1sec + 0.5sec de silence + 1sec
if(auto_destruction == 1)
{
digitalWrite(sirene, HIGH);
delay(1000);
delay(1000);
delay(1000);
digitalWrite(sirene, LOW);
}
else
{
digitalWrite(sirene, HIGH);
delay(1000);
digitalWrite(sirene, LOW);
delay(500);
digitalWrite(sirene, HIGH);
delay(1000);
digitalWrite(sirene, LOW);
}
//Compte à rebour
do
{
lcd.clear();
if(auto_destruction == 1)
{
lcd.setCursor(0, 0);
lcd.print("Autodestruction");
}
else
{
lcd.setCursor(0, 0);
lcd.print("Lancement dans :");
}
lcd.setCursor(0, 1);
lcd.print(H);
lcd.setCursor(1, 1);
lcd.print(":");
lcd.setCursor(2, 1);
lcd.print(M);
lcd.setCursor(4, 1);
lcd.print(":");
lcd.setCursor(5, 1);
lcd.print(S);
if ( S < 1)
{
//sonnerie de controle : 1 toutes les 10min, puis en dessous de 5min, une toutes les minutes
min_tmp = M + H * 60;
min_tmp = min_tmp % 10;
if(min_tmp == 0)
{
digitalWrite(sirene, HIGH);
delay(1000);
digitalWrite(sirene, LOW);
}
else
{
if(M <= 5)
{
if(H == 0)
{
digitalWrite(sirene, HIGH);
delay(1000);
digitalWrite(sirene, LOW);
}
}
}
if ( M > 0 )
{
M = M - 1;
S = 60;
}
else
{
if (H > 0)
{
H = H - 1;
M = 59;
S = 60;
}
else
{
//instructions à effectuer lors de l'arrivée à 0. Ici, on passe la broche 13 à l'état haut pour le test
if(auto_destruction == 1)
{
test1 = 7;
H = 0;
M = 0;
S = 0;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Autodestruction");
lcd.setCursor(0, 1);
lcd.print(H);
lcd.setCursor(1, 1);
lcd.print(":");
lcd.setCursor(2, 1);
lcd.print(M);
lcd.setCursor(4, 1);
lcd.print(":");
lcd.setCursor(5, 1);
lcd.print(S);
digitalWrite(sirene, HIGH);
delay(1000);
delay(1000);
delay(1000);
delay(1000);
delay(1000);
delay(1000);
delay(1000);
delay(1000);
delay(1000);
delay(1000);
digitalWrite(sirene, LOW);
}
else
{
test1 = 7;
H = 0;
M = 0;
S = 0;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("MISSILES TIRES");
lcd.setCursor(0, 1);
lcd.print(H);
lcd.setCursor(1, 1);
lcd.print(":");
lcd.setCursor(2, 1);
lcd.print(M);
lcd.setCursor(4, 1);
lcd.print(":");
lcd.setCursor(5, 1);
lcd.print(S);
digitalWrite(sirene, HIGH);
delay(1000);
delay(1000);
delay(1000);
delay(1000);
delay(1000);
delay(1000);
delay(1000);
delay(1000);
delay(1000);
delay(1000);
digitalWrite(sirene, LOW);
}
}
}
}
S = S - 1;
// delay(1000);
for (int i=0 ; i <= 10 ; i++)
{
if(digitalRead(bouton_cle1) == HIGH)
{
digitalWrite(LED_1, LOW);
}
else
{
digitalWrite(LED_1, HIGH);
}
if(digitalRead(bouton_cle2) == HIGH)
{
digitalWrite(LED_2, LOW);
}
else
{
digitalWrite(LED_2, HIGH);
}
//Controle que les 2 bouton a cle sont toujours actifs. Si un des 2 est enlevé, la bombe est desamorcee
if(auto_destruction != 1)
{
if(digitalRead(bouton_cle1) == HIGH || digitalRead(bouton_cle2) == HIGH)
{
if(arret != 1)
{
arret = 1;
test1 = 7;
digitalWrite(sirene,HIGH);
delay(1000);
delay(1000);
delay(1000);
digitalWrite(sirene,LOW);
}
}
}
else
{
if(digitalRead(bouton_autodestruction) == HIGH)
{
if(arret != 1)
{
arret = 1;
test1 = 7;
digitalWrite(sirene,HIGH);
delay(1000);
delay(1000);
delay(1000);
digitalWrite(sirene,LOW);
}
}
}
delay(99);
}
} while (test1 != 7);
//desamorcage
while (arret == 0)
{
if (digitalRead(bouton2) == LOW )
{
arret = 2 ;
}
}
while (arret == 1)
{
lcd.clear();
lcd.setCursor(0, 0);
if(auto_destruction != 1)
{
lcd.print("MISSILES OFF");
}
else
{
lcd.print("Destruct OFF");
}
lcd.setCursor(0, 1);
lcd.print(H);
lcd.setCursor(1, 1);
lcd.print(":");
lcd.setCursor(2, 1);
lcd.print(M);
lcd.setCursor(4, 1);
lcd.print(":");
lcd.setCursor(5, 1);
lcd.print(S);
delay(100);
if (digitalRead(bouton2) == LOW )
{
arret = 0;
}
}
}
Avec ce code, vous avez un bip toute les 10min, puis 1 bip toute les minutes en dessous de 10minutes de temps restant
Ensuite, il suffit de souder autour de l'arduino les éléments du schéma suivant
Pour l'arduino, je l'ai alimenté directement avec la batterie de 12V en mettant le +12V en coupure sur un neimann (non présent sur le schéma). Il suffit de relier le - dela batterie à une borne "ground" de l'arduino et le +12V à la borne Vin
Pas grand chose à dire si ce n'est de faire attention, et d'être très minutieux. Les arduino sont assez costaud, mais par mesure de sécurité, je ne saurais que trop vous conseiller de revérifier 2 fois avant de brancher la batterie de 12V
Pour ceux qui veulent tester sans mettre la sirène, sachez que celle-ci est reliée à la broche 13, qui est nativement équipée d'une LED
Chez moi, pour la décoration, il s'agit d'une plaque en inox faite par un membre de la team. L’intérieur de la valise comporte un cadre en bois pour structurer le tout.
Comme on voit, beaucoup de filasse, mais je n'ai pas trouver moyen de faire plus propre sans utiliser de CI.
Pour le câble de test de présence des missiles, il s'agit d'une simple boucle avec la masse dans un boitier sur le pied des missiles. Les 2 autres fils servent a alimenter une ampoule pour indiquer le bon raccordement.
EDIT :
Voici un petit aperçue des missiles V2.
Au programme :
_ Missiles démontables (reste à trouver la caisse)
_ Possibilité d'activer la détection de la présence des missiles sur le pieds
J'ai repris le principe de la boucle de contrôle, sauf que cette fois je fait passer ma boucle par les 3 missiles, grâce à des prises JACK 5mm ( grosses prises, simple a câble, résistantes, et surtout pas chère en cas de besoin de changement)
Voici la vidéo démonstrative
__________________________________________________________________________________________________
Ajout des LEDs sous le logo et du grillage (simple bande a LEDs reliée sur le neimann de contrôle général)
Ressources informatiques
Ce lien vous mènera a mon dossier skydrive contenant en consultation toutes mes ressources pour cette valise avec la notice, le schéma, les photos...
DOSSIER SKYDRIVE
Ajout des script/photos sur le skydrive
Dernière édition par Ariolas le Mar 29 Jan - 21:20, édité 7 fois