Comment faire une comédie musicale, motorisé Glow-dans-le-noir-ghost Mobile (16 / 17 étapes)

Étape 16 : L’attachant tous ensemble avec un Arduino

Enfin, tout est lié ensemble dans une esquisse de l’Arduino.  Cette esquisse exécute les fonctions suivantes :

  • Contrôle le moteur pas à pas pour faire tourner le mobile de fantôme

    • Tourne dans un modèle sinusoïdal à leur donner un aspect plus « autonome »
    • Tourne pendant 10 secondes (alignés parfaitement avec l’audio)
  • Convertit les codes IR de la télécommande fournie avec le kit de télécommande IR dans les bons codes IR pour le lecteur CD Kenwood
    • Fournit qu'un IR lu fonction pour capturer et afficher les données exactes de code IR de la télécommande d’origine
    • Contient une liste codée en dur des codes presse bouton destiné à traduire le pousse de touche de la télécommande
    • Envoie le code IR approprié basé sur la pression de touche sur la nouvelle télécommande
    • Envoie les codes « Pause » et « Sauter » 10 secondes après que la touche play est Poussée
  • Le code envoie également des messages de débogage la console port série dans le cas où vous êtes intéressé par les détails sous le capot, lorsque celui-ci fonctionne.

Initialement, je comptais contrôler également l’éclairage pour éteindre les lumières lorsqu’un détecteur de mouvement a été déclenché.  Malheureusement, je me suis cassé le matériel j’ai utilisait et n’avait pas le temps de le remplacer alors le système va être entièrement contrôlé par la télécommande.

La liste suivante mappe les broches de Conseil Arduino Mego 2560 sur le composant respectif :

  • LED d’État : PWM Pin 13
  • Entrée de données de récepteur IR: PWM broche 11
  • Émetteur IR à lecteur CD : Pin PWM 8
  • Les signaux de commande de moteur stepper : PWM Pins 4, 5, 6 et 7
  • Acheminés vers les broches appropriées selon les besoins des motifs

Deux pièces existantes du code ont été utilisés et fortement modifiés.  Il s’agit de la bibliothèque IRremote fournie par Ken Shirriff et le code d’échantillon moteur pas à pas inclus dans le Kit de développement logiciel Arduino.  Et enfin, Voici les codes (effet de levier et crédité des travaux antérieurs) :

/////////////////////////////////////////////////////////////////////////////////////////
 /*
 Stepper Motor Control - sinusoidal rotation

 

This program drives a unipolar or bipolar stepper motor.
 The motor is attached to digital pins 4 - 7 of the Arduino.
 The motor should revolve one direction
 following a sinusoidal rate of rotation.

 

The program also allows the user to remotely activate and deactivate the
 glowing ghost mobile of doom.  It sends control signals to the mobile for 10
 during which time the audio from the disk in the CD player will play 10
 seconds of audio.  After 10 seconds the code will send the pause and skip
 command to go to the next track.

 

Created on Nov. 4th, 2012

 

(Some parts based on Stepper Motor Control program by Tom Igoe
   Created 11 Mar. 2007
   Modified 30 Nov. 2009)

 

(Some parts based on IRrecord program by Ken Shirriff
   Created September, 2009)
 */
 #define PAUSE_PLAY_BUTTON 0x6D92C837
 #define REPEAT_BUTTON 0x6D929867
 #define SKIP_BUTTON 0x6D92E817

 

#define POWER 0x00FFA25D
 #define BUTTON_MODE 0x00FF629D
 #define BUTTON_PAUSE_PLAY 0x00FF22DD
 #define BUTTON_SKIP 0x00FFC23D
 #define BUTTON_0 0x00FF6897
 #define BUTTON_1 0x00FF30CF
 #define BUTTON_2 0x00FF18E7
 #define BUTTON_3 0x00FF7A85
 #define BUTTON_4 0x00FF10EF
 #define BUTTON_5 0x00FF38C7
 #define BUTTON_6 0x00FF5AA5
 #define BUTTON_7 0x00FF42BD
 #define BUTTON_8 0x00FF4AB5
 #define BUTTON_9 0x00FF52AD

 

#include <Stepper.h>
 #include <IRremote.h>

 

int RECV_PIN = 11;
 int BUTTON_PIN = 12;
 int STATUS_PIN = 13;

 

IRrecv irrecv(RECV_PIN);
 IRsend irsend;

 

decode_results results;

 

int step_enabled = LOW;
 const int stepsPerRevolution = 2048;  // change this to fit the number of steps per revolution for your motor
 const float max_speed = 10;  //sets the maximum rotational speed of the motor
 const float resolution = 100;  //sets the frequency by which the motor speed will change
 float rotational_vel = 0;  //holds the current rotational velocity scalar

 

// initialize the stepper library on pins 8 through 11:
 Stepper myStepper(stepsPerRevolution, 4,5,6,7);

 

void setup() {
   // initialize the serial port:
   Serial.begin(9600);
   irrecv.enableIRIn(); // Start the receiver
   pinMode(BUTTON_PIN, INPUT);
   pinMode(STATUS_PIN, OUTPUT);
 }

 

// Storage for the recorded code
 int codeType = NEC; // The type of code
 unsigned long codeValue = 0x6D92C837; // The code value if not raw
 int codeLen = 32; // The length of the code
 int toggle = 0; // The RC5/6 toggle state
 int buttonState = LOW; //virtual button press

 

// Stores the code for later playback
 // Most of this code is just logging
 void storeCode(decode_results *results)
 {
   codeType = results->decode_type;
   int count = results->rawlen;
   if (results->value == REPEAT)
   {
     // Don't record a NEC repeat value as that's useless.
     Serial.println("repeat; ignoring.");
     buttonState = LOW;
     return;
   }
   Serial.print("storing code: ");
   Serial.print(results->value, HEX);
   codeValue = results->value;
   codeLen = results->bits;
   Serial.print("; code length: ");
   Serial.println(codeLen);
   buttonState = HIGH;
 }

 

void sendCode(int repeat) {
   if (repeat)
   {
     irsend.sendNEC(REPEAT, codeLen);
     Serial.println("Sent NEC repeat");
     buttonState = LOW; //turn off virtual button after sending code
   }
   else
   {
     Serial.println("Sending non-repeat code.");
     switch (codeValue) {
     case POWER:
       irsend.sendNEC(PAUSE_PLAY_BUTTON, 32);
       codeValue = PAUSE_PLAY_BUTTON;
       Serial.print("Sent pause play code: ");
       Serial.println(PAUSE_PLAY_BUTTON, HEX);
       buttonState = LOW; //turn off virtual button after sending code
       break;
     case BUTTON_PAUSE_PLAY:
       irsend.sendNEC(PAUSE_PLAY_BUTTON, 32);
       Serial.print("Sent pause play code: ");
       Serial.println(PAUSE_PLAY_BUTTON, HEX);
       buttonState = LOW; //turn off virtual button after sending code
       break;
     case BUTTON_MODE:
       irsend.sendNEC(REPEAT_BUTTON, 32);
       Serial.print("Sent repeat code: ");
       Serial.println(REPEAT_BUTTON, HEX);
       buttonState = LOW; //turn off virtual button after sending code
       break;
     case BUTTON_SKIP:
       irsend.sendNEC(SKIP_BUTTON, 32);
       Serial.print("Sent skip code: ");
       Serial.println(SKIP_BUTTON, HEX);
       buttonState = LOW; //turn off virtual button after sending code
       break;
     }
   }
 }

 

int lastButtonState = LOW;
 int i = 1;

 

void loop() {
   if (i > resolution)
   {
     i = 1;
   }

 

// If button pressed, send the code.
   //buttonState = digitalRead(BUTTON_PIN);
   if (lastButtonState == HIGH && buttonState == LOW) {
     Serial.println("Released");
     lastButtonState = LOW;
     irrecv.enableIRIn(); // Re-enable receiver
   }

 

if (buttonState) {
     Serial.println("Sending IR code");
     digitalWrite(STATUS_PIN, HIGH);
     sendCode(lastButtonState == buttonState);
     digitalWrite(STATUS_PIN, LOW);
     step_enabled = HIGH;
     lastButtonState = HIGH;
     //delay(50); // Wait a bit between retransmissions
   }
   else if (irrecv.decode(&results)) {
     Serial.println("Reading IR code");
     digitalWrite(STATUS_PIN, HIGH);
     storeCode(&results);
     irrecv.resume(); // resume receiver
     digitalWrite(STATUS_PIN, LOW);
   }

 

//Serial.println("rotate the motor");
   rotational_vel = abs(max_speed * sin(float(i)*3.14159/10) + 2);  //program a sinusoidal velocity for the stepper motor
   myStepper.setSpeed(rotational_vel);
   if (abs(rotational_vel) > 0.001 && step_enabled == HIGH)  //a velocity of 0 will lock up the stepper.h library.
   {
     Serial.println("valid stepper function entry");
     if (i < resolution && step_enabled == HIGH)
     {
       Serial.print("iteration: ");
       Serial.println(i);
       Serial.print("Velocity: ");
       Serial.println(rotational_vel);
       myStepper.step(10 * rotational_vel);
       i++;
     }
     else
     {
       step_enabled = LOW;
       i = 0;
       Serial.println("Pausing Playback and Skipping");
       digitalWrite(STATUS_PIN, HIGH);
       codeValue = BUTTON_PAUSE_PLAY;
       sendCode(1 == 2);
       delay(100); //Wait between transmissions
       codeValue = BUTTON_SKIP;
       sendCode(1 == 2);
       digitalWrite(STATUS_PIN, LOW);
       lastButtonState = HIGH;
     }
   }
 }

Articles Liés

Comment faire une vis et un trou fileté dans la 123d Design

Comment faire une vis et un trou fileté dans la 123d Design

Si vous appréciez mon travail, alors s'il vous plaît envisager aller et donner un peu d'argent pour m'aider à financer un comprimé de libres, je travaille sur un projet futur.http://www.gofundme.com/Rpitablet-Merci------------------------------------
Comment faire une e-carte de nouvel an dans photoshop

Comment faire une e-carte de nouvel an dans photoshop

dans cette turorial je vais vous apprendre comment faire une e-carte simple et facile dans photoshopÉtape 1: Ouvrez photoshop Étape 1 :Tout d'abord vous devez avoir un logiciel réussi photoshop cs6 installée sur votre ordinateurla vous avez besoin de
Comment faire une jante en quelques étapes simples dans Solidworks et Catia ?

Comment faire une jante en quelques étapes simples dans Solidworks et Catia ?

Comment faire une jante dans Solidworks et Catia ?Étape 1: Étape 1 Faire un croquis comme sur n'importe quel avion.Étape 2: Étape 2 Quittez l'esquisse. Tourner autour de l'axe central tel qu'indiqué.Étape 3: Étape 3 Vous obtiendrez somethings semblab
Comment faire une bouteille de Spray que fonctionne dans n’importe quelle Direction/Position

Comment faire une bouteille de Spray que fonctionne dans n’importe quelle Direction/Position

Vaporisateurs sont emblématiques Articles ménagers. Que vous soyez nettoyeurs de pulvérisation sur un comptoir ou brumisation d'eau sur vos plantes, elles sont très utiles, mais ils ont certaines limites. Ils peuvent fonctionner seulement lorsque l'e
Comment faire une LED prêt à l’installer dans une voiture !

Comment faire une LED prêt à l’installer dans une voiture !

Dans ce instructable, vous apprendrez comment préparer une LED pour être prêt à installer dans une voiture ! Autrement dit, ajout d'une résistance et la soudure sur des pistes. Lorsque vous avez terminé, vous pouvez faire tellement de choses avec eux
Comment faire une tête de Dragon

Comment faire une tête de Dragon

C'est le processus de la fabrication d'un 1,9 m longue tête de Dragon que j'ai faite pour une comédie musicale, j'ai fais tournerEtape 1: Le ConceptIl s'agit de l'esquisse que j'ai basé mon modèle, c'est vaguement basé sur Smaug de films Hobbit de Pe
Comment faire une planche de tendances - idées de Design de Build.com

Comment faire une planche de tendances - idées de Design de Build.com

souhaitez obtenir des conseils sur comment faire une planche de tendances pour vous concevoir ensuite idée ? Suivre Ashley Carrion de Build.com qu'elle assemble sa propre planche de tendances pour le Bureau à domicile.Vous pouvez trouver beaucoup de
Comment faire une parodie de musique Harry Potter !

Comment faire une parodie de musique Harry Potter !

Dans ce Instructable je vais aller sur comment faire une parodie efficace d'une vidéo de musique populaire ! Nous allons faire une version de Harry Potter de Forever. Certaines choses que je vais aller sur sont :-Paroles de l'écriture-Enregistrement
Comment faire une pieuvre wire sculpture (simplifiée). Bon marché et facile, mais peut-être pas si rapide.

Comment faire une pieuvre wire sculpture (simplifiée). Bon marché et facile, mais peut-être pas si rapide.

j'ai choisi quelque chose de simple et facile... et puis j'ai simplifié les détails (lire : supprimé les détails et le formulaire simplifié).  Voir la pieuvre finie ci-dessus et être informé, il peut être sec lecture mais j'espère que vous vous retro
Comment faire une hache Minecraft

Comment faire une hache Minecraft

Minecraft est un jeu de survie qui est très amusant. Mon petit frère adore ça alors j'ai décidé que je lui ferais une décoration pour sa chambre. Il a absolument adoré et m'a remercié comme un fou quand je lui ai donné à lui. Alors dans cette Intract
Comment faire une géocache

Comment faire une géocache

le sport relativement nouveau du géocaching consiste à l'aide d'un GPS pour localiser un conteneur masqué (un cache), et signant le journal reservez à l'intérieur. Cela paraît simple, droite ? Mal.Il n'est pas aussi simple que l'emplacement et la sig
Comment faire une corde à partir de bouteilles en plastique

Comment faire une corde à partir de bouteilles en plastique

Upcycle vos vieilles bouteilles en plastique ! Faire 15-20 mètres de chaîne/corde en plastique provenant d'une bouteille PET / plastique de 1 litre d'un juste en employant un taille-crayon ! Quoi???Oui ! C'est très simple !Voir ici sur Youtube :Comme
Comment faire une housse de protection de sécurité Mini DREMEL

Comment faire une housse de protection de sécurité Mini DREMEL

https://www.youtube.com/watch?v=xh8eKJ_qr-A&feature=youtu.beÉtape 1: Faire un mini DREMEL de couvrir protecteur de sécurité vous devez ! Dans instructables d'aujourd'hui je vais vous montrer une belle idée sur comment faire une couverture de sécurité
Comment faire une pochette de Paracord pour boîtes de survie

Comment faire une pochette de Paracord pour boîtes de survie

Tout au long de ce Instructable, je va vous les gars montrer comment faire une Pochette boîtes Altoids de paracord. Pour beaucoup de plein air-man ou survivalistes, boîtes Altoids sont les conteneurs parfaits pour un petit, étain de survie de poche.