IRONMAN

IRONMAN

IRONMAN

PROYECTO MAKER

ETAPAS DEL PROYECTO

A) Construcción de la máscara

B) Prueba de circuitos Arduino

C) Prototipados finales

PROTOTIPADO FINAL

1. Botón de apertura

2. Comando de voz

3. Reproductor musical

CONSTRUCCIÓN DE LA MÁSCARA

1. Diseño del prototipo en papercraft con Pepakura designer

2. Impresión 2D de las bases

3. Cortado de las bases en cartón

4. Pegado con silicona caliente

5. Masillado y lijado

6. Aplicación de la resina epoxi

7. Aplicación de base primer

8. Pintura

PEPAKURA DESIGNER

PEGADO

Pistola de silicona

RESINADO

Resina epoxi + endurecedor

Pincel y guantes

Reposo 24 Hs.

MASILLADO-SECADO-LIJADO

Con espátula

Reposo 24 Hs

Lija de madera

Volver a masillar errores

 

IMPRIMAR-PINTAR

Imprimar

Reposo 24 Hs

Pintar

Reposo 4 Hs

Pintar con fibrón metalizado los errores

 

APERTURA CON PULSADOR

Prueba de circuitos

Circioto final

 ARDUINO NANO

Microcontrolador de hardware libre que permite la interacción entre sensores y actuadores, para ejecutar acciones de robótica, domótica y automatización

 PROTOBOARD

IDE ARDUINO

 MICROSERVOS

Un servomotor es un motor eléctrico, con regulación en voltaje y reductores de engranajes, tanto plásticos como mecánicos. Tiene la particularidad de ser controlado, tanto en velocidad como en posición.

 MICROSERVO SG-90

Es un servo con caja reductora de engranajes de nylon y posee un giro programable de hasta 180 grados, con un torque de 1.4 kg

 MICROSERVO MG-60

Es un servo con caja reductora de engranajes de metal y posee un giro programable de hasta 180 grados. Aumenta su torque de 1.8 a 2.2 Kg

 MICROSERVO MG-996r

Es un servo con caja reductora de engranajes de metal y posee un giro programable de hasta 360 grados (con código especial), con un torque de 11 kg

CABLEADO MICROSERVOS MG-60/MG-90s

Señal PWM

VCC +

GND -

0. PRUEBA DE MICROSERVOS Arduino Uno

 

Utilizar baterías externas 9v

/* Funcionamiento básico de un microservo

**Desafío 1:
¿Cómo girar el servo 45 grados?
**Desafío 2:
¿Cómo girar el servo 120 grados?
**Desafío 3:
Generar un programa que cambie el nombre del servo 
y que gire de 45 grados a 120 grados 
en otro pin ¿Cuál podrías elegir?

Prof. Daniel Tedesco */



#include <Servo.h>

Servo servo;


void setup() {
servo.attach(9);
}

void loop() {
servo.write(0);
delay(2000);

servo.write(90);
delay(2000);
}

1.PRUEBA DE MICROSERVOS

/*Probar los dos microoservos MG-60
Asegurarse en lo posible de utilizar 
una batería esxterna de 9v o 
dupla de 3.7 V (18650)
o tripla AA 1.5 V con portapila
Prof. Daniel Tedesco*/

#include <Servo.h>
Servo servoMotor;


void setup() {
servoMotor.attach(2);

}

void loop() {
  servoMotor.write (0);
  delay(2000);
  servoMotor.write(90);
  delay(2000);

}

Utilizar baterías externas 9v

2. PRUEBA DE MICROSERVO Y PULSADOR

int boton =6;



void setup() {

 Serial.begin(9600);
pinMode (boton, INPUT_PULLUP);

}

void loop() {

  int estado = digitalRead (boton);
  
if( estado == LOW ){
Serial.println ("BOTON PULSADO");
}

}

3. PRUEBA DE 2 MICROSERVOS Y PULSADOR

int boton = 6;
#include <Servo.h>
Servo servo1;
Servo servo2;

void setup() {
  Serial.begin(9600);
  pinMode (boton, INPUT_PULLUP);
  servo1.attach(2);
  servo1.write(0);

  servo2.attach(3);
  servo2.write(90);

}

void loop() {
 int estado = digitalRead (boton);
 if (estado == LOW){
  servo1.write(90);
 } else {
  servo1.write(0);
 }

if (estado == LOW){
  servo2.write(0);
 } else {
  servo2.write(90);
 }
}

4. CIRCUITO FINAL

int boton = 6;
#include <Servo.h>
Servo servo1;
Servo servo2;

void setup() {
  Serial.begin(9600);
  pinMode (boton, INPUT_PULLUP);
  servo1.attach(2);
  servo1.write(0);

  servo2.attach(3);
  servo2.write(90);

}

void loop() {
 int estado = digitalRead (boton);
 if (estado == LOW){
  servo1.write(90);
 } else {
  servo1.write(0);
 }

if (estado == LOW){
  servo2.write(0);
 } else {
  servo2.write(90);
 }
}

5. MONTAJE

REPRODUCTOR DE MÚSICA

Prueba de circuitos

Circuito final

0. CARACTERISTICAS DEL DF PLAYER

Tensión 3.3 V a 5V

Pines DAC Paraltes comerciales

Pines SPK parante de desarrollo hasta 3W

Pines RX TX control con Arduino

Pines USB -+ conexión ficha hembra USB

ADKEY_1 inicia reproducción

IO_1 baja el volumen (Presión constante)

IO_1 Siguiente pista (Presión rápida)

IO_2 sube el volumen (Presión constante)

Reproduce *.mp3 escalonados 0001 en adelante

Tarjetas micro SD hasta 32 Gb

0. CARACTERISTICAS DEL DF PLAYER

0. CARACTERISTICAS DEL DF PLAYER

1. REPRODUCIMOS NUESTRO 1ER. AUDIO

1. REPRODUCIMOS NUESTRO 1ER. AUDIO

 
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

SoftwareSerial mySoftwareSerial(5, 6); 
DFRobotDFPlayerMini myDFPlayer;

void setup() {


  mySoftwareSerial.begin(9600);
  Serial.begin(115200);

    if (!myDFPlayer.begin(mySoftwareSerial)) { 
    while(true);
  }
  
myDFPlayer.volume(100);
myDFPlayer.play(1);

}

void loop() {


} 

2. REPRODUCIMOS AUDIO CON BOTON

2. REPRODUCIMOS AUDIO CON BOTON

 
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"


int boton = 2;



SoftwareSerial mySoftwareSerial(5, 6); 
DFRobotDFPlayerMini myDFPlayer;


void setup() {



  pinMode (boton, INPUT_PULLUP);
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);


    if (!myDFPlayer.begin(mySoftwareSerial)) { 
    while(true);
  }
  
myDFPlayer.volume(100);
myDFPlayer.play(1);


}


void loop() {


int estado = digitalRead (boton);


if( estado == LOW ){
myDFPlayer.play(2); 
} 


} 

3. AUDIOS RANDOM

 
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

int boton = 2;
long aleatorio;


SoftwareSerial mySoftwareSerial(5, 6); 
DFRobotDFPlayerMini myDFPlayer;

void setup() {


  pinMode (boton, INPUT_PULLUP);
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);

    if (!myDFPlayer.begin(mySoftwareSerial)) { 
    while(true);
  }
  
myDFPlayer.volume(100);
myDFPlayer.play(1);

}

void loop() {

int estado = digitalRead (boton);
aleatorio = random(3,5);

if( estado == LOW ){
myDFPlayer.play(aleatorio); 
} 

} 

2. REPRODUCIMOS AUDIO CON DF PLAYER Y BOTON

2. REPRODUCIMOS AUDIO CON DF PLAYER Y BOTON

 
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#include <Servo.h>


Servo servo1; 
Servo servo2; 


int boton = 4;
long aleatorio;
int anterior;


SoftwareSerial mySoftwareSerial(5, 6); 
DFRobotDFPlayerMini myDFPlayer;


void setup() {


servo1.attach (2);
 servo1.write (0);


 servo2.attach (3);
 servo2.write (180);


  pinMode (boton, INPUT_PULLUP);
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);


    if (!myDFPlayer.begin(mySoftwareSerial)) { 
    while(true);
  }
  
myDFPlayer.volume(100);
myDFPlayer.play(1);


}


void loop() {


int estado = digitalRead (boton);


if( estado == LOW ){
servo1.write (180); 
} else {
servo1.write (0); 
}


if( estado == LOW ){
servo2.write (0); 
} else {
servo2.write (180); 
}


if (anterior == HIGH && estado ==LOW){
myDFPlayer.play(2);
}
anterior = estado;



} 

COMANDO DE VOZ

Prueba de circuitos

Circuito final

0. PROBAMOS EL MÓDULO ELECHOUSE

La luz del módulo debe prenderse e indica la llegada de corriente

Módulo de reconocimiento de voz

0.1 PROBAMOS EL MÓDULO ELECHOUSE

1. Instalar librería Elechouse

2. Cargar el ejemplo "vr sample train" del menú ejemplos

3. Abrimos monitor serie y configuramos en 115200 baudios

4. En la caja de búsqueda, cargamos el comando "sigtrain 0 abrir" y comprobamos el reconocimiento de voz

5. Una vez chequeado el comando, lo cargamos al módulo con la instrucción "Load 0" y comprobamos la carga

VER CAPTURAS EN EL SLIDE INFERIOR SIGUIENTE

 

Grabamos el primer comando

CAPTURAS

Otros comandos

-"sigtrain 1 música"

-load 1 Carga comando 1

-load 0 1 carga ambos comandos

-"sigtrain 2 cerrar"

-load 2

1. CONEXION DF PLAYER- ELECHOUSE

CÓDIGO

#include "SoftwareSerial.h"
#include <SoftwareSerial.h>
#include "VoiceRecognitionV3.h"
#include "DFRobotDFPlayerMini.h"

VR portTwo(2,3);  
SoftwareSerial portOne(5, 6);
 
DFRobotDFPlayerMini myDFPlayer;

uint8_t records[2]; 
uint8_t buf[64];


#define abrir    (0)
#define musica   (1) 

void printSignature(uint8_t *buf, int len)
{
  int i;
  for(i=0; i<len; i++){
    if(buf[i]>0x19 && buf[i]<0x7F){
      Serial.write(buf[i]);
    }
    else{
      Serial.print("[");
      Serial.print(buf[i], HEX);
      Serial.print("]");
    }
  }
}

void printVR(uint8_t *buf)
{
  Serial.println("VR Index\tGroup\tRecordNum\tSignature");

  Serial.print(buf[2], DEC);
  Serial.print("\t\t");

  if(buf[0] == 0xFF){
    Serial.print("NONE");
  }
  else if(buf[0]&0x80){
    Serial.print("UG ");
    Serial.print(buf[0]&(~0x80), DEC);
  }
  else{
    Serial.print("SG ");
    Serial.print(buf[0], DEC);
  }
  Serial.print("\t");

  Serial.print(buf[1], DEC);
  Serial.print("\t\t");
  if(buf[3]>0){
    printSignature(buf+4, buf[3]);
  }
  else{
    Serial.print("NONE");
  }
  Serial.println("\r\n");
}



void setup() {
 delay(500); 
 
  Serial.begin(115200);

  portOne.begin(9600);
  portTwo.begin(9600);

  if (portTwo.load((uint8_t)abrir) >= 0) {
 Serial.println("Comando 0 (Abrir) cargado");
 }

 if (portTwo.load((uint8_t)musica) >= 0) {
 Serial.println("Comando 1 (Musica) cargado");
 }

myDFPlayer.begin(portOne);
  myDFPlayer.volume(100);
  delay (1000);
myDFPlayer.play(1);
}

void loop() {

  portOne.listen();
  Serial.println("Data from port one:");
  while (portOne.available() > 0) {
    char inByte = portOne.read();
    Serial.write(inByte);
  }

  
  Serial.println();

 
  portTwo.listen();
  Serial.println("Data from port two:");
  while (portTwo.available() > 0) {
    char inByte = portTwo.read();
    Serial.write(inByte);
  }

 
  Serial.println();

  
  int ret;
  ret = portTwo.recognize(buf, 50);
  if(ret>0){
    switch(buf[1]){
      
        case abrir:
        myDFPlayer.play(2);
        break;

        
     
     
      
      default:
        Serial.println("Record function undefined");
        break;
    }
    /** voice recognized */
    printVR(buf);
  }

}

Acceso a audios

001 intro

002 máscara abierta

003 máscara cerrada

004 shot to thrill

005 Damnation

006 Back in black

CÓDIGO

+ MUSICA

#include <SoftwareSerial.h>
#include "VoiceRecognitionV3.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#include <Servo.h>


VR portTwo(2,3 );
SoftwareSerial portOne(5, 6); 

long aleatorio;

DFRobotDFPlayerMini myDFPlayer;


uint8_t records[3]; 
uint8_t buf[64];

#define abrir    (0)
#define musica   (1) 
#define cerrar   (2)

void printSignature(uint8_t *buf, int len)
{
  int i;
  for(i=0; i<len; i++){
    if(buf[i]>0x19 && buf[i]<0x7F){
      Serial.write(buf[i]);
    }
    else{
      Serial.print("[");
      Serial.print(buf[i], HEX);
      Serial.print("]");
    }
  }
}

void printVR(uint8_t *buf)
{
  Serial.println("VR Index\tGroup\tRecordNum\tSignature");

  Serial.print(buf[2], DEC);
  Serial.print("\t\t");

  if(buf[0] == 0xFF){
    Serial.print("NONE");
  }
  else if(buf[0]&0x80){
    Serial.print("UG ");
    Serial.print(buf[0]&(~0x80), DEC);
  }
  else{
    Serial.print("SG ");
    Serial.print(buf[0], DEC);
  }
  Serial.print("\t");

  Serial.print(buf[1], DEC);
  Serial.print("\t\t");
  if(buf[3]>0){
    printSignature(buf+4, buf[3]);
  }
  else{
    Serial.print("NONE");
  }
  Serial.println("\r\n");
}

void setup() { 
  portOne.begin(9600);
  portTwo.begin(9600);
  
  Serial.begin(115200);
  Serial.println("Elechouse Voice Recognition V3 Module\r\nControl LED sample");

  if(portTwo.load((uint8_t)abrir) >= 0){
    Serial.println("abrir loaded");
  }
  
  if(portTwo.load((uint8_t)musica) >= 0){
    Serial.println("musica loaded");
  }

  if(portTwo.load((uint8_t)cerrar) >= 0){
    Serial.println("cerrar loaded");
  }

myDFPlayer.begin (portOne);

  myDFPlayer.volume(100);
  delay (1000);
myDFPlayer.play(1);
}

void loop() {

aleatorio = random(4,6);

 portOne.listen();
  Serial.println("Data from port one:");
  while (portOne.available() > 0) {
    char inByte = portOne.read();
    Serial.write(inByte);
  }

 
  Serial.println();

  
  portTwo.listen();
 
  Serial.println("Data from port two:");
  while (portTwo.available() > 0) {
    char inByte = portTwo.read();
    Serial.write(inByte);
  }

 
  Serial.println();

  
 int ret;
  ret = portTwo.recognize(buf, 50);
  if(ret>0){
    switch(buf[1]){
      
      case abrir:
        myDFPlayer.play(2);
        break;

        case cerrar:
        myDFPlayer.play(3);
        break;

        case musica:
         myDFPlayer.play(aleatorio);
        break;
        
    
        
      default:
        Serial.println("Record function undefined");
        break;
    }
    /** voice recognized */
    printVR(buf);
  }

 
}

Acceso a audios

001 intro

002 máscara abierta

003 máscara cerrada

004 shot to thrill

005 Damnation

006 Back in black

2. ESQUEMA

FINAL

CÓDIGO

FINAL

#include <SoftwareSerial.h>
#include "VoiceRecognitionV3.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#include <Servo.h>

Servo servo1; 
Servo servo2; 

VR portTwo(7,8 );
SoftwareSerial portOne(5, 6); 

long aleatorio;

DFRobotDFPlayerMini myDFPlayer;


uint8_t records[3]; 
uint8_t buf[64];

#define abrir    (0)
#define musica   (1) 
#define cerrar   (2)

void printSignature(uint8_t *buf, int len)
{
  int i;
  for(i=0; i<len; i++){
    if(buf[i]>0x19 && buf[i]<0x7F){
      Serial.write(buf[i]);
    }
    else{
      Serial.print("[");
      Serial.print(buf[i], HEX);
      Serial.print("]");
    }
  }
}

void printVR(uint8_t *buf)
{
  Serial.println("VR Index\tGroup\tRecordNum\tSignature");

  Serial.print(buf[2], DEC);
  Serial.print("\t\t");

  if(buf[0] == 0xFF){
    Serial.print("NONE");
  }
  else if(buf[0]&0x80){
    Serial.print("UG ");
    Serial.print(buf[0]&(~0x80), DEC);
  }
  else{
    Serial.print("SG ");
    Serial.print(buf[0], DEC);
  }
  Serial.print("\t");

  Serial.print(buf[1], DEC);
  Serial.print("\t\t");
  if(buf[3]>0){
    printSignature(buf+4, buf[3]);
  }
  else{
    Serial.print("NONE");
  }
  Serial.println("\r\n");
}

void setup() { 
  portOne.begin(9600);
  portTwo.begin(9600);

  
servo1.attach (2);
 servo1.write (0);

 servo2.attach (3);
 servo2.write (180);
  
  Serial.begin(115200);
  Serial.println("Elechouse Voice Recognition V3 Module\r\nControl LED sample");

  if(portTwo.load((uint8_t)abrir) >= 0){
    Serial.println("abrir loaded");
  }
  
  if(portTwo.load((uint8_t)musica) >= 0){
    Serial.println("cerrar loaded");
  }

  if(portTwo.load((uint8_t)cerrar) >= 0){
    Serial.println("cerrar loaded");
  }

myDFPlayer.begin (portOne);

  myDFPlayer.volume(100);
  delay (1000);
myDFPlayer.play(1);
}

void loop() {

aleatorio = random(4,6);

 portOne.listen();
  Serial.println("Data from port one:");
  while (portOne.available() > 0) {
    char inByte = portOne.read();
    Serial.write(inByte);
  }

 
  Serial.println();

  
  portTwo.listen();
 
  Serial.println("Data from port two:");
  while (portTwo.available() > 0) {
    char inByte = portTwo.read();
    Serial.write(inByte);
  }

 
  Serial.println();

  
 int ret;
  ret = portTwo.recognize(buf, 50);
  if(ret>0){
    switch(buf[1]){
      
      case abrir:
      servo1.write (180); 
      servo2.write (0);
        myDFPlayer.play(2);
        break;

        case cerrar:
      servo2.write (180); 
      servo1.write (0);
        myDFPlayer.play(3);
        break;

        case musica:
         myDFPlayer.play(aleatorio);
        break;
        
    
        
      default:
        Serial.println("Record function undefined");
        break;
    }
    /** voice recognized */
    printVR(buf);
  }

 
}

Proyecto Maker: Casco Iron Man

By profdanieltedesco

Proyecto Maker: Casco Iron Man

Now you can add blur and drop-shadow filters to your content blocks.

  • 68