Tugas Pendahuluan 1
1. Prosedur [Kembali]
- 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]
1. STM32G474RE
STM32G474RE berfungsi sebagai unit pemroses utama yang menjembatani algoritma pemrograman dengan komponen fisik, di mana ia bertugas mengolah input dari sensor melalui ADC, mengeksekusi logika kontrol matematika secara cepat, dan menghasilkan output presisi seperti sinyal PWM untuk menggerakkan perangkat eksternal. Dalam konteks praktikum, mikrokontroler ini berperan sebagai platform untuk menguji interaksi antarmuka perangkat keras, manajemen memori, dan pengaturan waktu (timing) sistem agar semua instruksi berjalan secara sinkron dan real-time.
Microcontroller
STM32G474RE (ARM Cortex-M4F)
Operating Voltage
3.3 V
Input Voltage (recommended)
5 V via USB (ST-LINK) atau 7–12 V via VIN
Input Voltage (limit)
4.5 – 15 V (VIN board Nucleo)
Digital I/O Pins
±51 GPIO pins (tergantung konfigurasi fungsi)
PWM Digital I/O Pins
Hingga 24 channel PWM (advanced, general-purpose, dan high-resolution timers)
Analog Input Pins
Hingga 24 channel ADC (12-bit / 16-bit dengan oversampling)
DC Current per I/O Pin
Maks. 20 mA per pin (disarankan ≤ 8 mA)
DC Current for 3.3V Pin
Hingga ±500 mA (tergantung regulator & sumber daya)
Flash Memory
512 KB internal Flash
SRAM
128 KB SRAM (termasuk CCM RAM)
Clock Speed
Hingga 170 MHz
2. STM32F103C8
TM32F103C8 adalah mikrokontroler berbasis ARM Cortex-M3 yang dikembangkan oleh STMicroelectronics. Mikrokontroler ini sering digunakan dalam pengembangan sistem tertanam karena kinerjanya yang baik, konsumsi daya yang rendah, dan kompatibilitas dengan berbagai protokol komunikasi. Pada praktikum ini, kita menggunakan STM32F103C8 yang dapat diprogram menggunakan berbagai metode, termasuk komunikasi serial (USART), SWD (Serial Wire Debug), atau JTAG untuk berhubungan dengan komputer maupun perangkat lain.
Microcontroller
ARM Cortex-M3
Operating Voltage
3.3 V
Input Voltage (recommended)
5 V
Input Voltage (limit)
2 – 3.6 V
Digital I/O Pins
32
PWM Digital I/O Pins
15
Analog Input Pins
10 (dengan resolusi 12-bit ADC)
DC Current per I/O Pin
25 mA
DC Current for 3.3V Pin
150 mA
Flash Memory
64 KB
SRAM
20 KB
EEPROM
Emulasi dalam Flash
Clock Speed
72 MHz
3. Touch Sensor
Touch sensor adalah sensor yang dapat mendeteksi sentuhan atau kontak dari jari manusia (atau objek lain) dan kemudian mengubahnya menjadi sinyal listrik.
SPESIFIKASI :
- Konsumsi daya yang rendah
- Bisa menerima tegangan dari 2 ~ 5.5V DC
- Dapat menggantikan fungsi saklar tradisional
- Dilengkapi 4 lobang baut untuk memudahkan pemasangan
- Tegangan kerja : 2v s/d 5.5v (optimal 3V)
- Output high VOH : 0.8 VCC (typical)
- Output low VOL : 0.3 VCC (max)
- Arus Output Pin Sink (@ VCC 3V, VOL 0.6V) : 8 mA
- Arus Output pin pull-up (@ VCC=3V, VOH=2.4V) : 4 mA
- Waktu respon (low power mode): max 220 ms
- Waktu respon (touch mode): max 60 ms
- Ukuran: 24 mm x 24 mm x 7.2 mm
4. PIR Sensor
PIR sensor (Passive Infrared Sensor) adalah sensor yang digunakan untuk mendeteksi pergerakan manusia atau makhluk hidup berdasarkan perubahan radiasi inframerah di sekitarnya.
5. LED
LED adalah dioda semikonduktor yang dapat memancarkan cahaya ketika dialiri arus listrik. LED digunakan dalam berbagai aplikasi seperti indikator elektronik, pencahayaan, dan display. LED hanya bekerja pada arah bias maju dan memiliki berbagai warna yang ditentukan oleh material semikonduktornya.
6. Buzzer
Buzzer adalah suatu komponen elektronika yang berfungsi untuk mengubah energi listrik menjadi energi suara (bunyi) melalui mekanisme getaran. Komponen ini termasuk dalam kategori output device karena digunakan untuk memberikan respon berupa suara terhadap suatu kondisi atau perintah dalam rangkaian elektronik.
7. Resistor
Resistor adalah komponen elektronik pasif yang berfungsi untuk membatasi arus listrik dalam suatu rangkaian. Resistor bekerja berdasarkan hukum Ohm, yang menyatakan bahwa tegangan (V) = arus (I) × resistansi (R). Resistor memiliki satuan Ohm (Ω) dan digunakan dalam berbagai aplikasi seperti pembagian tegangan, kontrol arus, dan proteksi rangkaian elektronik.
Microcontroller | STM32G474RE (ARM Cortex-M4F) |
Operating Voltage | 3.3 V |
Input Voltage (recommended) | 5 V via USB (ST-LINK) atau 7–12 V via VIN |
Input Voltage (limit) | 4.5 – 15 V (VIN board Nucleo) |
Digital I/O Pins | ±51 GPIO pins (tergantung konfigurasi fungsi) |
PWM Digital I/O Pins | Hingga 24 channel PWM (advanced, general-purpose, dan high-resolution timers) |
Analog Input Pins | Hingga 24 channel ADC (12-bit / 16-bit dengan oversampling) |
DC Current per I/O Pin | Maks. 20 mA per pin (disarankan ≤ 8 mA) |
DC Current for 3.3V Pin | Hingga ±500 mA (tergantung regulator & sumber daya) |
Flash Memory | 512 KB internal Flash |
SRAM | 128 KB SRAM (termasuk CCM RAM) |
Clock Speed | Hingga 170 MHz |
2. STM32F103C8
Microcontroller | ARM Cortex-M3 |
Operating Voltage | 3.3 V |
Input Voltage (recommended) | 5 V |
Input Voltage (limit) | 2 – 3.6 V |
Digital I/O Pins | 32 |
PWM Digital I/O Pins | 15 |
Analog Input Pins | 10 (dengan resolusi 12-bit ADC) |
DC Current per I/O Pin | 25 mA |
DC Current for 3.3V Pin | 150 mA |
Flash Memory | 64 KB |
SRAM | 20 KB |
EEPROM | Emulasi dalam Flash |
Clock Speed | 72 MHz |
3. Touch Sensor
SPESIFIKASI :
- Konsumsi daya yang rendah
- Bisa menerima tegangan dari 2 ~ 5.5V DC
- Dapat menggantikan fungsi saklar tradisional
- Dilengkapi 4 lobang baut untuk memudahkan pemasangan
- Tegangan kerja : 2v s/d 5.5v (optimal 3V)
- Output high VOH : 0.8 VCC (typical)
- Output low VOL : 0.3 VCC (max)
- Arus Output Pin Sink (@ VCC 3V, VOL 0.6V) : 8 mA
- Arus Output pin pull-up (@ VCC=3V, VOH=2.4V) : 4 mA
- Waktu respon (low power mode): max 220 ms
- Waktu respon (touch mode): max 60 ms
- Ukuran: 24 mm x 24 mm x 7.2 mm
4. PIR Sensor
6. Buzzer
8. Diagram Blok
3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]
Prinspi Kerja: Sistem ini mengimplementasikan lampu lorong otomatis berbasis STM32 yang mengandalkan sensor PIR dan logika re-triggerable timer. Saat sensor mendeteksi aktivitas, LED akan menyala dan buzzer akan berbunyi selama 100ms sebagai indikator awal. Sistem ini dirancang untuk memperbarui durasi aktif secara otomatis (reset timer) selama gerakan terus terdeteksi dalam rentang 5 detik. Jika area menjadi sunyi dan tidak ada gerakan yang tercatat melampaui batas 5 detik tersebut, mikrokontroler akan memadamkan LED guna menjaga efisiensi energi.
4. Flowchart dan Listing Program [Kembali]
Flowchart:
Listing Program:
#include "stm32f1xx_hal.h"
/* Definisi Waktu Tunda (ms) */
#define LED_DELAY_TIME 5000 // LED menyala selama 5 detik setelah gerakan terakhir
/* Variable Global */
uint32_t last_pir_time = 0;
uint8_t touch_last = 0;
uint8_t led_active = 0;
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)
{
/* 1. Baca Sensor */
uint8_t pir_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
uint8_t touch_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);
/* 2. Logika Sensor Touch (Toggle Buzzer/System) */
if (touch_now == GPIO_PIN_SET && touch_last == GPIO_PIN_RESET)
{
// Memberikan feedback singkat pada Buzzer saat disentuh
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_Delay(200); // Debounce sederhana
}
touch_last = touch_now;
/* 3. Logika PIR (Re-triggerable Timer) */
if (pir_now == GPIO_PIN_SET)
{
// Jika ada gerakan, perbarui waktu terakhir terdeteksi
last_pir_time = HAL_GetTick();
led_active = 1;
// Nyalakan LED
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
}
/* 4. Cek Waktu Tunda */
// Jika LED aktif DAN waktu sekarang sudah melewati (waktu terakhir + delay)
if (led_active && (HAL_GetTick() - last_pir_time >= LED_DELAY_TIME))
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
led_active = 0;
}
}
}
/**
* @brief GPIO Initialization Function
* PA0: PIR Sensor (Input)
* PA1: Touch Sensor (Input)
* PB0: LED (Output)
* PB1: Buzzer (Output)
*/
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/* Konfigurasi Input: PA0 dan PA1 */
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* Konfigurasi Output: PB0 dan PB1 */
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);
/* Reset Output ke kondisi mati */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | 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();
}
}
void Error_Handler(void)
{
__disable_irq();
while (1)
{
}
}
#include "stm32f1xx_hal.h"
/* Definisi Waktu Tunda (ms) */
#define LED_DELAY_TIME 5000 // LED menyala selama 5 detik setelah gerakan terakhir
/* Variable Global */
uint32_t last_pir_time = 0;
uint8_t touch_last = 0;
uint8_t led_active = 0;
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)
{
/* 1. Baca Sensor */
uint8_t pir_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
uint8_t touch_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);
/* 2. Logika Sensor Touch (Toggle Buzzer/System) */
if (touch_now == GPIO_PIN_SET && touch_last == GPIO_PIN_RESET)
{
// Memberikan feedback singkat pada Buzzer saat disentuh
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_Delay(200); // Debounce sederhana
}
touch_last = touch_now;
/* 3. Logika PIR (Re-triggerable Timer) */
if (pir_now == GPIO_PIN_SET)
{
// Jika ada gerakan, perbarui waktu terakhir terdeteksi
last_pir_time = HAL_GetTick();
led_active = 1;
// Nyalakan LED
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
}
/* 4. Cek Waktu Tunda */
// Jika LED aktif DAN waktu sekarang sudah melewati (waktu terakhir + delay)
if (led_active && (HAL_GetTick() - last_pir_time >= LED_DELAY_TIME))
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
led_active = 0;
}
}
}
/**
* @brief GPIO Initialization Function
* PA0: PIR Sensor (Input)
* PA1: Touch Sensor (Input)
* PB0: LED (Output)
* PB1: Buzzer (Output)
*/
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/* Konfigurasi Input: PA0 dan PA1 */
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* Konfigurasi Output: PB0 dan PB1 */
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);
/* Reset Output ke kondisi mati */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | 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();
}
}
void Error_Handler(void)
{
__disable_irq();
while (1)
{
}
}
5. Video Demo [Kembali]
6. Kondisi [Kembali]
Percobaan 1 Kontrol Lampu Lorong
Kondisi 4 : Buatlah rangkaian seperti pada gambar percobaan 1 dengan kondisi PIR mendeteksi gerakan berulang sebelum waktu tunda habis dan sensor Touch tidak disentuh, maka LED tetap menyala
Komentar
Posting Komentar