Différences entre versions de « Mon-Reveil-Hack »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
 
(105 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 3 : Ligne 3 :
 
== Introduction ==
 
== Introduction ==
  
Il est possible de changer le code facilement de manière à optimiser le réveil à vos besoin.  
+
Il est possible de changer le code facilement de manière à optimiser le réveil à vos besoins.  
 +
 
 +
L'alarme n° 1 est tout spécialement destiné au hacking (personnalisation) du réveil.
 +
 
 +
Vous pourrez modifier la mélodie et ajouter un hack pour faire sonner un gong, une clochette, etc.
 +
 
 +
Le code du réveil est disponible, vous pourrez donc le modifier à votre guise.
 +
 
 +
Pour les Hack faisant intervenir du matériel complémentaire, nous avons prévu un connecteur complémentaire à l'arrière du réveil.
 +
 
 +
Celui-ci est raccordé sur différentes entrées/sorties encore libre sur notre Arduino.
 +
 
 +
[[Fichier:Mon-Reveil-83a.jpg|480px]]
  
Je vais vous expliquer comment modifier la mélodie et ajouter un autre hack (un GONG).
 
 
== Mélodies ==
 
== Mélodies ==
  
Ligne 11 : Ligne 22 :
 
Il est possible de changer simplement de mélodie en changant le nom de celle-ci dant la variable '''MELODIE'''.
 
Il est possible de changer simplement de mélodie en changant le nom de celle-ci dant la variable '''MELODIE'''.
  
L'ensemble des mélodies se trouvent dans le fichier '''melodie.h'''.
+
L'ensemble des mélodies sont définies dans le fichier '''melodie.h'''.
 +
 
 +
Pour modifier la mélodie, il faut changer la ligne portant la mention {{fname|const int MELODIE[][2]}}
  
 
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
Ligne 17 : Ligne 30 :
 
// Changer MARIO
 
// Changer MARIO
 
const int MELODIE[][ 2 ] = MARIO;
 
const int MELODIE[][ 2 ] = MARIO;
 +
</syntaxhighlight>
 +
 +
Ou encore:
 +
 +
<syntaxhighlight lang="c">
 
// Par AXEL_F
 
// Par AXEL_F
 
const int MELODIE[][ 2 ] = AXEL_F;
 
const int MELODIE[][ 2 ] = AXEL_F;
Ligne 60 : Ligne 78 :
 
==== Comment convertir une musique en mélodie ? ====
 
==== Comment convertir une musique en mélodie ? ====
  
Malheureusement, nous avons pas trouvé un outil capable de convertir une musique (en entière) en mélodie polyphonique.
+
Malheureusement, nous avons pas trouvé un outil capable de convertir une musique (entière) en mélodie polyphonique.
  
 +
== Les 3 fonctions de contrôle d'alarmes ==
  
 +
Premièrement, il est nécessaire de comprendre les 3 fonctions principales. Chacune de ces fonctions est appelée à chacune des phases des alarmes.
  
== Les 3 phases des alarmes ==
+
Chaque fois qu'une alarme change de phase, elle envoie comme argument l'index identifiant l'alarme (dans notre cas de 0 à 3, 0 étant la première alarme).
  
Premièrement, il est nécessaire de comprendre les 3 fonctions principale. Chacune de ses fonctions sont appelées à chacune des phases des alarmes.
+
Il est donc facile de personnaliser chacune des alarmes. L'alarme 1 (index = 0) étant libre à la personnalisation, les 3 autres alarmes jouent la mélodie sur le piezo buzzer.
 
 
Chaque fois qu'une alarme change de phase, elle envoie comme argument la position de l'alarme (dans notre cas 0 à 3). Il est donc facile de personnaliser chacunes des alarmes.
 
  
 
Voici les 3 fonctions:  
 
Voici les 3 fonctions:  
 
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
 
/*
 
/*
  * Alarme qui commence à sonner
+
  * Fonction appelée lorsque l'Alarme doit commencer à sonner.
 
  */
 
  */
 
void alarmeStart( int alarmePos ){
 
void alarmeStart( int alarmePos ){
Ligne 80 : Ligne 98 :
  
 
/*
 
/*
  * Pendant que l'alarme sonne, répéter une étape
+
  * Fonction appelée répétitivement pendant que l'alarme sonne.
  */
+
  * Cette fonction permet de réaliser des opérations à intervalle régulier.
 +
*/
 
void alarmePulse( int alarmePos ){
 
void alarmePulse( int alarmePos ){
 
   jouerMelodie();
 
   jouerMelodie();
Ligne 87 : Ligne 106 :
  
 
/*
 
/*
  * Alarme qui cesse de sonner
+
  * Fonction appelée lorsque l'alarme doit cesser de fonctionner
 
  */
 
  */
 
void alarmeStop( int alarmePos ){
 
void alarmeStop( int alarmePos ){
Ligne 94 : Ligne 113 :
 
</syntaxhighlight>
 
</syntaxhighlight>
  
* '''alarmeStart''' est appelée quand une alarme se met en route.
+
En résumé:
* '''alarmePulse''' est appelée durant le moment où l'alarme est active.
+
* '''alarmeStart''' est appelée quand l'alarme doit démarrer.
* '''alarmeStop''' est appelée quand une alarme s'arrête.
+
* '''alarmePulse''' est appelée répétitivement pendant que l'alarme est active.
 +
* '''alarmeStop''' est appelée quand une alarme doit s'arrête.
 +
 
 +
 
 +
== Hack d'alimentations ==
 +
Parmi les hacks, nous utilisons un servo moteur (mais cela serait également vrai avec un solénoïde).
 +
 +
Un servo moteur consomme plus de courant que le régulateur de tension d'un Arduino peut délivrer (350mA).
 +
 
 +
Il est donc nécessaire:
 +
* soit d'utiliser une alimentation supplémentaire pour le servo moteur.
 +
* soit d'alimenter directement la carte Arduino en 5V.
 +
 
 +
Nous vous proposons ici plusieurs montages possibles, à vous de choisir celui qui vous convient le mieux.
 +
 
 +
Voici le schéma simplifié des connectiques des alimentations de l'Arduino :
 +
 
 +
[[Fichier:Mon-Reveil-104.jpg|640px]]<small><br />''Cliquez pour agrandir''</small>
 +
 
 +
=== Pont entre 5V et Vin ===
 +
Ce moyen permet de contourner le régulateur de tension au niveau de l'entrée Jack et donc de fournir directement le courant nécessaire au circuit 5V de votre Arduino.
 +
 
 +
[[Fichier:Mon-Reveil-106.jpg|640px]]<small><br />''Cliquez pour agrandir''</small>
 +
 
 +
{{ambox|text=Truc et actuce: si vous avez monté le connecteur 6 broches à l'arrière de votre réveil, vous pourrez aussi réaliser le pontage Vin -> 5V directement sur ce connecteur :-) }}
 +
 
 +
* '''Avantages'''
 +
** Propre niveau du câblages.
 +
** Un seul fil nécessaire.
 +
** Une seule alimentation 5V nécessaire (directement sur le connecteur Jack d'Arduino).
 +
* '''Inconvénients'''
 +
** <font color="red">Risque d'endommager les composants de l'Arduino si vous appliquez une tension supérieur à 5V.</font>
 +
** <font color="red">Le circuit ne peut être alimenté que par une seule alimentation à la fois! Hors de question de brancher l'USB et l'alimentation 5V en même temps... au risque de détériorer votre Arduino.</font>
 +
 
 +
{{ambox-stop | text = Connectez uniquement une alimentation de 5v !}}
 +
 
 +
=== Alimenter le moteur avec une seconde alimentation. ===
 +
 
 +
[[Fichier:Mon-Reveil-108.jpg|320px]]<small><br />''Cliquez pour agrandir''</small>
 +
 
 +
* '''Avantages'''
 +
** Ne risque pas d'endommager votre Arduino (si vous vous tromper de tension d'alimentation).
 +
** Les plages des tensions pour alimenter le moteur se trouvent entre 4.8v et 6v.
 +
* '''Inconvénients'''
 +
** Nécessite une deuxième alimentation.
 +
** Nécessite de réaliser des connexions supplémentaires.
 +
 
 +
=== Alimenter l'arduino en 5V directement ===
 +
 
 +
[[Fichier:Mon-Reveil-109.jpg|300px]]<small><br />''Cliquez pour agrandir''</small>
 +
 
 +
* '''Avantages'''
 +
** L'ensemble de l'Arduino possède une entrée 5v avec plus d'intensité
 +
* '''Inconvénients'''
 +
** <font color="red">Nécessite une alimentation de 5V. Toute tension supérieure détruira votre Arduino.</font>
 +
** <font color="red">Le circuit ne peut être alimenter que par une seule source d'alimentation ! Hors de question de brancher votre Arduino en USB en meêm temps que l'alimentation externe.</font>
 +
 
 +
{{ambox-stop | text = Connectez uniquement une alimentation de 5v ! Toute tension supérieure injectera une surtension sur le circuit 5V du microcontrôleur et détruira votre Arduino.}}
 +
 
 +
== Faire sonner une clochette ==
 +
 
 +
Pour faire sonner une clochette, il sera nécessaire d'utiliser un servo moteur, une clochette, une alimentation supplémentaire et un support/pied.
 +
 
 +
{{ambox|text=L'activation permanente du servo moteur à répétition créera des appels de courant important sur le régulateur de tension de votre Arduino. Les chutes de tension que cela va provoquer fera redémarrer votre Arduino.  
  
== Faire sonner un GONG ==
+
IL FAUT DONC OPTER POUR UNE SOURCE D'ALIMENTATION EXTERNE!}}
 +
 +
Dans notre cas de figure, nous avons opté pour un pontage Vin -> 5V (décrit au point précédent) avec l'utilisation d'une {{pl|311|alimentation externe 5V}}.
  
Je vais vous montrer comment ajouter une fonctionnalité facilement à vos alarmes.
+
{{#Widget:Iframe
 +
|url=https://www.youtube.com/embed/N0VNmWjmfHs
 +
|width=420
 +
|height=315
 +
|border=0
 +
}}
 +
=== Choix du matériel ===
 +
* Pour la clochette, nous avons choisi une clochette pour chats.
 +
* Pour le servo moteur, nous avons pris un {{pl|64|micro servo moteur}}
 +
* Pour le support, nous avons utilisé des pièces du {{pl|328|kit MakerBeam}}
 +
* Une {{pl|311|alimentation 5V externe}} (avec le 5V injecté directement sur le 5V de l'Arduino).
  
Pour exemple, je voudrais faire sonner un gong toutes les 10 secondes sur la première alarme uniquement.
+
=== Code ===
  
Pour réaliser ce gong, il sera nécessaire d'utiliser un servo moteur.
+
{{download-box|Code exemple de la clochette sur Github|https://github.com/mchobby/Mon-Reveil-1/blob/master/Exemples/clochette.ino}}
  
 
Premièrement, il sera nécessaire d'ajouter dans l'entête :
 
Premièrement, il sera nécessaire d'ajouter dans l'entête :
Ligne 110 : Ligne 204 :
 
...  
 
...  
  
// ### HACK ###
+
// ### ZONE HACK ###
// Ajouter vos variables hack
 
// Exemple : GONG
 
  
// Ajouter la bibliothèque
+
// -- Clochette --
#include <Servo.h>
+
#include <Servo.h>         // Ajouter la bibliothèque
 
+
#define SERVO_MOTEUR  6    // Définit la broche du servo moteur du gong
// Définit la broche du servo moteur du gong
+
Servo monServo;            // Initialisation du servo
#define SERVO_MOTEUR  6
+
unsigned long moteurTempsAvant = 0 ; // Délai
 
+
int sens = -1;              // Sens de rotation
// Initialisation du servo
 
Servo monServo;
 
unsigned long moteurTempsAvant = 0 ;
 
  
 
...
 
...
Ligne 132 : Ligne 221 :
 
   ...  
 
   ...  
  
   // Exemple SERVO
+
   // ### ZONE HACK ###
   monServo.attach( SERVO_MOTEUR );  
+
  // Activer le servo
 
+
   monServo.attach( SERVO_MOTEUR );  
   // Le mettre à l'angle zéro
+
   monServo.write( 0 );
+
   // Position de base du servo de base
 
+
   monServo.write( 1 );
   ...
+
  // laisser au servo le temps de se positionner
 +
  delay( 500 );
 +
 
 +
   // Désactiver l'asservissement du servo
 +
  // pour qu'il ne fasse plus de bruit.
 +
  monServo.detach();
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Dans les différentes phases, on va définir que uniquement l'alarme 1 possède un gong et les autres possèdent la mélodie.
+
Dans les différentes phases, seul l'alarme 1 (alarmPos=0) active la sonnette et les autres alarmes activent la mélodie.
  
 
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
Ligne 149 : Ligne 243 :
 
  */
 
  */
 
void alarmeStart( int alarmePos ){
 
void alarmeStart( int alarmePos ){
   // Hack moteur
+
   // Hack  
 
   if( alarmePos == 0)
 
   if( alarmePos == 0)
 
     activerMoteur();
 
     activerMoteur();
Ligne 158 : Ligne 252 :
  
 
/*
 
/*
  * Pendant que l'alarme sonne, répéter une étape
+
  * Pendant que l'alarme sonne:
 +
* balancer la clochette -OU- jouer un morceau de la mélodie
 
  */
 
  */
 
void alarmePulse( int alarmePos ){
 
void alarmePulse( int alarmePos ){
Ligne 164 : Ligne 259 :
 
   if( alarmePos == 0)
 
   if( alarmePos == 0)
 
     jouerMoteur();
 
     jouerMoteur();
   // Sonnerie
+
    
 
   else  
 
   else  
 +
    // Sonnerie
 
     jouerMelodie();
 
     jouerMelodie();
 
}
 
}
Ligne 182 : Ligne 278 :
 
</syntaxhighlight>
 
</syntaxhighlight>
  
* '''activerMoteur();''' dans cette fonction, il faudrait remettre le servo à l'angle zéro, au cas ou il n'est pas encore définit à cette position.
+
* '''activerMoteur();''' dans cette fonction, il remettre le servo à l'angle zéro, au cas ou il n'est pas encore à cette position.
* '''jouerMoteur();''' dans cette fonction, il faudrait changer la position du servo moteur de façon à faire sonner le gong.
+
* '''jouerMoteur();''' dans cette fonction, il faut changer la position du servo moteur régulièrement de façon à faire sonner la clochette (ou un gong).
* '''stopMoteur();''' dans cette fonction, il faudrait remettre le servo à l'angle zéro.
+
* '''stopMoteur();''' dans cette fonction, remettre le servo à l'angle zéro.
  
 
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
Ligne 193 : Ligne 289 :
 
     // Remise à zéro du moteur
 
     // Remise à zéro du moteur
 
     moteurTempsAvant = 0;
 
     moteurTempsAvant = 0;
     monServo.write( 0 );
+
    // Activation du servo
 +
     monServo.attach( SERVO_MOTEUR );  
 
}
 
}
 
void jouerMoteur(){
 
void jouerMoteur(){
   unsigned estIlTemps = effectuerAction( moteurTempsAvant, 1500 );
+
  // Tous les 0.1 secondes effectuer
 +
   unsigned estIlTemps = effectuerAction( moteurTempsAvant, 10 );
 
    
 
    
  // Est-il temps de faire sonner le GONG ???
 
 
   if( estIlTemps != 0 ){
 
   if( estIlTemps != 0 ){
 +
    // Changer quand a été effectué l'action précédente
 
     moteurTempsAvant = estIlTemps;
 
     moteurTempsAvant = estIlTemps;
      
+
 
     // Bouger le servo de 90°
+
    // Inverser le sens de rotation du servo
     monServo.write( 90 );
+
     sens *= -1;
 +
     // Bouger le servo entre 1° à 61°
 +
     monServo.write( 31 + (sens*30) );  
 
   }
 
   }
  else
 
    monServo.write( 0 );
 
 
}
 
}
 +
 
void stopMoteur(){
 
void stopMoteur(){
   monServo.write( 0 );
+
   monServo.write( 1 );
 +
  delay( 300 );
 +
  monServo.detach();
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
  
La fonction '''effectuerAction''', ci dessous, permet de répèter une tâche tous les x temps.
+
La fonction '''effectuerAction''', ci dessous, permet de répéter une tâche tous les x temps.
  
 
Cette fonction peut être réutiliser dans d'autres cas.
 
Cette fonction peut être réutiliser dans d'autres cas.
Ligne 222 : Ligne 323 :
 
  *  
 
  *  
 
  * ARGUMENTS
 
  * ARGUMENTS
  * tempsAvant est temps précédent en milisecondes
+
  * tempsAvant est temps précédent en millisecondes
 
  * dureeAttente est le temps avant de relancer l'exécution
 
  * dureeAttente est le temps avant de relancer l'exécution
 
  *  
 
  *  
Ligne 239 : Ligne 340 :
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 +
== Activer une peluche qui danse et chante ==
 +
 +
Pour interagir avec la peluche, il sera nécessaire de posséder une peluche et deux relais (dans notre cas).
 +
 +
{{#Widget:Iframe
 +
|url=https://www.youtube.com/embed/L64j_Xo0hzs
 +
|width=420
 +
|height=315
 +
|border=0
 +
}}
 +
 +
==== Choix du matériel ====
 +
* Pour la peluche, nous l'avons trouvé dans le commerce (elle se nomme "What Does The Fox Say")
 +
* Pour les relais, nous utilisons {{pl|507|un module bi-relais Pololu}}.
 +
 +
==== Démontage/montage de la peluche ====
 +
 +
Nous avons démonté le pied où se trouvait l'ensemble des connectiques à hacker.
 +
 +
Les visses (en rouge) sont a retirer pour retirer le couvercle du pied. En bleu, se sont celle pour retirer l'interrupteur.
 +
 +
[[Fichier:Mon-Reveil-100.jpg|640px]]<small><br />''Cliquez pour agrandir''</small>
 +
 +
Hacks réalisés
 +
 +
[[Fichier:Mon-Reveil-101.jpg|640px]]<small><br />''Cliquez pour agrandir''</small>
 +
 +
Sortie des fils quand tout est fini
 +
 +
[[Fichier:Mon-Reveil-103.jpg|640px]]<small><br />''Cliquez pour agrandir''</small>
 +
 +
Connectique sur le {{pl|507|module bi-relais de Pololu}}.
 +
 +
[[Fichier:Mon-Reveil-102.jpg|640px]]<small><br />''Cliquez pour agrandir''</small>
 +
 +
L'entrée IN1 du relais est utilisé pour activer l'interrupteur d'alimentation.
 +
 +
L'entrée IN2 du relais est utilisé pour activer la séquence musicale.
 +
 +
Pour activer la peluche:
 +
# Activer IN1 pour activer l'alimentation
 +
# Activer IN2 pendant 1 seconde pour activer la séquence musicale.
 +
 +
Pour d'activer la peluche:
 +
# S'assurer que la sortie IN2 soit désactivée (ce qui est normalement le cas)
 +
# Désactiver la sortie IN1 pour désactiver la peluche.
 +
 +
==== Code ====
 +
 +
{{download-box|Code exemple de la peluche sur Github|https://github.com/mchobby/Mon-Reveil-1/blob/master/Exemples/renard.ino}}
 +
 +
Premièrement, il sera nécessaire d'ajouter dans l'entête :
 +
<syntaxhighlight lang="c">
 +
...
 +
 +
// ### ZONE HACK ###
 +
 +
// -- Renard --
 +
// Pin 6
 +
#define RENARD_ACTIVE 6
 +
// Pin 12
 +
#define RENARD_JOUE  12
 +
 +
...
 +
</syntaxhighlight>
 +
 +
Dans la fonction setup :
 +
<syntaxhighlight lang="c">
 +
  ...
 +
 
 +
  // ### ZONE HACK ###
 +
 +
  // Initialisation des entrées des relais
 +
  pinMode( RENARD_ACTIVE, OUTPUT );
 +
  pinMode( RENARD_JOUE, OUTPUT );
 +
</syntaxhighlight>
 +
 +
Dans les différentes phases, on va définir que uniquement l'alarme 1 possède l'activation de la peluche et les autres possèdent la mélodie.
 +
 +
<syntaxhighlight lang="c">
 +
  ...
 +
 +
  /*
 +
  * Alarme qui commence à sonner
 +
  */
 +
  void alarmeStart( int alarmePos ){
 +
    if( alarmePos == 0 )
 +
      activerRenard();
 +
    else
 +
      activerMelodie();
 +
  }
 +
 +
  /*
 +
  * Pendant que l'alarme sonne, répéter une étape
 +
  */
 +
  void alarmePulse( int alarmePos ){
 +
    // Renard
 +
    if( alarmePos == 0 ){}
 +
    // Mélodie
 +
    else
 +
      jouerMelodie();
 +
  }
 +
 +
  /*
 +
  * Alarme qui cesse de sonner
 +
  */
 +
  void alarmeStop(int alarmePos){
 +
      arreterMelodie();
 +
      stopRenard();
 +
  }
 +
 +
  ...
 +
</syntaxhighlight>
 +
 +
* '''activerRenard();''' dans cette fonction, il faudrait activer le relais RENARD_ACTIVE et simuler la pression d'un bouton en laissant pendant 1 seconde le relais RENARD_JOUE actif.
 +
* '''stopRenard();''' dans cette fonction, il faudrait arrêter le relais RENARD_ACTIVE.
 +
 +
<syntaxhighlight lang="c">
 +
void activerRenard(){
 +
  // Activer le renard
 +
  digitalWrite( RENARD_ACTIVE, HIGH );
 +
 
 +
  // Faire jouer le renard
 +
  digitalWrite( RENARD_JOUE, HIGH );
 +
  delay( 1000 );
 +
  digitalWrite( RENARD_JOUE, LOW );
 +
}
 +
 +
void stopRenard(){
 +
  digitalWrite( RENARD_ACTIVE, LOW );
 +
}
 +
</syntaxhighlight>
 +
 +
== Activer un relais ==
 +
 +
Pour activer un matériel électronique, il sera nécessaire d'utiliser un relais.
 +
Dans notre cas, nous allons utiliser un {{pl|1289|Power Switch Tail}} pour allumer une lampe.
 +
 +
{{#Widget:Iframe
 +
|url=https://www.youtube.com/embed/pyNeF3LREjo
 +
|width=420
 +
|height=315
 +
|border=0
 +
}}
 +
 +
=== Choix du matériel ===
 +
 +
* Pour le relais, nous avons choisis le {{pl|1289|Power Switch Tail}}, qui est un relais protégé par un boîtier. Ce relais est alimenté directement par le secteur. Ensuite, le circuit base tension est isolé du circuit haute tension.
 +
 +
[[Fichier:Mon-Reveil-Hack-10a.png|480px]]
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
| align="center" | PowerSwitchTail
 +
| align="center" | Arduino
 +
|- style="font-size: 90%"
 +
| align="left" | 1: +IN
 +
| align="left" | 12
 +
|- style="font-size: 90%"
 +
| align="left" | 2: -IN
 +
| align="left" | GND (masse)
 +
|}
 +
 +
=== Code ===
 +
 +
{{download-box|Code exemple du relais sur Github|https://github.com/mchobby/Mon-Reveil-1/blob/master/Exemples/relai.ino}}
 +
 +
Premièrement, il sera nécessaire d'ajouter la broche utilisé (la N° 12) pour commander le PowerSwitchTail.
 +
 +
Faites la déclaration suivante dans l'entête du programme:
 +
<syntaxhighlight lang="c">
 +
...
 +
 +
// ### ZONE HACK ###
 +
 +
// -- Relais --
 +
#define RELAIS  12   
 +
 +
...
 +
</syntaxhighlight>
 +
 +
Dans la fonction setup :
 +
<syntaxhighlight lang="c">
 +
void setup() {
 +
  ...
 +
 +
  // ### ZONE HACK ###
 +
 +
  // Initialiser le relais
 +
  pinMode( RELAIS , OUTPUT );
 +
}
 +
</syntaxhighlight>
 +
 +
Dans les différentes phases, on va définir que uniquement l'alarme 1 possède l'activation du relais et les autres possèdent la mélodie.
 +
 +
<syntaxhighlight lang="c">
 +
/*
 +
* Alarme qui commence à sonner
 +
*/
 +
void alarmeStart( int alarmePos ){
 +
  // Hack relais
 +
  if( alarmePos == 0)
 +
    activerRelais();
 +
  // Sonnerie
 +
  else
 +
    activerMelodie();
 +
}
 +
 +
/*
 +
* Pendant que l'alarme sonne, répéter une étape
 +
*/
 +
void alarmePulse( int alarmePos ){
 +
  // Hack relais
 +
  if( alarmePos == 0){}
 +
  // Sonnerie
 +
  else
 +
    jouerMelodie();
 +
}
 +
 +
/*
 +
* Alarme qui cesse de sonner
 +
*/
 +
void alarmeStop( int alarmePos ){
 +
  // Hack relais
 +
  if( alarmePos == 0)
 +
    stopRelais();
 +
  // Sonnerie
 +
  else
 +
    arreterMelodie();
 +
}
 +
</syntaxhighlight>
 +
 +
* '''activerRelais();''' dans cette fonction, il faudrait simplement activer le relais.
 +
* '''stopRelais();''' dans cette fonction, il faudrait simplement stopper le relais.
 +
 +
<syntaxhighlight lang="c">
 +
void activerRelais(){
 +
  digitalWrite( RELAIS , HIGH );
 +
}
 +
void stopRelais(){
 +
  digitalWrite( RELAIS , LOW );
 +
}
 +
</syntaxhighlight>
 +
 +
== La boîte à musique ==
 +
 +
Pour jouer la mélodie de la boîte à musique, il sera nécessaire d'utiliser un servo moteur, un régulateur pwm et d'utiliser deux entrées de l'arduino, dont une en PWM.
 +
 +
Voir la [https://youtu.be/-50OEOMNhro vidéo sur YouTube].
 +
 +
{{#Widget:Iframe
 +
|url=https://www.youtube.com/embed/-50OEOMNhro
 +
|width=420
 +
|height=315
 +
|border=0
 +
}}
 +
 +
=== Choix du matériel ===
 +
* Nous avons trouvé la boîte à musique dans le commerce (site [http://fridolin.de/ officiel]).
 +
* {{pl|155|Pont-H L293D}} permettant de commander un moteur à partir d'un Arduino. L'utilisation d'un signal PWM sur une broche Arduino permettra de contrôler plus finement la vitesse du moteur. Voir aussi le [[Pont-H L293D|tutoriel sur le pont-H L293]]
 +
* {{pl|438|Un mini moteur avec boîte de réduction}} disponible chez MC Hobby.
 +
 +
=== Branchement ===
 +
 +
Pour brancher le moteur avec le régulateur :
 +
 +
Petit erratum: La broche Enable est branchée sur Arduino #12 (et non pas #2 comme libellé sur le breadboard).
 +
 +
[[Fichier:Mon-Reveil-Hack-10b.jpg|480px]]
 +
 +
Pour plus d'informations, visitez [[Pont-H L293D|tutoriel L293D sur notre wiki]].
 +
 +
=== Code ===
 +
 +
{{download-box|Code exemple de la boîte à musique sur Github|https://github.com/mchobby/Mon-Reveil-1/blob/master/Exemples/boite-a-musique.ino}}
 +
 +
Premièrement, il sera nécessaire d'ajouter dans l'entête :
 +
<syntaxhighlight lang="c">
 +
...
 +
 +
// ### ZONE HACK ###
 +
 +
// -- Boite à musique --
 +
#define BOITE_ENABLE  11
 +
#define BOITE_INPUT  6 
 +
 +
...
 +
</syntaxhighlight>
 +
 +
Dans la fonction setup :
 +
<syntaxhighlight lang="c">
 +
void setup() {
 +
  ...
 +
 +
  // ### ZONE HACK ###
 +
  pinMode( BOITE_ENABLE, OUTPUT );
 +
  pinMode( BOITE_INPUT, OUTPUT );
 +
  digitalWrite( BOITE_ENABLE , LOW );
 +
 +
}
 +
</syntaxhighlight>
 +
 +
Dans les différentes phases, on va définir que uniquement l'alarme 1 joue la musique de la boîte et les autres alarmes jouent la mélodie.
 +
 +
<syntaxhighlight lang="c">
 +
/*
 +
* Alarme qui commence à sonner
 +
*/
 +
void alarmeStart( int alarmePos ){
 +
  // Boite à musique
 +
  if( alarmePos == 0)
 +
    activerBoite();
 +
  // Sonnerie
 +
  else
 +
    activerMelodie();
 +
}
 +
 +
/*
 +
* Pendant que l'alarme sonne, répéter une étape
 +
*/
 +
void alarmePulse( int alarmePos ){
 +
  // Boite à musique
 +
  if( alarmePos == 0)
 +
    jouerBoite();
 +
  // Sonnerie
 +
  else
 +
    jouerMelodie();
 +
}
 +
 +
/*
 +
* Alarme qui cesse de sonner
 +
*/
 +
void alarmeStop( int alarmePos ){
 +
  // Boite à musique
 +
  if( alarmePos == 0)
 +
    stopBoite();
 +
  // Sonnerie
 +
  else
 +
    arreterMelodie();
 +
}
 +
</syntaxhighlight>
 +
 +
* '''activerBoite();''' dans cette fonction, il faudrait simplement activer l'entrée enable 2.
 +
* '''jouerBoite();''' dans cette fonction, on définira la vitesse (en pwm) du moteur.
 +
* '''stopBoite();''' dans cette fonction, il faudrait simplement désactiver l'entrée enable 2.
 +
<syntaxhighlight lang="c">
 +
void activerBoite(){
 +
  digitalWrite( BOITE_ENABLE , HIGH );
 +
}
 +
void jouerBoite(){
 +
  // La vitesse en pwm, dans notre cas 220, peut varier de 0 à 255
 +
  analogWrite( BOITE_INPUT , 220);
 +
}
 +
void stopBoite(){
 +
  digitalWrite( BOITE_ENABLE , LOW );
 +
}
 +
</syntaxhighlight>
  
 
== Idées de hacks possibles ==
 
== Idées de hacks possibles ==

Version actuelle datée du 26 avril 2018 à 12:19


MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.

Introduction

Il est possible de changer le code facilement de manière à optimiser le réveil à vos besoins.

L'alarme n° 1 est tout spécialement destiné au hacking (personnalisation) du réveil.

Vous pourrez modifier la mélodie et ajouter un hack pour faire sonner un gong, une clochette, etc.

Le code du réveil est disponible, vous pourrez donc le modifier à votre guise.

Pour les Hack faisant intervenir du matériel complémentaire, nous avons prévu un connecteur complémentaire à l'arrière du réveil.

Celui-ci est raccordé sur différentes entrées/sorties encore libre sur notre Arduino.

Mon-Reveil-83a.jpg

Mélodies

Changer de mélodie

Il est possible de changer simplement de mélodie en changant le nom de celle-ci dant la variable MELODIE.

L'ensemble des mélodies sont définies dans le fichier melodie.h.

Pour modifier la mélodie, il faut changer la ligne portant la mention const int MELODIE[][2]

// --- Exemple ---
// Changer MARIO
const int MELODIE[][ 2 ] = MARIO;

Ou encore:

// Par AXEL_F
const int MELODIE[][ 2 ] = AXEL_F;

Créer une mélodie

Il est possible d'ajouter facilement une mélodie à la bibliothèque melodie.h.

Je vous invite à lire la bibliothèque de manière à comprendre son fonctionnement et si vous ne comprenez pas tout, je vous invite à lire le contenu suivant.

A quoi sert l'antislash ?

Comme vous pouvez voir dans la bibliothèque, chacune des mélodies contiennent un antislash à la fin de chaques lignes de code (excepté la dernière) :

#define ALARM1{  \
  {NOTE_A4,  20},\
  {NOTE_C4,  20}}

L'antislash (\) sert de remise à la ligne pour le define et son contenu. Si cet antislash n'est pas mit, il sera impossible de compiler le code.

Si vous ne désirez pas mettre d'antislash, il vous sera obligatoire d'écrire tout le contenu du define en une ligne de code.

Pour des raisons de mise en page, nous avons préféré mettre l'antislash à fin de chaques lignes de façon à rendre le code plus lisible.

Que contiennent les define ?

Le define est un tableau 2 dimensions contenant des nombres entiers (int).

#define ALARM1{  \
  {NOTE_A4,  20},\
  {NOTE_C4,  20}}
  • La première colonne contient les notes a jouer
    • La note (exemple: NOTE_A4) fait référence à un nombre entier se trouvant dans la bibliothèque pitches.h. Cette bibliothèque provient du GitHub de nseidle.
  • La deuxièmre colonne contient la durée de chaques notes en milisecondes

Comment convertir une musique en mélodie ?

Malheureusement, nous avons pas trouvé un outil capable de convertir une musique (entière) en mélodie polyphonique.

Les 3 fonctions de contrôle d'alarmes

Premièrement, il est nécessaire de comprendre les 3 fonctions principales. Chacune de ces fonctions est appelée à chacune des phases des alarmes.

Chaque fois qu'une alarme change de phase, elle envoie comme argument l'index identifiant l'alarme (dans notre cas de 0 à 3, 0 étant la première alarme).

Il est donc facile de personnaliser chacune des alarmes. L'alarme 1 (index = 0) étant libre à la personnalisation, les 3 autres alarmes jouent la mélodie sur le piezo buzzer.

Voici les 3 fonctions:

/*
 * Fonction appelée lorsque l'Alarme doit commencer à sonner.
 */
void alarmeStart( int alarmePos ){
  activerMelodie();
}

/*
 * Fonction appelée répétitivement pendant que l'alarme sonne.
 * Cette fonction permet de réaliser des opérations à intervalle régulier.
*/
void alarmePulse( int alarmePos ){
  jouerMelodie();
}

/*
 * Fonction appelée lorsque l'alarme doit cesser de fonctionner
 */
void alarmeStop( int alarmePos ){
  arreterMelodie();
}

En résumé:

  • alarmeStart est appelée quand l'alarme doit démarrer.
  • alarmePulse est appelée répétitivement pendant que l'alarme est active.
  • alarmeStop est appelée quand une alarme doit s'arrête.


Hack d'alimentations

Parmi les hacks, nous utilisons un servo moteur (mais cela serait également vrai avec un solénoïde).

Un servo moteur consomme plus de courant que le régulateur de tension d'un Arduino peut délivrer (350mA).

Il est donc nécessaire:

  • soit d'utiliser une alimentation supplémentaire pour le servo moteur.
  • soit d'alimenter directement la carte Arduino en 5V.

Nous vous proposons ici plusieurs montages possibles, à vous de choisir celui qui vous convient le mieux.

Voici le schéma simplifié des connectiques des alimentations de l'Arduino :

Mon-Reveil-104.jpg
Cliquez pour agrandir

Pont entre 5V et Vin

Ce moyen permet de contourner le régulateur de tension au niveau de l'entrée Jack et donc de fournir directement le courant nécessaire au circuit 5V de votre Arduino.

Mon-Reveil-106.jpg
Cliquez pour agrandir

  • Avantages
    • Propre niveau du câblages.
    • Un seul fil nécessaire.
    • Une seule alimentation 5V nécessaire (directement sur le connecteur Jack d'Arduino).
  • Inconvénients
    • Risque d'endommager les composants de l'Arduino si vous appliquez une tension supérieur à 5V.
    • Le circuit ne peut être alimenté que par une seule alimentation à la fois! Hors de question de brancher l'USB et l'alimentation 5V en même temps... au risque de détériorer votre Arduino.

Alimenter le moteur avec une seconde alimentation.

Mon-Reveil-108.jpg
Cliquez pour agrandir

  • Avantages
    • Ne risque pas d'endommager votre Arduino (si vous vous tromper de tension d'alimentation).
    • Les plages des tensions pour alimenter le moteur se trouvent entre 4.8v et 6v.
  • Inconvénients
    • Nécessite une deuxième alimentation.
    • Nécessite de réaliser des connexions supplémentaires.

Alimenter l'arduino en 5V directement

Mon-Reveil-109.jpg
Cliquez pour agrandir

  • Avantages
    • L'ensemble de l'Arduino possède une entrée 5v avec plus d'intensité
  • Inconvénients
    • Nécessite une alimentation de 5V. Toute tension supérieure détruira votre Arduino.
    • Le circuit ne peut être alimenter que par une seule source d'alimentation ! Hors de question de brancher votre Arduino en USB en meêm temps que l'alimentation externe.

Faire sonner une clochette

Pour faire sonner une clochette, il sera nécessaire d'utiliser un servo moteur, une clochette, une alimentation supplémentaire et un support/pied.

Dans notre cas de figure, nous avons opté pour un pontage Vin -> 5V (décrit au point précédent) avec l'utilisation d'une alimentation externe 5V.

{{#Widget:Iframe |url=https://www.youtube.com/embed/N0VNmWjmfHs |width=420 |height=315 |border=0 }}

Choix du matériel

  • Pour la clochette, nous avons choisi une clochette pour chats.
  • Pour le servo moteur, nous avons pris un micro servo moteur
  • Pour le support, nous avons utilisé des pièces du kit MakerBeam
  • Une alimentation 5V externe (avec le 5V injecté directement sur le 5V de l'Arduino).

Code

Download-icon.pngCode exemple de la clochette sur Github

Premièrement, il sera nécessaire d'ajouter dans l'entête :

... 

// ### ZONE HACK ###

// -- Clochette --
#include <Servo.h>          // Ajouter la bibliothèque
#define SERVO_MOTEUR   6    // Définit la broche du servo moteur du gong
Servo monServo;             // Initialisation du servo
unsigned long moteurTempsAvant = 0 ; // Délai
int sens = -1;              // Sens de rotation

...

Dans la fonction setup :

void setup() {
  ... 

  // ### ZONE HACK ###
  // Activer le servo
  monServo.attach( SERVO_MOTEUR ); 
 
  // Position de base du servo de base
  monServo.write( 1 );
  // laisser au servo le temps de se positionner
  delay( 500 );
  
  // Désactiver l'asservissement du servo 
  // pour qu'il ne fasse plus de bruit.
  monServo.detach();
}

Dans les différentes phases, seul l'alarme 1 (alarmPos=0) active la sonnette et les autres alarmes activent la mélodie.

/*
 * Alarme qui commence à sonner
 */
void alarmeStart( int alarmePos ){
  // Hack 
  if( alarmePos == 0)
    activerMoteur();
  // Sonnerie
  else 
    activerMelodie();
}

/*
 * Pendant que l'alarme sonne:
 * balancer la clochette -OU- jouer un morceau de la mélodie
 */
void alarmePulse( int alarmePos ){
  // Hack moteur
  if( alarmePos == 0)
    jouerMoteur();
  
  else 
    // Sonnerie
    jouerMelodie();
}

/*
 * Alarme qui cesse de sonner
 */
void alarmeStop( int alarmePos ){
  // Hack moteur
  if( alarmePos == 0)
    stopMoteur();
  // Sonnerie
  else 
    arreterMelodie();
}
  • activerMoteur(); dans cette fonction, il remettre le servo à l'angle zéro, au cas ou il n'est pas encore à cette position.
  • jouerMoteur(); dans cette fonction, il faut changer la position du servo moteur régulièrement de façon à faire sonner la clochette (ou un gong).
  • stopMoteur(); dans cette fonction, remettre le servo à l'angle zéro.
/*
 * Exemple servo moteur
 */
void activerMoteur(){
    // Remise à zéro du moteur
    moteurTempsAvant = 0;
    // Activation du servo
    monServo.attach( SERVO_MOTEUR ); 
}
void jouerMoteur(){
  // Tous les 0.1 secondes effectuer
  unsigned estIlTemps = effectuerAction( moteurTempsAvant, 10 );
  
  if( estIlTemps != 0 ){
    // Changer quand a été effectué l'action précédente
    moteurTempsAvant = estIlTemps;

    // Inverser le sens de rotation du servo
    sens *= -1;
    // Bouger le servo entre 1° à 61°
    monServo.write( 31 + (sens*30) );    
  }
}

void stopMoteur(){
  monServo.write( 1 );
  delay( 300 );
  monServo.detach();
}

La fonction effectuerAction, ci dessous, permet de répéter une tâche tous les x temps.

Cette fonction peut être réutiliser dans d'autres cas.

/*
 * Vérifier si c'est le moment d'effectuer l'action
 * 
 * ARGUMENTS
 * tempsAvant est temps précédent en millisecondes
 * dureeAttente est le temps avant de relancer l'exécution
 * 
 * RETURN
 * 0 Signifie pas maintenant
 * x valeur (unsigned long) : effectuer l'action + changer le tempsAvant (définie dans l'entête du code)
 */
unsigned long effectuerAction( unsigned long tempsAvant, int dureeAttente ){
  unsigned long maintenant = millis();

  if( maintenant - tempsAvant >= dureeAttente )
    return maintenant;
    
  return 0;
}

Activer une peluche qui danse et chante

Pour interagir avec la peluche, il sera nécessaire de posséder une peluche et deux relais (dans notre cas).

{{#Widget:Iframe |url=https://www.youtube.com/embed/L64j_Xo0hzs |width=420 |height=315 |border=0 }}

Choix du matériel

  • Pour la peluche, nous l'avons trouvé dans le commerce (elle se nomme "What Does The Fox Say")
  • Pour les relais, nous utilisons un module bi-relais Pololu.

Démontage/montage de la peluche

Nous avons démonté le pied où se trouvait l'ensemble des connectiques à hacker.

Les visses (en rouge) sont a retirer pour retirer le couvercle du pied. En bleu, se sont celle pour retirer l'interrupteur.

Mon-Reveil-100.jpg
Cliquez pour agrandir

Hacks réalisés

Mon-Reveil-101.jpg
Cliquez pour agrandir

Sortie des fils quand tout est fini

Mon-Reveil-103.jpg
Cliquez pour agrandir

Connectique sur le module bi-relais de Pololu.

Mon-Reveil-102.jpg
Cliquez pour agrandir

L'entrée IN1 du relais est utilisé pour activer l'interrupteur d'alimentation.

L'entrée IN2 du relais est utilisé pour activer la séquence musicale.

Pour activer la peluche:

  1. Activer IN1 pour activer l'alimentation
  2. Activer IN2 pendant 1 seconde pour activer la séquence musicale.

Pour d'activer la peluche:

  1. S'assurer que la sortie IN2 soit désactivée (ce qui est normalement le cas)
  2. Désactiver la sortie IN1 pour désactiver la peluche.

Code

Download-icon.pngCode exemple de la peluche sur Github

Premièrement, il sera nécessaire d'ajouter dans l'entête :

... 

// ### ZONE HACK ###

// -- Renard --
// Pin 6
#define RENARD_ACTIVE 6
// Pin 12
#define RENARD_JOUE   12

...

Dans la fonction setup :

  ...
  
  // ### ZONE HACK ###

  // Initialisation des entrées des relais
  pinMode( RENARD_ACTIVE, OUTPUT );
  pinMode( RENARD_JOUE, OUTPUT );

Dans les différentes phases, on va définir que uniquement l'alarme 1 possède l'activation de la peluche et les autres possèdent la mélodie.

  ...

  /*
   * Alarme qui commence à sonner
   */
  void alarmeStart( int alarmePos ){
    if( alarmePos == 0 )
      activerRenard();
    else
      activerMelodie();
  }

  /*
   * Pendant que l'alarme sonne, répéter une étape
   */
  void alarmePulse( int alarmePos ){
    // Renard
    if( alarmePos == 0 ){}
    // Mélodie
    else
      jouerMelodie();
  }

  /*
   * Alarme qui cesse de sonner
   */
  void alarmeStop(int alarmePos){
      arreterMelodie();
      stopRenard();
  }

  ...
  • activerRenard(); dans cette fonction, il faudrait activer le relais RENARD_ACTIVE et simuler la pression d'un bouton en laissant pendant 1 seconde le relais RENARD_JOUE actif.
  • stopRenard(); dans cette fonction, il faudrait arrêter le relais RENARD_ACTIVE.
void activerRenard(){
  // Activer le renard
  digitalWrite( RENARD_ACTIVE, HIGH );
  
  // Faire jouer le renard
  digitalWrite( RENARD_JOUE, HIGH );
  delay( 1000 );
  digitalWrite( RENARD_JOUE, LOW );
}

void stopRenard(){
  digitalWrite( RENARD_ACTIVE, LOW );
}

Activer un relais

Pour activer un matériel électronique, il sera nécessaire d'utiliser un relais. Dans notre cas, nous allons utiliser un Power Switch Tail pour allumer une lampe.

{{#Widget:Iframe |url=https://www.youtube.com/embed/pyNeF3LREjo |width=420 |height=315 |border=0 }}

Choix du matériel

  • Pour le relais, nous avons choisis le Power Switch Tail, qui est un relais protégé par un boîtier. Ce relais est alimenté directement par le secteur. Ensuite, le circuit base tension est isolé du circuit haute tension.

Mon-Reveil-Hack-10a.png

PowerSwitchTail Arduino
1: +IN 12
2: -IN GND (masse)

Code

Download-icon.pngCode exemple du relais sur Github

Premièrement, il sera nécessaire d'ajouter la broche utilisé (la N° 12) pour commander le PowerSwitchTail.

Faites la déclaration suivante dans l'entête du programme:

... 

// ### ZONE HACK ###

// -- Relais --
#define RELAIS   12    

...

Dans la fonction setup :

void setup() {
  ... 

  // ### ZONE HACK ###

  // Initialiser le relais
  pinMode( RELAIS , OUTPUT );
}

Dans les différentes phases, on va définir que uniquement l'alarme 1 possède l'activation du relais et les autres possèdent la mélodie.

/*
 * Alarme qui commence à sonner
 */
void alarmeStart( int alarmePos ){
  // Hack relais
  if( alarmePos == 0)
    activerRelais();
  // Sonnerie
  else 
    activerMelodie();
}

/*
 * Pendant que l'alarme sonne, répéter une étape
 */
void alarmePulse( int alarmePos ){
  // Hack relais
  if( alarmePos == 0){}
  // Sonnerie
  else 
    jouerMelodie();
}

/*
 * Alarme qui cesse de sonner
 */
void alarmeStop( int alarmePos ){
  // Hack relais
  if( alarmePos == 0)
    stopRelais();
  // Sonnerie
  else 
    arreterMelodie();
}
  • activerRelais(); dans cette fonction, il faudrait simplement activer le relais.
  • stopRelais(); dans cette fonction, il faudrait simplement stopper le relais.
void activerRelais(){
  digitalWrite( RELAIS , HIGH );
}
void stopRelais(){
  digitalWrite( RELAIS , LOW );
}

La boîte à musique

Pour jouer la mélodie de la boîte à musique, il sera nécessaire d'utiliser un servo moteur, un régulateur pwm et d'utiliser deux entrées de l'arduino, dont une en PWM.

Voir la vidéo sur YouTube.

{{#Widget:Iframe |url=https://www.youtube.com/embed/-50OEOMNhro |width=420 |height=315 |border=0 }}

Choix du matériel

Branchement

Pour brancher le moteur avec le régulateur :

Petit erratum: La broche Enable est branchée sur Arduino #12 (et non pas #2 comme libellé sur le breadboard).

Mon-Reveil-Hack-10b.jpg

Pour plus d'informations, visitez tutoriel L293D sur notre wiki.

Code

Download-icon.pngCode exemple de la boîte à musique sur Github

Premièrement, il sera nécessaire d'ajouter dans l'entête :

... 

// ### ZONE HACK ###

// -- Boite à musique --
#define BOITE_ENABLE  11
#define BOITE_INPUT   6  

...

Dans la fonction setup :

void setup() {
  ... 

  // ### ZONE HACK ###
  pinMode( BOITE_ENABLE, OUTPUT );
  pinMode( BOITE_INPUT, OUTPUT );
  digitalWrite( BOITE_ENABLE , LOW );

}

Dans les différentes phases, on va définir que uniquement l'alarme 1 joue la musique de la boîte et les autres alarmes jouent la mélodie.

/*
 * Alarme qui commence à sonner
 */
void alarmeStart( int alarmePos ){
  // Boite à musique
  if( alarmePos == 0)
    activerBoite();
  // Sonnerie
  else 
    activerMelodie();
}

/*
 * Pendant que l'alarme sonne, répéter une étape
 */
void alarmePulse( int alarmePos ){
  // Boite à musique
  if( alarmePos == 0)
    jouerBoite();
  // Sonnerie
  else 
    jouerMelodie();
}

/*
 * Alarme qui cesse de sonner
 */
void alarmeStop( int alarmePos ){
  // Boite à musique
  if( alarmePos == 0)
    stopBoite();
  // Sonnerie
  else 
    arreterMelodie();
}
  • activerBoite(); dans cette fonction, il faudrait simplement activer l'entrée enable 2.
  • jouerBoite(); dans cette fonction, on définira la vitesse (en pwm) du moteur.
  • stopBoite(); dans cette fonction, il faudrait simplement désactiver l'entrée enable 2.
void activerBoite(){
  digitalWrite( BOITE_ENABLE , HIGH );
}
void jouerBoite(){
  // La vitesse en pwm, dans notre cas 220, peut varier de 0 à 255
  analogWrite( BOITE_INPUT , 220);
}
void stopBoite(){
  digitalWrite( BOITE_ENABLE , LOW );
}

Idées de hacks possibles

  • Couper l'écran après un certains temps et le rallumer avec le bouton snooze
  • Faire sonner un GONG
  • Faire sonner un audio FX
  • Faire tourner une main en mousse de façon à se giffler

Créé par Stefan pour MCHobby.be

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.