Tugas Pendahuluan 1 Modul 1
Tugas Pendahuluan 1 Modul 1
(Percobaan 2 Kondisi 8)
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. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.
5. Selesa
3. Rangkaian Simulasi dan Prinsip Kerja
[Kembali]
Rangkaian Simulasi :
Prinsip Kerja :
Sistem ini menggunakan mikrokontroler STM32F103C8 untuk membaca input dari sensor infrared (IR) di pin PB10 dan sensor sentuh di pin PB7, serta mengendalikan LED RGB melalui pin PA6 (Merah), PA7 (Hijau), dan PB0 (Biru). Saat sistem aktif, sensor IR dan sentuh bekerja secara real-time. Jika IR tidak mendeteksi objek (0) dan sensor sentuh aktif (1), LED menyala biru. Jika kedua sensor aktif (1), LED menyala cyan (hijau + biru). Jika hanya IR aktif (1) dan sensor sentuh tidak (0), LED menyala hijau. Setiap perubahan sensor langsung direspons, memberikan umpan balik visual sesuai kondisi terdeteksi.
4. Flowchart dan Listing Program
[Kembali]
Flowchart :
Listing Program :
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file : main.c
* @brief : Main program body
******************************************************************************
*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "stm32f1xx_hal.h" // Library HAL untuk STM32F1
#include "main.h" // Header file main
/* USER CODE BEGIN Includes */
/* USER CODE END Includes */
/* USER CODE BEGIN Private defines */
// Definisi nama Pin LED dan Sensor
#define RED_Pin GPIO_PIN_6 // Pin untuk LED Merah
#define GREEN_Pin GPIO_PIN_7 // Pin untuk LED Hijau
#define BLUE_Pin GPIO_PIN_0 // Pin untuk LED Biru
#define IR_Pin GPIO_PIN_10 // Pin untuk Sensor IR
#define TOUCH_Pin GPIO_PIN_7 // Pin untuk Sensor Sentuh
#define RED_GPIO_Port GPIOA // Port LED Merah
#define GREEN_GPIO_Port GPIOA // Port LED Hijau
#define BLUE_GPIO_Port GPIOB // Port LED Biru
#define IR_GPIO_Port GPIOB // Port Sensor IR
#define TOUCH_GPIO_Port GPIOB // Port Sensor Sentuh
/* USER CODE END Private defines */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void); // Fungsi untuk konfigurasi clock sistem
static void MX_GPIO_Init(void); // Fungsi untuk inisialisasi GPIO
void Error_Handler(void); // Fungsi untuk error handling
/* Main program */
int main(void)
{
HAL_Init(); // Inisialisasi HAL Library
SystemClock_Config(); // Konfigurasi Clock Sistem
MX_GPIO_Init(); // Inisialisasi semua GPIO
while (1) // Loop utama program
{
uint8_t ir_status = HAL_GPIO_ReadPin(IR_GPIO_Port, IR_Pin); // Membaca status sensor IR
uint8_t touch_status = HAL_GPIO_ReadPin(TOUCH_GPIO_Port, TOUCH_Pin); // Membaca status sensor Sentuh
if (ir_status == GPIO_PIN_RESET && touch_status == GPIO_PIN_SET) // Jika IR LOW dan Sentuh HIGH
{
// Hanya LED Biru yang dinyalakan
HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_SET); // Nyalakan LED Biru
HAL_GPIO_WritePin(RED_GPIO_Port, RED_Pin, GPIO_PIN_RESET); // Matikan LED Merah
HAL_GPIO_WritePin(GREEN_GPIO_Port, GREEN_Pin, GPIO_PIN_RESET); // Matikan LED Hijau
}
else if (ir_status == GPIO_PIN_SET) // Jika IR HIGH (terdeteksi objek)
{
// Nyalakan LED Cyan (Hijau + Biru)
HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_SET); // Nyalakan LED Biru
HAL_GPIO_WritePin(RED_GPIO_Port, RED_Pin, GPIO_PIN_RESET); // Matikan LED Merah
HAL_GPIO_WritePin(GREEN_GPIO_Port, GREEN_Pin, GPIO_PIN_SET); // Nyalakan LED Hijau
}
else
{
// Semua LED dimatikan
HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_RESET); // Matikan LED Biru
HAL_GPIO_WritePin(RED_GPIO_Port, RED_Pin, GPIO_PIN_RESET); // Matikan LED Merah
HAL_GPIO_WritePin(GREEN_GPIO_Port, GREEN_Pin, GPIO_PIN_RESET);// Matikan LED Hijau
}
HAL_Delay(100); // Delay 100ms untuk stabilisasi pembacaan sensor
}
}
/**
* @brief System Clock Configuration
*/
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0}; // Struktur untuk konfigurasi osilator
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; // Struktur untuk konfigurasi clock
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; // Gunakan internal HSI oscillator
RCC_OscInitStruct.HSIState = RCC_HSI_ON; // Aktifkan HSI
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; // Kalibrasi default HSI
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; // Tidak menggunakan PLL
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) // Jika gagal konfigurasi oscillator
{
Error_Handler(); // Panggil Error Handler
}
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; // Konfigurasi semua clock bus
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; // Gunakan HSI sebagai sumber clock
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; // AHB = SYSCLK/1
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; // APB1 = HCLK/1
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; // APB2 = HCLK/1
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) // Set konfigurasi clock
{
Error_Handler(); // Panggil Error Handler jika gagal
}
}
/**
* @brief GPIO Initialization Function
*/
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0}; // Struktur konfigurasi GPIO
/* Enable Clocks */
__HAL_RCC_GPIOA_CLK_ENABLE(); // Aktifkan clock untuk GPIOA
__HAL_RCC_GPIOB_CLK_ENABLE(); // Aktifkan clock untuk GPIOB
__HAL_RCC_GPIOD_CLK_ENABLE(); // Aktifkan clock untuk GPIOD
/* Output Pins: RED, GREEN */
GPIO_InitStruct.Pin = RED_Pin | GREEN_Pin; // Pin untuk LED Merah dan Hijau
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // Mode output push-pull
GPIO_InitStruct.Pull = GPIO_NOPULL; // Tidak ada pull-up/pull-down
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // Kecepatan rendah
HAL_GPIO_Init(RED_GPIO_Port, &GPIO_InitStruct); // Inisialisasi di Port A
/* Output Pin: BLUE */
GPIO_InitStruct.Pin = BLUE_Pin; // Pin untuk LED Biru
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // Mode output push-pull
GPIO_InitStruct.Pull = GPIO_NOPULL; // Tidak ada pull-up/pull-down
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // Kecepatan rendah
HAL_GPIO_Init(BLUE_GPIO_Port, &GPIO_InitStruct); // Inisialisasi di Port B
/* Input Pins: IR, TOUCH */
GPIO_InitStruct.Pin = IR_Pin | TOUCH_Pin; // Pin untuk sensor IR dan Sentuh
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // Mode input
GPIO_InitStruct.Pull = GPIO_NOPULL; // Tidak ada pull-up/pull-down
HAL_GPIO_Init(IR_GPIO_Port, &GPIO_InitStruct); // Inisialisasi di Port B
/* Set semua LED OFF saat start */
HAL_GPIO_WritePin(RED_GPIO_Port, RED_Pin, GPIO_PIN_RESET); // Matikan LED Merah
HAL_GPIO_WritePin(GREEN_GPIO_Port, GREEN_Pin, GPIO_PIN_RESET);// Matikan LED Hijau
HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_RESET); // Matikan LED Biru
}
5. Kondisi
[Kembali]
Percobaan 2 Kondisi 8
Jika hanya infrared menyala maka LED akan menghasilkan warna tosca, jika hanya touch sensor yang menyala LED akan menghasilkan warna biru
6. Video Simulasi
[Kembali]
7. Download File
[Kembali]
Komentar
Posting Komentar