Langsung ke konten utama

Tugas Pendahuluan 2 Dan Laporan Akhir 2



1. Prosedur [kembali]

  1. Langkah-langkah percobaan :

    1. Buka web WOKWI.COM dan cari STM 32 NUCLEO C031C6

    2. Rangkai komponen sesuai dengan modul percobaan

    3. Klik pada Library Manager untuk membuat file baru yang bernama main.h dan main.c

    4. Masukan program yang telah di buat sesuai kondisi pada kedua file tersebut

    5. Jalankan

    Langkah-langkah percobaan secara langsung:
  2. Siapkan seluruh komponen yang dibutuhkan.
  3. Rangkai komponen sesuai dengan gambar yang ada di modul.
  4. Pastikan semua koneksi sudah sesuai, tidak ada kabel yang longgar atau terbalik.
  5. Buka software STM32CubeIDE lalu lakukan konfigurasi pin pada STM untuk menentukan ADC, PWM, dan interrupt
  6. Masukan Program ke dalam software STM32CubeIDE lalu build untuk memastikan tidak ada program yang error
  7. Hubungkan board STM32 ke komputer, lalu lakukan pemrograman sesuai dengan flowchart yang telah dibuat.
  8. Setelah program berhasil di-upload, silahkan run untuk memastikan logika dan rangkaian sudah benar.

2. Hardware dan Diagram Blok [kembali]

  • a. Hardware
    1. STM32F103C8
    TM32F103C8 adalah mikrokontroler berbasis ARM Cortex-M3 yang  dikembangkan oleh STMicroelectronics. Mikrokontroler ini sering digunakan dalam pengembangan sistem tertanam karena kinerjanya yang baik, konsumsi daya yang rendah, dan kompatibilitas dengan berbagai protokol komunikasi. Pada praktikum ini, kita menggunakan STM32F103C8 yang dapat diprogram menggunakan berbagai  metode, termasuk komunikasi serial (USART), SWD (Serial Wire Debug), atau JTAG untuk berhubungan dengan komputer maupun perangkat lain.

    2. Sensor Suhu LM35

    LM35 temperature sensor adalah sensor suhu analog berbasis IC yang digunakan untuk mengukur temperatur lingkungan dalam satuan derajat Celsius (°C).

    3. Kipas DC

    Kipas DC adalah kipas yang menggunakan sumber listrik arus searah (Direct Current / DC) untuk menggerakkan motor sehingga menghasilkan aliran udara.


    4. Motor Driver l298N 

    Motor Driver L298N adalah modul driver motor berbasis IC L298 yang digunakan untuk mengendalikan motor DC atau motor stepper dengan bantuan mikrokontroler.


    5. Push Button

    Push button adalah saklar mekanik sederhana yang bekerja saat ditekan untuk menghubungkan atau memutus aliran listrik dalam suatu rangkaian.

    6. Resistor 

    Resistor adalah komponen elektronik pasif yang berfungsi untuk membatasi arus listrik dalam suatu rangkaian. Resistor bekerja berdasarkan hukum Ohm, yang menyatakan bahwa tegangan (V) = arus (I) × resistansi (R). Resistor memiliki satuan Ohm (Ω) dan digunakan dalam berbagai aplikasi seperti pembagian tegangan, kontrol arus, dan proteksi rangkaian elektronik.

    7. Adaptor



    8. Jumper



    9. Breadboard



    b. Diagram Blok
    a. Hardware
    1. STM32 NUCLEO-G474RE

    STM32 NUCLEO-G474RE adalah papan pengembangan (development board) berbasis mikrokontroler STM32 yang dirancang oleh STMicroelectronics untuk memudahkan proses pembelajaran, prototyping, dan pengembangan sistem embedded.

    Secara spesifik, board ini menggunakan mikrokontroler STM32G474RE, yang termasuk dalam keluarga STM32 seri G4. Mikrokontroler ini berbasis inti ARM Cortex-M4 dengan kemampuan pemrosesan yang cukup tinggi serta dilengkapi dengan fitur DSP (Digital Signal Processing) dan FPU (Floating Point Unit), sehingga sangat cocok untuk aplikasi yang membutuhkan perhitungan matematis cepat seperti kontrol motor, sistem tenaga, dan pengolahan sinyal.


    2. LDR Sensor



    Light Dependent Resistor (LDR) adalah sensor cahaya yang nilai resistansinya berubah sesuai intensitas cahaya yang diterimanya.

    3. PIR Sensor

    Passive Infrared Sensor (PIR) adalah sensor gerak yang digunakan untuk mendeteksi keberadaan manusia atau objek hidup berdasarkan radiasi inframerah (panas tubuh).


    4. Resistor 

    Resistor adalah komponen elektronik pasif yang berfungsi untuk membatasi arus listrik dalam suatu rangkaian. Resistor bekerja berdasarkan hukum Ohm, yang menyatakan bahwa tegangan (V) = arus (I) × resistansi (R). Resistor memiliki satuan Ohm (Ω) dan digunakan dalam berbagai aplikasi seperti pembagian tegangan, kontrol arus, dan proteksi rangkaian elektronik.

    5. LED

    LED adalah dioda semikonduktor yang dapat memancarkan cahaya ketika dialiri arus listrik. LED digunakan dalam berbagai aplikasi seperti indikator elektronik, pencahayaan, dan display. LED hanya bekerja pada arah bias maju dan memiliki berbagai warna yang ditentukan oleh material semikonduktornya.

    6. Push Button

    Push button adalah komponen input berupa saklar mekanis yang bekerja ketika ditekan (push) oleh pengguna untuk menghubungkan atau memutuskan aliran listrik dalam suatu rangkaian.

    Secara prinsip kerja, push button memiliki dua kondisi utama, yaitu Normally Open (NO) dan Normally Closed (NC). Pada tipe Normally Open, dalam kondisi tidak ditekan rangkaian berada dalam keadaan terbuka (tidak mengalirkan arus), dan ketika tombol ditekan, rangkaian menjadi tertutup sehingga arus dapat mengalir. Sebaliknya, pada tipe Normally Closed, rangkaian dalam kondisi normal tertutup dan akan terbuka saat tombol ditekan.

    7. Adaptor



    8. Jumper



    9. Breadboard



    b. Diagram Blok



    b. Diagram Blok

3. Rangkaian Simulasi dan Prinsip Kerja [kembali]





Prinsip Kerja :

Ketika rangkaian diaktifkan, mikrokontroler STM32 NUCLEO-C031C6 akan terus memantau data dari sensor yang terpasang pada sistem. Sensor suara yang terhubung ke pin analog digunakan untuk mendeteksi adanya bunyi di lingkungan sekitar. Sinyal analog dari sensor tersebut dibaca oleh fitur ADC pada mikrokontroler sehingga dapat diubah menjadi data digital yang mudah diproses oleh program. Dari hasil pembacaan ini, sistem dapat menentukan apakah ada suara dengan intensitas tertentu yang dianggap sebagai trigger untuk mengaktifkan perangkat keluaran.

Selain sensor suara, sistem juga memanfaatkan sensor gerak PIR untuk mendeteksi keberadaan atau pergerakan manusia. Sensor PIR akan memberikan sinyal digital ketika mendeteksi gerakan di area sekitarnya. Agar respon sistem lebih cepat, pin dari sensor PIR dapat diatur menggunakan mekanisme interrupt. Dengan cara ini, mikrokontroler dapat langsung merespons saat ada gerakan tanpa harus menunggu proses pembacaan pada loop utama selesai.

Jika sistem mendeteksi suara atau gerakan, maka LED yang terhubung ke pin output akan dinyalakan. Pengaturan nyala LED dapat dilakukan menggunakan teknik PWM sehingga tingkat terang lampu bisa disesuaikan. Duty cycle PWM yang lebih besar akan membuat LED menyala semakin terang, sedangkan duty cycle yang kecil menghasilkan cahaya yang lebih redup. Metode ini membuat sistem lebih fleksibel dalam mengatur intensitas pencahayaan.

Ketika tidak ada aktivitas yang terdeteksi, baik dari sensor suara maupun sensor gerak, LED akan dimatikan secara otomatis untuk menghemat energi. Namun, sistem biasanya memberikan jeda waktu tertentu sebelum lampu benar-benar mati agar pencahayaan tidak berubah terlalu cepat. Jika dalam jeda tersebut terdeteksi aktivitas baru, maka LED akan tetap menyala sesuai pengaturan sistem.

Pada rangkaian juga terdapat push button yang berfungsi sebagai kontrol manual. Tombol ini memungkinkan pengguna untuk menyalakan atau mematikan sistem secara langsung. Dengan memanfaatkan fitur interrupt pada mikrokontroler, tombol dapat memberikan respon yang cepat ketika ditekan tanpa mengganggu proses utama yang sedang berjalan.

Secara keseluruhan, sistem ini bekerja dengan menggabungkan pembacaan sensor menggunakan ADC, deteksi cepat melalui interrupt, dan pengaturan keluaran menggunakan PWM. Integrasi ketiga metode tersebut membuat rangkaian mampu bekerja secara otomatis, responsif, dan lebih efisien dalam penggunaan daya listrik.

4. Flowchart dan Listing Program [kembali]

 
  • Flowchart

a. Flowchart


  • Program
/#include "main.h" 
 
// HANDLE
TIM_HandleTypeDef htim3;
 
// VARIABLE
uint8_t led_state = 0;   // Menyimpan status LED saat ini (0 = Mati, 1 = Menyala)
uint8_t last_button = 1; // Menyimpan status tombol sebelumnya (Default 1 karena Pull-Up)
 
// PARAMETER
#define LED_OFF   0
#define LED_FULL  1000
 
// ================= CLOCK =================
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
 
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  HAL_RCC_OscConfig(&RCC_OscInitStruct);
 
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
 
  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);
}
 
// ================= GPIO =================
void MX_GPIO_Init(void)
{
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();
 
  GPIO_InitTypeDef GPIO_InitStruct = {0};
 
  // BUTTON PB1 (Gaya referensi Anda)
  GPIO_InitStruct.Pin = GPIO_PIN_1;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 
  // LED PWM PA6 (Menggunakan fungsi TIM3)
  GPIO_InitStruct.Pin = GPIO_PIN_6;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Alternate = GPIO_AF1_TIM3;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
 
// ================= PWM =================
void MX_TIM3_Init(void)
{
  __HAL_RCC_TIM3_CLK_ENABLE();
 
  htim3.Instance = TIM3;
  htim3.Init.Prescaler = 64;
  htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim3.Init.Period = 1000;
 
  HAL_TIM_PWM_Init(&htim3);
 
  TIM_OC_InitTypeDef sConfigOC = {0};
  sConfigOC.OCMode = TIM_OCMODE_PWM1;
  sConfigOC.Pulse = 0;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
 
  HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1);
}
 
// ================= HELPER =================
void set_LED(uint16_t value)
{
  __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, value);
}
 
// ================= MAIN =================
int main(void)
{
  HAL_Init();
  SystemClock_Config();
 
  MX_GPIO_Init();
  MX_TIM3_Init();
 
  HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
 
  // Pastikan LED mati saat mikrokontroler pertama kali menyala
  set_LED(LED_OFF);
 
  while (1)
  {
    // ===== BUTTON TOGGLE (Gaya referensi Anda) =====
    uint8_t button = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1);
 
    // Jika status sebelumnya 1 (tidak ditekan) dan sekarang 0 (ditekan)
    if (last_button == 1 && button == 0)
    {
      // Balikkan status LED (0 jadi 1, atau sebaliknya)
      led_state = !led_state;
     
      // Update perangkat keras (LED) sesuai status baru
      if (led_state == 1)
      {
         set_LED(LED_FULL); // Nyalakan LED secara permanen (Terang)
      }
      else
      {
         set_LED(LED_OFF);  // Matikan LED
      }
     
      // Debounce: Jeda sedikit agar tidak ada pantulan (bouncing) pada mekanik tombol
      HAL_Delay(50);
    }
 
    // Simpan status tombol saat ini untuk dicek pada putaran (loop) berikutnya
    last_button = button;
 
    // Jeda kecil agar mikrokontroler rileks
    HAL_Delay(10);
  }
}
.

7. Video Simulasi [kembali]






8. Download File [kembali]









Komentar

Postingan populer dari blog ini