LAPORAN AKHIR MODUL 1 PERCOBAAN 3
LAPORAN AKHIR MODUL 1 PERCOBAAN 3
1. Prosedur (kembali)
A. Persiapan Alat dan Bahan
- Siapkan semua komponen: ST-LINK, STM32 Bluepill, IR transmitter & receiver, touch sensor, buzzer, LED, dan resistor 220Ω.
- Pastikan laptop sudah terinstal STM32CubeIDE dan driver ST-LINK.
- Pastikan kabel jumper dalam kondisi baik.
B. Perakitan Rangkaian
- Hubungkan pin 3.3V dari STM32 ke jalur VCC pada breadboard.
- Hubungkan pin GND STM32 ke jalur ground breadboard.
-
Rangkai IR Receiver:
- VCC → 3.3V
- GND → GND
- OUT → pin PA0
-
Rangkai Touch Sensor:
- VCC → 3.3V
- GND → GND
- OUT → pin PA1
-
Rangkai LED:
- Anoda → pin PB0
- Katoda → resistor 220Ω → GND
-
Rangkai Buzzer:
- Positif → pin PB1
- Negatif → GND
-
Hubungkan ST-LINK ke STM32:
- SWDIO → PA13
- SWCLK → PA14
- GND → GND
- 3.3V → 3.3V
- Periksa kembali semua koneksi agar tidak terjadi kesalahan wiring.
C. Konfigurasi dan Upload Program
- Hubungkan ST-LINK ke laptop melalui USB.
- Buka STM32CubeIDE dan buka project yang telah dibuat.
- Lakukan build project hingga tidak terdapat error.
- Klik tombol Run/Download untuk mengunggah program ke STM32.
- Tunggu hingga proses flashing selesai tanpa error.
D. Pengujian Sistem
- Nyalakan rangkaian dengan memastikan STM32 mendapatkan tegangan.
- Amati kondisi awal sistem (LED dan buzzer).
-
Lakukan pengujian touch sensor:
- Sentuh sensor untuk mengaktifkan atau menonaktifkan sistem.
- Amati perubahan kondisi output.
-
Lakukan pengujian IR sensor:
- Dekatkan objek ke IR transmitter/receiver.
- Amati apakah LED dan buzzer merespon.
- Ulangi pengujian beberapa kali untuk memastikan sistem bekerja stabil.
2. Hardware (kembali)
Alat
- ST-LINK (programmer/debugger STM32)
- Laptop / PC dengan STM32CubeIDE
- Breadboard
- Kabel jumper
- Mikrokontroler STM32F103C8 (Bluepill)
- IR Sensor
- Touch Sensor
- Buzzer
- LED
- Resistor 220 Ω
3. Rangkaian Simulasi dan Prinsip Kerja (kembali)
Prinsip kerja rangkaian ini berbasis sistem kontrol sederhana menggunakan mikrokontroler STM32 sebagai pusat pengolah data input dan pengendali output. Rangkaian memiliki dua jenis input, yaitu touch sensor sebagai pengendali utama (enable/disable sistem) dan IR receiver sebagai pendeteksi objek. Ketika rangkaian diberi tegangan, mikrokontroler akan membaca kondisi awal dan berada dalam keadaan aktif. Touch sensor bekerja sebagai saklar digital, di mana setiap sentuhan akan mengubah kondisi sistem menjadi aktif atau nonaktif. Jika sistem dalam keadaan nonaktif, maka seluruh output seperti LED dan buzzer akan dimatikan tanpa memperhatikan kondisi sensor lainnya.
Saat sistem dalam keadaan aktif, mikrokontroler akan terus membaca sinyal dari IR receiver. IR transmitter memancarkan sinar inframerah, dan ketika ada objek yang menghalangi atau memantulkan sinar tersebut, IR receiver akan memberikan sinyal logika ke mikrokontroler. Sinyal ini kemudian diproses untuk menentukan kondisi output. Jika objek terdeteksi, maka mikrokontroler akan mengaktifkan LED sebagai indikator visual dan buzzer sebagai indikator suara. Sebaliknya, jika tidak ada objek yang terdeteksi, maka LED dan buzzer akan tetap dalam kondisi mati.
Secara keseluruhan, rangkaian ini bekerja dengan konsep input–proses–output, di mana input berasal dari touch sensor dan IR sensor, proses dilakukan oleh mikrokontroler STM32, dan output berupa LED serta buzzer. Sistem ini juga menerapkan logika kontrol sederhana berbasis kondisi (conditional logic), sehingga sangat cocok digunakan sebagai dasar pemahaman sistem otomasi seperti alarm pendeteksi objek atau sistem keamanan sederhana.
4. Flowchart dan Listing Program (kembali)
#include "main.h"
/* Private variables ---------------------------------------------------------*/
uint8_t system_enable = 1;
uint8_t touch_last = 0;
/* Function prototypes -------------------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
uint8_t touch_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);
// Toggle system dengan touch sensor
if (touch_now == GPIO_PIN_SET && touch_last == GPIO_PIN_RESET)
{
system_enable = !system_enable;
HAL_Delay(200); // debounce
}
touch_last = touch_now;
if (system_enable)
{
// Jika IR mendeteksi objek
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // LED ON
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET); // Buzzer ON
}
else
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
}
}
else
{
// Sistem OFF
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
}
}
}
/**
* @brief System Clock Configuration
*/
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
// Konfigurasi oscillator
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();
}
// Konfigurasi clock
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();
}
}
/**
* @brief GPIO Initialization Function
*/
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();
// Set output awal LOW
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1, GPIO_PIN_RESET);
// PA0 & PA1 sebagai input (IR + Touch)
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// PB0 & PB1 sebagai output (LED + Buzzer)
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);
}
/**
* @brief Error Handler
*/
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. Kondisi (kembali)
Sistem pada rangkaian ini bekerja dengan dua kondisi utama, yaitu aktif dan nonaktif yang dikendalikan oleh touch sensor sebagai saklar. Saat sistem aktif, mikrokontroler akan membaca sinyal dari IR sensor; jika terdeteksi objek maka LED dan buzzer akan menyala, sedangkan jika tidak terdeteksi maka keduanya mati. Namun, saat sistem dalam kondisi nonaktif, semua output akan tetap mati meskipun IR sensor mendeteksi objek, sehingga touch sensor berfungsi sebagai pengendali utama dan IR sensor sebagai pemicu output.
7. Video Simulasi (kembali)
8. Download File (kembali)
Komentar
Posting Komentar