Buka aplikasi Proteus, buat project baru, lalu tambahkan komponen: STM32F103C6, touch sensor, sensor IR, LED, resistor 220Ω & 10kΩ, buzzer, dan push button ke workspace.
Hubungkan komponen sesuai skematik:
- Sensor → pin input (PA0 dan PA1)
- LED & buzzer → pin output (PB0 dan PB1)
- Pastikan VCC/VDDA dan GND/VSSA terhubung dengan benar
Compile program menggunakan Arduino IDE atau STM32CubeIDE hingga menghasilkan file .hex atau .elf.
Klik dua kali STM32 di Proteus, lalu masukkan file hasil compile pada bagian “Program File”.
Tekan tombol Play/Run Simulation untuk mulai menjalankan rangkaian.
Ubah kondisi input sensor (0 ↔ 1), lalu amati respons LED dan buzzer sebagai output.
2. Hardware dan Diagram Blok[Kembali]
3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]
Prinsip Kerja Sistem
1. Kondisi Awal
Saat rangkaian pertama kali dinyalakan, mikrokontroler STM32 akan melakukan proses inisialisasi sistem, meliputi:
-
HAL_Init()untuk menginisialisasi library HAL -
SystemClock_Config()untuk mengatur clock menggunakan internal HSI -
MX_GPIO_Init()untuk mengonfigurasi pin GPIO
Adapun konfigurasi pin yang digunakan yaitu:
- PA0 sebagai input dari sensor IR dengan mode pull-down
- PA1 sebagai input dari sensor sentuh dengan mode pull-down
- PB0 dan PB1 sebagai output untuk LED
Pada kondisi awal, kedua LED berada dalam keadaan mati (RESET).
2. Pembacaan Sensor (Loop Utama)
Di dalam loop utama while(1), mikrokontroler secara terus-menerus membaca kondisi kedua sensor melalui perintah:
-
ir_state = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0); -
touch_state = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);
Dengan interpretasi logika sebagai berikut:
- Sensor IR bernilai LOW (0) menandakan adanya objek terdeteksi
- Sensor sentuh bernilai LOW (0) menandakan tidak ada sentuhan
3. Logika Kondisi Sistem
LED akan menyala apabila kedua kondisi berikut terpenuhi secara bersamaan:
- Sensor IR mendeteksi objek (LOW)
- Sensor sentuh tidak mendeteksi sentuhan (LOW)
4. Output Sistem (LED)
Jika kondisi terpenuhi, maka mikrokontroler akan memberikan sinyal output:
-
PB0 dan PB1 di-set HIGH (
GPIO_PIN_SET) sehingga LED menyala stabil (tidak berkedip)
Sebaliknya, jika salah satu atau kedua kondisi tidak terpenuhi, maka:
-
PB0 dan PB1 di-set LOW (
GPIO_PIN_RESET) sehingga LED dalam keadaan mati
4. Flowchart dan Listing Program[Kembali]
>#include "main.h"
// ===== PROTOTYPE =====
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
void Error_Handler(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
uint8_t ir_state = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
uint8_t touch_state = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);
// Kondisi:
// IR DETEKSI (LOW) dan TOUCH TIDAK DISENTUH (LOW)
if (ir_state == GPIO_PIN_RESET && touch_state == GPIO_PIN_RESET)
{
// LED ON (PB0 & PB1)
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
}
else
{
// LED OFF
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
}
HAL_Delay(10);
}
}
// ===== CLOCK CONFIG =====
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 CONFIG =====
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
// Enable clock
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
// ===== INPUT (PA0 = IR, PA1 = TOUCH) =====
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// ===== OUTPUT (PB0 & PB1 = LED) =====
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
// Default LED OFF
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1, GPIO_PIN_RESET);
}
// ===== ERROR HANDLER =====
void Error_Handler(void)
{
__disable_irq();
while (1)
{
}
Buatlah rangkaian seperti pada gambar percobaan 3 dengan kondisi ketika Infrared sensor mendeteksi benda dan sensor Touch tidak mendeteksi sentuhan, maka LED menyala.
Download Rangkaian Simulasi dan Program (klik disini)
Download Video Simulasi (klik disini)
Download HTML (klik disini)
Download Datasheet IR Sensor (klik disini)
Download Datasheet Touch Sensor (klik disini)
Download Datasheet STM32F103C8 (klik disini)
Download Datasheet Resistor (klik disini)
Download Datasheet LED (klik disini)
Download Datasheet Buzzer (klik disini)
Soal Analisa


Tidak ada komentar:
Posting Komentar