- 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 dan Diagram Blok[Kembali]
Hardware
3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]
1. Kondisi Awal
Saat rangkaian dinyalakan:
-
Mikrokontroler STM32 menjalankan:
-
HAL_Init()→ inisialisasi HAL library -
SystemClock_Config()→ menggunakan clock internal HSI -
MX_GPIO_Init()→ konfigurasi pin GPIO
-
-
Konfigurasi pin:
- PA0 → Input (IR Sensor) dengan pull-down
- PA1 → Input (Touch Sensor) dengan pull-down
- PB0 & PB1 → Output (LED)
- Kondisi awal:
- LED dalam keadaan mati (RESET)
while(1):-
STM32 membaca kedua sensor secara terus-menerus:
ir_state = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
touch_state = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1); - Interpretasi logika:
- IR Sensor = LOW (0) → objek terdeteksi
- Touch Sensor = LOW (0) → tidak disentuh
3. Logika Pada Kondisi
Sistem akan menyalakan LED jika kondisi berikut terpenuhi secara bersamaan:
IR = LOW (objek terdeteksi) dan Touch = LOW (tidak disentuh)
4.Output Sistem LED
Jika kondisi benar:
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
LED pada PB0 dan PB1 → MENYALA (ON)
LED menyala stabil (tidak berkedip)
Jika salah satu kondisi tidak terpenuhi:
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
LED 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)
{
}
6. Kondisi[Kembali]
Buatlah rangkaian seperti pada gambar percobaan 3 dengan kondisi ketika Infrared sensor mendeteksi benda dan sensor Touch tidak mendeteksi sentuhan, maka LED menyala
Rangkaian dan Program Proteus (Klik Disini)
Video Simulasi (Klik Disini)
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)
Tidak ada komentar:
Posting Komentar