P4K6 Buatlah rangkaian seperti pada gambar percobaan 4
dengan kondisi ketika LDR mendeteksi kondisi gelap dan PIR mendeteksi adanya
gerakan, maka LED menyala sangat terang selama 5 detik lalu kembali mati,
1. Buka Wokwi dengan mengunjungi https://wokwi.com.
2. Tambahkan komponen.
3. Hubungkan komponen sesuai kondisi
4. Tambahkan atau ketik Program yang sesuai dengan kondisi rangkaian
5. Jalankan program simulasi
1. NUCLEO C031C6
2. Push Button
3. LED
5. Ldr sensor
Light Dependent Resistor (LDR) adalah sensor cahaya yang mengubah nilai resistansi berdasarkan intensitas cahaya yang diterimanya. Saat gelap, resistansi LDR tinggi (hambatan besar), dan saat terang, resistansinya rendah (hambatan kecil). Komponen ini banyak digunakan untuk aplikasi otomatis, seperti lampu jalan dan sensor intensitas cahaya.
6.PIR sensor
Sensor PIR (Passive Infrared) adalah perangkat elektronik yang mendeteksi pergerakan manusia atau hewan dengan mengukur perubahan suhu radiasi inframerah di sekitarnya. Sensor ini sangat populer untuk sistem keamanan dan lampu otomatis karena hemat energi, terjangkau, dan mudah dipasang. Teknologi ini mendeteksi perubahan panas, bukan memancarkan energi
P4K6 Buatlah rangkaian seperti pada gambar percobaan 4
dengan kondisi ketika LDR mendeteksi kondisi gelap dan PIR mendeteksi adanya
gerakan, maka LED menyala sangat terang selama 5 detik lalu kembali mati,
Rangkaian tersebut bekerja dengan memanfaatkan mikrokontroler pada board NUCLEO-C031C6 sebagai pusat kendali yang menerima input dari push button dan slide switch, lalu mengontrol LED RGB dan buzzer sebagai output. Push button berfungsi sebagai pemicu (trigger) yang saat ditekan akan mengirimkan sinyal logika ke pin input mikrokontroler, di mana resistor digunakan sebagai pull-down atau pull-up untuk menjaga kestabilan logika agar tidak floating. Slide switch berperan sebagai pemilih kondisi atau mode, yaitu menentukan apakah rangkaian dalam keadaan aktif atau tidak.
Ketika kondisi input terpenuhi, misalnya switch dalam posisi ON dan tombol ditekan, mikrokontroler akan memproses sinyal tersebut dan mengaktifkan output berupa LED RGB serta buzzer. LED RGB akan menyala dengan warna tertentu sesuai pengaturan pin output (merah, hijau, atau biru), sedangkan buzzer akan berbunyi sebagai indikator suara. Sebaliknya, jika switch dimatikan atau tidak ada input dari tombol, maka mikrokontroler tidak memberikan sinyal ke output sehingga LED padam dan buzzer tidak berbunyi.
Dengan demikian, prinsip kerja rangkaian ini adalah sistem kontrol sederhana berbasis input (switch dan tombol) yang diproses oleh mikrokontroler untuk menghasilkan output berupa cahaya (LED RGB) dan suara (buzzer).
#include "main.h"
// HANDLE
ADC_HandleTypeDef hadc1;
TIM_HandleTypeDef htim3;
// VARIABLE
volatile uint8_t emergency_mode = 0;
uint32_t last_motion_time = 0;
// fallback tombol
uint8_t last_button_state = 1;
// PARAMETER
#define LDR_THRESHOLD 2000
#define MOTION_TIMEOUT 5000
#define LED_OFF 0
#define LED_DIM 100
#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};
// PIR → PA1
GPIO_InitStruct.Pin = GPIO_PIN_1;
GPIO_InitStruct.Mode
= GPIO_MODE_INPUT;
GPIO_InitStruct.Pull
= GPIO_NOPULL;
HAL_GPIO_Init(GPIOA,
&GPIO_InitStruct);
// BUTTON → PB1
(PULL-UP + INTERRUPT)
GPIO_InitStruct.Pin
= GPIO_PIN_1;
GPIO_InitStruct.Mode
= GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull
= GPIO_PULLUP;
HAL_GPIO_Init(GPIOB,
&GPIO_InitStruct);
// LED PWM → PA6
GPIO_InitStruct.Pin
= GPIO_PIN_6;
GPIO_InitStruct.Mode
= GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull
= GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF1_TIM3;
HAL_GPIO_Init(GPIOA,
&GPIO_InitStruct);
// IRQ untuk PB1
(EXTI0_1)
HAL_NVIC_SetPriority(EXTI0_1_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI0_1_IRQn);
}
// ================= ADC =================
void MX_ADC1_Init(void)
{
__HAL_RCC_ADC_CLK_ENABLE();
hadc1.Instance =
ADC1;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
hadc1.Init.DataAlign
= ADC_DATAALIGN_RIGHT;
hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
hadc1.Init.ContinuousConvMode = DISABLE;
HAL_ADC_Init(&hadc1);
ADC_ChannelConfTypeDef sConfig = {0};
sConfig.Channel =
ADC_CHANNEL_0;
sConfig.Rank =
ADC_REGULAR_RANK_1;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
}
// ================= PWM =================
void MX_TIM3_Init(void)
{
__HAL_RCC_TIM3_CLK_ENABLE();
htim3.Instance =
TIM3;
htim3.Init.Prescaler
= 64;
htim3.Init.Period =
1000;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
HAL_TIM_PWM_Init(&htim3);
TIM_OC_InitTypeDef
sConfigOC = {0};
sConfigOC.OCMode =
TIM_OCMODE_PWM1;
sConfigOC.Pulse = 0;
HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1);
}
// ================= INTERRUPT =================
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if (GPIO_Pin ==
GPIO_PIN_1)
{
emergency_mode =
!emergency_mode;
}
}
// ================= HELPER =================
uint16_t read_LDR(void)
{
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);
return
HAL_ADC_GetValue(&hadc1);
}
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_ADC1_Init();
MX_TIM3_Init();
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
while (1)
{
// ===== FALLBACK
BUTTON =====
uint8_t
current_button = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1);
if
(last_button_state == 1 && current_button == 0)
{
emergency_mode =
!emergency_mode;
HAL_Delay(50);
}
last_button_state
= current_button;
// ===== MODE
DARURAT =====
if
(emergency_mode)
{
set_LED(LED_OFF);
continue;
}
uint16_t ldr =
read_LDR();
uint8_t pir =
HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);
// SIANG
if (ldr <
LDR_THRESHOLD)
{
set_LED(LED_OFF);
}
else
{
// MALAM
if (pir ==
GPIO_PIN_SET)
{
last_motion_time = HAL_GetTick();
}
if
(HAL_GetTick() - last_motion_time < MOTION_TIMEOUT)
{
set_LED(LED_FULL);
}
else
{
set_LED(LED_DIM);
}
}
HAL_Delay(100);
}
}
#ifndef __MAIN_H
#define __MAIN_H
#include "stm32c0xx_hal.h"
// ================= PIN DEFINITIONS =================
// LDR (ADC)
#define LDR_PORT GPIOA
#define LDR_PIN
GPIO_PIN_0 // PA0
// PIR SENSOR
#define PIR_PORT GPIOA
#define PIR_PIN
GPIO_PIN_1 // PA1
// PUSH BUTTON (INTERRUPT)
#define BUTTON_PORT GPIOB
#define BUTTON_PIN
GPIO_PIN_1 // PB1
// LED PWM
#define LED_PORT GPIOA
#define LED_PIN
GPIO_PIN_6 // PA6 (TIM3_CH1)
// ================= FUNCTION PROTOTYPES =================
void SystemClock_Config(void);
void MX_GPIO_Init(void);
void MX_ADC1_Init(void);
void MX_TIM3_Init(void);
#endif
P4K6 Buatlah rangkaian seperti pada gambar percobaan 4
dengan kondisi ketika LDR mendeteksi kondisi gelap dan PIR mendeteksi adanya
gerakan, maka LED menyala sangat terang selama 5 detik lalu kembali mati,
Download HTML klik disini
Download file rangkaian klik disiniDownload video Simulasi klik disiniDownload Datasheet Push Button klik disiniDownload Datasheet LED klik disiniDownload Datasheet Resistor klik disiniDownload Datasheet STM Nucleo klik disini






Tidak ada komentar:
Posting Komentar