Introducción
En este tutorial, aprenderemos a construir un medidor de frecuencia con Arduino, capaz de identificar notas musicales en tiempo real y mostrarlas en un display OLED SH1106. Para lograrlo, utilizaremos la librería FreqCount para medir la frecuencia de una señal de entrada y la librería U8glib para visualizar los datos en pantalla. Este proyecto es ideal para músicos, ingenieros y aficionados que quieran explorar el análisis de señales de audio.
Funcionamiento del Proyecto
El código está diseñado para medir la frecuencia de una señal de entrada y compararla con una tabla de notas musicales. Luego, la frecuencia y la nota detectada se muestran en el display OLED.
1. Configuración del Hardware
Conecta el display OLED SH1106 a Arduino mediante la interfaz I2C:
- VCC → 5V
- GND → GND
- SDA → A4
- SCL → A5
La señal de entrada de audio se debe conectar a un pin digital compatible con la librería FreqCount (por ejemplo, el pin 5 en Arduino Uno).
Componentes electrónicos del proyecto
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
Un Zócalo para arduino
Pines hembra
Cables dupont hembra macho
Display oled sh1106
Se trata de un módulo de pantalla OLED monocromática DE 128×64 puntos con interface I2C .Que presenta varias ventajas en comparación con pantallas LCD, y podemos destacar su alto brillo, un muy buen contraste, un ángulo de visión más amplio, y bajo consumo de energía. ES compatible con Arduino Rasberry Pi y microcontroladores PIC entre otros. Trabaja con niveles lógicos de 3.3V a 5V tiene un angulo de visión mayor a los 160 grados. el Tamaño de la pantalla es de 1,3 pulgadas. Se alimenta con un voltaje de 3.3V a 5V Se lo puede usar en aplicaciones como relojes inteligentes, MP3, termómetros, instrumentos, y proyectos varios, etc.
Características
- Interface: I2C(3.3V / 5V logic level)
- Resolution: 128 x 64
- Angle of view: >160 degree
- Display color: Blue
- Display size: 1.3 inch
- Driver IC: SH1106
- Power supply: DC 3.3V~5V
- Operating temperature: -20~70’C
- Application: smart watch, MP3, thermometer, instruments, DIY projects, etc.
FC-04 (KY-37)
Descripción
Modelo: FC-04 (FC04)
Sensor de sonido, con sensibilidad ajustable mediante potenciómetro.
Tensión de alimentación: 3-5V
Tamaño: 32 x 17 mm
PCB
Diagrama electrónico del pcb
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 |
#include "U8glib.h" // Librería para el control del display OLED #include <FreqCount.h> // Inicialización del display OLED U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); unsigned long Contador = 0; // Tabla de frecuencias de notas musicales desde C0 hasta B8 struct Nota { const char* nombre; float frecuencia; }; Nota notas[] = { {"C0", 16.35}, {"C#0", 17.32}, {"D0", 18.35}, {"D#0", 19.45}, {"E0", 20.60}, {"F0", 21.83}, {"F#0", 23.12}, {"G0", 24.50}, {"G#0", 25.96}, {"A0", 27.50}, {"A#0", 29.14}, {"B0", 30.87}, {"C1", 32.70}, {"C#1", 34.65}, {"D1", 36.71}, {"D#1", 38.89}, {"E1", 41.20}, {"F1", 43.65}, {"F#1", 46.25}, {"G1", 49.00}, {"G#1", 51.91}, {"A1", 55.00}, {"A#1", 58.27}, {"B1", 61.74}, {"C2", 65.41}, {"C#2", 69.30}, {"D2", 73.42}, {"D#2", 77.78}, {"E2", 82.41}, {"F2", 87.31}, {"F#2", 92.50}, {"G2", 98.00}, {"G#2", 103.83}, {"A2", 110.00}, {"A#2", 116.54}, {"B2", 123.47}, {"C3", 130.81}, {"C#3", 138.59}, {"D3", 146.83}, {"D#3", 155.56}, {"E3", 164.81}, {"F3", 174.61}, {"F#3", 185.00}, {"G3", 196.00}, {"G#3", 207.65}, {"A3", 220.00}, {"A#3", 233.08}, {"B3", 246.94}, {"C4", 261.63}, {"C#4", 277.18}, {"D4", 293.66}, {"D#4", 311.13}, {"E4", 329.63}, {"F4", 349.23}, {"F#4", 369.99}, {"G4", 392.00}, {"G#4", 415.30}, {"A4", 440.00}, {"A#4", 466.16}, {"B4", 493.88}, {"C5", 523.25}, {"C#5", 554.37}, {"D5", 587.33}, {"D#5", 622.25}, {"E5", 659.25}, {"F5", 698.46}, {"F#5", 739.99}, {"G5", 783.99}, {"G#5", 830.61}, {"A5", 880.00}, {"A#5", 932.33}, {"B5", 987.77}, {"C6", 1046.50}, {"C#6", 1108.73}, {"D6", 1174.66}, {"D#6", 1244.51}, {"E6", 1318.51}, {"F6", 1396.91}, {"F#6", 1479.98}, {"G6", 1567.98}, {"G#6", 1661.22}, {"A6", 1760.00}, {"A#6", 1864.66}, {"B6", 1975.53}, {"C7", 2093.00}, {"C#7", 2217.46}, {"D7", 2349.32}, {"D#7", 2489.02}, {"E7", 2637.02}, {"F7", 2793.83}, {"F#7", 2959.96}, {"G7", 3135.96}, {"G#7", 3322.44}, {"A7", 3520.00}, {"A#7", 3729.31}, {"B7", 3951.07}, {"C8", 4186.01} }; void setup() { Serial.begin(115200); FreqCount.begin(1000); } const char* detectarNota(float frecuencia) { for (int i = 0; i < sizeof(notas) / sizeof(Nota); i++) { float tolerancia = notas[i].frecuencia * 0.05; // 5% de tolerancia if (frecuencia >= (notas[i].frecuencia - tolerancia) && frecuencia <= (notas[i].frecuencia + tolerancia)) { return notas[i].nombre; } } return "Desconocida"; } void loop() { if (FreqCount.available()) { Contador = FreqCount.read(); Serial.print("Frecuencia detectada: "); Serial.print(Contador); Serial.print(" Hz - Nota: "); Serial.println(detectarNota(Contador)); u8g.firstPage(); do { draw(); } while (u8g.nextPage()); } } void draw() { u8g.setFont(u8g_font_unifont); u8g.setPrintPos(0, 20); u8g.print("Freq: "); u8g.print(Contador); u8g.print("Hz"); u8g.setPrintPos(0, 40); u8g.print("Nota: "); u8g.print(detectarNota(Contador)); } |
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
VIDEO RECOMENDADO