Go Down

Topic: Projet mallette fausse bombe (Read 1 time) previous topic - next topic

ababi

Bonjour !

Dans le cadre d'un jeu d'énigmes, je souhaite créer une mallette avec une fausse bombe à désamorcer, qui devrait être fonctionnelle pour début septembre...

Je pensais partir sur un système à base d'arduino pour la partie électronique, mais étant donné que je n'ai jamais testé encore, je ne sais pas si ce matériel sera adapté à ce que je veux faire...

Voici un petit descriptif de ce que je souhaiterai, avec quelques commentaires sur ce que j'ai pu comprendre jusque là.
Pourriez-vous me confirmer que c'est bien faisable sous arduino ?

- démarrage du compte à rebours (afficheur numérique 4 chiffres) à l'ouverture de la mallette (via un contact de position)
- désamorçage de la bombe quand 3/4 fils sont coupés parmi 7/8 ET que le bon code est rentré sur un pavé numérique matriciel
- arrêt du compte à rebours quand la bombe est désamorcée
- "explosion" de la bombe (LED haute intensité et bruit par buzzer) quand un mauvais fil est coupé OU que le compte à rebours atteint 0
- "affichage" code morse sur une LED
- OPTION : indices donnés par shield MP3 quand un code spécifique est rentré sur le pavé numérique

Etant donné que c'est une mallette, j'aimerai qu'elle soit alimentée par une batterie pour qu'elle soit facilement mobile.

J'imagine que c'est quelque chose de très simple à programmer.
Mes connaissance en programmation ne sont pas nulles, mais loin d'être au top, et je n'ai jamais travaillé que sur un environnement informatique (VB sous excel, scripting sur mIRC), jamais sur des microcontrôleurs.
J'imagine donc que pour savoir quand tous les bons fils ont été coupés et que le bon code est rentré, il faut faire tourner en boucle le programme qui vérifiera l'état des différentes broches concernées par les fils et une variable booléenne où est stockée la réussite ou non du code sur le pavé numérique.
Il ne me semble pas que le fait de couper un fil "envoie" une info au microcontrôleur non ?

Pour le shield MP3, j'hésite car cela fait pas mal augmenter le prix du projet, et j'imagine que ça consommation électrique est loin d'être négligeable, et cela doit fortement impacter l'autonomie de la mallette...
Cependant, j'avais vu ce matériel : shield MP3
est-ce assez simple à programmer pour un novice ? peut-on choisir quel piste MP3 jouer en fonction d'un code rentré sur le pavé numérique ?

Si cela peut se faire sous arduino, quel serait alors la carte la plus adaptée, que ce soit en terme de réactivité (ne pas attendre 2s après qu'un fil soit coupé pour qu'il se passe quelque chose) et surtout en terme de consommation électrique, pour dans l'idéal pouvoir enchaîner des parties pendant plusieurs heures.

Merci par avance de vos retours :)

dbrion06

Pour voir si un arduino UNO est adapté à vos besoins, j'ai osé choisir comme critère ... le nombre de connections
* un contact pour demarrer le compte à rebours (la gestion d'une entrée a un exemple dans l'IDE fichiers -> Exemples ou , mieux, dans https://eskimon.fr/tuto-arduino-204-un-simple-bouton)
* la gestion des fils à couper: 7 fils
* la gestion du clavier matriciel (3*3 ou 3*4) 6 ou 7 fils
* la gestion du son et lumière de l'explosion 1 fil
* la gestion de l'ecran 6 fils pour un écran LCD (j'ai choisi un ecran LCD, parce que moins cher que des "ecrans"  numériques 4*7 segments, qui necessitent un multiplexage délicat et mangent ... 11 fils; un ecran oled coûte moins cher qu'un écran LCD, ne mange que deux fls.... mais est difficile à lire sans loupe) . La mise en oeuvre d'un ecran LCD est très simple, et expliquée clairement dans  https://eskimon.fr/tuto-arduino-701-les-%C3%A9crans-lcd. En plus, il consomme peu...

J'espère que je n'ai rien oublié; sans astuce (expandeur de port, emploi de l'I2C), vous en êtes à .. 21 fils

OR , l'arduino uno  a 14+6 ... 20 fils d'entrée sortie.

Il me semble plus sage, quoique plus cher, d'utiliser un Arduino Mega (qui a plus de 50 pattes utilisables; je n'ai jamais eu la patience heroîque de les compter). Le cablage et la numerotation des pattes sont assez astucieux pour que les shields, les tutoriels (je vous ai lié, mine de rien, vers les tutoriels d'eskimon, qui sont très bien, et vers les exemples de l'IDE) soient communs à l'UNO et au Mega...


elektrax

un afficheur 4x7segments fait plus "vrai", en spi max7219 ou i2c ht16k33

J-M-L

Il y a plein de code airsoft qui traînent sur internet
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

ababi

Merci pour vos réponses !

En réfléchissant (ça m'arrive parfois, mais il ne faut pas abuser des bonnes choses !), je me suis dis que je peux mettre mes 3/4 fils à couper en montage parallèle sur une seule entrée, et ainsi gagner 2/3 broches (du moment que le montage n'est pas visible du joueur ^^)

Pour l'écran, c'est vrai que je préfère le visuel de celui à segments, mais du coup, quand vous dites que le multiplexage est plus compliqué, ça veut donc dire que pour la programmation, il ne suffit pas de lui dire "affiche le timer", mais qu'il faut lui dire quels segments allumer ou éteindre ? J'imagine qu'on doit pouvoir trouver des morceaux de code pour ce genre de choses...
Le fait d'avoir 11 fils au lieu de 6 par contre, ça plombe mon gain sur les fils à couper ^^

C'est bien s'il existe déjà des choses similaires dont je pourrais m'inspirer ! Etant donné que je n'y connais pas encore grand chose, y'a-t-il des sites qui font référence pour partager ces codes ?

Au niveau consommation, y'a-t-il une grande différence entre le uno et le méga ?

Merci à vous !
Alexandre

dbrion06

"Au niveau consommation, y'a-t-il une grande différence entre le uno et le méga ?"
Non
C'est au niveau prix (le mega est plus cher) et au niveau confort de développement (on peut avec des astuces limiter le nombre de pattes: si vous souhaitez avoir "un truc qui marche" magiquement, yaka tomber sur le bon montage ou pleurer sur les bons forums; si vous voulez prendre le temps de comprendre, en commençant par des choses pas trop compliquées -donc sans astuces-, il vaut mieux surdimensionner largement le microcontrôleur...)

" je me suis dis que je peux mettre mes 3/4 fils à couper en montage parallèle sur une seule entrée, et ainsi gagner 2/3 broches "

Pour les fils à couper pour déclencher une "explosion" prématurée: il faut les mettre en série (un "ET" logique).
Pour les fils à couper pour sauver le monde : s'il n'y a pas de contrainte de séquence (ça serait très vache) il faut les mettre en parallèle (un ou logique)
Je vous ai, mine de rien, fait gagner 6 fils sur huit... Le seul petit problème, c'est que si vous voulez modifier votre montage (le logiciel est assez simple), il faut que vous vous souveniez de cette astuce. (un bout de papier quelque part l'expliquant risque de s'envoler)

"Pour l'écran, c'est vrai que je préfère le visuel de celui à segments, mais du coup, quand vous dites que le multiplexage est plus compliqué, ça veut donc dire que pour la programmation, il ne suffit pas de lui dire "affiche le timer", mais qu'il faut lui dire quels segments allumer ou éteindre ?"

Les afficheurs à segments sont plus beaux, certes, mais plus chers que les afficheurs à cristaux liquides. Théoriquement, ils consomment un peu plus. Pour ne pas manger des tas de pattes , il faut les multiplexer:
le principe est trivial: on dédie une horloge (on en a une qui compte le temps ecoulé depuis le demarrage, faut pas y toucher sinon écrire un compte à rebours deviendra heroîque, il en reste deux, ce qui est confortable, quel que soit l'arduino.) à l'affichage: au premier top, si necessaire, on allume le 1er segment du 1er chiffre, puis le second du premier chiffre au 2nd top.... et on recommence au 7*4+1 iéme top... Ca fait quand même un câblage compliqué, un réglage des resistances alimentant les segments fin -faut quand même pouvoir les voir, les segments) -> vous aurez une electronique assez compliquée.
Elle peut être simplifiée, côté arduino, par le 7218, qui ne mange que 3 fils -au lieu de 11...-, avec un logiciel plus simple Reste le câblage 7218 <-> afficheur (il est tout autant fastidieux) et un surcroit de prix.
d'un autre côté, les écrans à LCD sont moins chers (on peut en avoir utilisables avec 2 fils au lieu de 6, mais ils sont plus chers), et très simples d'usage...
Monpoint de vue était que, pour débuter en apprenant des choses simples, le confort loé à un processur sur dimensionné (et vous pouvez lui trouver un usage hors période de gags) n'avait pas de prix (et que, comme vous aurez appris tranquillement des choses simples, vous pourrez évoluer vers des choses plus compliquées en toute quiétude...)


kamill

#6
Jul 03, 2019, 05:52 pm Last Edit: Jul 03, 2019, 05:53 pm by kamill
Bonjour,

Si tu veux utiliser des afficheurs sept segments, il existe des modules tout faits qui gèrent le multiplexage et se commandent avec deux pins.

Ils utilisent des circuits 74HC595 ou TM1637 ou MAX7219 ...
On en trouve couramment avec de 2 à 8 digits.

dbrion06

Il existe plein d'afficheurs sexy qui traînent sur internet.
Pour essayer de comparer, je suis allé voir chez gotronic https://www.gotronic.fr/cat-leds-et-affichage-1445.htm
  (je sais, ya amazondelamortkitue ke moins cher):
 il s'efforce de lier à une doc technique..., voire une bibliothèque, et ce service a un prix....
 et je suppose que, si un type de circuit est plus cher qu'un autre chez gotronic, il en sera de même ailleurs...

LEs prix des afficheurs à LEDS , interfaçables en I2C ou SPI, varient entre 12.90 euros et 20 euros. le DFR0090 étant le moins cher. Sa consommation est inconnué (compter 10 mA /segment + circuit d'interface: je l'estime donc à 70 mA..., cette estimation est confirmée pat un autre afficheurhttps://www.gotronic.fr/art-afficheur-7-segments-rouges-4-digits-24254.htm#complte_desc, qui consomme au pire 80 mA... ).

LEs prix des afficheurs LCDs (j'ai choisi avec des interfaces 2 fils, qui augmentent un peu les prix pour ne pas biaiser les comparaisons)  s'échelonnent entre 6 euros 50 et 13 euros (ça fait en gros 7 euros de moins). La consommation n'est jamais documentée (le retro eclairage doit faire une LED, soit 10 mA: les constructeurs la trouvent négligeable).
Donc, pour les prix, ya pas photo; pour la consommation, aussi.
L'esthetique est, j'en conviens, fort laide chez les LCD ... et belle chez les LEDs...

Autres critères que l'on peut envisager d'évoquer :

* la durée pendant laquelle un afficheur sera à la mode: les LEDs étaient très high tech dans les années 1990, et les afficheurs dans les années 2000 : quelle catégorie sera ringarde le plus vite?

* la possibilité de réutiliser: un afficheur en mode texte peut afficher l'heure, la date , sans aucun problème... un (tas d') afficheur(s)  7 segments est beaucoup moins utile .

Donc, à part l'esthetique, les afficheurs 7 segments me semblent avoir d'excellentes raisons d'être dépassés...


elektrax

#8
Jul 04, 2019, 05:58 am Last Edit: Jul 04, 2019, 06:03 am by elektrax
le clavier doit servir à quoi ?
encoder le temps de départ ?
desarmorcer avec le code : ce code étant programmé en dur dans le sketch et non changeable sans reprogrammation ?
ya du boulot...

"Il ne me semble pas que le fait de couper un fil "envoie" une info au microcontrôleur non ?"

les fils reliés au gnd, entrées arduino en pull_up, toutes les entrées sont à zéro un fil coupé fait passer l'entrée a 1, couper un ou plusieurs fils envoie bien une info au µC

J-M-L

Quote
les fils reliés au gnd, entrées arduino en pull_up, toutes les entrées sont à zéro un fil coupé fait passer l'entrée a 1, couper un ou plusieurs fils envoie bien une info au µC
Oui en pratique « ça n'envoie » rien du tout,  ça veut dire juste que c'est une situation que le µC peut surveiller et détecter, comme un bouton qu'on appuie.
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

ababi

#10
Jul 24, 2019, 02:58 pm Last Edit: Jul 24, 2019, 03:55 pm by ababi
Merci pour vos retours, je vais commencer à travailler dessus prochainement, j'aurais sans doute alors une tonne de questions...
je suis parti finalement sur un afficheur LCD, pour la polyvalence

le clavier doit servir à quoi ?
encoder le temps de départ ?
desarmorcer avec le code : ce code étant programmé en dur dans le sketch et non changeable sans reprogrammation ?
ya du boulot...
Le clavier servira à désamorcer la bombe, en combinaison avec les fils à couper
le temps ainsi que le code seront intégrés dans le programme et ne seront pas changeables sans reprogrammation (du moins dans cette première version)


Par contre, une question me taraude fortement... :
si j'utilise une LED pour faire un code morse qui par exemple dure 15s, ça veut dire que pendant tout ce temps, je ne peux pas exécuter d'autres tâches ? (surveiller les fils coupés, afficher le compte à rebours, etc.)
Ou bien y'a-t-il une astuce pour créer une sorte de sous programme pour le code morse qui s'exécute en parallèle du principal qui surveillerait alors les fils, afficherait le compte à rebours, et toutes les tâches "rapides" ?

J-M-L

#11
Jul 24, 2019, 09:06 pm Last Edit: Jul 25, 2019, 08:08 am by J-M-L
L'astuce c'est par exemple la  programmation par machine à états (cf mon tuto éventuellement) et surtout l'usage de millis() pour basculer entre différentes sous taches rapidement afin de donner l'apparence d'une exécution simultanée en temps utilisateur
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

bidouilleelec

Bonjour ababi,
Par contre, une question me taraude fortement... :
si j'utilise une LED pour faire un code morse qui par exemple dure 15s, ça veut dire que pendant tout ce temps, je ne peux pas exécuter d'autres tâches ? (surveiller les fils coupés, afficher le compte à rebours, etc.)
Ou bien y'a-t-il une astuce pour créer une sorte de sous programme pour le code morse qui s'exécute en parallèle du principal qui surveillerait alors les fils, afficherait le compte à rebours, et toutes les tâches "rapides" ?
Oui, il y a des méthodes simples pour écrire des codes non bloquants qui s'exécute en apparent parallélisme.
(pour faire du vrai parallélisme il faut plusieurs processeurs).

Cordialement,
bidouilleelec

ababi

Bonjour,

Super, merci à vous, vous me rassurez !
Je vais me pencher sur votre tuto et commencer mon code ces prochains jours :)

ababi

Bonjour !

Je me permets de revenir vers vous après mes premiers pas sur l'arduino (rassurez-vous, je n'ai pas marché dessus !)

j'arrive bien à gérer ma "surveillance" des fils coupés, et mon code morse avec millis() (c'est pas beau à voir, mais ça fonctionne !)
par contre, je galère avec mon affichage de compte à rebours, la fonction sprintf() ne m'affiche rien :(
Voici ce que j'ai rentré :

Code: [Select]

#include <Wire.h>
#include "rgb_lcd.h"
const int temps_restant = 620;
int minutes;
int secondes;
char message[16] = "";
boolean fin_jeu = 0;

rgb_lcd lcd;

void setup()
{
  lcd.begin(16, 2);
  lcd.setCursor(0,0);
  lcd.print("                ");
  lcd.setCursor(0,1);
  lcd.print("                ");
  lcd.setCursor(5, 1);
  lcd.print("CODE ?");
}

void loop()
{
  if ((temps_restant - millis() / 1000) <= 0)
  {
    lcd.setCursor(3, 0);
    lcd.print("!! BOUM !!");
    lcd.setCursor(0, 1);
    lcd.print("!! GAME OVER !!");
    fin_jeu++;
  }
  else
  if (fin_jeu == 0)
  {
    minutes = ( temps_restant - millis() / 1000 ) / 60;
    secondes = ( temps_restant - millis() / 1000) % 60;
    lcd.setCursor(5, 0);
    //sprintf(message,"%2d:%2d",minutes,secondes);
    if (minutes < 10)
    {
    lcd.print("0");
    lcd.setCursor(6,0);
    lcd.print(minutes);
    }
    else
    {
    lcd.print(minutes);
    }
    lcd.setCursor(7, 0);
    lcd.print(":");
        lcd.setCursor(8, 0);
        if (secondes <10)
    {
     lcd.print("0");
     lcd.setCursor(9,0);
     lcd.print(secondes);
    }
else
{
    lcd.print(secondes);
  }
}
}


j'ai mis en commentaire la ligne de code de sprintf car j'ai bidouillé autre chose pour afficher mon compte à rebours.
Quand j'utilise sprintf() plutôt que mon bidouillage, je n'ai pas de message d'erreur, mais rien ne s'affiche
mon bidouillage fonctionne, mais ça fait un peu usine à gaz !

Auriez-vous une idée de pourquoi sprintf() ne fonctionne pas ?

Go Up