ENIB 2023 : Les petits voyageurs : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(Code)
(Code)
Ligne 76 : Ligne 76 :
  
 
==Code==
 
==Code==
 +
prog.cpp:
 
<pre>
 
<pre>
#define brocheS0 2
 
  
 +
#include "color.hpp"
 +
#include "enigme.hpp"
 +
#include <iostream>
 +
#include <random>
 +
#include <vector>
  
  
 +
int main()
 +
{
 +
//variable initiale
 +
int erreur=-1;
 +
int test=1;
 +
int bonneReponse=0;
  
#define brocheS1 3
+
//liste des couleurs disponible pour les drapeaux
 
+
deb::Color rouge{1024, 0, 0};
 
+
deb::Color bleu{0, 0, 1024};
#define brocheS2 4
+
deb::Color blanc{1024, 1024, 1024};
 
+
deb::Color noir{0, 0, 0};
 
+
deb::Color vert{0, 1024 ,0};
#define brocheS3 5
+
deb::Color orange{0, 0, 1024};
 
+
deb::Color jaune{0, 0, 1024};
 
 
#define brocheLecture 6
 
 
 
 
 
#define brocheLED 7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// valeur mesurée pour chaque couleur
 
 
 
 
 
int rouge, vert, bleu, total;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
void setup() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
pinMode(brocheS0, OUTPUT);
 
 
 
 
 
pinMode(brocheS1, OUTPUT);
 
 
 
 
 
pinMode(brocheS2, OUTPUT);
 
 
 
 
 
pinMode(brocheS3, OUTPUT);
 
 
 
 
 
pinMode(brocheLED, OUTPUT);
 
 
 
 
 
pinMode(brocheLecture, INPUT);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// éteignons les LEDs pour l'instant
 
 
 
 
 
digitalWrite(brocheLED, LOW);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// Réglage de l'échelle de fréquence à 2% (plus facile à lire avec pulseIn)
 
 
 
 
 
digitalWrite(brocheS0, LOW);
 
 
 
 
 
digitalWrite(brocheS1, HIGH);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// pour affichage des résultats dans le moniteur série
 
 
 
 
 
Serial.begin(9600);
 
 
 
  
 +
//liste des enigmes
 +
deb::Enigme ea{bleu, blanc, rouge, "Pays du champagne"};
 +
deb::Enigme eb{vert, blanc, rouge, "Pays des pâtes"};
 +
deb::Enigme ec{vert, blanc, orange, "Pays des moutons "};
 +
deb::Enigme ed{rouge, blanc, rouge, "Pays d’origine de Marie Antoinette"};
 +
deb::Enigme ee{noir, rouge, jaune, "Pays d’origine des knödels "};
 +
deb::Enigme ef{jaune, vert, rouge, "Quel est ce pays ? Mjubojf"};
 +
deb::Enigme eg{rouge, blanc, bleu, "Quel est ce pays ? .-.. ..- -..- . -- -... --- ..- .-. --."};
 +
deb::Enigme eh{rouge, blanc, bleu, "Quel est ce pays ? Ozxr-Azr"};
 +
deb::Enigme ei{noir, jaune, rouge, "Pays de la gaufre"};
 +
deb::Enigme ej{vert, jaune, bleu, "Mon premier est un mec. Mon second qualifie quelque chose d’agréable."};
 +
deb::Enigme ek{blanc, bleu, noir, "Quel est ce pays ? . ... - --- -. .. ."};
 +
deb::Enigme el{rouge, blanc, rouge, "Quel est ce pays ? 53886643"};
 +
deb::Enigme em{rouge, blanc, vert, "Mon premier est un pronom personnel indéfini. Mon second contient autant de rouge que de vert que de bleu."};
 +
deb::Enigme en{bleu, jaune, rouge, "Quel est ce pays ? Spvnbojf"};
 +
deb::Enigme eo{bleu, jaune, rouge, "Ma capitale est vieille "};
 +
deb::Enigme ep{bleu, jaune, rouge, "Quel est ce pays ? - -.-. .... .- -.."};
 +
deb::Enigme eq{rouge, bleu, orange, "Son papier sent bon "};
 +
deb::Enigme er{bleu, rouge, vert, "Quel est ce pays ? 2937224526"};
 +
deb::Enigme es{rouge, jaune, vert, "Ma capitale est La Paz"};
 +
deb::Enigme et{rouge, jaune, vert, "Mon premier est la plante sous laquelle il faut s’embrasser. Mon second est l’arrivée en ce monde."};
 +
deb::Enigme eu{blanc, vert, rouge, "Mon premier est une sphère d’une substance dans une autre. Mon second est un mec. Mon troisième peut être cantonais, thai ou basmati. "};
 +
deb::Enigme ev{jaune, bleu, rouge, "Ma capitale est Bogota"};
 +
deb::Enigme ew{orange, blanc, vert, "Quel est ce pays ? Dpuf e’Jwpjsf"};
 +
deb::Enigme ex{vert, jaune, rouge, "Quel est ce pays ? -- .- .-.. .."};
 +
deb::Enigme ey{vert, blanc, vert, "Quel est ce pays ? 6443742"};
 +
deb::Enigme ez{rouge, blanc, rouge, "Pays du Macchu Picchu"};
 +
deb::Enigme eea{blanc, bleu, rouge, "Pays du Kremlin"};
 +
deb::Enigme eeb{rouge, blanc, noir, "Quel est ce pays ? Xdldm"};
 +
std::vector<deb::Enigme> vectEnigme{ea,eb,ec,ed,ee,ef,eg,eh,ei,ej,ek,el,em,en,eo,ep,eq,er,es,et,eu,ev,ew,ex,ez,eea,eeb};
  
 +
//loop
 +
 +
if (appui sur bouton acquisition)  //on enregistre la couleur actuelle
 +
{
 +
int a,b,c = 10,10,1024; //on recupere les valeurs du capteur
 +
 +
if (test==4)
 +
{
 +
bonneReponse=0; //il y a trop de reponse le resultat sera faut
 +
}
  
 +
if (test==3)
 +
{
 +
if (enigmeEnCours.trois.isitme(a,b,c)) {bonneReponse=bonneReponse+1} //on compare a la couleur du drapeau
 +
test=4;
 +
}
 +
 +
if (test==2)
 +
{
 +
if (enigmeEnCours.deux.isitme(a,b,c)) {bonneReponse=bonneReponse+1} //on compare a la couleur du drapeau
 +
test=3;
 +
}
 +
 +
if (test==1)
 +
{
 +
if (enigmeEnCours.un.isitme(a,b,c)) {bonneReponse=bonneReponse+1} //on compare a la couleur du drapeau
 +
test=2;
 +
}
 +
}
  
 +
 +
if (appui sur le bouton validé and erreur!=-1)//on regarde le resultat final
 +
{
 +
if (bonneReponse==3)
 +
{
 +
std::cout <<"Victoire ! Si tu veux rejouer, clique sur JSP.\n";
 +
erreur =-1;
 +
}
 +
if (bonneReponse!=3 and erreur==0)
 +
{
 +
std::cout <<"Tu as fait une erreur. Repars de zéro et essaye encore. \n";
 +
erreur =1;
 +
}
 +
if (bonneReponse!=3 and erreur==1)
 +
{
 +
std::cout <<"Tu as perdu. Si tu veux rejouer, clique sur JSP.\n";
 +
erreur =-1;
 +
}
 +
}
  
  
 +
if (appui sur bouton validé and erreur==-1) //lancement nouvelle enigme
 +
{
 +
srand((unsigned) time(NULL));
 +
deb::Enigme enigmeEnCours=vectEnigme[rand() % 28];
 +
std::cout << enigmeEnCours.question << "\n";
 +
erreur=0;
 +
test=1;
 +
bonneReponse=0;
 +
}
 
}
 
}
 +
</pre>
  
 +
color.cpp:
  
 +
</pre>
 +
//----------------------------------------------------------------------------
  
 +
#include "color.hpp"
  
 +
namespace deb
 +
{
 +
bool Color::isitme(int r,int g,int b) const
 +
{
 +
if (r<(red-200)) {return false;}
 +
if (r>(red+200)) {return false;}
 +
if (g<(green-200)) {return false;}
 +
if (g>(green+200)) {return false;}
 +
if (b<(blue-200)) {return false;}
 +
if (b>(blue+200)) {return false;}
 +
return true;
  
 +
}
  
  
 +
}// namespace deb
  
 +
//----------------------------------------------------------------------------
 +
</pre>
  
 +
color.hpp:
 +
</pre>
  
 +
//----------------------------------------------------------------------------
  
 +
#ifndef DEB_COLOR_HPP
 +
#define DEB_COLOR_HPP
  
void loop() {
+
#include <iostream>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
digitalWrite(brocheLED, HIGH);  // on allume les LEDs
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
digitalWrite(brocheS2, LOW); // rouge
 
 
 
 
 
digitalWrite(brocheS3, LOW);
 
 
 
 
 
rouge = pulseIn(brocheLecture, LOW);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Serial.print("rouge: ");
 
 
 
 
 
Serial.print(rouge);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
digitalWrite(brocheS2, HIGH); // vert
 
 
 
 
 
digitalWrite(brocheS3, HIGH);
 
 
 
 
 
vert = pulseIn(brocheLecture, LOW);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Serial.print("  vert: ");
 
 
 
 
 
Serial.print(vert);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
digitalWrite(brocheS2, LOW); // bleu
 
 
 
 
 
digitalWrite(brocheS3, HIGH);
 
 
 
 
 
bleu = pulseIn(brocheLecture, LOW);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Serial.print(" bleu: ");
 
 
 
 
 
Serial.print(bleu);
 
 
 
 
 
 
 
 
 
  
 +
namespace deb {
  
 +
struct Color
 +
  {
 +
    int red,green,blue;
  
digitalWrite(brocheS2, HIGH); // lumière complète, sans filtre
+
    Color(int red, int green, int blue): red{std::move(red)}, green{std::move(green)}, blue{std::move(blue)}
 +
    {/* nothing to do */}
  
 +
    bool isitme(int r,int g,int b) const;
 +
  };
  
digitalWrite(brocheS3, LOW);
 
  
  
total = pulseIn(brocheLecture, LOW);
+
} // namespace deb
  
 +
#endif // DEB_COLOR_HPP
  
 +
//----------------------------------------------------------------------------
  
 +
</pre>
  
  
  
Serial.print("  total: ");
+
enigme.hpp
  
 +
</pre>
 +
//----------------------------------------------------------------------------
  
Serial.println(total);
+
#ifndef DEB_ENIGME_HPP
 +
#define DEB_ENIGME_HPP
  
 +
#include <iostream>
 +
#include <string>
 +
#include "color.hpp"
  
 +
namespace deb {
  
 +
struct Enigme
 +
  {
 +
    Color un,deux,trois;
 +
    std::string question;
  
 +
    Enigme(Color u, Color d, Color t, std::string q): un{std::move(u)}, deux{std::move(d)}, trois{std::move(t)}, question{std::move(q)}
 +
    {/* nothing to do */}
  
 +
  };
  
  
digitalWrite(brocheLED, LOW);  // on éteint les LEDs
 
  
 +
} // namespace deb
  
delay(1000); // pause avant la prochaine mesure
+
#endif // DEB_ENIGME_HPP
  
 +
//----------------------------------------------------------------------------
  
 
</pre>
 
</pre>

Version du 26 janvier 2023 à 15:44

Les petits voyageurs:

Description courte

Résoudre une énigme faisant deviner un pays.

Déplacer le capteur de couleur dans le labyrinthe pour faire une suite de couleur correspondant au drapeau du pays.

Matériels et machines utilisés

  • plaque de bois de 30cm x 30cm
  • 2 boutons poussoirs
  • 1 capteur RGB TCS3200
  • carte Arduino
  • cartons ( pour créer le prototype)
  • câbles Dupont
  • plaque de Cork de 30cm x 30cm
  • découpeuse laser
  • poste à souder
  • pistolet a colle

Réalisation

Etape 1: Souder les composants si nécessaires.

Etape 2: Créer les énigmes. Ci dessous la liste de nos énigmes Fichier:Liste des énigmes.docx

Etape 3: Ecrire le code. (cf code ci dessous)

Etape 4: Etablir un plan du labyrinthe.

Petits voyageurs 1.jpg

Etape 5: Faire un prototype du labyrinthe en carton.

Petit voyageurs2.jpg

Etape 6: tracer le labyrinthe sur la plaque de bois.

Petit voyageurs3.jpg

Etape 7: Sur inskape, creer un fichier avec toutes les murs du labyrinthe qui doivent être découpés / graver.

téléchargez le svg


Etape 8: Découper et graver les murs du labyrinthe à la découpe laser.

Murs.jpeg

Etape 9: Peindre certaines cases du labyrinthe en fonction des couleurs nécessaires. Astuce : Mettre du scotch pour avoir des bords lisses

Peinture.jpeg —> Peinture2.jpeg


Etape 10: A l'aide de la colle à bois, coller les murs du labyrinthe.

Colle1.jpeg —> Colle2.jpeg


Code

prog.cpp:


#include "color.hpp"
#include "enigme.hpp"
#include <iostream>
#include <random>
#include <vector>


int main()
{
	//variable initiale
	int erreur=-1;
	int test=1;
	int bonneReponse=0;

	//liste des couleurs disponible pour les drapeaux 
	deb::Color rouge{1024, 0, 0};
	deb::Color bleu{0, 0, 1024};
	deb::Color blanc{1024, 1024, 1024};
	deb::Color noir{0, 0, 0};
	deb::Color vert{0, 1024 ,0};
	deb::Color orange{0, 0, 1024};
	deb::Color jaune{0, 0, 1024};

	//liste des enigmes 
	deb::Enigme ea{bleu, blanc, rouge, "Pays du champagne"};
	deb::Enigme eb{vert, blanc, rouge, "Pays des pâtes"};
	deb::Enigme ec{vert, blanc, orange, "Pays des moutons "};
	deb::Enigme ed{rouge, blanc, rouge, "Pays d’origine de Marie Antoinette"};
	deb::Enigme ee{noir, rouge, jaune, "Pays d’origine des knödels "};
	deb::Enigme ef{jaune, vert, rouge, "Quel est ce pays ? Mjubojf"};
	deb::Enigme eg{rouge, blanc, bleu, "Quel est ce pays ? .-.. ..- -..- . -- -... --- ..- .-. --."};
	deb::Enigme eh{rouge, blanc, bleu, "Quel est ce pays ? Ozxr-Azr"};
	deb::Enigme ei{noir, jaune, rouge, "Pays de la gaufre"};
	deb::Enigme ej{vert, jaune, bleu, "Mon premier est un mec. Mon second qualifie quelque chose d’agréable."};
	deb::Enigme ek{blanc, bleu, noir, "Quel est ce pays ? . ... - --- -. .. ."};
	deb::Enigme el{rouge, blanc, rouge, "Quel est ce pays ? 53886643"};
	deb::Enigme em{rouge, blanc, vert, "Mon premier est un pronom personnel indéfini. Mon second contient autant de rouge que de vert que de bleu."};
	deb::Enigme en{bleu, jaune, rouge, "Quel est ce pays ? Spvnbojf"};
	deb::Enigme eo{bleu, jaune, rouge, "Ma capitale est vieille "};
	deb::Enigme ep{bleu, jaune, rouge, "Quel est ce pays ? - -.-. .... .- -.."};
	deb::Enigme eq{rouge, bleu, orange, "Son papier sent bon "};
	deb::Enigme er{bleu, rouge, vert, "Quel est ce pays ? 2937224526"};
	deb::Enigme es{rouge, jaune, vert, "Ma capitale est La Paz"};
	deb::Enigme et{rouge, jaune, vert, "Mon premier est la plante sous laquelle il faut s’embrasser. Mon second est l’arrivée en ce monde."};
	deb::Enigme eu{blanc, vert, rouge, "Mon premier est une sphère d’une substance dans une autre. Mon second est un mec. Mon troisième peut être cantonais, thai ou basmati. "};
	deb::Enigme ev{jaune, bleu, rouge, "Ma capitale est Bogota"};
	deb::Enigme ew{orange, blanc, vert, "Quel est ce pays ? Dpuf e’Jwpjsf"};
	deb::Enigme ex{vert, jaune, rouge, "Quel est ce pays ? -- .- .-.. .."};
	deb::Enigme ey{vert, blanc, vert, "Quel est ce pays ? 6443742"};
	deb::Enigme ez{rouge, blanc, rouge, "Pays du Macchu Picchu"};
	deb::Enigme eea{blanc, bleu, rouge, "Pays du Kremlin"};
	deb::Enigme eeb{rouge, blanc, noir, "Quel est ce pays ? Xdldm"};
	std::vector<deb::Enigme> vectEnigme{ea,eb,ec,ed,ee,ef,eg,eh,ei,ej,ek,el,em,en,eo,ep,eq,er,es,et,eu,ev,ew,ex,ez,eea,eeb};

	//loop
	
	if (appui sur bouton acquisition)  //on enregistre la couleur actuelle
	{	
		int a,b,c = 10,10,1024; //on recupere les valeurs du capteur
		
		if (test==4) 
		{
			bonneReponse=0; //il y a trop de reponse le resultat sera faut
		}

		if (test==3)
		{
			if (enigmeEnCours.trois.isitme(a,b,c)) {bonneReponse=bonneReponse+1} //on compare a la couleur du drapeau
			test=4;
		}
		
		if (test==2)
		{
			if (enigmeEnCours.deux.isitme(a,b,c)) {bonneReponse=bonneReponse+1} //on compare a la couleur du drapeau
			test=3;
		}
		
		if (test==1)
		{
			if (enigmeEnCours.un.isitme(a,b,c)) {bonneReponse=bonneReponse+1} //on compare a la couleur du drapeau
			test=2;
		}
	}

		
	if (appui sur le bouton validé and erreur!=-1)//on regarde le resultat final
	{
		if (bonneReponse==3) 
		{
			std::cout <<"Victoire ! Si tu veux rejouer, clique sur JSP.\n";
			erreur =-1;
		}
		if (bonneReponse!=3 and erreur==0) 
		{
			std::cout <<"Tu as fait une erreur. Repars de zéro et essaye encore. \n";
			erreur =1;
		}
		if (bonneReponse!=3 and erreur==1) 
		{
			std::cout <<"Tu as perdu. Si tu veux rejouer, clique sur JSP.\n";
			erreur =-1;
		}
	}


	if (appui sur bouton validé and erreur==-1) //lancement nouvelle enigme
	{	
		srand((unsigned) time(NULL));
		deb::Enigme enigmeEnCours=vectEnigme[rand() % 28];
		std::cout << enigmeEnCours.question << "\n";
		erreur=0;
		test=1;
		bonneReponse=0;
	}
}

color.cpp:

</pre> //----------------------------------------------------------------------------

  1. include "color.hpp"

namespace deb { bool Color::isitme(int r,int g,int b) const { if (r<(red-200)) {return false;} if (r>(red+200)) {return false;} if (g<(green-200)) {return false;} if (g>(green+200)) {return false;} if (b<(blue-200)) {return false;} if (b>(blue+200)) {return false;} return true;

}


}// namespace deb

//---------------------------------------------------------------------------- </pre>

color.hpp: </pre>

//----------------------------------------------------------------------------

  1. ifndef DEB_COLOR_HPP
  2. define DEB_COLOR_HPP
  1. include <iostream>

namespace deb {

struct Color

 {
   int red,green,blue;
   Color(int red, int green, int blue): red{std::move(red)}, green{std::move(green)}, blue{std::move(blue)}
   {/* nothing to do */}
   bool isitme(int r,int g,int b) const;
 };


} // namespace deb

  1. endif // DEB_COLOR_HPP

//----------------------------------------------------------------------------

</pre>


enigme.hpp

</pre> //----------------------------------------------------------------------------

  1. ifndef DEB_ENIGME_HPP
  2. define DEB_ENIGME_HPP
  1. include <iostream>
  2. include <string>
  3. include "color.hpp"

namespace deb {

struct Enigme

 {
   Color un,deux,trois;
   std::string question;
   Enigme(Color u, Color d, Color t, std::string q): un{std::move(u)}, deux{std::move(d)}, trois{std::move(t)}, question{std::move(q)}
   {/* nothing to do */}
 };


} // namespace deb

  1. endif // DEB_ENIGME_HPP

//----------------------------------------------------------------------------

</pre>

Catégories