Langsung ke konten utama

LA modul 1 uP&uC percobaan 3

1. Prosedur [Kembali ke Daftar Isi]

  1. Buka aplikasi simulator (Proteus).

  2. Buat Project baru dan masukkan komponen-komponen berikut ke dalam workspace: Mikrokontroler STM32F103C6, Touch Sensor, IR Obstacle Sensor, LED, Resistor (220Ω & 10kΩ), Buzzer, dan Push Button.

  3. Rangkai komponen sesuai dengan skematik (Hubungkan output sensor ke PA0 & PA1, dan input aktuator ke PB0 & PB1).

  4. Pastikan pin catu daya (VCC/VDDA dan GND/VSSA) terhubung dengan benar.

  5. Lakukan kompilasi (compile/build) pada Listing Program yang telah dibuat (misal menggunakan Arduino IDE atau STM32CubeIDE) hingga menghasilkan file .hex atau .elf.

  6. Klik ganda (double-click) pada komponen IC STM32 di Proteus, lalu masukkan rute (path) file .hex tersebut ke kolom Program File.

  7. Klik tombol Play / Run Simulation yang berada di pojok kiri bawah layar Proteus.

  8. Uji coba simulasi dengan mengklik logic toggle (mengubah nilai 0 menjadi 1) pada sensor sentuh atau sensor IR untuk melihat respon dari LED dan Buzzer.

2. Hardware dan Diagram Blok [Kembali ke Daftar Isi]



  1. Pusat Kendali: Mikrokontroler STM32F103C6

  2. Input: Modul Sensor Sentuh (Touch Sensor) & Sensor Inframerah (IR Obstacle Sensor)

  3. Output: LED Hijau/Merah (Indikator Visual) & Buzzer (Indikator Suara)

  4. Pendukung: Rangkaian Reset (Push button + Resistor )



3. Rangkaian Simulasi dan Prinsip Kerja [Kembali ke Daftar Isi]

  1. Kondisi Standby: Saat simulasi dimulai, mikrokontroler membaca status pin input (PA0 dari Touch Sensor dan PA1 dari IR Sensor). Dalam kondisi normal (tidak ada sentuhan atau halangan), kedua sensor mengirimkan sinyal logika LOW (0) ke mikrokontroler. Aktuator (LED dan Buzzer) dalam keadaan mati.

  2. Input Aktif: Jika ada seseorang yang menyentuh gagang pintu (Sensor Sentuh aktif) ATAU melewati perimeter pintu (Sensor IR mendeteksi halangan), maka sensor yang bersangkutan akan mengirimkan sinyal logika HIGH (1) ke mikrokontroler. (Misal: PA0 menjadi HIGH terlebih dahulu).

  3. Pemrosesan: Mikrokontroler mendeteksi adanya perubahan logika menjadi HIGH pada salah satu atau kedua pin input. Sesuai dengan program yang ditanamkan, mikrokontroler mengambil keputusan untuk mengaktifkan sistem peringatan.

  4. Output Dihasilkan: Mikrokontroler mengirimkan sinyal logika HIGH secara berurutan/bersamaan ke pin PB0 dan PB1.

  5. Kondisi Aktif: Arus mengalir melalui pin PB0 menyalakan LED Merah (sebagai peringatan visual), dan arus di pin PB1 mengaktifkan Buzzer (sebagai peringatan audio). Output ini akan terus menyala selama sensor masih mendeteksi (logika 1).

4. Flowchart dan Listing Program [Kembali ke Daftar Isi]



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) { } #endif

5. Video Demo [Kembali ke Daftar Isi]



6. Soal Analisa [Kembali ke Daftar Isi]

Analisa:
1. Bagaimana pengaruh pemilihan gpio masing2 dev board
2. Bagaimana program deklarasi pin i/o pada stm32
3. Analisa bagaimana  menerima input dan mengeluarkan output pada stm 32
4. Analisa pengaruh perubahan program pada main.h terhadap program main.c
5. Analisa bagaimna program dalam analisa metode pendeteksian inputan pada stm 32
6. Analisa kelebihan mikrokontroler dibanding rangkaian logika
 
Jawaban :

1. Pemilihan GPIO Masing-Masing Board Setiap pin memiliki fungsi ganda (multiplexing), seperti untuk ADC analog, komunikasi (I2C/SPI), atau sekadar I/O digital. Salah memilih pin bisa menyia-nyiakan fungsi khusus atau merusak port jika tegangan tidak sesuai (misal: pin 3.3V diberi 5V).

2. Deklarasi Pin I/O pada STM32 Lebih kompleks dari Arduino. Langkahnya wajib berurutan: mengaktifkan Clock pada port yang bersangkutan, mengatur konfigurasi pin (Mode, Pull-up/down, Speed) di dalam struct, lalu mengeksekusi inisialisasi pin tersebut ke hardware (biasanya menggunakan pustaka HAL).

3. Menerima Input dan Mengeluarkan Output

  • Input: Mikrokontroler membaca level tegangan fisik masuk (mendekati 3.3V dibaca HIGH/1, mendekati 0V dibaca LOW/0).

  • Output: Mikrokontroler mengontrol transistor internal untuk mengeluarkan tegangan 3.3V (Source/HIGH) atau menghubungkan pin ke Ground (Sink/LOW).

4. Pengaruh main.h terhadap main.c main.h berfungsi sebagai tempat pengaturan dan deklarasi nama pin (modularitas), sedangkan main.c untuk logika program. Jika ada perubahan pin hardware, kamu cukup mengubah di main.h, dan main.c akan otomatis menyesuaikan tanpa perlu merombak kode logika.

5. Metode Pendeteksian Input (Polling vs Interrupt)

  • Polling: Program mengecek status pin secara terus-menerus (boros kinerja CPU dan bisa melewatkan input jika ada delay).

  • Interrupt (EXTI): CPU mengerjakan hal lain dan hanya bereaksi (merespon seketika) ketika ada perubahan sinyal fisik di pin sensor (sangat efisien dan responsif untuk alarm).

6. Kelebihan Mikrokontroler vs Rangkaian Logika Mikrokontroler jauh lebih fleksibel karena logikanya bisa diubah hanya lewat software (tanpa membongkar jalur kabel/PCB). Satu buah IC mikrokontroler bisa menggantikan puluhan hingga ratusan komponen IC gerbang logika fisik, sehingga jauh lebih ringkas, murah, dan cerdas.

7. Video Simulasi [Kembali ke Daftar Isi]



8. Download File [Kembali ke Daftar Isi]

Bagi yang ingin mempelajari lebih lanjut atau mencoba merangkai sendiri, Anda dapat mengunduh file proyek melalui tautan di bawah ini:

Link Video Simulasi




Komentar

Postingan populer dari blog ini