Boite à mots doux : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(Étape 1 : Réalisation du câblage Arduino)
 
(7 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 7 : Ligne 7 :
  
 
==Description du projet==
 
==Description du projet==
La boite à mots doux est une boite possédant un haut-parleur et un bouton poussoir pour pouvoir changer de piste. Dans la boite il y a un Arduino et un lecteur MP3.  
+
La boite à mots doux est une boite possédant un haut-parleur et un bouton poussoir pour pouvoir changer de piste. Dans la boite il y a un Arduino et un lecteur MP3.
 +
 
 +
 
 +
[[Image:ImageBoite5.jpg| 400px | Center | 5]]
  
 
==Objectifs pédagogiques==
 
==Objectifs pédagogiques==
Ligne 43 : Ligne 46 :
 
===Étape 2 : Réalisation du code Arduino ===
 
===Étape 2 : Réalisation du code Arduino ===
  
Nous nous sommes inspiré de codes déjà existants sur internet pour ensuite les adapter à notre situation.
 
''' Code Arduino : '''
 
 
<pre>
 
<pre>
  
/* déclaration des broches */
+
///              MP3 PLAYER PROJECT
const byte PIN_LED_R = 9;
+
/// http://educ8s.tv/arduino-mp3-player/
const byte PIN_LED_G = 10;
+
//////////////////////////////////////////
const byte PIN_LED_B = 11;
+
 
 +
 
 +
#include "SoftwareSerial.h"
 +
SoftwareSerial mySerial(10, 11);
 +
# define Start_Byte 0x7E
 +
# define Version_Byte 0xFF
 +
# define Command_Length 0x06
 +
# define End_Byte 0xEF
 +
# define Acknowledge 0x00 //Returns info with command 0x41 [0x01: info, 0x00: no info]
 +
 
 +
# define ACTIVATED LOW
 +
 
 +
int buttonNext = 2;
 +
int buttonPause = 3;
 +
int buttonPrevious = 4;
 +
boolean isPlaying = false;
 +
 
 +
const int led = 8;
 +
 
 +
void setup () {
 +
 
 +
pinMode(buttonPause, INPUT);
 +
digitalWrite(buttonPause,HIGH);
 +
pinMode(buttonNext, INPUT);
 +
digitalWrite(buttonNext,HIGH);
 +
pinMode(buttonPrevious, INPUT);
 +
digitalWrite(buttonPrevious,HIGH);
 +
 
 +
mySerial.begin (9600);
 +
delay(1000);
 +
playFirst();
 +
isPlaying = true;
  
/* Dépendance pour le bus 1-Wire */
 
#include <OneWire.h>
 
 
/* Broche du bus 1-Wire */
 
const byte BROCHE_ONEWIRE = 7;
 
  
/* Code de retour de la fonction getTemperature() */
+
}
enum DS18B20_RCODES {
 
  READ_OK,  // Lecture ok
 
  NO_SENSOR_FOUND,  // Pas de capteur
 
  INVALID_ADDRESS,  // Adresse reçue invalide
 
  INVALID_SENSOR  // Capteur invalide (pas un DS18B20)
 
};
 
  
  
/* Création de l'objet OneWire pour manipuler le bus 1-Wire */
 
OneWire ds(BROCHE_ONEWIRE);
 
 
  
+
void loop () {
/**
+
 
  * Fonction de lecture de la température via un capteur DS18B20.
+
  if (digitalRead(buttonPause) == ACTIVATED)
*/
+
  {
byte getTemperature(float *temperature, byte reset_search) {
+
    if(isPlaying)
  byte data[9], addr[8];
+
    {
  // data[] : Données lues depuis le scratchpad
+
      pause();
  // addr[] : Adresse du module 1-Wire détecté
+
      isPlaying = false;
 
+
    }else
  /* Reset le bus 1-Wire ci nécessaire (requis pour la lecture du premier capteur) */
+
    {
  if (reset_search) {
+
      isPlaying = true;
     ds.reset_search();
+
      play();
 +
    }
 +
     //contenu du programme
 +
 
 
   }
 
   }
+
 
  /* Recherche le prochain capteur 1-Wire disponible */
+
 
  if (!ds.search(addr)) {
+
 
     // Pas de capteur
+
 
     return NO_SENSOR_FOUND;
+
 
 +
 
 +
if (digitalRead(buttonNext) == ACTIVATED)
 +
  {
 +
     if(isPlaying)
 +
     {
 +
      playNext();
 +
    }
 
   }
 
   }
 
+
 
  /* Vérifie que l'adresse a été correctement reçue */
+
  if (digitalRead(buttonPrevious) == ACTIVATED)
  if (OneWire::crc8(addr, 7) != addr[7]) {
+
  {
     // Adresse invalide
+
     if(isPlaying)
     return INVALID_ADDRESS;
+
     {
 +
      playPrevious();
 +
    }
 
   }
 
   }
 
  /* Vérifie qu'il s'agit bien d'un DS18B20 */
 
  if (addr[0] != 0x28) {
 
    // Mauvais type de capteur
 
    return INVALID_SENSOR;
 
  }
 
 
  /* Reset le bus 1-Wire et sélectionne le capteur */
 
  ds.reset();
 
  ds.select(addr);
 
 
 
  /* Lance une prise de mesure de température et attend la fin de la mesure */
 
  ds.write(0x44, 1);
 
  delay(800);
 
 
 
  /* Reset le bus 1-Wire, sélectionne le capteur et envoie une demande de lecture du scratchpad */
 
  ds.reset();
 
  ds.select(addr);
 
  ds.write(0xBE);
 
 
/* Lecture du scratchpad */
 
  for (byte i = 0; i < 9; i++) {
 
    data[i] = ds.read();
 
  }
 
 
 
  /* Calcul de la température en degré Celsius */
 
  *temperature = (int16_t) ((data[1] << 8) | data[0]) * 0.0625;
 
 
 
  // Pas d'erreur
 
  return READ_OK;
 
 
}
 
}
 
// Fonction setup(), appelée au démarrage de la carte Arduino
 
void setup() {
 
  
   // Initialise les broches
+
void playFirst()
   pinMode(PIN_LED_R, OUTPUT);
+
{
   pinMode(PIN_LED_G, OUTPUT);
+
  execute_CMD(0x3F, 0, 0);
   pinMode(PIN_LED_B, OUTPUT);
+
  delay(500);
   displayColor(0, 0, 0);
+
  setVolume(20);
    
+
   delay(500);
   /* Initialisation du port série */
+
   execute_CMD(0x11,0,1);  
   Serial.begin(115200);
+
   delay(500);
 +
}
 +
 
 +
void pause()
 +
{
 +
  execute_CMD(0x0E,0,0);
 +
   delay(500);
 +
}
 +
 
 +
void play()
 +
{
 +
  execute_CMD(0x0D,0,1);  
 +
   delay(500);
 +
}
 +
 
 +
void playNext()
 +
{
 +
  execute_CMD(0x01,0,1);
 +
   delay(500);
 +
}
 +
 
 +
void playPrevious()
 +
{
 +
   execute_CMD(0x02,0,1);
 +
   delay(500);
 
}
 
}
/** Affiche une couleur */
 
void displayColor(byte r, byte g, byte b) {
 
  
  // Assigne l'état des broches
+
void setVolume(int volume)
  // Version cathode commune
+
{
  //analogWrite(PIN_LED_R, r);
+
   execute_CMD(0x06, 0, volume); // Set the volume (0x00~0x30)
   //analogWrite(PIN_LED_G, g);
+
   delay(2000);
  //analogWrite(PIN_LED_B, b);
 
  // Version anode commune
 
  analogWrite(PIN_LED_R, ~r);
 
   analogWrite(PIN_LED_G, ~g);
 
  analogWrite(PIN_LED_B, ~b);
 
 
}
 
}
// Fonction loop(), appelée continuellement en boucle tant que la carte Arduino est alimentée
 
void loop() {
 
  
  float temperature;
+
void execute_CMD(byte CMD, byte Par1, byte Par2)
 
+
// Excecute the command and parameters
  /* Lit la température ambiante à ~1Hz */
+
{
  if (getTemperature(&temperature, true) != READ_OK) {
+
// Calculate the checksum (2 bytes)
    Serial.println(F("Erreur de lecture du capteur"));
+
word checksum = -(Version_Byte + Command_Length + CMD + Acknowledge + Par1 + Par2);
    return;
+
// Build the command line
  }
+
byte Command_line[10] = { Start_Byte, Version_Byte, Command_Length, CMD, Acknowledge,
 +
Par1, Par2, highByte(checksum), lowByte(checksum), End_Byte};
 +
//Send the command line to the module
 +
for (byte k=0; k<10; k++)
 +
{
 +
mySerial.write( Command_line[k]);
 +
}
 +
}
  
  /* Affiche la température */
 
  Serial.print(F("Temperature : "));
 
  Serial.print(temperature, 2);
 
  Serial.write(176); // Caractère degré
 
  Serial.write('C');
 
  Serial.println();
 
 
 
  /* Code de démonstration */
 
  if (temperature==0)
 
    displayColor(0, 192, 255);
 
    //delay(1000);
 
  if (temperature>0 && temperature<=5)
 
    displayColor(0, 255, 160);
 
    //delay(1000);
 
  if (temperature>5 && temperature<=10)
 
    displayColor(0, 255, 0);
 
    //delay(1000);
 
  if (temperature>10 && temperature<=15)
 
    displayColor(255, 255, 0);
 
    //delay(1000);
 
  
  if (temperature>15 && temperature<=20)
+
</pre>
    displayColor(255, 224, 0);
+
===Étape 3 : Réalisation de la boite à la découpeuse laser ===
    //delay(1000);
 
  
  if (temperature>20 && temperature<=25)
+
Nous avons réalisé la boite à l'aide d'une découpeuse laser.
    displayColor(255, 160, 0);
 
    //delay(1000);
 
  
  if (temperature>25 && temperature<=30)
+
[[Image:ConstructionBoite.jpg| 400px | Center | Photo de la réalisation de la boite]]
    displayColor(255, 128, 0);
 
    //delay(1000);
 
  
  if (temperature>30 && temperature<=35)
+
[[Catégorie:enib2019]]
    displayColor(255, 64, 0);
 
    //delay(1000);
 
  
  if (temperature>35 && temperature<=40)
+
===Étape 4 : Assemblage ===
    displayColor(255, 0, 0);
 
    //delay(1000);
 
 
 
}
 
  
</pre>
+
Nous avons fixé l'Arduino, et la plaque labdec au fond de la boite, nous avons soudé les câbles au bouton poussoir ainsi qu'au haut-parleur et visser ce dernier.
  
===Étape 3 : Réalisation du phare à la découpe laser===
+
[[Image:ImageBoite1.jpg| 400px | Center | 1]]
  
Nous avons trouvez sur le site [https://www.thingiverse.com/ Thingiverse] des plans pour un phare que nous avons ensuite utilisé puis fabriqué à la découpe laser. Les plans que nous avions trouvé en premier lieux sont trouvables [https://www.thingiverse.com/thing:723729 ici]. Cependant, nous avons modifié les plans de base pour qu'ils conviennent à notre projet. Vous pourrez trouver ces plans ci-dessous.[[Fichier:phare1.svg | 300px | center]] [[Fichier:phare2.svg | 300px |center]]
+
[[Image:ImageBoite2.jpg| 400px | Center | 2]]
Notez qu'une des faces du phare contient une porte que nous avons réalisé nous même pour pouvoir faire passer le câble d'alimentation de la carte Arduino.
 
Le phare seul, sans les éléments numériques que nous lui rajoutons, ressemble initialement à cela :
 
[[Fichier:Thermophare.jpeg | 300px | center ]]
 
  
===Étape 4 : Assemblage===
+
[[Image:ImageBoite3.jpg| 400px | Center | 3]]
  
Nous avons fixé la LED à un petit bout de carton que nous avons placé à l'emplacement de l'optique du phare et nous avons utilisé les pinces crocodiles pour lier la lampe à la Breadboard qui se situe dans la base du phare avec la carte Arduino. Nous avons ensuite placé une feuille de calque enroulée à l'intérieure de l'optique du phare, autours de la LED RGB.
+
[[Image:ImageBoite4.jpg| 400px | Center | 4]]

Version actuelle datée du 31 janvier 2019 à 11:04

Le groupe a décidé de réaliser une boite à mots doux.

Ce projet a été conçu par des élèves de l'ENIB.

L'ENIB est une école d'ingénieurs situé au Technopôle de Brest


Description du projet

La boite à mots doux est une boite possédant un haut-parleur et un bouton poussoir pour pouvoir changer de piste. Dans la boite il y a un Arduino et un lecteur MP3.


5

Objectifs pédagogiques

Ce projet a pour ambition de nous faire découvrir de nouvelles façons d'utiliser le numérique et plus particulièrement de pouvoir utiliser un Arduino.

Équipe en charge du projet

  • William LE CORRE
  • Tony CUILLANDRE
  • Damien CRENN
  • Quentin LE FRANC

Matériel nécessaire

Réalisation

Étape 1 : Réalisation du câblage Arduino

On utilise un Breadboard pour pouvoir réaliser notre câblage. On place le lecteur MP3 dessus ainsi qu'une résistance.

Cablage avec 3 boutons

Étape 2 : Réalisation du code Arduino


///              MP3 PLAYER PROJECT
/// http://educ8s.tv/arduino-mp3-player/
//////////////////////////////////////////


#include "SoftwareSerial.h"
SoftwareSerial mySerial(10, 11);
# define Start_Byte 0x7E
# define Version_Byte 0xFF
# define Command_Length 0x06
# define End_Byte 0xEF
# define Acknowledge 0x00 //Returns info with command 0x41 [0x01: info, 0x00: no info]

# define ACTIVATED LOW

int buttonNext = 2;
int buttonPause = 3;
int buttonPrevious = 4;
boolean isPlaying = false;

const int led = 8;

void setup () {

pinMode(buttonPause, INPUT);
digitalWrite(buttonPause,HIGH);
pinMode(buttonNext, INPUT);
digitalWrite(buttonNext,HIGH);
pinMode(buttonPrevious, INPUT);
digitalWrite(buttonPrevious,HIGH);

mySerial.begin (9600);
delay(1000);
playFirst();
isPlaying = true;


}



void loop () { 

 if (digitalRead(buttonPause) == ACTIVATED)
  {
    if(isPlaying)
    {
      pause();
      isPlaying = false;
    }else
    {
      isPlaying = true;
      play();
    }
    //contenu du programme

  }






 if (digitalRead(buttonNext) == ACTIVATED)
  {
    if(isPlaying)
    {
      playNext();
    }
  }

   if (digitalRead(buttonPrevious) == ACTIVATED)
  {
    if(isPlaying)
    {
      playPrevious();
    }
  }
}

void playFirst()
{
  execute_CMD(0x3F, 0, 0);
  delay(500);
  setVolume(20);
  delay(500);
  execute_CMD(0x11,0,1); 
  delay(500);
}

void pause()
{
  execute_CMD(0x0E,0,0);
  delay(500);
}

void play()
{
  execute_CMD(0x0D,0,1); 
  delay(500);
}

void playNext()
{
  execute_CMD(0x01,0,1);
  delay(500);
}

void playPrevious()
{
  execute_CMD(0x02,0,1);
  delay(500);
}

void setVolume(int volume)
{
  execute_CMD(0x06, 0, volume); // Set the volume (0x00~0x30)
  delay(2000);
}

void execute_CMD(byte CMD, byte Par1, byte Par2)
// Excecute the command and parameters
{
// Calculate the checksum (2 bytes)
word checksum = -(Version_Byte + Command_Length + CMD + Acknowledge + Par1 + Par2);
// Build the command line
byte Command_line[10] = { Start_Byte, Version_Byte, Command_Length, CMD, Acknowledge,
Par1, Par2, highByte(checksum), lowByte(checksum), End_Byte};
//Send the command line to the module
for (byte k=0; k<10; k++)
{
mySerial.write( Command_line[k]);
}
}


Étape 3 : Réalisation de la boite à la découpeuse laser

Nous avons réalisé la boite à l'aide d'une découpeuse laser.

Photo de la réalisation de la boite

Étape 4 : Assemblage

Nous avons fixé l'Arduino, et la plaque labdec au fond de la boite, nous avons soudé les câbles au bouton poussoir ainsi qu'au haut-parleur et visser ce dernier.

1

2

3

4