LA M1 P3K5
[menuju akhir]
[menuju awal]
Laporan Akhir Percobaan STM 32
1. Prosedur [kembali]
a. Tentukan percobaan dan kondisi yang akan dilakukan
b. Siapakan alat dan bahan yang akan digunakan
c. Rangkai Rangkaian pada Board sesuai gambar percobaan dengan komponen sensor Touch sebagi input, Sensor IR sebagai input, STM32, software STM32CUBIDE, 3 Resistor 220 Ohm, LED RGB yang dihubungkan menggunakan jumper.
d. Buatlah program micropython pada software STM32CUBIDE dengan konfigurasi Pin Input dan Output berdasarkan pada Pin GPIO pada STM32 yang telah dirangkai sebelumnya.
e. Kemudian, buatlah program untuk membaca inputan dan menghasilkan Output LED sesuai kondisi yang telah ditentukan.
f. Hubungkan Laptop yang telah upload codingan pada STM32CUBIDE yang tidak error dengan STM32
g. Run Program, dan lihat output yang dihasilkan sesuai dengan kondisi yang diminta
2. Hardware dan Diagram Blok [kembali]
a. Hardware
1) Laptop yang sudah terinstal Software Thonny
2) Port sambungan kabel dari laptop ke STM32
3) White Board atau Project Board
4) STM32
7) Resistor
8) LED RGB
9) Jumper
b. Blok Diagram
Prinsip Kerja:
Pada percobaan kedua ini, digunakan mikrokontroler STM32 untuk mengendalikan rangkaian yang terdiri dari input Touch Sensor, IR , dan LED RGB sebagai ouout yang dihubungkan terlebih dahulu ke resistor 220 ohm. Perancangan dan pemrograman sistem dilakukan menggunakan software STM32CUBEIDE.
Rangkaian ini beroperasi dengan sensor PIR dan Touch sebagai input, sedangkan LED RGB berfungsi sebagai output yang menampilkan perubahan warna berdasarkan kondisi yang terdeteksi. Mekanisme kerja rangkaian dijelaskan sebagai berikut:
Kondisi 1: Sensor IR mendeteksi gerakan dan Touch Sensor mendeteksi sentuhan
Ketika sensor IR mendeteksi adanya pergerakan dan sensor sentuh juga mendeteksi adanya sentuhan, LED RGB akan menyala dalam pola bergantian antara warna biru dan cyan. LED menyala selama 3 detik, kemudian mati selama 3 detik, dan pola ini berulang secara terus-menerus.
Kondisi 2: Hanya sensor Touch yang mendeteksi sentuhan
Jika hanya Touch sensor yang mendeteksi sentuhan, sedangkan sensor IR tidak mendeteksi gerakan, maka LED RGB akan menyala dengan warna hijau.
LED akan tetap menyala selama 3 detik, kemudian mati selama 3 detik, dan siklus ini akan berulang.
Kondisi 3: Touch sensor mendeteksi sentuhan kembali
Apabila Touch sensor kembali mendeteksi sentuhan setelah kondisi sebelumnya, LED RGB akan menyala dengan warna biru secara kontinu tanpa berkedip. LED tetap dalam kondisi menyala selama input sentuhan masih terdeteksi.
Kondisi 4: Tidak ada deteksi gerakan maupun sentuhan
Jika sensor IR tidak mendeteksi adanya pergerakan dan Touch Sensor juga tidak mendeteksi adanya sentuhan, maka LED RGB akan menyala dengan warna merah. Warna merah ini menandakan bahwa tidak ada aktivitas terdeteksi dalam sistem.
Kesimpulan
Percobaan ini menunjukkan bagaimana kombinasi sensor IR dan sensor sentuh dapat digunakan untuk mengontrol LED RGB, dengan perubahan warna yang mencerminkan kondisi sensor. Dengan memanfaatkan STM32 sebagai pengendali utama serta STM32CUBEIDE sebagai software pemrograman, sistem ini mampu menjalankan logika deteksi dan pengendalian output LED dengan pola yang telah ditentukan.
a. Flowchart
b. 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 pir_status = HAL_GPIO_ReadPin(GPIOB, PIR_Pin);
uint8_t touch_status = HAL_GPIO_ReadPin(GPIOB, TOUCH_Pin);
HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, pir_status);
if (touch_status == GPIO_PIN_SET) {
HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GREEN_Pin, GPIO_PIN_SET);
HAL_Delay(3000);
HAL_GPIO_WritePin(GPIOA, GREEN_Pin, GPIO_PIN_RESET);
HAL_Delay(3000);
} else {
if (pir_status == GPIO_PIN_RESET && touch_status == GPIO_PIN_RESET) {
HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET);
} else {
HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_RESET);
}
}
}
}
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, GPIO_PIN_RESET);
HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_RESET);
GPIO_InitStruct.Pin = RED_Pin|GREEN_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 = PIR_Pin|TOUCH_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)
{
}
}
Video Demo[tekan disini]
HTML [tekan disini]
Komentar
Posting Komentar