M2LA2
Percobaan ini bertujuan untuk membuat sistem peringatan berbasis cahaya menggunakan sensor LDR dan buzzer dengan mikrokontroler STM32F103C8. Alat dan bahan yang diperlukan dalam rangkaian ini adalah satu buah mikrokontroler STM32F103C8 (Blue Pill), sebuah sensor LDR, sebuah buzzer, satu buah transistor BD139, sebuah resistor 10kΩ sebagai pull-down, sebuah resistor 2.2kΩ untuk basis transistor, kabel jumper, breadboard, dan sumber daya 3.3V serta 5V.
Langkah pertama, siapkan semua alat dan bahan yang diperlukan dan pastikan dalam kondisi baik. Selanjutnya, pasang sensor LDR dengan cara menghubungkan salah satu kakinya ke jalur +3.3V, sementara kaki lainnya dihubungkan pada mikrokontroler STM32F103C8. Pada kaki LDR yang terhubung seri resistor 10kΩ sebagai pull-down dengan menghubungkannya ke ground, agar nilai pada pin ADC tetap stabil saat tidak ada cahaya.
Kemudian, rangkai buzzer dengan cara menghubungkan kaki positif buzzer ke jalur +5V, dan kaki negatifnya ke kaki kolektor transistor BD139. Kaki emitor transistor dihubungkan ke ground, sedangkan kaki basis transistor dihubungkan ke pin PA0 pada STM32F103C8 melalui resistor 2.2kΩ. Setelah itu, sambungkan jalur 3.3V ke pin VDDA dan VDD mikrokontroler, serta pastikan semua ground dari komponen dihubungkan ke ground bersama.
Setelah perakitan selesai, program mikrokontroler menggunakan STM32CubeIDE atau software sejenis. Program berfungsi untuk membaca nilai ADC dari LDR dan menentukan kondisi cahaya di sekitar. Jika nilai lux lebih rendah dari ambang batas yang ditentukan, maka pin PA0 akan aktif (HIGH) sehingga transistor BD139 mengalirkan arus ke buzzer dan buzzer berbunyi. Sebaliknya, saat cahaya cukup terang, buzzer akan mati.
Langkah terakhir adalah melakukan pengujian dengan cara menutup atau membuka sumber cahaya di sekitar LDR. Amati apakah buzzer berbunyi saat kondisi cahaya rendah dan berhenti saat cahaya terang. Selain itu, nilai ADC atau lux yang terbaca dapat ditampilkan di terminal untuk memastikan sensor LDR bekerja dengan baik. Jika semua berfungsi sesuai yang diharapkan, maka rangkaian telah selesai dibuat dan diuji.
2. Hardware dan Diagram Blog [Kembali]
- STM32F103C8
- Resistor 10K dan 2.2k ohm
- Push Button
- LDR
- Buzzer
- Motor DC
Rangkaian ini dirancang untuk mengendalikan motor DC dan buzzer berdasarkan input dari sensor LDR yang terhubung dengan mikrokontroler STM32F103C8 melalui pembacaan nilai ADC. Sensor LDR akan mendeteksi intensitas cahaya dan menghasilkan sinyal analog yang dikonversi menjadi nilai digital oleh ADC. Nilai ADC yang diterima akan digunakan untuk mengatur kecepatan motor DC melalui PWM pada TIM1. Terdapat tiga kondisi yang berbeda berdasarkan nilai ADC: jika nilai ADC kurang dari 1500, motor akan berputar dengan kecepatan rendah; jika nilai ADC antara 1500 dan 3000, motor akan berputar dengan kecepatan sedang; dan jika nilai ADC lebih dari 3000, motor akan berputar dengan kecepatan tinggi.
Selain itu, buzzer yang terhubung ke TIM2 akan berbunyi saat nilai ADC kurang dari 1500, dengan frekuensi buzzer yang berubah setiap 500 ms. Frekuensi buzzer ini dikontrol melalui perioda timer yang diatur dalam array buzzer_periods[]
. Jika nilai ADC lebih dari 1500, buzzer akan dimatikan. Terdapat juga kontrol manual untuk mematikan buzzer, yaitu dengan menekan tombol yang terhubung ke PB0. Jika tombol ditekan, buzzer akan dimatikan paksa, dan PWM pada TIM2 akan dihentikan, mematikan buzzer secara langsung.
Secara keseluruhan, rangkaian ini mengintegrasikan sensor LDR, motor DC, buzzer, dan tombol untuk menciptakan sistem yang merespons perubahan cahaya dengan mengubah kecepatan motor dan menghasilkan suara dari buzzer, serta memungkinkan kontrol manual untuk mematikan buzzer.
4. Flowchart dan Listing Program [Kembali]
Ketika nilai ADC dari sensor LDR kurang dari 1500, motor DC berputar pelan (duty cycle 10%) dan buzzer aktif dengan frekuensi berubah. Jika nilai ADC antara 1500-3000, motor berputar sedang (duty cycle 1%) dan buzzer mati. Jika nilai ADC lebih dari 3000, motor berputar cepat (duty cycle 90%) dan buzzer tetap mati. Tombol PB0 dapat mematikan buzzer secara paksa meskipun motor tetap berputar
1. Perbedaan Implementasi PWM pada STM32 dan Raspberry Pi Pico serta Dampaknya terhadap Kontrol Motor dan Buzzer
STM32 dilengkapi dengan timer-timer khusus yang mampu menghasilkan sinyal PWM dengan tingkat presisi dan fleksibilitas yang tinggi. Hal ini memungkinkan pengaturan frekuensi dan duty cycle yang sangat akurat, sehingga kontrol terhadap motor DC maupun buzzer dapat dilakukan secara halus, stabil, dan responsif. Proses konfigurasi pada STM32 umumnya melibatkan pengaturan register timer dan pemilihan fungsi alternatif pada pin (alternate function).
Di sisi lain, Raspberry Pi Pico yang berbasis chip RP2040 juga memiliki kemampuan untuk menghasilkan sinyal PWM melalui blok PWM internal. Namun, tingkat fleksibilitas dan kontrol terhadap parameter PWM biasanya lebih terbatas dibandingkan STM32. Meskipun demikian, PWM pada Pico sudah cukup untuk aplikasi sederhana seperti pengendalian kecepatan motor atau buzzer berbasis nada, walaupun presisinya tidak setinggi STM32 dalam kasus penggunaan yang menuntut akurasi tinggi.
2. Pembacaan Sensor Analog (LDR) Menggunakan ADC pada STM32 dan Raspberry Pi Pico
STM32 menyediakan beberapa kanal ADC dengan resolusi tinggi, umumnya 12-bit, yang dapat dikonfigurasi untuk membaca sinyal analog dari sensor seperti LDR. Proses pembacaan ini dilakukan dengan mengatur register ADC, memilih kanal input, dan memicu proses konversi. Hasil pembacaan kemudian dapat dikalibrasi untuk mendapatkan nilai tegangan atau intensitas cahaya yang representatif.
Sementara itu, Raspberry Pi Pico juga memiliki fitur ADC internal dengan resolusi 12-bit, namun umumnya hanya tersedia pada tiga pin input analog. Pembacaan ADC pada Pico dilakukan melalui fungsi-fungsi yang disediakan oleh SDK (C/C++) atau modul machine dalam MicroPython. Meskipun Pico cukup andal untuk pembacaan analog dasar, performa dan kecepatan sampling-nya mungkin tidak seoptimal STM32 dalam sistem yang memerlukan pemrosesan data sensor secara cepat dan presisi tinggi.
3. Penggunaan Interrupt Eksternal untuk Deteksi Input Sensor atau Tombol pada STM32 dan Raspberry Pi Pico
Baik STM32 maupun Raspberry Pi Pico mendukung penggunaan interrupt eksternal (EXTI) yang memungkinkan deteksi otomatis terhadap perubahan status pin (seperti tombol ditekan atau sensor aktif) tanpa perlu terus melakukan polling secara manual.
STM32 menawarkan konfigurasi yang lebih luas, seperti pemilihan trigger (rising edge, falling edge, atau both), prioritas interrupt, serta pemetaan pin ke jalur interrupt melalui sistem NVIC dan EXTI. Hal ini membuat STM32 lebih fleksibel dan cocok untuk aplikasi real-time.
Di sisi lain, Raspberry Pi Pico juga mendukung interrupt melalui pustaka SDK atau MicroPython dengan cara yang lebih sederhana. Pengguna dapat menetapkan fungsi callback yang akan dijalankan ketika perubahan status pin terdeteksi. Namun, kontrol terhadap prioritas atau konfigurasi lanjutan biasanya lebih terbatas dibandingkan STM32.
4. Cara Kerja utime.ticks_ms() pada Raspberry Pi Pico dalam Menghitung Waktu Sejak Sistem Dinyalakan
Fungsi utime.ticks_ms() pada Raspberry Pi Pico berfungsi untuk mendapatkan waktu dalam satuan milidetik sejak sistem pertama kali dijalankan. Fungsi ini bekerja dengan membaca nilai counter dari timer internal yang berjalan terus-menerus, mirip dengan konsep timer berbasis millisecond pada sistem embedded lainnya.
Fungsi ini sangat berguna untuk pengukuran durasi, pembuatan delay non-blocking, maupun manajemen waktu dalam loop utama program.
Sebagai pembanding, STM32 menggunakan SysTick atau general-purpose timer yang dapat dikonfigurasi untuk menghitung waktu dalam satuan tertentu. Timer ini juga dapat digunakan sebagai dasar untuk implementasi fungsi delay atau pengukuran interval waktu dengan presisi tinggi, tergantung pada frekuensi clock dan konfigurasi prescaler.
5. Perbedaan Konfigurasi dan Kontrol Pin PWM serta Pemanfaatan Timer Internal untuk Sinyal Gelombang Persegi
STM32 memungkinkan konfigurasi PWM yang sangat terperinci dengan mengandalkan timer internal yang mendukung berbagai mode operasi. Pengguna dapat menentukan frekuensi, duty cycle, dan mode output (misalnya edge-aligned atau center-aligned). Pengaturan ini dilakukan melalui register timer dan pengaturan pin output PWM melalui fungsi alternatif. Hal ini memungkinkan pembuatan sinyal gelombang persegi yang sangat presisi dan konsisten.
Raspberry Pi Pico juga menggunakan timer internal untuk menghasilkan sinyal PWM dan gelombang persegi, namun dengan konfigurasi yang lebih sederhana melalui SDK atau MicroPython. Meskipun cukup efektif untuk aplikasi umum, pengaturan frekuensi dan resolusi PWM mungkin lebih terbatas dibanding STM32, sehingga aplikasi yang memerlukan timing sangat presisi mungkin lebih cocok menggunakan STM32.
- Datasheet STM32F103C8 klik disini
- Datasheet motor dc klik disini
- Datasheet resistor klik disini
- Datasheet buzzer klik disini
- Data Sheet LDR klik disini
- Datasheet push button klik disini
Komentar
Posting Komentar