Percobaan 6
Buzzer, LED RGB, Push Button, dan Sensor Infrared
1. Prosedur[Kembali]
1. Rangkai rangkaian sesuai dengan rangkaian percobaan 6 pada modul 1.
2. Setelah semua komponen (Buzzer, LED RGB, Push Button, dan Sensor Infrared ) dihubungkan, lalu hubungkan USB STM32 ke laptop.
3. Inisaialisasi program menggunakan STM32CubeIDE
4. Setelah program selesai, simulasikan rangkaian.
5. Selesai.
2. Hardware dan Diagram Blok[Kembali]
Hardware :
3. Rangkaian Simulasi[Kembali]
Rangkailah seperti rangkaian percobaan 6 pada modul 1


Rangkaian ini menggunakan sensor inframerah (IR), mikrokontroler STM32F103C8T6, LED RGB, push button, dan buzzer untuk mendeteksi keberadaan objek dan memberikan respon visual serta audio. Dimana rangkaian ini terdapat 2 input yaitu sensor infrared dan push button, dengan 2 output yaitu RGB LED dan buzzer. Sensor IR bekerja dengan memancarkan sinar inframerah dan mendeteksi pantulannya; jika ada objek yang menghalangi, sensor akan mengeluarkan sinyal logika Low, sedangkan jika tidak ada objek, sensor mengeluarkan logika High. Mikrokontroler membaca sinyal dari sensor IR dan push button untuk mengontrol LED RGB dan buzzer. Saat sensor IR mendeteksi objek, LED RGB akan menyala merah. Jika push button ditekan, LED RGB akan menyala hijau. Selain itu, buzzer akan berbunyi jika salah satu dari sensor IR atau push button aktif, atau keduanya aktif secara bersamaan. Logika ini memastikan bahwa ada peringatan suara setiap kali terjadi interaksi dengan sistem, baik melalui deteksi objek oleh sensor IR maupun dengan menekan tombol.
4. Flowchart dan Listing Program[Kembali]
#include "main.h"
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
uint8_t button_status = HAL_GPIO_ReadPin(GPIOB, BUTTON_Pin);
uint8_t ir_status = HAL_GPIO_ReadPin(GPIOB, IR_Pin);
HAL_GPIO_WritePin(GPIOA, GREEN_Pin | RED_Pin | BUZZER_Pin,
GPIO_PIN_RESET);
if (button_status == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, BUZZER_Pin, GPIO_PIN_SET);
}
if (ir_status == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(GPIOA, GREEN_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, BUZZER_Pin, GPIO_PIN_SET);
}
HAL_Delay(100);
}
}
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(GPIOA, RED_Pin|GREEN_Pin|BUZZER_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_RESET);
GPIO_InitStruct.Pin = RED_Pin|GREEN_Pin|BUZZER_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = BLUE_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(BLUE_GPIO_Port, &GPIO_InitStruct);
GPIO_InitStruct.Pin = BUTTON_Pin|IR_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
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]
6. Analisa[Kembali]
ANALISA MODUL 1 General I/O
1. Analisa bagaimana pengaruh penggunaan/pemilihan GPIO pada STM32 dan Raspberry Pi Pico ?
Pemilihan dan penggunaan GPIO (General Purpose Input Output) pada STM32 dan Raspberry Pi Pico berpengaruh pada performa, efisiensi daya, dan fleksibilitas sistem. STM32 menggunakan periferal yang lebih kompleks dengan fitur seperti pull-up/down resistor, speed selection, dan alternatif fungsi, sedangkan Raspberry Pi Pico memiliki GPIO berbasis RP2040 yang lebih sederhana tetapi mendukung PIO (Programmable I/O) untuk operasi yang lebih fleksibel.
2. Analisa bagaimana STM32 dan Raspberry Pi Pico menerima inputan dan menghasilkan output ?
Output STM32 menggunakan register yang dikontrol melalui HAL (Hardware Abstraction Layer) atau langsung dengan mengakses register tingkat rendah. Raspberry Pi Pico menggunakan pustaka MicroPython atau C SDK untuk mengontrol input dan output GPIO. Kedua perangkat dapat membaca input digital, analog (pada pin tertentu), dan menghasilkan output PWM atau digital dengan konfigurasi yang sesuai.
3. Analisa bagaimana program deklarasi pin I/O pada STM32 dan Raspberry Pi Pico ?
Pada STM32, deklarasi pin dilakukan melalui HAL atau langsung dengan mengakses register GPIO. Contohnya:

Sedangkan pada Raspberry Pi Pico dengan MicroPython:
Pendeklarasian ini menunjukkan bahwa STM32 memiliki cara konfigurasi yang lebih kompleks dibanding Raspberry Pi Pico.
4. Analisa bagaimana program dalam analisa metode pendeteksian input pada STM32 dan Raspberry Pi Pico ?
STM32 mendeteksi input dengan membaca register IDR (Input Data Register) atau menggunakan fungsi HAL seperti:
Sementara itu, Raspberry Pi Pico menggunakan metode polling atau interrupt dengan pustaka MicroPython:
Kedua metode serupa, namun STM32 memiliki fleksibilitas lebih dalam konfigurasi mode input seperti pull-up, pull-down, atau floating input.
5. Analisa Fungsi HAL_Delay(100) pada STM32 dan utime.sleep_ms(1) pada Raspberry Pi Pico ?
HAL_Delay(100)
pada STM32 menggunakan Timer Systick untuk menunda eksekusi selama 100 ms, yang dapat menyebabkan sistem berhenti sementara.
utime.sleep_ms(1)
pada Raspberry Pi Pico menunda eksekusi selama 1 ms menggunakan pustaka MicroPython.
Keduanya berfungsi sebagai delay blocking, tetapi pada STM32 delay ini dapat memengaruhi eksekusi program lain yang bergantung pada interrupt atau multitasking.
7. Download File[Kembali]
HTML [Download]
Tidak ada komentar:
Posting Komentar