M1 P2




PERCOBAAN 6

1. Prosedur[Kembali]

  • 1. Rangkai semua komponen sesuai dengan percobaan pada modul 
  • 2. Buat program untuk STM32 di STM32CubeIDE, sesuaikan konfigurasinya dengan rangkaian pada proteus dan kondisi yang dipakai
  • 3. Upload program ke STM32
  • 4. Jalankan rangkaian

2. Hardware dan Diagram Blok[Kembali]

1. STM32F103C8


2. BUZZER



3. Resistor



4. IR Sensor
IR Sensor Module pin diagram/pin out/Pin Configuration


5. Buzzer


3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]

Rangkaian: 


Prinsip Kerja:

Rangkaian ini menggunakan mikrokontroler STM32F103C8T6 sebagai pusat kendali, yang menerima input dari sensor inframerah dan tombol push-button, serta mengatur LED dan buzzer sebagai output. Sensor inframerah berfungsi untuk mendeteksi keberadaan objek berdasarkan pantulan sinar inframerah, sedangkan tombol berperan sebagai input manual.

Cara kerja rangkaian ini adalah: ketika tombol ditekan, mikrokontroler membaca statusnya melalui port GPIOB, lalu menyalakan LED merah dan buzzer sebagai tanda. Jika sensor inframerah mendeteksi objek, mikrokontroler akan mengaktifkan LED hijau dan buzzer sebagai alarm peringatan. Program yang berjalan di STM32F103C8T6 secara terus-menerus memantau status tombol dan sensor dalam loop utama, dengan jeda 100 milidetik untuk menghindari pembacaan yang berulang secara cepat.

Dalam program, fungsi HAL_GPIO_ReadPin(GPIOB, BUTTON_Pin) digunakan untuk membaca kondisi tombol, sementara HAL_GPIO_ReadPin(GPIOB, IR_Pin) digunakan untuk membaca data dari sensor inframerah. Saat kondisi tertentu terpenuhi, LED dan buzzer dinyalakan menggunakan HAL_GPIO_WritePin(GPIOA, RED_Pin | GREEN_Pin | BUZZER_Pin, GPIO_PIN_SET). Sebaliknya, jika tidak ada aktivitas dari tombol maupun sensor, semua output akan dimatikan dengan memberikan sinyal GPIO_PIN_RESET.

4. Flowchart dan Listing Program[Kembali] 



Flowchart:




Listing Program:
#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. Analisa[Kembali]






6. Video Demo[Kembali]








7. Download File[Kembali]

Video simulasi [download]
Datasheet Raspberry Pi Pico [Download]




Comments

Popular posts from this blog