Laporan Akhir 1 Modul 1
(Percobaan 2)
1. Rangkai rangkaian di proteus sesuai dengan kondisi percobaan.
2. Buat program untuk mikrokontroler STM32F103C8 di software STM32 CubeIDE.
3. Compile program dalam format hex, lalu upload ke dalam mikrokontroler.
4. Jalankan simulasi rangkaian pada proteus.
5. Selesai.
.
2. Hardware dan Diagram Blok[Kembali]
Hardware:
1. Mikrokontroler STM32F103C8

2. Infrared Sensor

3. Touch Sensor

4. Power Supply
5. RGB LED

Diagram Blok:
3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]
Prinsip Kerja:
Rangkaian ini terdiri dari sensor inframerah untuk mendeteksi gerakan, sensor sentuh untuk mendeteksi sentuhan, mikrokontroler STM32F103C8 sebagai pengendali utama, dan LED RGB untuk menampilkan hasil output. Sensor inframerah bekerja dengan mendeteksi keberadaan objek atau gerakan, dan akan memberikan sinyal HIGH pada pin output-nya saat gerakan terdeteksi. Sementara itu, sensor sentuh mendeteksi sentuhan pada permukaannya, dan akan memberikan sinyal HIGH pada pin output-nya saat disentuh. Kedua sensor ini terhubung ke mikrokontroler yang membaca statusnya.
Langkah berikutnya adalah melakukan konfigurasi di software STM32 CubeIDE dengan membuka proyek percobaan yang telah dikerjakan sebelumnya. Pada tampilan Pinout & Configuration, dilakukan pengaturan pin mikrokontroler sesuai dengan rangkaian Proteus yang telah dibuat. Kemudian, konfigurasi pada bagian debug diatur ke mode Serial Wire, dan pada bagian RCC dipilih opsi Crystal/Ceramic Resonator. Setelah seluruh konfigurasi selesai, proyek disimpan, dan halaman pemrograman akan terbuka secara otomatis. Halaman ini sudah berisi kode dasar yang dihasilkan dari konfigurasi sebelumnya. Pemrograman dimulai dengan menyertakan #include "main.h", yang merupakan fungsi utama proyek. Kode tambahan perlu ditulis pada bagian loop, tepatnya di dalam kurung kurawal pada fungsi while. Program menggunakan logika if-else untuk membaca kondisi sensor. Jika sensor inframerah mendeteksi keberadaan objek dan sensor sentuh mendeteksi sentuhan, maka mikrokontroler akan mengaktifkan LED RGB sehingga warna merah, hijau, dan biru menyala bersamaan. Setelah program selesai ditulis, langkah selanjutnya adalah mengompilasi kode menjadi file berformat .hex dan melakukan proses build untuk menghasilkan file tersebut. Terakhir, file .hex diunggah ke mikrokontroler dalam simulasi Proteus untuk menjalankan rangkaian.
Setelah rangkaiannya dijalankan, jika kedua sensor memberikan sinyal HIGH secara bersamaan, mikrokontroler akan mengaktifkan pin output yang terhubung ke LED RGB, sehingga LED berwarna cyan. Jika sensor IR mendeteksi adanya objek, maka LED akan menhasilkan warna biru. Kemudian jika sensor Touch mendeteksi adanya objek maka LED akan menghasilkan warna hijau. Dan jika kedua sensor tidak mendeteksi adanya objek, maka LED akan berwarna merah. Catu daya diberikan dari sumber tegangan +5V yang stabil, dengan resistor pembatas arus digunakan untuk melindungi LED dari kerusakan akibat arus berlebih. Dengan demikian, LED RGB hanya akan menampilkan warna putih jika sensor inframerah mendeteksi gerakan dan sensor sentuh mendeteksi sentuhan secara bersamaan.
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
}
}
}
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 */
Tidak ada komentar:
Posting Komentar