En este tutorial veremos como construir un sistema solar educativo, donde cada botón tendrá una grabación con información del sol, los planetas del sistema solar y también de nuestro satélite natural la luna. Esos audios tu puedes editarlos y cambiarlo por la información que más te parezca conveniente. Ideal como proyecto de feria de ciencias educativo, se va a dejar un link con información del código fuente archivo Gerber, para crear el circuito y la lista completa de los componentes electrónicos y mucho más.
Tal vez pueda interesarte proyectos en arduino, pic, robótica, telecomunicaciones, suscribete en http://www.youtube.com/user/carlosvolt?sub_confirmation=1 mucho videos con código fuentes completos y diagramas
Materiales
Arduino nano
El Arduino Nano es una placa pequeña, completa y compatible con la placa de pruebas basada en el ATmega328 (Arduino Nano 3.x). Tiene más o menos la misma funcionalidad del Arduino Duemilanove, pero en un paquete diferente. Solo carece de un conector de alimentación de CC y funciona con un cable USB Mini-B en lugar de uno estándar.
Microcontrolador | ATmega328 |
Arquitectura | AVR |
Tensión de funcionamiento | 5 V |
Memoria flash | 32 KB de los cuales 2 KB utiliza el gestor de arranque |
SRAM | 2 KB |
Velocidad de reloj | 16 MHz |
Pines analógicos IN | 8 |
EEPROM | 1 KB |
Corriente CC por pines de E / S | 40 mA (pines de E / S) |
Voltaje de entrada | 7-12 V |
Pines de E / S digitales | 22 (6 de los cuales son PWM) |
Salida PWM | 6 |
El consumo de energía | 19 mA |
Tamaño de PCB | 18 x 45 mm |
Peso | 7 g |
Diagrama de pines
Pines hembra
Zócalo para el arduino nano
Pines macho
Quince Pulsadores
Un led de 5 mm
Un capacitor de entre 10 a 100 uF
Lector de tarjeta micro SD
Resistor de 1 kohm
Tarjeta micro SD
Diagrama electrónico
PCB
Descargar Archivo Gerber —> sistema solar educativo gerber
Código Fuente
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
#include <SD.h> // Librería para interectuar con la tarjeta SD #define SD_ChipSelectPin 4 //usando el pin digital 4 en arduino nano 328, puedes usar otros pines #include <TMRpcm.h> // Es necesario incluir esta biblioteca para reproducir audio #include <U8g2lib.h> //Librería para el control del display #include <SPI.h> #include <Wire.h> //Tipo de displey usado con dirver SSD1306 de 128x32 U8G2_SSD1306_128X32_UNIVISION_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); TMRpcm tmrpcm; // crear un objeto tmrpcm const int boton2 = 2; boolean buttonState2 = 0; const int boton3 = 3; boolean buttonState3 = 0; const int boton5 = 5; boolean buttonState5 = 0; const int boton6 = 6; boolean buttonState6 = 0; const int boton7 = 7; boolean buttonState7 = 0; const int boton8 = 8; boolean buttonState8 = 0; const int boton10 = 10; boolean buttonState10 = 0; boolean estado=0; void setup(){ u8g2.begin();//Inicializamos el display pinMode(boton2, INPUT_PULLUP); pinMode(boton3, INPUT_PULLUP); pinMode(boton5, INPUT_PULLUP); pinMode(boton6, INPUT_PULLUP); pinMode(boton7, INPUT_PULLUP); pinMode(boton8, INPUT_PULLUP); pinMode(boton10, INPUT_PULLUP); pinMode(A0, INPUT_PULLUP); pinMode(A1, INPUT_PULLUP); pinMode(A2, INPUT_PULLUP); pinMode(A3, INPUT_PULLUP); pinMode(A4, INPUT_PULLUP); pinMode(A5, INPUT_PULLUP); pinMode(A6, INPUT_PULLUP); pinMode(A7, INPUT_PULLUP); tmrpcm.speakerPin = 9; //5,6,11 or 46 en Mega, 9 en Uno, Nano, etc Serial.begin(9600);//Velocidad del puerto serial if (!SD.begin(SD_ChipSelectPin)) { // ver si la tarjeta está presente y se puede inicializar Serial.println("Fallo la tarjeta SD "); return; } } void loop(){ if(estado == 0){ displayOled();//Llamamos a esta función para mostra información ee el display } //Leemos el estado de los botones buttonState2 = digitalRead(boton2); buttonState3 = digitalRead(boton3); buttonState5 = digitalRead(boton5); buttonState6 = digitalRead(boton6); buttonState7 = digitalRead(boton7); buttonState8 = digitalRead(boton8); buttonState10 = digitalRead(boton10); int buttonStateA0 = analogRead(A0); int buttonStateA1 = analogRead(A1); int buttonStateA2 = analogRead(A2); int buttonStateA3 = analogRead(A3); int buttonStateA4 = analogRead(A4); int buttonStateA5 = analogRead(A5); int buttonStateA6 = analogRead(A6); int buttonStateA7 = analogRead(A7); //Bóton reproducir información del sol if (buttonState2 == LOW) { delay(200); tmrpcm.play("elsol.wav"); } //Bóton reproducir información de mercurio if (buttonState3 == LOW) { delay(200); tmrpcm.play("mercu.wav"); } //Bóton reproducir información de venus if (buttonState5 == LOW) { delay(200); tmrpcm.play("venus.wav"); } //Bóton reproducir información la tierra if (buttonState6 == LOW) { delay(200); tmrpcm.play("latierra.wav"); } //Bóton reproducir información de marte if (buttonState7 == LOW) { delay(200); tmrpcm.play("marte.wav"); } //Bóton reproducir información de jupiter if (buttonState8 == LOW) { delay(200); tmrpcm.play("jupiter.wav"); } //Bóton reproducir información de saturno if (buttonState10 == LOW) { delay(200); tmrpcm.play("saturno.wav"); } //Bóton reproducir información urano if (buttonStateA0 < 200) { delay(200); tmrpcm.play("urano.wav"); } //Bóton reproducir información de neptuno if (buttonStateA1 < 200) { delay(200); tmrpcm.play("neptuno.wav"); } //Bóton reproducir información de ceres if (buttonStateA2 < 200) { delay(200); tmrpcm.play("ceres.wav"); } //Bóton reproducir información de plutón if (buttonStateA3 < 200) { delay(200); tmrpcm.play("pluton.wav"); } //Bóton reproducir información haumea if (buttonStateA4 < 200) { delay(200); tmrpcm.play("haumea.wav"); } //Bóton reproducir información de makemake if (buttonStateA5 < 200) { delay(200); tmrpcm.play("makemake.wav"); } //Bóton reproducir información de eris if (buttonStateA6 < 200) { delay(200); tmrpcm.play("eris.wav"); } //Bóton reproducir información la luna if (buttonStateA7 < 200) { delay(200); tmrpcm.play("laluna.wav"); } } //Mostramos en el display la leyenda Sistem solar void displayOled(){ u8g2.firstPage(); do { u8g2.setFont(u8g2_font_ncenB10_tr); u8g2.drawStr(0,24,"Sistema Solar"); estado = 1; } while ( u8g2.nextPage() ); } |
Librería
Biblioteca Arduino para la reproducción asíncrona de archivos PCM/WAV directamente desde la tarjeta SD
Utiliza la biblioteca Arduino SD estándar, la tarjeta SD y el dispositivo de salida (altavoz, auriculares, amplificador, etc.)
### Placas compatibles Todas las placas basadas en 328: Arduino Uno, Nano, Duemilanove, etc.
Tipos Mega: 1280, 2560, etc.
Características
- Reproducción PCM/WAV directamente desde la tarjeta SD
- Formatos principales: archivos WAV, 8 bits, frecuencia de muestreo de 8-32 khz, mono.
- Reproducción asíncrona: permite que se ejecute el código en el bucle principal mientras se produce la reproducción de audio.
- Funcionamiento con temporizador único: TIMER1 (Uno,Mega) o TIMER3,4 o 5 (Mega)
- Salida de cortesía o altavoces duales
- Sobremuestreo 2x
- Dispositivos compatibles: Arduino Uno, Nano, Mega, etc.
Luego copie el archivo a la tarjeta SD usando la computadora
Conectando todo
El altavoz se puede conectar directamente a los pines de salida,aunque serecomienda poner un capacitor de entre 10 a 100 uF . En dispositivos ATMega328 (Uno, Nano, etc.) pines 9,10. Consulte la información de su placa para ver los principales pines de salida PWM/temporizador de 16 bits de su placa.
Si usa un amplificador, considere que la salida es una señal PWM digital entrecortada, no una señal analógica fluida.
Nota: a menudo se aconseja NO conectar un altavoz directamente a los pines digitales de un Arduino. Esto suele ser cierto, pero TMRpcm está diseñado y probado con esta configuración:
- Por el diseño del programa, nunca debería fluir una corriente continua desde PIN->GND o PIN->PIN, siempre será un estado BAJO-BAJO o una señal PWM de alta frecuencia.
- Las reglas estándar de corriente CC (es decir, voltaje/resistencia=corriente) NO se aplican porque es más comparable a una forma de onda de CA de HF.
- La resistencia inducida (impedancia) protege la MCU de una situación de sobre corriente
Funciones
1 2 3 4 5 6 7 8 9 10 11 12 13 |
TMRpcm audio; audio.play("filename"); plays a file audio.play("filename",30); plays a file starting at 30 seconds into the track audio.play(F("filename")); plays a file storing the string in program memory instead of RAM audio.speakerPin = 11; set to 5,6,11 or 46 for Mega, 9 for Uno, Nano, etc. audio.disable(); disables the timer on output pin and stops the music audio.stopPlayback(); stops the music, but leaves the timer running audio.isPlaying(); returns 1 if music playing, 0 if not audio.pause(); pauses/unpauses playback audio.quality(1); Set 1 for 2x oversampling audio.volume(0); 1(up) or 0(down) to control volume audio.setVolume(0); 0 to 7. Set volume level audio.loop(1); 0 or 1. Can be changed during playback for full control of looping. |
Limitaciones conocidas
La carga de procesamiento se puede reducir mediante el uso de sonidos de menor calidad codificados a una frecuencia de muestreo más baja (mínimo de 8 khz)
Puede interferir con otras bibliotecas que se basan en interrupciones. isPlaying() disabled() o noInterrupts()
Las funciones se pueden utilizar para evitar la ejecución de código en paralelo.
El control de volumen permite un buen rango en el control de volumen, pero se distorsionará si el volumen es demasiado alto
1. Aparece o hace clic cuando se inicia o se detiene la reproducción:
Las rampas están integradas en la biblioteca para evitar el estallido cuando PWM está activado, desactivado y entre pistas de música de la misma
frecuencia de muestreo Consulte la [página wiki de funciones avanzadas] (https://github.com/TMRh20/TMRpcm/wiki/Advanced-Features) para conocer las causas y las soluciones.
2. Hacer estallar o hacer clic cuando se reproduce música
Si se escuchan chasquidos o clics durante la reproducción, lo más probable es que se esté produciendo una insuficiencia de datos en el búfer o que el volumen sea demasiado alto.
Asegúrese de que #define SD_FULLSPEED no esté comentado en pcmConfig.h. El valor en #define buffSize 128 se puede aumentar para proporcionar
memoria adicional para la reproducción, lo que reducirá estos problemas. De lo contrario, el audio se puede codificar a una frecuencia de muestreo más baja.
3. La biblioteca funciona bien por sí sola, pero no funciona cuando también se incluye la biblioteca <nombre>.
Lo primero que debe verificar es el uso de la memoria, ya que nada funcionará si no hay memoria.
La biblioteca utiliza dos pines de temporizador de forma predeterminada. Esto puede interferir con otras bibliotecas que lo usan. (pin 10 en Arduino Uno)
Deshabilite el segundo pin descomentando la línea #define DISABLE_SPEAKER2 en pcmConfig.h
Las placas como Uno solo tienen un temporizador de 16 bits. #define USE_TIMER2 se puede descomentar en pcmConfig.h si se requiere TIMER1 para
algo más. Consulte la [página wiki de funciones avanzadas] (https://github.com/TMRh20/TMRpcm/wiki/Advanced-Features)
4. Mensaje de error al compilar: “No tiene nombre de miembro…” o “no tiene función coincidente…”
Estos errores suelen indicar que se están ejecutando comandos que no están disponibles en la configuración actual. Compruebe el
#define en pcmConfig.h para asegurarse de que está utilizando los modos correctos y de que sus comandos son correctos.
5. Al usar una tarjeta SD, (fat16/fat32) los nombres de archivo están limitados a 8 caracteres y la extensión del archivo.
Convertir archivo de audio a archivo wav compatible
Link https://azure.microsoft.com/es-es/services/cognitive-services/text-to-speech/#overview
https://audio.online-convert.com/convert-to-wav
Descargar audios —> sonidos
Problemas comunes
1. Aparece o hace clic cuando se inicia o se detiene la reproducción:
Las rampas están integradas en la biblioteca para evitar el estallido cuando PWM está activado, desactivado y entre pistas de música de la misma
frecuencia de muestreo Consulte la [página wiki de funciones avanzadas] (https://github.com/TMRh20/TMRpcm/wiki/Advanced-Features) para conocer las causas y las soluciones.
2. Hacer estallar o hacer clic cuando se reproduce música
Si se escuchan chasquidos o clics durante la reproducción, lo más probable es que se esté produciendo una insuficiencia de datos en el búfer o que el volumen sea demasiado alto.
Asegúrese de que #define SD_FULLSPEED no esté comentado en pcmConfig.h. El valor en #define buffSize 128 se puede aumentar para proporcionar
memoria adicional para la reproducción, lo que reducirá estos problemas. De lo contrario, el audio se puede codificar a una frecuencia de muestreo más baja.
3. La biblioteca funciona bien por sí sola, pero no funciona cuando también se incluye la biblioteca <nombre>.
Lo primero que debe verificar es el uso de la memoria, ya que nada funcionará si no hay memoria.
La biblioteca utiliza dos pines de temporizador de forma predeterminada. Esto puede interferir con otras bibliotecas que lo usan. (pin 10 en Arduino Uno)
Deshabilite el segundo pin descomentando la línea #define DISABLE_SPEAKER2 en pcmConfig.h
Las placas como Uno solo tienen un temporizador de 16 bits. #define USE_TIMER2 se puede descomentar en pcmConfig.h si se requiere TIMER1 para
algo más. Consulte la [página wiki de funciones avanzadas] (https://github.com/TMRh20/TMRpcm/wiki/Advanced-Features)
4. Mensaje de error al compilar: “No tiene nombre de miembro…” o “no tiene función coincidente…”
Estos errores suelen indicar que se están ejecutando comandos que no están disponibles en la configuración actual. Compruebe el
#define en pcmConfig.h para asegurarse de que está utilizando los modos correctos y de que sus comandos son correctos.
5. Al usar una tarjeta SD, (fat16/fat32) los nombres de archivo están limitados a 8 caracteres y la extensión del archivo.
Convertir archivo de audio a archivo wav compatible
Link Link https://audio.online-convert.com/convert-to-wav
Crear texto a audio de voz (TTS)
Link https://azure.microsoft.com/es-es/services/cognitive-services/text-to-speech/#overview
PROYECTO RECOMENDADO