LA Percobaan 2
1. Prosedur[Kembali]
a) Prosedur (Langkah-langkah mensimulasikan rangkaian)
Berikut adalah langkah-langkah untuk mensimulasikan sistem kontrol suhu:
Buka perangkat lunak simulasi rangkaian (seperti Proteus).
Tambahkan komponen yang dibutuhkan ke lembar kerja: Mikrokontroler STM32 (U3), Sensor Suhu LM35 (U1), Push Button, Motor Driver L298N (U2), dan Kipas DC / Motor .
Rangkai komponen sesuai skema: Hubungkan output analog LM35 ke pin ADC mikrokontroler, sambungkan pin output PWM dan dua pin GPIO mikrokontroler ke pin input Motor Driver L298N, hubungkan Motor DC ke output L298N, dan sambungkan Push Button ke pin interupsi mikrokontroler .
Buka software IDE (seperti STM32CubeIDE), build program kontrol suhu hingga menghasilkan file biner (
.hexatau.elf).Masukkan file biner tersebut ke dalam komponen mikrokontroler STM32 di software simulasi.
Jalankan simulasi (Play).
Uji rangkaian dengan mengubah nilai suhu (panah atas/bawah) pada komponen sensor LM35 dan amati perubahan kecepatan putaran kipas DC . Tekan push button untuk menguji penghentian sistem melalui interupsi
.
2. Hardware dan Diagram Blok[Kembali]
1. STM32F103C8T6 (Mikrokontroler)
- Berfungsi sebagai otak sistem
- Membaca sinyal dari sensor (PIR & Touch)
- Mengolah logika program
- Mengontrol output (LED & buzzer)
- Memiliki GPIO (input/output digital)
Peran utama:
2. IR Transmitter & IR Receiver
- Berfungsi sebagai sensor penghalang (perimeter)
- Cara Kerja
- R transmitter memancarkan sinar
- IR receiver menerima sinar
- Jika terhalang → sinyal berubah → dianggap “pintu terbuka”
- R transmitter memancarkan sinar
- IR receiver menerima sinar
- Jika terhalang → sinyal berubah → dianggap “pintu terbuka”
3. Sensor Touch (Kapasitif)
- Mendeteksi sentuhan jari manusia
- Output:
- HIGH (1) → disentuh
- LOW (0) → tidak disentuh
Peran dalam sistem:Sebagai kontrol tambahan / override
- Mendeteksi sentuhan jari manusia
- Output:
- HIGH (1) → disentuh
- LOW (0) → tidak disentuh
4. Buzzer
- Bisa digunakan untuk mematikan alarm
- Bisa digunakan untuk mematikan alarm
- Komponen output berupa suara
- Aktif saat diberi logika HIGH
Peran dalam sistem:
Sebagai alarm peringatan ketika ada gerakan
- Komponen output berupa suara
- Aktif saat diberi logika HIGH
Peran dalam sistem:
Sebagai alarm peringatan ketika ada gerakan
5. LED
- Indikator visual
- Menyala saat kondisi tertentu terpenuhi
Peran dalam sistem:
Memberi tanda visual bahwa sistem aktif / alarm menyala
- Indikator visual
- Menyala saat kondisi tertentu terpenuhi
Peran dalam sistem:
Memberi tanda visual bahwa sistem aktif / alarm menyala
6. Resistor (10kΩ)
- Digunakan sebagai:
- Pull-up
- Pull-down
- Menjaga kestabilan sinyal input
Peran dalam sistem:
Mencegah kondisi floating (tidak stabil) pada pin input
- Digunakan sebagai:
- Pull-up
- Pull-down
- Menjaga kestabilan sinyal input
Peran dalam sistem:
Mencegah kondisi floating (tidak stabil) pada pin input
7. Power Supply (3.3V / 5V)
- Memberikan tegangan ke seluruh rangkaian
Peran dalam sistem:
Sumber energi agar semua komponen bekerja
- Memberikan tegangan ke seluruh rangkaian
Peran dalam sistem:
Sumber energi agar semua komponen bekerja
3. Rangkaian Simulasi [Kembali]
Selain itu, sistem dilengkapi dengan touch sensor yang berfungsi sebagai saklar untuk mengaktifkan atau menonaktifkan sistem alarm. Touch sensor bekerja dengan prinsip toggle, di mana setiap sentuhan akan mengubah kondisi sistem dari aktif menjadi nonaktif atau sebaliknya. Ketika sistem dalam keadaan aktif, mikrokontroler akan terus membaca kondisi dari IR receiver secara berulang melalui proses looping. Jika terdeteksi adanya gangguan (sinar IR terhalang), maka mikrokontroler akan memberikan sinyal keluaran berupa logika HIGH untuk mengaktifkan LED sebagai indikator visual dan buzzer sebagai alarm suara. Sebaliknya, jika tidak ada gangguan, maka kedua output tersebut akan dimatikan.
Seluruh proses ini berlangsung secara kontinu dalam sebuah loop tak hingga, sehingga sistem mampu melakukan pemantauan secara real-time terhadap kondisi di sekitar pintu. Dengan demikian, sistem alarm perimeter pintu ini merupakan implementasi sederhana dari konsep input–proses–output dalam sistem tertanam, di mana input berasal dari sensor, diproses oleh mikrokontroler, dan menghasilkan output berupa indikator peringatan ketika terjadi pelanggaran pada area yang dipantau.
4. Flowchart dan Listing Program[Kembali]
- Flowchart
Listing Program :
#include "main.h" // HANDLE ADC_HandleTypeDef hadc1; TIM_HandleTypeDef htim3; // VARIABLE uint8_t manual_mode = 0; uint8_t posisi_servo = 0; uint8_t last_button = 1; // THRESHOLD #define LDR_THRESHOLD 2000 // ================= CLOCK ================= 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; HAL_RCC_OscConfig(&RCC_OscInitStruct); RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0); } // ================= GPIO ================= void MX_GPIO_Init(void) { __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct = {0}; // LDR PA0 GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // BUTTON PB1 GPIO_InitStruct.Pin = GPIO_PIN_1; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
// SERVO PA6 GPIO_InitStruct.Pin = GPIO_PIN_6; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Alternate = GPIO_AF1_TIM3; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } // ================= ADC ================= void MX_ADC1_Init(void) { __HAL_RCC_ADC_CLK_ENABLE(); hadc1.Instance = ADC1; hadc1.Init.Resolution = ADC_RESOLUTION_12B; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; HAL_ADC_Init(&hadc1); } // ================= PWM (FIX SERVO) ================= void MX_TIM3_Init(void) { __HAL_RCC_TIM3_CLK_ENABLE(); htim3.Instance = TIM3; // FIX: 1us tick (assume 48MHz clock) htim3.Init.Prescaler = 48 - 1; htim3.Init.CounterMode = TIM_COUNTERMODE_UP; htim3.Init.Period = 20000 - 1; // 20ms = 50Hz (servo standard) HAL_TIM_PWM_Init(&htim3); TIM_OC_InitTypeDef sConfigOC = {0}; sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 1500; // posisi tengah awal sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1); } // ================= SERVO CONTROL ================= void set_servo(uint8_t state) { if (state == 0) { __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 1000); // masuk atap } else {
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 2000); // keluar atap } } // ================= ADC READ ================= uint16_t read_LDR(void) { ADC_ChannelConfTypeDef sConfig = {0}; sConfig.Channel = ADC_CHANNEL_0; sConfig.Rank = ADC_REGULAR_RANK_1; HAL_ADC_ConfigChannel(&hadc1, &sConfig); HAL_ADC_Start(&hadc1); HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY); return HAL_ADC_GetValue(&hadc1); } // ================= MAIN ================= int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_ADC1_Init(); MX_TIM3_Init(); HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); while (1) { // ===== BUTTON TOGGLE ===== uint8_t button = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1); if (last_button == 1 && button == 0) { manual_mode = !manual_mode; posisi_servo = !posisi_servo; set_servo(posisi_servo); HAL_Delay(50); } last_button = button; // ===== MODE OTOMATIS ===== if (!manual_mode) { uint16_t ldr = read_LDR();
if (ldr < LDR_THRESHOLD) { posisi_servo = 0; // mendung → masuk } else { posisi_servo = 1; // terang → keluar } set_servo(posisi_servo); } HAL_Delay(100); } }
#ifndef __MAIN_H #define __MAIN_H #include "stm32c0xx_hal.h" // PIN #define LDR_PIN GPIO_PIN_0 #define LDR_PORT GPIOA #define BUTTON_PIN GPIO_PIN_1 #define BUTTON_PORT GPIOB #define SERVO_PIN GPIO_PIN_6 #define SERVO_PORT GPIOA // FUNCTION void SystemClock_Config(void); void MX_GPIO_Init(void); void MX_ADC1_Init(void); void MX_TIM3_Init(void); #endif
5. Soal Analisa[Kembali]
1. Analisa bagaimana perbedaan implementasi PWM antara STM32 serta dampaknya terhadap kontrol motor dan LED.
2. Analisa bagaimana cara pembacaan nilai sensor analog menggunakan ADC pada STM32
3. Analisa bagaimana penggunaan interrupt eksternal dalam mendeteksi input dari sensor atau tombol pada STM32
4. Analisa bagaimana cara kerja fungsi HAL_GetTick() pada STM32
5. Analisa bagaimana perbedaan konfigurasi dan kontrol pin PWM serta pemanfaatan timer internal pada STM32 dalam menghasilkan sinyal PWM



.jpeg)

Komentar
Posting Komentar