Códigos

Para realizar el códigos del movimiento del cuerpo, se empleo el siguiente código realizado en el programa MIKRO C y armado con ayuda de una tarjeta Miuva, el código utilizado es el siguiente:

int servos[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

int inicio;



void servo_valor(char servo_num,int servo_ang)

{

  switch  (servo_ang)

  {

     case 0:

       PORTB=servos[servo_num-1];

       Delay_us(940);

       PORTB=0;

       Delay_us(15000);

       break;

     case 15:

       PORTB=servos[servo_num-1];

       Delay_us(1300);

       PORTB=0;

       Delay_us(15000);

       break;

     case 30:

       PORTB=servos[servo_num-1];

       Delay_us(1660);

       PORTB=0;

       Delay_us(15000);

       break;

     case 45:

       PORTB=servos[servo_num-1];

       Delay_us(2020);

       PORTB=0;

       Delay_us(15000);

       break;

     case 60:

       PORTB=servos[servo_num-1];

       Delay_us(2380);

       PORTB=0;

       Delay_us(15000);

       break;

     case 75:

       PORTB=servos[servo_num-1];

       Delay_us(2740);

       PORTB=0;

       Delay_us(15000);

       break;

     case 80:

       PORTB=servos[servo_num-1];

       Delay_us(2860);

       PORTB=0;

       Delay_us(15000);

       break;

     case 90:

       PORTB=servos[servo_num-1];

       Delay_us(3100);

       PORTB=0;

       Delay_us(15000);

       break;

     case 105:

       PORTB=servos[servo_num-1];

       Delay_us(3400);

       PORTB=0;

       Delay_us(15000);

       break;

     case 120:

       PORTB=servos[servo_num-1];

       Delay_us(3700);

       PORTB=0;

       Delay_us(15000);

       break;

     case 135:

       PORTB=servos[servo_num-1];

       Delay_us(4000);

       PORTB=0;

       Delay_us(15000);

       break;

     case 150:

       PORTB=servos[servo_num-1];

       Delay_us(4300);

       PORTB=0;

       Delay_us(15000);

       break;

     case 165:

       PORTB=servos[servo_num-1];

       Delay_us(4600);

       PORTB=0;

       Delay_us(15000);

       break;

     case 180:

       PORTB=servos[servo_num-1];

       Delay_us(4900);

       PORTB=0;

       Delay_us(15000);

       break;

  }

}


void iniciar_Servos()

{

  ADCON1=0x0F;

  portb=0;

  trisb=0;

  porta=0;

  trisa=1;


      //Asignar Servo

      for(inicio=1;inicio<=8;inicio++)

      {

        servo_valor(inicio,45);

      }

}


void main() {

   iniciar_Servos();

   while(1){

      if(PORTA.RA0==1)

      {

          servo_valor(2,45);                  //mov0

          delay_ms(200);

          servo_valor(1,45);

          delay_ms(200);

          servo_valor(3,90);

          delay_ms(200);

          servo_valor(4,90);

          delay_ms(200);

          servo_valor(5,180);

          delay_ms(200);

          servo_valor(6,0);

          delay_ms(200);

          servo_valor(1,90);                  //mov1

          delay_ms(200);

          servo_valor(2,90);

          delay_ms(200);

          servo_valor(3,80);

          delay_ms(200);

          servo_valor(4,180);

          delay_ms(200);

          servo_valor(5,0);

          delay_ms(200);

          servo_valor(6,0);

          delay_ms(200);

          servo_valor(2,45);                  //mov2

          delay_ms(200);

          servo_valor(1,45);

          delay_ms(200);

          servo_valor(3,90);

          delay_ms(200);

          servo_valor(4,90);

          delay_ms(200);

          servo_valor(5,0);

          delay_ms(200);

          servo_valor(6,180);

          delay_ms(200);

          servo_valor(1,0);                  //mov3

          delay_ms(200);

          servo_valor(2,90);

          delay_ms(200);

          servo_valor(3,80);

          delay_ms(200);

          servo_valor(4,0);

          delay_ms(200);

          servo_valor(5,0);

          delay_ms(200);

          servo_valor(6,180);

          delay_ms(200);

          

      }

      else

      {

          servo_valor(1,45);

          delay_ms(200);

          servo_valor(2,45);

          delay_ms(200);

          servo_valor(3,90);

          delay_ms(200);

          servo_valor(4,90);

          delay_ms(200);

          servo_valor(5,180);

          delay_ms(200);

          servo_valor(6,0);

          delay_ms(200);

      }

   }

}

Para realizar las velas en el sombrero, se realizó un código en ARDUINO UNO, para accionar leds que simulan la flama de una vela. El código es el siguiente:

#define pinLEDA 5

#define pinLEDB 6

#define pinLEDC 7

#define pinLED1 8

#define pinLED2 9

#define pinLED3 10

#define pinLED4 11

#define pinLED5 4

#define pinLED6 13


void setup() {


 pinMode(pinLEDA, OUTPUT);  

 pinMode(pinLEDB, OUTPUT);  

 pinMode(pinLEDC, OUTPUT); 

 pinMode(pinLED1, OUTPUT);  

 pinMode(pinLED2, OUTPUT);  

 pinMode(pinLED3, OUTPUT); 

 pinMode(pinLED4, OUTPUT);  

 pinMode(pinLED5, OUTPUT);  

 pinMode(pinLED6, OUTPUT);  


}


void loop() {

  

 digitalWrite(pinLEDA, HIGH); 

 digitalWrite(pinLEDB, HIGH); 

 digitalWrite(pinLEDC, HIGH); 

 digitalWrite(pinLED1, LOW); // enciende

 digitalWrite(pinLED2, HIGH); // apaga

 digitalWrite(pinLED3, HIGH); // apaga

 digitalWrite(pinLED4, HIGH); // apaga

 digitalWrite(pinLED5, HIGH); // apaga

 digitalWrite(pinLED6, HIGH); // apaga

 delay(500);

 digitalWrite(pinLEDA, HIGH); 

 digitalWrite(pinLEDB, HIGH); 

 digitalWrite(pinLEDC, HIGH); 

 digitalWrite(pinLED1, HIGH);   

 digitalWrite(pinLED2, LOW); 

 digitalWrite(pinLED3, HIGH);

 digitalWrite(pinLED4, HIGH); 

 digitalWrite(pinLED5, HIGH); 

 digitalWrite(pinLED6, HIGH);  

 delay(500); 

 digitalWrite(pinLEDA, HIGH); 

 digitalWrite(pinLEDB, HIGH); 

 digitalWrite(pinLEDC, HIGH); 

 digitalWrite(pinLED1, HIGH); 

 digitalWrite(pinLED2, HIGH); 

 digitalWrite(pinLED3, LOW);

 digitalWrite(pinLED4, HIGH); 

 digitalWrite(pinLED5, HIGH); 

 digitalWrite(pinLED6, HIGH);  

 delay(500);

 digitalWrite(pinLEDA, HIGH); 

 digitalWrite(pinLEDB, HIGH); 

 digitalWrite(pinLEDC, HIGH); 

 digitalWrite(pinLED1, HIGH); 

 digitalWrite(pinLED2, HIGH); 

 digitalWrite(pinLED3, HIGH);

 digitalWrite(pinLED4, LOW); 

 digitalWrite(pinLED5, HIGH); 

 digitalWrite(pinLED6, HIGH);  

 delay(500);

 digitalWrite(pinLEDA, HIGH); 

 digitalWrite(pinLEDB, HIGH); 

 digitalWrite(pinLEDC, HIGH); 

 digitalWrite(pinLED1, HIGH); 

 digitalWrite(pinLED2, HIGH); 

 digitalWrite(pinLED3, HIGH);

 digitalWrite(pinLED4, HIGH); 

 digitalWrite(pinLED5, LOW); 

 digitalWrite(pinLED6, HIGH); 

 delay(500);

  digitalWrite(pinLEDA, HIGH); 

 digitalWrite(pinLEDB, HIGH); 

 digitalWrite(pinLEDC, HIGH); 

 digitalWrite(pinLED1, HIGH); 

 digitalWrite(pinLED2, HIGH); 

 digitalWrite(pinLED3, HIGH);

 digitalWrite(pinLED4, HIGH); 

 digitalWrite(pinLED5, HIGH); 

 digitalWrite(pinLED6, LOW); 

 delay(500);

}


Figura 1. Conexión de los leds en una Protoboard como prueba


Vídeo 1. Simulación de las series de leds

Para la música de ambientación que se aplicó en el piano, se usó el siguiente código:

int saltar=0; // Variable que indica el numero de la secuencia a ejecutarse


void setup() {


pinMode(A0, INPUT); //indicamos el pin de entrada

for(int i=2;i<=9;i++){ //indicamos los pines de salida

pinMode(i, OUTPUT);

}

}


void loop() {

if (digitalRead(A0)==HIGH){ //Al presionar el pulsador

saltar++; // Cambia de secuencia

if (saltar>3){ //Solo hay 4 secuencias 0,1,2 y 3 al ser 3 . .

saltar=0; // Vuelve a secuencia 0

}

while (digitalRead(A0)==HIGH){} // Mientras se pulsa no haga nada mas

}


if(saltar==0){ //Si es 1 inicie funcion de secuencia1

secuencia1();

}

if(saltar==1){ //Si es 2 inicie funcion de secuencia2

secuencia2();

}

if(saltar==2){ //Si es 3 inicie funcion de secuencia3

secuencia3();

}

if(saltar==3){ //Si es 4 inicie funcion de secuencia4

secuencia4();

}


}

void secuencia1(){

for (int i=2; i<=9; i++){ //Pin 2 al 9

digitalWrite(i, HIGH); // Prenda pin actual

digitalWrite(i-1,LOW); // Apage el Anterior

delay(50); // retardo entre prender y apagar

}

for (int i=9; i>=2; i--){ //Al contrario de la

digitalWrite(i, LOW); // anterior secuencia va de 9 a 2

digitalWrite(i-1,HIGH);

delay(50);

}

}


void secuencia2(){

int k=11; // inicializo una variable auxiliar K

for(int i=6; i<=9;i++){ //leo de 6 a 9

digitalWrite(i, HIGH); // prendo pin actual

digitalWrite(k-i, HIGH); // prendo pin de la diferencia 11-6 = 5

delay(50); //retardo

}

for(int i=9; i>=2;i--){ // Al contrario de lo anterior

digitalWrite(i, LOW);

digitalWrite(k-i, LOW);

delay(50);

}

}


void secuencia3(){

for(int i=2; i<=9; i++){

digitalWrite(i,HIGH);

delay(50);

}

for(int i=9; i>=2;i--){

digitalWrite(i,LOW);

delay(50);

}

}


void secuencia4(){

int k=11;

for(int i=2; i<=5;i++){

digitalWrite(i,HIGH);

digitalWrite(k-i,LOW);

}

delay(150);

for(int i=2; i<=5;i++){

digitalWrite(i,LOW);

digitalWrite(k-i,HIGH);

}

delay(150);

}


Vídeo 2. Simulación piano


Comentarios

Entradas populares de este blog

La Coqueta