LA 2 M1 PRAK UP UC
- Rangkai rangkaian di breadboard sesuai dengan percobaan ke-3 pada modul menggunakan sensor inframerah (IR) dan sensor sentuh sebagai input, serta LED RGB sebagai output.
- Sambungkan breadboard ke komputer yang terinstal software STM32CubeIDE menggunakan kabel USB.
- Buka STM32CubeIDE dan pastikan STM32 terdeteksi dengan baik oleh perangkat lunak.
- Buat dan buka program pada STM32CubeIDE yang telah dibuat untuk mengontrol LED RGB.
- Upload program ke STM32 dan jalankan program untuk mengontrol LED RGB.
- Uji sensor inframerah dan sensor sentuh untuk memastikan LED RGB menyala sesuai dengan kondisi yang ditentukan.
- Selesai.
3. Rangkaian Simulasi dan Prinsip Kerja
[Kembali]
Rangkaian Simulasi
Prinsip Kerja :
Prinsip Kerja Program:
Inisialisasi Sistem:
Program dimulai dengan memanggil fungsi HAL_Init(), yang melakukan inisialisasi HAL (Hardware Abstraction Layer) untuk mengonfigurasi seluruh perangkat keras mikrocontroller (STM32). Ini merupakan langkah awal yang krusial agar kita dapat menggunakan periferal dan sistem timer yang ada pada STM32.
Konfigurasi Clock Sistem:
Selanjutnya, fungsi SystemClock_Config() digunakan untuk mengatur konfigurasi clock sistem. Pengaturan ini memastikan bahwa STM32 beroperasi pada frekuensi yang tepat, sehingga semua periferal dapat bekerja secara optimal. Biasanya, fungsi ini juga digunakan untuk mengatur osilator dan pembagi clock.
Inisialisasi GPIO:
Fungsi MX_GPIO_Init() bertanggung jawab untuk mengonfigurasi semua pin GPIO yang diperlukan oleh program, termasuk pin untuk LED dan sensor. Setelah fungsi ini dieksekusi, semua pin terkait siap digunakan.
Pembacaan Status Sensor:
Untuk memantau status sensor inframerah (IR), kita menggunakan perintah
`uint8_t ir_status = HAL_GPIO_ReadPin(GPIOB, IR_Pin);`
Perintah ini akan memberikan status sensor IR yang terhubung ke pin IR_Pin pada port GPIOB. Status ini dapat berupa GPIO_PIN_SET (jika IR mendeteksi gerakan) atau GPIO_PIN_RESET (jika tidak ada gerakan).
Begitu pula, untuk membaca status dari sensor sentuh (TOUCH), kita gunakan perintah
`uint8_t touch_status = HAL_GPIO_ReadPin(GPIOB, TOUCH_Pin);`
Status dari sensor sentuh ini juga akan memberikan nilai GPIO_PIN_SET (jika ada sentuhan) atau GPIO_PIN_RESET (jika tidak ada sentuhan).
Mengatur LED Biru Berdasarkan Status IR:
Dengan menggunakan perintah
`HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, ir_status);`
LED Biru akan dinyalakan jika sensor IR aktif (terdeteksi gerakan), dan akan dimatikan jika tidak ada gerakan terdeteksi.
Mengatur LED Hijau Berdasarkan Status Sensor Sentuh:
Begitu juga untuk LED Hijau, kita akan menggunakan perintah
`HAL_GPIO_WritePin(GPIOA, GREEN_Pin, touch_status);`
LED Hijau akan menyala jika ada sentuhan, dan akan dimatikan jika tidak ada sentuhan terdeteksi.
Mengatur LED Merah Berdasarkan Kedua Sensor:
Dalam bagian ini, kita memeriksa apakah kedua sensor (IR dan TOUCH) tidak aktif dengan menggunakan kondisi
`if (ir_status == GPIO_PIN_RESET && touch_status == GPIO_PIN_RESET)`
Jika kedua sensor menunjukkan tidak adanya aktivitas, maka LED Merah akan dinyalakan dengan perintah
`HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET);`
Sebaliknya, jika salah satu dari sensor tersebut aktif, LED Merah akan dimatikan dengan perintah
`else { HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_RESET); }`
Delay:
Program selanjutnya memberikan delay singkat selama 10 milidetik dengan
`HAL_Delay(10);`
Delay ini bertujuan untuk memastikan pembacaan sensor dan pemadaman LED berjalan stabil. Ini juga membantu mencegah pembacaan sensor yang tidak konsisten dan penyalakan LED yang tidak diinginkan, seperti efek bouncing pada tombol atau sensor sentuh.
Prinsip kerja rangkaian ini berfokus pada pemrosesan sinyal digital oleh mikrokontroler STM32 untuk mengontrol penyalaan LED RGB, menggunakan sensor inframerah dan sensor sentuh sebagai input. Rangkaian ini mengandalkan logika digital, di mana sensor inframerah berfungsi sebagai detektor gerakan dan sensor sentuh sebagai detektor sentuhan. Setiap sensor mengirimkan sinyal yang kemudian dibaca oleh mikrokontroler. Ketika sensor inframerah mendeteksi gerakan, mikrokontroler akan mengaktifkan LED Biru. Sebaliknya, jika sensor sentuh mendeteksi sentuhan, maka LED Hijau akan menyala.
Jika kedua sensor tidak aktif, yaitu tidak ada gerakan yang terdeteksi oleh sensor inframerah dan tidak ada sentuhan pada sensor sentuh, maka LED Merah akan menyala. Proses ini dilakukan dengan memantau status kedua sensor tersebut. Berdasarkan status ini, mikrokontroler mengatur status pin GPIO yang terhubung ke masing-masing LED. Ketika salah satu sensor mengaktifkan, mikrokontroler akan mematikan LED Merah; sedangkan jika kedua sensor tidak aktif, LED Merah akan menyala.
Untuk memastikan pembacaan sensor yang akurat dan stabil, program dilengkapi dengan penundaan kecil yang bertujuan mengurangi kemungkinan kesalahan pembacaan akibat noise atau efek bouncing dari sensor sentuh. Dengan pengaturan ini, sistem dapat mengontrol LED secara tepat berdasarkan kondisi yang terdeteksi oleh sensor, tanpa gangguan atau kesalahan dalam pembacaan.
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 ir_status = HAL_GPIO_ReadPin(GPIOB, IR_Pin); // Membaca IR sensor (PB10)
uint8_t touch_status = HAL_GPIO_ReadPin(GPIOB, TOUCH_Pin); // Membaca Touch Sensor (PB6)
// LED Biru menyala jika IR aktif
HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, ir_status);
// LED Hijau menyala jika Touch aktif
HAL_GPIO_WritePin(GPIOA, GREEN_Pin, touch_status);
// LED Merah menyala jika tidak ada sensor yang aktif
if (ir_status == GPIO_PIN_RESET && touch_status == GPIO_PIN_RESET) {
HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET); // Nyalakan LED RED
} else {
HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_RESET); // Matikan LED RED
}
HAL_Delay(10); // Delay kecil untuk stabilisasi pembacaan sensor
}
}
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();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOA, RED_Pin|GREEN_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_RESET);
/*Configure GPIO pins : RED_Pin GREEN_Pin */
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);
/*Configure GPIO pin : BLUE_Pin */
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);
/*Configure GPIO pins : IR_Pin TOUCH_Pin */
GPIO_InitStruct.Pin = IR_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)
{
}
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t *file, uint32_t line)
{
}
#endif /* USE_FULL_ASSERT */
5. Video Demo
[Kembali]
6. Analisa
[Kembali]
7. Download File
[Kembali]
Video Demo[klik disini]
HTML [klik disini]
Listing Program [klik disini]
Datasheet Raspberry Pi Pico [klik disini]
Datasheet Raspberry STM32F103C8 [klik disini]
Datasheet Sensor Infrared [klik disini]
Datasheet Sensor Touch[klik disini]
Datasheet LED [klik disini]
Komentar
Posting Komentar