Cómo hacer un Musical, móvil de brillar intensamente-en-el-oscuro-fantasma motorizado (16 / 17 paso)

Paso 16: Relacionando todos juntos con un Arduino

Por último, todo está atado junto en un sketch de Arduino.  Este bosquejo realiza las siguientes funciones:

  • Controla el motor paso a paso para rotar el móvil fantasma

    • Gira en un patrón sinusoidal para que parezcan más "autónoma"
    • Gira por 10 segundos (alineados perfectamente con el audio)
  • Convierte códigos IR del mando que vino con el kit remoto de IR en los códigos correctos de IR para el reproductor de CD Kenwood
    • Proporciona que un IR Lee función para capturar y mostrar los datos exactos de la código de IR desde el control remoto original
    • Contiene una lista de código de botón de prensa los códigos para su uso en la traducción de los pulsadores del botón del control remoto
    • Envía el código de IR adecuado basado en la tecla del mando a distancia nuevo
    • Envía códigos de "Pausa" y "Omitir" 10 segundos después se pulsa el botón de play
  • El código también envía algunos mensajes de depuración a la consola de puerto serie en caso de estar interesado en los detalles debajo de la capilla mientras se está ejecutando.

Originalmente planeaba también controlar iluminación para apagar las luces cuando fue disparado un sensor de movimiento.  Lamentablemente rompí el hardware estaba utilizando y no tuvo tiempo para reemplazarlo por lo que el sistema será controlado totalmente por el control remoto.

La siguiente lista asigna los pines de Arduino Mego 2560 junta al componente respectivo:

  • LED de estado: PWM Pin 13
  • La entrada de datos receptor IR: PWM Pin 11
  • Emisor de IR al reproductor de CD: PWM Pin 8
  • Señales de Control de Motor paso a paso: PWM Pins 4, 5, 6 y 7
  • Motivos a pernos apropiados según sea necesario

Dos piezas existentes de código se utiliza y muy modificadas.  Estos incluyen la biblioteca IRremote proporcionado por Ken Shirriff y el código de ejemplo de motor de paso a paso incluido en el SDK de Arduino.  Y por último, aquí está el código (apalancado y que trabajos anteriores):

/////////////////////////////////////////////////////////////////////////////////////////
 /*
 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;
     }
   }
 }

Artículos Relacionados

Cómo hacer un brillar intensamente-en-el-oscuro/luz encima Cohete

Cómo hacer un brillar intensamente-en-el-oscuro/luz encima Cohete

En este instructable les mostraré cómo hacer un cohete para lanzamientos de la noche iluminar. También le ayuda encontrar después de ha puesto en marcha.Paso 1: Materiales necesarios: Se necesita:Un cohete con un cono grandeUna luz a velacuchillo x-a
Hacer una cubierta móvil de un bolsillo de Jeans

Hacer una cubierta móvil de un bolsillo de Jeans

hoy te voy a mostrar cómo hacer una fresca cubierta móvil de bolsillo trasero de tus vaqueros viejos.Primero lo primero, recoger algunas cosas que vas a necesitar.Lo sentimos, pero el me olvide de tomar fotos de la realización, por lo que las fotos s
Cómo hacer un simple automóvil con botella

Cómo hacer un simple automóvil con botella

¡ Hola! En este instructable les mostraré cómo hacer un simple automóvil con botella.Paso 1: Cosas necesariasBotella 1:2:Tape3:scissors4: botón on/off5:Battery.Ruedas 6:Back (con motor)7:Front ruedas8 (opcional)Paso 2: Fijación posterior de las rueda
Cómo hacer brillar en el vidrio oscuro

Cómo hacer brillar en el vidrio oscuro

SIMPLEMENTE VER UN VIDEO...O VEA LAS INSTRUCCIONES ABAJO...Hola chicos,En este tutorial usted aprenderá cómo hacer brillar en el cristal oscuro / gafas de mi camino! Son impresionantes y muy bien brillan en la oscuridad! Realmente surgió esta idea al
Hacer este Simple móvil de concha

Hacer este Simple móvil de concha

Hemos estado guardando nosotros mismos muy ocupado haciendo un montón de joyas de conchas. Chloe goza de las cáscaras de colorear con rotuladores y enhebrar la lana a través de los agujeros para hacer pulseras y ahora una cáscara móvil.Paso 1:También
Hacer un libro móvil

Hacer un libro móvil

transformar libros antiguos en una caprichosa escultura móvilMaterialesTres libros.20' de cable de 1/16"Una varilla de acero de 36", 5/16" de diámetro (acero, varillas de soldadura puede encontrarse en la tienda de hardware y por lo general
Cómo hacer teléfono móvil cargador para tu moto

Cómo hacer teléfono móvil cargador para tu moto

En este Tutorial te mostraré que cómo instalar el cargador del teléfono móvil en su motocicleta el corazón de este proyecto es ic LM7805 sabemos que nuestra batería teléfono móvil requiere un 4.5 ~ 5 v C.c. tensión de carga para hacer un voltaje de C
Cómo hacer un Servilletero móvil.

Cómo hacer un Servilletero móvil.

Este instructable te dice cómo hacer un Servilletero. Tiene ruedas por lo que es muy fácil pasar a alguien.PROS:-Fácil de hacer-pequeña cantidad de piezas-creativa-aspecto frescoCONTRAS:-¿Qué desventajas puede existir??? ES UN SOSTENEDOR DE LA SERVIL
Cómo para hacer brillar intensamente Mountain Dew

Cómo para hacer brillar intensamente Mountain Dew

-tomar su bebida de "la montaña no" para "rocío de la montaña!"-Ocho pasos para hacer tu Mountain Dew resplandor!!!** Aviso legal ** --este Mountain Dew es no potable. Contiene ingredientes que pueden ser perjudiciales para la salud si
Cómo hacer brillar intensamente huevos

Cómo hacer brillar intensamente huevos

esto es un "complemento" si se quiere a mi huevo que sopla instructable. Este instructable le mostrará cómo hacer que encienda para arriba el huevo hermoso.Paso 1: Reúna sus materiales Para este complemento, usted necesitará:-1 soplado hacia fue
Cómo hacer una mesa de café que brilla intensamente de un tambor reciclado

Cómo hacer una mesa de café que brilla intensamente de un tambor reciclado

este proyecto es uno de mis favoritos. No pasó mucho tiempo o dinero y se ve muy bien. La mesa parece fue hecho por un profesional, pero en realidad sólo requiere un simple trabajo eléctrico. Es la mesa de café de tamaño perfecto para el espacio.Si t
Cómo hacer brillar intensamente tarros

Cómo hacer brillar intensamente tarros

Toman unos dos minutos y cuesta sólo 20 centavos por pieza. ¿Cómo es un tentador proyecto DIY?Estos se vería increíbles en cualquier fiesta al aire libre. Línea de pasarelas con ellos, o colocarlos en las mesas.Materiales:Estos tipos de frascosdos Pa
Cómo diseñar un recinto microcontrolador

Cómo diseñar un recinto microcontrolador

Por lo tanto necesita un recinto, pero no estás seguro de dónde empezar. No importa qué tipo de hardware que necesita para proteger, hay algunas cosas que desea tener en cuenta en su recinto de hacer viaje.Este Instructable cubrirá los pasos generale
Hacer un bebé súper lindo y astuto móvil

Hacer un bebé súper lindo y astuto móvil

pongo esta uno para un amigo que espera pronto.Paso 1: material móvil compré un recipiente plástico grande en Walgreens. Necesitaba algo sólido para sostener todas las otras partes que me refiero a añadir.Paso 2: preestablecido para las estrellas per