Tugas Pendahuluan 1 M1 uP&uC
Modul 1 Percobaan 1 Kondisi 9
Langkah - langkah men-simulasikan rangkaiannya :
- Buatlah rangkaian sesuai dengan gambar di modul di Proteus 8.17
- Lalu buka STMCUBEIDE,klik New STM32 Project
- Pilih MPU/MCU SELECTOR, dan ketik STM32F103C8
- Setting pin di file.ioc nya sesuai dengan kebutuhan
- Lalu generate code dan masukkan kode di main.c dan main.h
- Klik Build project dan Masukkan file.hex yang telat digenerate
- Masukkan file.hex ke STM32F103C8 di Proteus
- Run simulasi di Proteus
2. Hardware dan Diagram Blok [kembali]
3. Rangkaian Simulasi dan Prinsip Kerja [kembali]
Prinsip Kerja :
Rangkaian bekerja dengan dua mode, yaitu otomatis dan manual. Pada mode otomatis, sensor PIR mendeteksi gerakan untuk mengaktifkan LED dan buzzer. Pada mode manual, LED menyala terus dan sensor PIR diabaikan.
4. Flowchart dan Listing Program [kembali]
Flowchart :
Listing Program :
#include "stm32f1xx_hal.h"
uint8_t system_enable = 0;
uint8_t touch_last = 0;
uint8_t pir_first_trigger = 1;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
void Error_Handler(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
uint8_t pir_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
uint8_t touch_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);
if (touch_now == GPIO_PIN_SET && touch_last == GPIO_PIN_RESET)
{
system_enable = !system_enable;
if (system_enable)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
}
HAL_Delay(200);
}
touch_last = touch_now;
if (pir_now == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
if (pir_first_trigger)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
pir_first_trigger = 0;
}
}
else
{
pir_first_trigger = 1;
if(!system_enable)
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
}
if(system_enable)
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
}
}
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_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = 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_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1, GPIO_PIN_RESET);
}
void Error_Handler(void)
{
__disable_irq();
while(1)
{
}
}
Buatlah rangkaian seperti pada gambar percobaan 1 dengan kondisi ketika sensor touch disentuh kembali setelah mode manual aktif, maka sistem kembali ke mode otomatis, buzzer berhenti berbunyi, dan sensor PIR kembali aktif mendeteksi gerakan.
Download File Proteus [klik disini]
Download File .hex [klik disini]
Download Datasheet STM32F103C8 [klik disini]
Download Datasheet Resistor [klik disini]
Download Datasheet Touch Sensor [klik disini]
Download Datasheet PIR Sensor [klik disini]
Download Datasheet LED [klik disini]
Download Datasheet Push Button [klik disini]
Komentar
Posting Komentar