Modifications

Sauter à la navigation Sauter à la recherche
3 908 octets ajoutés ,  27 mars 2018 à 12:18
Ligne 101 : Ligne 101 :     
=== Faire sonner une clochette ===
 
=== Faire sonner une clochette ===
 +
 +
Pour faire sonner une clochette, il sera nécessaire d'utiliser un servo moteur, une clochette et un support/pied.
 +
 +
Choix du matériel :
 +
 +
* Pour la clochette, nous avons choisi une clochette pour chats.
 +
* Pour le servo moteur, nous avons pris un micro servo tower (disponible sur le [https://shop.mchobby.be/servo-moteurs/64-micro-servo-tower-pro-sg90-3232100000643.html shop])
 +
* Pour le support, nous avons utilisé des pièces du kit MakerBeam (disponible sur le [https://shop.mchobby.be/makerbeam/328-makerbeam-kit-de-demarrage-noir-anodise-3232100003286-makerbeam.html shop])
 +
 +
Premièrement, il sera nécessaire d'ajouter dans l'entête :
 +
<syntaxhighlight lang="c">
 +
...
 +
 +
// ### 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
 +
 +
...
 +
</syntaxhighlight>
 +
 +
Dans la fonction setup :
 +
<syntaxhighlight lang="c">
 +
void setup() {
 +
  ...
 +
 +
  // ### ZONE HACK ###
 +
  // Activer le servo
 +
  monServo.attach( SERVO_MOTEUR );
 +
 +
  // Position du servo de base
 +
  monServo.write( 1 );
 +
  delay( 500 );
 +
 
 +
  // Désactiver le servo
 +
  monServo.detach();
 +
}
 +
</syntaxhighlight>
 +
 +
Dans les différentes phases, on va définir que uniquement l'alarme 1 possède le réveil sonnette et les autres possèdent la mélodie.
 +
 +
<syntaxhighlight lang="c">
 +
/*
 +
* Alarme qui commence à sonner
 +
*/
 +
void alarmeStart( int alarmePos ){
 +
  // Hack
 +
  if( alarmePos == 0)
 +
    activerMoteur();
 +
  // Sonnerie
 +
  else
 +
    activerMelodie();
 +
}
 +
 +
/*
 +
* Pendant que l'alarme sonne, répéter une étape
 +
*/
 +
void alarmePulse( int alarmePos ){
 +
  // Hack moteur
 +
  if( alarmePos == 0)
 +
    jouerMoteur();
 +
  // Sonnerie
 +
  else
 +
    jouerMelodie();
 +
}
 +
 +
/*
 +
* Alarme qui cesse de sonner
 +
*/
 +
void alarmeStop( int alarmePos ){
 +
  // Hack moteur
 +
  if( alarmePos == 0)
 +
    stopMoteur();
 +
  // Sonnerie
 +
  else
 +
    arreterMelodie();
 +
}
 +
</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.
 +
* '''jouerMoteur();''' dans cette fonction, il faudrait changer la position du servo moteur de façon à faire sonner le gong.
 +
* '''stopMoteur();''' dans cette fonction, il faudrait remettre le servo à l'angle zéro.
 +
 +
<syntaxhighlight lang="c">
 +
/*
 +
* 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
 +
    sens *= -1;
 +
    // Bouger le servo de 1° à 46°
 +
    monServo.write( 31 + (sens*30) );   
 +
  }
 +
}
 +
void stopMoteur(){
 +
  monServo.write( 1 );
 +
  delay( 300 );
 +
  monServo.detach();
 +
}
 +
</syntaxhighlight>
 +
 +
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.
 +
 +
<syntaxhighlight lang="c">
 +
/*
 +
* 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;
 +
 +
</syntaxhighlight>
 +
 +
=== Activer une peluche qui dance et chante ===
    
Pour faire sonner une clochette, il sera nécessaire d'utiliser un servo moteur, une clochette et un support/pied.
 
Pour faire sonner une clochette, il sera nécessaire d'utiliser un servo moteur, une clochette et un support/pied.

Menu de navigation