M2 Percobaan 4 Kondisi 1



1. Prosedur [Kembali]

Mikrokontroler STM32 Nucleo C031C6 diprogram menggunakan platform simulasi Wokwi. Langkah pertama dimulai dengan membuat project baru dan memilih board STM32 Nucleo.

Selanjutnya, dilakukan perancangan rangkaian dengan menambahkan komponen:

  • Sensor LDR module (dengan output analog)
  • Sensor PIR
  • LED sebagai lampu jalan
  • Push button (opsional sebagai kontrol tambahan)

Kemudian dilakukan pengkabelan sesuai gambar:

  • LDR
    • VCC → 5V
    • GND → GND
    • AO → pin analog STM32 (misalnya A0)
  • PIR
    • VCC → 5V
    • GND → GND
    • OUT → pin digital STM32 (misalnya D2)
  • LED
    • Anoda → pin output (misalnya D13) melalui resistor
    • Katoda → GND
  • Push button
    • Salah satu kaki → pin digital (misalnya D7)
    • Kaki lain → GND

Setelah rangkaian selesai, program ditulis pada file utama. Program dibuat agar STM32 membaca:

  • Nilai analog dari LDR (intensitas cahaya)
  • Status digital dari PIR (gerakan)

Kemudian jalankan simulasi dengan menekan Start Simulation di Wokwi untuk melihat respon sistem.

2. Hardware dan Diagram Blok[Kembali]

Hardware



STM32 NUCLEO-G474RE



LDR Sensor



PIR Sensor



LED 

Resistor 1k ohm

Jumper


Switch


Adaptor


Breadboard

Diagram Blok


3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]



Sistem bekerja dengan memanfaatkan dua sensor utama, yaitu LDR untuk mendeteksi cahaya dan PIR untuk mendeteksi gerakan.

Pada kondisi yang diberikan:

  • LDR mendeteksi cahaya terang
    Saat kondisi terang, resistansi LDR menurun sehingga tegangan output yang dibaca STM32 menunjukkan nilai tertentu (biasanya nilai ADC tinggi/rendah tergantung rangkaian modul, tapi diasumsikan sebagai kondisi “terang”).
  • PIR tidak mendeteksi gerakan
    Output dari PIR berada pada kondisi LOW (0), menandakan tidak ada aktivitas manusia di sekitar.

STM32 kemudian membaca kedua kondisi tersebut secara terus-menerus. Karena:

  • Cahaya dalam kondisi terang
  • Tidak ada gerakan yang terdeteksi

Maka sistem memutuskan bahwa lampu jalan tidak perlu dinyalakan. STM32 memberikan logika LOW pada pin output LED, sehingga LED tetap mati

4. Flowchart dan LIsting Program[Kembali]

Flowchart

MAIN.C

#include "main.h"

ADC_HandleTypeDef hadc1;

// ===== CLOCK =====
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef osc = {0};
  RCC_ClkInitTypeDef clk = {0};

  osc.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  osc.HSIState = RCC_HSI_ON;
  osc.HSIDiv = RCC_HSI_DIV1;
  osc.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  HAL_RCC_OscConfig(&osc);

  clk.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK;
  clk.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  clk.AHBCLKDivider = RCC_SYSCLK_DIV1;
  HAL_RCC_ClockConfig(&clk, FLASH_LATENCY_0);
}

// ===== ADC =====
static void MX_ADC1_Init(void)
{
  ADC_ChannelConfTypeDef s = {0};

  __HAL_RCC_ADC_CLK_ENABLE();

  hadc1.Instance = ADC1;
  hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
  hadc1.Init.Resolution = ADC_RESOLUTION_12B;
  hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
  hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;

  HAL_ADC_Init(&hadc1);

  s.Channel = ADC_CHANNEL_0; // PA0 (LDR)
  s.Rank = ADC_REGULAR_RANK_1;
  HAL_ADC_ConfigChannel(&hadc1, &s);
}

// ===== GPIO =====
static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef g = {0};

  __HAL_RCC_GPIOA_CLK_ENABLE();

  // LED (PA6)
  g.Pin = LED_PIN;
  g.Mode = GPIO_MODE_OUTPUT_PP;
  g.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(LED_PORT, &g);

  // PIR (PA1)
  g.Pin = PIR_PIN;
  g.Mode = GPIO_MODE_INPUT;
  g.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(PIR_PORT, &g);

  // LDR (PA0)
  g.Pin = LDR_PIN;
  g.Mode = GPIO_MODE_ANALOG;
  HAL_GPIO_Init(LDR_PORT, &g);
}

// ===== MAIN =====
int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_ADC1_Init();

  while (1)
  {
    // Baca LDR
    HAL_ADC_Start(&hadc1);
    HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);
    uint32_t ldr = HAL_ADC_GetValue(&hadc1);

    // Baca PIR
    GPIO_PinState pir = HAL_GPIO_ReadPin(PIR_PORT, PIR_PIN);

    // LOGIKA UTAMA (sesuai soal)
    if (ldr < LDR_THRESHOLD && pir == GPIO_PIN_RESET)
      HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET); // mati
    else
      HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_SET);   // nyala

    HAL_Delay(100);
  }
}

MAIN.H

#ifndef __MAIN_H
#define __MAIN_H

#include "stm32c0xx_hal.h"

// LDR (PA0)
#define LDR_PIN        GPIO_PIN_0
#define LDR_PORT       GPIOA

// PIR (PA1)
#define PIR_PIN        GPIO_PIN_1
#define PIR_PORT       GPIOA

// LED (PA6)
#define LED_PIN        GPIO_PIN_6
#define LED_PORT       GPIOA

#define LDR_THRESHOLD  2000

#endif

5. Video Demo [Kembali]





6. Kondisi[Kembali]

Buatlah rangkaian seperti pada gambar percobaan 4 dengan keadaan LDR mendeteksi cahaya terang dan PIR tidak mendeteksi gerakan, maka lampu jalan akan mati


7. Video Simulasi[Kembali]




8. Download File [Kembali]

        Rangkaian dan Program Wokwi [tekan disini]

    Video Rangkaian [tekan disini]

    HTML [tekan disini]






Komentar

Postingan populer dari blog ini