Laporan Akhir 1
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]
Pusat Kendali: Mikrokontroler STM32F103C6
Input: Modul Sensor Sentuh (Touch Sensor) & Sensor Inframerah (IR Obstacle Sensor)
Output: LED Hijau/Merah (Indikator Visual) & Buzzer (Indikator Suara)
Pendukung: Rangkaian Reset (Push button + Resistor )
3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]
Kondisi Siaga (Standby):
Pada saat simulasi dijalankan, mikrokontroler melakukan pembacaan awal terhadap status pin input, yaitu PA0 yang terhubung ke sensor sentuh dan PA1 yang terhubung ke sensor IR. Dalam kondisi normal, ketika tidak terdapat sentuhan maupun objek yang terdeteksi, kedua sensor berada pada logika LOW (0). Akibatnya, seluruh aktuator seperti LED dan buzzer berada dalam kondisi tidak aktif (OFF).
Kondisi Input Aktif:
Apabila terjadi interaksi, seperti seseorang menyentuh gagang pintu (sensor sentuh aktif) atau melintasi area deteksi sensor IR, maka sensor yang bersangkutan akan menghasilkan sinyal logika HIGH (1) ke mikrokontroler. Kondisi ini dapat terjadi pada salah satu atau kedua input, misalnya PA0 berubah menjadi HIGH terlebih dahulu.
Tahap Pemrosesan:
Mikrokontroler akan mendeteksi perubahan status logika pada pin input dari LOW menjadi HIGH. Berdasarkan algoritma atau program yang telah ditanamkan, sistem kemudian memproses kondisi tersebut dan menentukan bahwa perlu dilakukan aktivasi sistem peringatan.
Pembangkitan Output:
Sebagai respons, mikrokontroler mengeluarkan sinyal logika HIGH melalui pin output PB0 dan PB1, baik secara simultan maupun sesuai urutan yang ditentukan dalam program.
Kondisi Aktif (Alarm):
Dengan adanya sinyal HIGH pada pin output, arus listrik mengalir ke LED sehingga LED merah menyala sebagai indikator visual, sementara buzzer aktif menghasilkan suara sebagai indikator audio. Keadaan ini akan terus berlangsung selama sinyal input dari sensor masih berada pada kondisi HIGH (logika 1).
4. Flowchart dan Listing Program [Kembali]
Listing Program:
#include "main.h"
uint8_t system_enable = 1;
uint8_t touch_last = 0;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
uint8_t touch_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);
if (touch_now == GPIO_PIN_SET && touch_last == GPIO_PIN_RESET)
{
system_enable = !system_enable;
HAL_Delay(200);
}
touch_last = touch_now;
if (system_enable)
{
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
}
else
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
}
}
else
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
}
}
}
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_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
{
Error_Handler();
}
}
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1, GPIO_PIN_RESET);
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);
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);
}
void Error_Handler(void)
{
__disable_irq();
while (1)
{
}
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t *file, uint32_t line)
{
}
#endif1. Pengaruh Pemilihan GPIO pada Development Board
Setiap pin GPIO pada mikrokontroler memiliki fungsi alternatif (multiplexing), seperti sebagai input analog (ADC), jalur komunikasi (I2C, SPI, UART), maupun I/O digital biasa. Oleh karena itu, pemilihan pin harus dilakukan dengan cermat agar tidak mengganggu fungsi periferal lain yang dibutuhkan. Selain itu, kesalahan dalam pemilihan pin juga dapat menimbulkan risiko kerusakan, terutama jika terjadi ketidaksesuaian level tegangan, misalnya pemberian tegangan 5V pada pin yang hanya mendukung 3.3V.
2. Deklarasi Pin Input/Output pada STM32
Proses konfigurasi pin I/O pada STM32 relatif lebih kompleks dibandingkan platform seperti Arduino. Tahapannya meliputi pengaktifan clock pada port GPIO yang digunakan, pengaturan parameter pin (mode, pull-up/pull-down, dan kecepatan), kemudian melakukan inisialisasi menggunakan pustaka seperti HAL agar konfigurasi tersebut diterapkan pada perangkat keras.
3. Mekanisme Penerimaan Input dan Pengeluaran Output
Pada sisi input, mikrokontroler membaca level tegangan yang masuk ke pin, di mana tegangan mendekati 3.3V diinterpretasikan sebagai logika HIGH (1) dan mendekati 0V sebagai logika LOW (0). Sementara itu, pada sisi output, mikrokontroler mengendalikan kondisi pin untuk menghasilkan logika HIGH dengan memberikan tegangan (source) atau logika LOW dengan menghubungkannya ke ground (sink).
4. Pengaruh Perubahan File main.h terhadap main.c
File main.h berfungsi sebagai tempat deklarasi dan definisi yang berkaitan dengan konfigurasi perangkat keras, seperti penamaan pin. Sedangkan main.c berisi implementasi logika program. Dengan struktur ini, perubahan pada konfigurasi pin cukup dilakukan di main.h, sehingga main.c tidak perlu dimodifikasi secara signifikan karena akan menyesuaikan secara otomatis melalui referensi tersebut.
5. Metode Pendeteksian Input pada STM32 (Polling vs Interrupt)
Terdapat dua metode utama dalam membaca input, yaitu polling dan interrupt. Pada metode polling, mikrokontroler secara terus-menerus memeriksa status pin, yang dapat menyebabkan pemborosan sumber daya CPU dan berpotensi melewatkan perubahan cepat. Sebaliknya, metode interrupt (EXTI) memungkinkan mikrokontroler merespons hanya ketika terjadi perubahan sinyal pada pin, sehingga lebih efisien dan memiliki respons yang lebih cepat, terutama untuk aplikasi real-time seperti sistem alarm.
6. Keunggulan Mikrokontroler dibandingkan Rangkaian Logika
Mikrokontroler menawarkan fleksibilitas yang jauh lebih tinggi karena fungsi logika dapat diubah melalui perangkat lunak tanpa perlu melakukan perubahan fisik pada rangkaian. Selain itu, satu mikrokontroler mampu menggantikan banyak komponen logika diskrit, sehingga desain menjadi lebih sederhana, hemat biaya, serta memiliki kemampuan pemrosesan yang lebih kompleks dan adaptif.
Komentar
Posting Komentar