Pada artikel ini, Anda akan mempelajari cara mengintegrasikan anemometer untuk mengukur kecepatan angin menggunakan board ESP32 dan ESP8266 NodeMCU yang diprogram dengan MicroPython. Pembahasan mencakup cara menyediakan catu daya, menghubungkan sensor ke board ESP32 dan ESP8266, serta menulis kode sederhana untuk mendapatkan nilai kecepatan angin dalam berbagai satuan.
Mengenal Anemometer
Anemometer adalah perangkat yang digunakan untuk mengukur kecepatan angin dan merupakan komponen penting dalam sistem pemantauan cuaca. Penggunaan sensor ini relatif sederhana. Anemometer menghasilkan sinyal analog dengan tegangan yang berbanding lurus terhadap kecepatan angin yang terdeteksi. Pada panduan ini, kita menggunakan anemometer tipe three-cup (tiga mangkuk) seperti yang ditunjukkan pada gambar berikut.
Spesifikasi Teknis Anemometer
Setiap anemometer dapat memiliki karakteristik yang berbeda tergantung pada produsennya. Berikut adalah spesifikasi anemometer yang digunakan dalam panduan ini:
- Tegangan input: 12–24V DC
- Tegangan output: 0–5V
- Rentang pengukuran: 0–32,4 m/s
- Resolusi: ±0,3 m/s
Artinya, ketika sinyal analog berada pada 0V, kecepatan angin seharusnya bernilai 0 m/s. Namun, pada pengujian yang dilakukan, setelah sensor diberi catu daya dan melalui regulator tegangan, nilai output saat anemometer tidak bergerak terbaca sekitar 0,033V, bukan 0V.
Nilai tersebut kemudian dianggap sebagai pembacaan terendah ketika anemometer berada dalam kondisi diam. Anda juga disarankan melakukan hal yang sama dengan memeriksa nilai minimum yang terbaca dari sensor menggunakan multimeter.
Perlu diperhatikan bahwa karakteristik ini dapat berbeda tergantung produsen. Oleh karena itu, faktor tersebut harus dipertimbangkan saat mengonversi sinyal analog menjadi nilai kecepatan angin.
Pinout Anemometer
Anemometer ini memiliki tiga kabel utama:
Menghubungkan Anemometer ke ESP32 dan ESP8266
Anemometer memerlukan tegangan input minimal 12V, sehingga tidak dapat diberi catu daya langsung dari ESP32 maupun ESP8266. Oleh karena itu, diperlukan sumber daya eksternal untuk mengoperasikan sensor ini.
Sensor diberi catu daya menggunakan adaptor 12V yang terhubung ke anemometer melalui konektor power jack. Anda juga dapat menggunakan sumber daya lain yang sesuai dengan kebutuhan tegangan dan arus sensor.
Konversi Sinyal Data dari 5V ke 3.3V
Pada anemometer yang digunakan, sinyal keluarannya berada pada rentang 0–5V. Sementara itu, pin analog pada ESP32 dan ESP8266 hanya mampu membaca tegangan maksimum 3.3V. Karena itu, diperlukan konversi tegangan dari 5V menjadi 3.3V. Salah satu cara paling sederhana untuk melakukannya adalah dengan menggunakan rangkaian pembagi tegangan (voltage divider).
Catatan: Jika Anda menggunakan anemometer seperti produk dari Adafruit, langkah ini tidak diperlukan karena tegangan keluaran maksimalnya hanya sekitar 2V.
Pembagi tegangan adalah rangkaian sederhana yang berfungsi menurunkan tegangan input menjadi tegangan output yang lebih rendah. Dengan menggunakan dua buah resistor, kita dapat menghasilkan tegangan keluaran yang merupakan fraksi dari tegangan masuk. Rumus berikut dapat digunakan untuk menghitung nilai resistor yang diperlukan dalam rangkaian Anda:
Jika kita menggunakan resistor 1 kΩ (R1) dan 2 kΩ (R2), maka tegangan keluaran maksimum yang dihasilkan adalah sekitar 3.3V, sesuai dengan batas pembacaan maksimal pin analog pada ESP32.
Berikut adalah ilustrasi rangkaian pembagi tegangan, di mana 5V merupakan tegangan output maksimum dari pin data sensor:
Anda dapat menggunakan kombinasi nilai resistor lainnya, namun pastikan tegangan keluaran yang dihasilkan tetap berada dalam batas maksimum yang dapat diterima oleh mikrokontroler.
Perakitan Rangkaian: ESP32 dan ESP8266 dengan Anemometer
Komponen yang Dibutuhkan
Berikut adalah daftar perangkat yang diperlukan untuk mengikuti tutorial ini:
- Board ESP32 atau ESP8266
- Anemometer (Sensor Kecepatan Angin)
- Adaptor daya 12V DC
- DC power jack adapter
- Resistor 1 kΩ dan 2 kΩ
- Breadboard
- Kabel jumper
- Multimeter
Anda dapat menggunakan diagram berikut sebagai referensi untuk menghubungkan sensor ke board mikrokontroler. Pastikan seluruh pin GND terhubung secara bersama agar rangkaian bekerja dengan benar.
ESP32
Pada contoh ini, pin GPIO34 digunakan untuk membaca sinyal analog dari sensor. Namun, Anda dapat memilih pin analog lain yang sesuai pada ESP32.
ESP8266
Pada ESP8266 hanya tersedia satu pin analog, yaitu A0. Oleh karena itu, pembacaan sinyal analog dari anemometer wajib menggunakan pin A0 sebagai input.
Jika Anda menggunakan anemometer seperti produk Adafruit yang menghasilkan tegangan maksimum sekitar 2V, keluaran sensornya dapat dihubungkan langsung ke pin analog pada ESP tanpa memerlukan rangkaian pembagi tegangan.
ESP32 dengan Anemometer – Kode MicroPython untuk Mengukur Kecepatan Angin
Kode berikut berfungsi untuk membaca sinyal analog dari anemometer dan mengonversinya menjadi nilai kecepatan angin.
Anda dapat mengunggah kode ini ke ESP32. Pastikan untuk menyesuaikan beberapa variabel sesuai spesifikasi anemometer yang Anda gunakan.
# Rui Santos & Sara Santos - Random Nerd Tutorials
# Complete project details at https://RandomNerdTutorials.com/micropython-esp32-esp8266-anemometer-wind-sensor/
from machine import ADC, Pin
from time import sleep
# Constants
# GPIO pin connected to anemometer (ESP32)
anemometer_pin = 34
min_voltage = 0.033 # Voltage corresponding to 0 m/s
max_voltage = 3.3 # Voltage corresponding to 32.4 m/s (max speed when using voltage divider)
max_wind_speed = 32.4 # Maximum wind speed in m/s
# Conversion factors
mps_to_kmh = 3.6 # 1 m/s = 3.6 km/h
mps_to_mph = 2.23694 # 1 m/s = 2.23694 mph
# Set up the ADC
adc = ADC(Pin(anemometer_pin))
adc.atten(ADC.ATTN_11DB) # Configure ADC to read full 3.3V range (11dB attenuation)
adc.width(ADC.WIDTH_12BIT) # Set resolution to 12 bits (0-4095)
while True:
# Read analog value from anemometer (ADC value between 0-4095)
adc_value = adc.read()
# Convert ADC value to voltage
voltage = (adc_value / 4095.0) * 3.3
# Ensure the voltage is within the anemometer operating range
if voltage < min_voltage:
voltage = min_voltage
elif voltage > max_voltage:
voltage = max_voltage
# Map the voltage to wind speed
wind_speed_mps = ((voltage - min_voltage) / (max_voltage - min_voltage)) * max_wind_speed
# Convert wind speed to km/h and mph
wind_speed_kmh = wind_speed_mps * mps_to_kmh
wind_speed_mph = wind_speed_mps * mps_to_mph
# Print wind speed
print("Wind Speed:")
print("{:.2f} m/s".format(wind_speed_mps))
print("{:.2f} km/h".format(wind_speed_kmh))
print("{:.2f} mph".format(wind_speed_mph))
print()
sleep(1)
Kode untuk ESP8266 memiliki sedikit perbedaan. Scroll ke bawah untuk melihat contoh kode MicroPython yang telah disesuaikan.
ESP8266 NodeMCU dengan Anemometer – Kode MicroPython untuk Mengukur Kecepatan Angin
Kode berikut memiliki fungsi yang sama seperti pada ESP32, namun telah diadaptasi khusus untuk board ESP8266 NodeMCU.
# Rui Santos & Sara Santos - Random Nerd Tutorials
# Complete project details at https://RandomNerdTutorials.com/micropython-esp32-esp8266-anemometer-wind-sensor/
from machine import ADC, Pin
from time import sleep
# Constants
min_voltage = 0.033 # Voltage corresponding to 0 m/s
max_voltage = 3.3 # Voltage corresponding to 32.4 m/s (max speed when using voltage divider)
max_wind_speed = 32.4 # Maximum wind speed in m/s
# Conversion factors
mps_to_kmh = 3.6 # 1 m/s = 3.6 km/h
mps_to_mph = 2.23694 # 1 m/s = 2.23694 mph
# Set up the ADC
adc = ADC(0)
while True:
# Read analog value from anemometer (ADC value between 0-1023)
adc_value = adc.read()
# Convert ADC value to voltage
voltage = (adc_value / 1023.0) * 3.3
# Ensure the voltage is within the anemometer operating range
if voltage < min_voltage:
voltage = min_voltage
elif voltage > max_voltage:
voltage = max_voltage
# Map the voltage to wind speed
wind_speed_mps = ((voltage - min_voltage) / (max_voltage - min_voltage)) * max_wind_speed
# Convert wind speed to km/h and mph
wind_speed_kmh = wind_speed_mps * mps_to_kmh
wind_speed_mph = wind_speed_mps * mps_to_mph
# Print wind speed
print("Wind Speed:")
print("{:.2f} m/s".format(wind_speed_mps))
print("{:.2f} km/h".format(wind_speed_kmh))
print("{:.2f} mph".format(wind_speed_mph))
print()
sleep(1)
Cara Kerja Kode
Pertama, kita mengimpor modul-modul yang diperlukan. Kelas ADC dan pin dari modul machine digunakan untuk mengonfigurasi GPIO sebagai pin ADC.
from machine import ADC, Pin
from time import sleep
Selanjutnya, tentukan pin yang digunakan untuk membaca data sensor, nilai tegangan minimum dan maksimum yang dihasilkan sensor, serta nilai kecepatan angin maksimum. Pada contoh penggunaan ESP32, pembacaan sinyal analog dari anemometer dilakukan melalui pin GPIO34.
# GPIO pin connected to anemometer (ESP32)
anemometer_pin = 34
min_voltage = 0.033 # Voltage corresponding to 0 m/s
max_voltage = 3.3 # Voltage corresponding to 32.4 m/s (max speed when using voltage divider)
max_wind_speed = 32.4 # Maximum wind speed in m/s
Untuk ESP8266, satu-satunya pin analog yang tersedia adalah A0. Karena itu, pin tersebut harus diteruskan ke objek ADC() pada bagian kode berikutnya, seperti contoh berikut:
adc = ADC(0)
Selanjutnya, ditentukan faktor konversi yang digunakan untuk mengubah satuan kecepatan angin dari m/s ke km/jam dan mph.
# Conversion factors
mps_to_kmh = 3.6 # 1 m/s = 3.6 km/h
mps_to_mph = 2.23694 # 1 m/s = 2.23694 mph
Buat objek ADC pada GPIO yang digunakan untuk membaca sinyal analog dari sensor. Contohnya pada ESP32 adalah sebagai berikut:
adc = ADC(Pin(anemometer_pin))
Dan untuk ESP8266, konfigurasi objek **ADC** dilakukan dengan cara berikut:
adc = ADC(0)
Saat menggunakan ESP32, kita juga perlu menambahkan dua baris kode berikut.
Baris pertama mengatur agar pembacaan tegangan berada pada rentang 0 hingga 3.3V, yang dicapai dengan menetapkan rasio atenuasi sebesar 11 dB.
Baris kedua mengonfigurasi resolusi ADC menjadi 12-bit, sehingga nilai yang dibaca pada pin analog berada dalam kisaran 0 hingga 4095.
Setelah itu, program memasuki while loop yang akan mengambil nilai kecepatan angin setiap satu detik.
Langkah pertama dalam loop adalah membaca nilai ADC, kemudian mengonversinya menjadi nilai tegangan. Pada ESP32, nilai maksimum 4095 mewakili tegangan sebesar 3.3V.
while True:
# Read analog value from anemometer (ADC value between 0-4095)
adc_value = adc.read()
Dengan demikian, nilai ADC tersebut dapat dikonversi menjadi tegangan menggunakan baris kode berikut:
# Convert ADC value to voltage
voltage = (adc_value / 4095.0) * 3.3
Selanjutnya, terdapat kondisi yang digunakan untuk memastikan bahwa nilai yang terbaca berada dalam rentang yang telah ditentukan.
# Ensure the voltage is within the anemometer operating range
if voltage < min_voltage:
voltage = min_voltage
elif voltage > max_voltage:
voltage = max_voltage
Selanjutnya, tegangan hasil pembacaan dapat dipetakan dengan mudah ke nilai kecepatan angin menggunakan rumus berikut:
# Map the voltage to wind speed
wind_speed_mps = ((voltage - min_voltage) / (max_voltage - min_voltage)) * max_wind_speed
Kemudian, nilai kecepatan angin tersebut dikonversi ke dalam satuan km/jam dan mph.
# Convert wind speed to km/h and mph
wind_speed_kmh = wind_speed_mps * mps_to_kmh
wind_speed_mph = wind_speed_mps * mps_to_mph
Terakhir, hasil perhitungan tersebut ditampilkan (dicetak) ke output.
# Print wind speed
print("Wind Speed:")
print("{:.2f} m/s".format(wind_speed_mps))
print("{:.2f} km/h".format(wind_speed_kmh))
print("{:.2f} mph".format(wind_speed_mph))
print()
Demonstrasi
Jalankan atau unggah kode ke board Anda menggunakan Thonny IDE.
Pada MicroPython Shell, Anda akan melihat data kecepatan angin yang berhasil dibaca oleh sistem.
Anda mungkin perlu melakukan kalibrasi tambahan pada sensor untuk memperoleh hasil pengukuran yang lebih akurat.
Siap Untuk Membuat Proyek Impianmu Menjadi Kenyataan?
Klik di sini untuk chat langsung via WhatsApp dan dapatkan dukungan langsung dari tim ahli kami!








0 on: "Panduan Lengkap Menghubungkan Sensor Anemometer ke ESP32/ESP8266 Menggunakan MicroPython"