1. Mulailah dengan menjalankan aplikasi simulator Proteus, kemudian buat sebuah project baru. Setelah itu, tambahkan seluruh komponen yang dibutuhkan ke dalam workspace, yaitu mikrokontroler STM32F103C6, sensor sentuh (touch sensor), sensor IR obstacle, LED, resistor dengan nilai 220Ω dan 10kΩ, buzzer, serta push button.
2. Selanjutnya, lakukan perancangan rangkaian dengan menghubungkan setiap komponen sesuai dengan skematik yang telah ditentukan. Output dari kedua sensor dihubungkan ke pin input mikrokontroler, yaitu PA0 dan PA1, sedangkan aktuator seperti LED dan buzzer dihubungkan ke pin output PB0 dan PB1. Pastikan seluruh koneksi catu daya, termasuk VCC/VDDA dan GND/VSSA, telah terhubung dengan benar agar sistem dapat bekerja secara optimal.
3. Setelah rangkaian selesai, lakukan proses kompilasi (compile/build) terhadap program yang telah dibuat menggunakan perangkat lunak seperti Arduino IDE atau STM32CubeIDE hingga dihasilkan file dengan ekstensi .hex atau .elf.
4. Kemudian, pada Proteus, klik dua kali pada komponen mikrokontroler STM32 untuk membuka properti, lalu masukkan lokasi (path) file hasil kompilasi tersebut pada bagian “Program File”.
5. Langkah berikutnya adalah menjalankan simulasi dengan menekan tombol Play atau Run Simulation yang terletak di bagian kiri bawah tampilan Proteus.
6. Terakhir, lakukan pengujian dengan mengubah kondisi logika input pada sensor, misalnya dengan melakukan toggle dari nilai 0 ke 1 pada sensor sentuh atau sensor IR, kemudian amati respons sistem melalui LED dan buzzer sebagai indikator output.
2. Hardware dan Diagram Blok[Kembali]
3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]
Prinsip Kerja
1. Kondisi Awal
Saat rangkaian dinyalakan:
- Mikrokontroler STM32 menjalankan:
HAL_Init()→ inisialisasi HAL librarySystemClock_Config()→ menggunakan clock internal HSIMX_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)
{
}
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)
Analisa, Kesimpulan dan Saran
.jpeg)
.jpeg)

Tidak ada komentar:
Posting Komentar