Contents
Pada artikel yang lalu sudah saya sajikan bagaimana membuat Audio Frequency Meter (alat pengukur frekuesi suara) dengan Arduino (Uno). Untuk mem-porting-nya ke NodeMCU ternyata tidak bisa lakukan, karena ada perbedaan karakteristik hardware yang didukung oleh library yang kita gunakan (FreqMeasure). Library ini secara khusus menggunakan special function input clock (CLK0) pada pin 8 Arduino untuk menghitung frekuensi yang masuk. Sayangnya, hardware NodeMCU (ESP8266 tipe ESP-12E) berbeda dengan arsitektur Arduino Uno yang berbasis mikrokontroller ATMEGA328. Jadi kita kita akan coba menggunakan pendekatan lain dengan library yang berbeda
Menghitung Frekuensi di NodeMCU dengan Library ArduinoFFT
Kali ini kita akan coba menghitung frekuensi menggunakan library ArduinoFFT (Fast Fourier Transform). Kelebihan menggunakan library ini adalah tidak terpakunya penggunaan pin I/O hardware agar library dapat bekerja. Metode dari library ini cukup menggunakan salah satu pin analog sebagai inputan untuk sinyal frekuensi yang akan diukur. Baik, silahkan diunduh dulu library ini di sini. Tambahkan library ke software Arduino IDE Anda melalui menu Sketch – Include Library – Add .Zip Library
Percobaan Audio frekuency meter NodeMCU ESP8266 ESP12
Alat dan bahan untuk percobaan membuat alat pengukur frekuensi dengan esp8266 (NodeMCU) ini yaitu:
- NodeMCU ESP-12E, beli (Lolin) atau beli (Amica)
- kabel jumper female to female, beli (20cm), beli (10 cm)
- sensor suara (sound sensor) MAX4466, beli
- buzzer aktif (opsional, hanya untuk generate frekuensi suara), beli
Setelah semua hardware siap, silahkan rangkai semuanya seperti gambar di bawah
Kemudian upload sketch/script berikut ke NodeMCU (ESP8266/ESP12E) Anda
#include "arduinoFFT.h"
#define SCL_INDEX 0x00
#define SCL_TIME 0x01
#define SCL_FREQUENCY 0x02
#define SCL_PLOT 0x03
arduinoFFT FFT = arduinoFFT();
const uint16_t samples = 64; //This value MUST ALWAYS be a power of 2
const double signalFrequency = 1000;
const double samplingFrequency = 5000;
const uint8_t amplitude = 100;
/*
These are the input and output vectors
Input vectors receive computed results from FFT
*/
double vReal[samples];
double vImag[samples];
void setup()
{
Serial.begin(115200);
Serial.println("Ready");
}
void loop()
{
/* Build raw data */
double cycles = (((samples-1) * signalFrequency) / samplingFrequency); //Number of signal cycles that the sampling will read
for (uint16_t i = 0; i < samples; i++)
{
vReal[i] = analogRead(0);
vImag[i] = 0.0; //Imaginary part must be zeroed in case of looping to avoid wrong calculations and overflows
}
FFT.Windowing(vReal, samples, FFT_WIN_TYP_HAMMING, FFT_FORWARD);
FFT.Compute(vReal, vImag, samples, FFT_FORWARD);
FFT.ComplexToMagnitude(vReal, vImag, samples);
double x = FFT.MajorPeak(vReal, samples, samplingFrequency);
Serial.print("Freq:");Serial.println(x, 6);
delay(1000);
}
Hasilnya dapat Anda lihat di Serial Monitor sebagai berikut
Bagi yang masih bingung bisa melihat video demo untuk percobaan di youtube, seperti pada video di bawah
Demikian sedikit tutorial bagaimana mengukur frekuensi audio menggunakan NodeMCU ESP8266 dan sensor suara Max4466. Semoga bermanfaat
a Technopreneur – writer – Enthusiastic about learning AI, IoT, Robotics, Raspberry Pi, Arduino, ESP8266, Delphi, Python, Javascript, PHP, etc. Founder of startup Indomaker.com