LA modul 1 Percobaan 6

 



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 unit pemrosesan utama yang menerima input dari sensor inframerah dan tombol push-button, kemudian mengontrol LED dan buzzer sebagai output. Sensor inframerah berfungsi sebagai pendeteksi objek berdasarkan pantulan sinar inframerah, sementara tombol digunakan sebagai input manual.

Prinsip kerja rangkaian ini adalah sebagai berikut: saat tombol ditekan, mikrokontroler membaca statusnya melalui port GPIOB dan mengaktifkan LED merah serta buzzer sebagai indikasi. Jika sensor inframerah mendeteksi adanya objek, maka mikrokontroler akan menyalakan LED hijau dan buzzer sebagai alarm. Program dalam STM32F103C8T6 membaca status tombol dan sensor secara terus-menerus dalam loop utama, dengan jeda waktu sebesar 100 milidetik untuk menghindari pembacaan berulang yang tidak diinginkan.

Dalam programnya, HAL_GPIO_ReadPin(GPIOB, BUTTON_Pin) digunakan untuk membaca status tombol, dan HAL_GPIO_ReadPin(GPIOB, IR_Pin) untuk membaca status sensor inframerah. Ketika kondisi yang sesuai terpenuhi, HAL_GPIO_WritePin(GPIOA, RED_Pin | GREEN_Pin | BUZZER_Pin, GPIO_PIN_SET) digunakan untuk menyalakan LED dan buzzer. Jika tidak ada aktivitas dari tombol maupun sensor, maka semua output akan dimatikan dengan 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]




ANALISA MODUL 1 General I/O

1. Analisa bagaimana pengaruh penggunaan/pemilihan GPIO pada STM32 dan Raspberry Pi Pico
2. Analisa bagaimana STM32 dan Raspberry Pi Pico menerima inputan dan menghasilkan output
3. Analisa bagaimana program deklarasi pin I/O pada STM32 dan Raspberry Pi Pico
4. Analisa bagaimana program dalam analisa metode pendeteksian input pada STM32 dan Raspberry Pi Pico
5. Analisa Fungsi HAL_Delay(100) pada STM32 dan utime.sleep_ms(1) pada Raspberry Pi Pico

1. STM32 memiliki GPIO yang sangat fleksibel dengan konfigurasi mode input/output, pull-up/down, dan alternatif fungsi melalui register atau HAL. Raspberry Pi Pico menggunakan GPIO melalui MicroPython atau C

2.STM32 menerima input melalui pin yang dikonfigurasi sebagai input digital/analog dan menghasilkan output melalui mode output push-pull/open-drain. Raspberry Pi Pico juga menerima input digital/analog dan menghasilkan output dengan perintah Pin.value() (MicroPython) atau fungsi C

3.  
  • STM32 (HAL C): 
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  • Raspberry Pi Pico (MicroPython):

from machine import Pin
import time

# Daftar GPIO untuk LED dan push button
led_pins = [2, 3, 4]  # Output LED
button_pins = [9, 10, 11, 12, 13, 14]  # Input dari push button

4.
  • STM32 (HAL C): 
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) == GPIO_PIN_SET) {
    // aksi saat input HIGH
}

  • Raspberry Pi Pico (MicroPython):

while True:
    Button1State = Button1.value()
    Button2State = Button2.value()

    if Button1State == 0 and lastButton1State == 1:
        print("Tombol 1 Ditekan,buzzer hidup")
        buzz(3000)  # Buzzer aktif 3 detik (3000 ms)
    lastButton1State = Button1State

5.   HAL_Delay(100) menunda eksekusi selama 100 milidetik, menggunakan SysTick timer dari sistem STM32.

utime.sleep_ms(1) menunda selama 1 milidetik di Raspberry Pi Pico, menggunakan delay berbasis waktu MicroPython.
Perbedaan utama adalah resolusi waktu dan efisiensi; STM32 cenderung lebih presisi dalam delay karena berbasis hardware timer.

6. Video Demo[Kembali]








7. Download File[Kembali]

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

Tidak ada komentar:

Posting Komentar

temukan pada blog ini

LA 2 M 2

  [KEMBALI KE MENU SEBELUMNYA] DAFTAR ISI 1. Prosedur 2. Hardware dan Diagram Blok 3. Rangkaian Simulasi dan Prinsip Kerja 4. Flowchart dan ...