Percobaan 1 Kondisi 4
TUGAS PENDAHULUAN
PERCOBAAN 1 KONDISI 4
1. Prosedur [kembali]
- Pahami terlebih dahulu kondisi yang akan digunakan
- Buka software Proteus 8.17
- Persiapkan alat dan bahan
- Buat rangkaian sesuai dengan kondisi dan modul
- Buka software STM32Cube IDE
- Setelah membuka software, pilih perangkat STM32F103C8T6
- Sesuaikan konfigurasi pin sesuai dengan rangkaian proteus
- Buat kode program untuk mengoperasikan rangkaian tersebut sesuai dengan kondisi
- Konfigurasi kan program dengan software Proteus
- Jalankan simulasi rangkaian.
- Proses selesai
2. Hardware[kembali]
Microcontroller | STM32G474RE (ARM Cortex-M4F) |
Operating Voltage | 3.3 V |
Input Voltage (recommended) | 5 V via USB (ST-LINK) atau 7–12 V via VIN |
Input Voltage (limit) | 4.5 – 15 V (VIN board Nucleo) |
Digital I/O Pins | ±51 GPIO pins (tergantung konfigurasi fungsi) |
PWM Digital I/O Pins | Hingga 24 channel PWM (advanced, general-purpose, dan high-resolution timers) |
Analog Input Pins | Hingga 24 channel ADC (12-bit / 16-bit dengan oversampling) |
DC Current per I/O Pin | Maks. 20 mA per pin (disarankan ≤ 8 mA) |
DC Current for 3.3V Pin | Hingga ±500 mA (tergantung regulator & sumber daya) |
Flash Memory | 512 KB internal Flash |
SRAM | 128 KB SRAM (termasuk CCM RAM) |
Clock Speed | Hingga 170 MHz |
2. STM32F103C8
Microcontroller | ARM Cortex-M3 |
Operating Voltage | 3.3 V |
Input Voltage (recommended) | 5 V |
Input Voltage (limit) | 2 – 3.6 V |
Digital I/O Pins | 32 |
PWM Digital I/O Pins | 15 |
Analog Input Pins | 10 (dengan resolusi 12-bit ADC) |
DC Current per I/O Pin | 25 mA |
DC Current for 3.3V Pin | 150 mA |
Flash Memory | 64 KB |
SRAM | 20 KB |
EEPROM | Emulasi dalam Flash |
Clock Speed | 72 MHz |
3. Touch Sensor
SPESIFIKASI :
- Konsumsi daya yang rendah
- Bisa menerima tegangan dari 2 ~ 5.5V DC
- Dapat menggantikan fungsi saklar tradisional
- Dilengkapi 4 lobang baut untuk memudahkan pemasangan
- Tegangan kerja : 2v s/d 5.5v (optimal 3V)
- Output high VOH : 0.8 VCC (typical)
- Output low VOL : 0.3 VCC (max)
- Arus Output Pin Sink (@ VCC 3V, VOL 0.6V) : 8 mA
- Arus Output pin pull-up (@ VCC=3V, VOH=2.4V) : 4 mA
- Waktu respon (low power mode): max 220 ms
- Waktu respon (touch mode): max 60 ms
- Ukuran: 24 mm x 24 mm x 7.2 mm
4. PIR Sensor
8. Diagram Blok
3. Rangkaian Simulasi dan Prinsip Kerja [kembali]
delay_time) berakhir, mikrokontroler akan terus memperbarui catatan waktu pemicuan terakhir sehingga LED tetap menyala tanpa terputus. Sebaliknya, jika tidak ada gerakan tambahan yang terdeteksi hingga selisih waktu saat ini dengan waktu pemicuan terakhir mencapai atau melebihi 5 detik, mikrokontroler secara otomatis mematikan LED untuk menghemat daya./* ================== VARIABEL ================== */
uint8_t pir_last = 0;
uint8_t pir_first_trigger = 1;
uint32_t last_trigger_time = 0;
uint32_t delay_time = 5000; // 5 detik
/* ================== PROTOTYPE ================== */
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
void Error_Handler(void);
/* ================== MAIN ================== */
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
uint8_t pir_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
/* ===== DETEKSI RISING EDGE (LOW -> HIGH) ===== */
if (pir_now == GPIO_PIN_SET && pir_last == GPIO_PIN_RESET)
{
// Nyalakan LED
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
// Simpan waktu trigger
last_trigger_time = HAL_GetTick();
// Buzzer hanya sekali saat trigger awal
if (pir_first_trigger)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
pir_first_trigger = 0;
}
}
/* ===== KONTROL MATI BERDASARKAN TIMER ===== */
if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) == GPIO_PIN_SET)
{
if ((HAL_GetTick() - last_trigger_time) >= delay_time)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
// Reset agar buzzer bisa bunyi lagi
pir_first_trigger = 1;
}
}
/* Simpan kondisi sebelumnya */
pir_last = pir_now;
}
}
/* ================== 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;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
Error_Handler();
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK |
RCC_CLOCKTYPE_SYSCLK |
RCC_CLOCKTYPE_PCLK1;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
Error_Handler();
}
/* ================== GPIO ================== */
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/* PA0 = PIR */
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* PB0 = LED, PB1 = BUZZER */
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* Default OFF */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1, GPIO_PIN_RESET);
}
/* ================== ERROR ================== */
void Error_Handler(void)
{
__disable_irq();
while (1)
{
}
}
5. Video Demo [kembali]
6. Kondisi [kembali]
Percobaan 1 Kontrol Lampu Lorong
Kondisi 4 : Buatlah rangkaian seperti pada gambar percobaan 1 dengan kondisi PIR mendeteksi gerakan berulang sebelum waktu tunda habis dan sensor Touch tidak disentuh, maka LED tetap menyala
7. Video Simulasi [kembali]
8. Link Download [kembali]
- Rangkaian Proteus [Download]
- Program [Download]
- Vidio [Download]
- Datasheet STM32F103C8 [Download]
- Datasheet Touch Sensor [Download]
- Datasheet PIR Sensor [Download]
- Datasheet LED [Download]
Komentar
Posting Komentar