LA 1



 1. Prosedur [kembali]

1. Siapkan alat dan bahan yang akan digunakan pada saat praktikum seperti harga STM32f103c8t6, IR sensor, touch sensor, jumper, breadboard, resistor, switch, buzzer

2. Rangkai sesuai gambar percobaan

3. Buka software STM32CubeIDE pada bagian main.h dan main.c copy listing program yang ada di modul kemudian paste ke main.h dan main.c di STM32CubeIDE

4. Kemudian sambungkan STM32f103c8t6ke laptop

5. Run program di STM32CubeIDE kemudian simulasikan rangkaian apakah sudah sesuai dengan kondisi yang diinginkan

 2. Hardware dan diagram blok [kembali]
  • STM32F103C8

  • Touch Sensor

  • Infrared Sensor
  • LED


  • Buzzer
  • Resistor 

Diagram blog

                            

 3. Rangkaian Simulasi Dan Prinsip Kerja [kembali]


Sistem ini terdiri dari sensor PIR sebagai pendeteksi gerakan, sensor touch sebagai input manual, mikrokontroler STM32 sebagai pusat pengendali, serta LED sebagai lampu lorong dan buzzer sebagai indikator tambahan. Ketika sensor PIR mendeteksi adanya gerakan, keluarannya akan bernilai HIGH, kemudian sinyal tersebut diproses oleh mikrokontroler untuk menyalakan LED. Secara bersamaan, mikrokontroler mengaktifkan delay timer yang berfungsi mempertahankan kondisi lampu tetap menyala dalam jangka waktu tertentu meskipun tidak ada gerakan lanjutan.

Pada kondisi yang diberikan, yaitu ketika sensor PIR mendeteksi gerakan secara berulang sebelum waktu tunda berakhir dan sensor touch tidak diaktifkan, setiap sinyal HIGH dari PIR akan menyebabkan mikrokontroler mengulang atau mereset waktu tunda ke awal. Akibatnya, proses perhitungan waktu tidak pernah mencapai batas akhir untuk mematikan lampu.

Karena sensor touch berada dalam kondisi LOW (tidak disentuh), tidak terdapat pengaruh tambahan terhadap sistem sehingga seluruh proses kendali sepenuhnya bergantung pada sensor PIR. Dengan demikian, LED akan tetap menyala karena sistem terus mendeteksi adanya aktivitas di area tersebut. Lampu hanya akan padam apabila tidak ada gerakan yang terdeteksi hingga waktu tunda benar-benar selesai tanpa adanya reset ulang.

 4. Flowchart dan Listing Program [kembali]


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)

{

}

}

 5. Video Demo [kembali]



 6. Kondisi [kembali] 

M1 P1 K2: Buatlah rangkaian seperti pada gambar percobaan 1 dengan kondisi ketika PIR tidak mendeteksi gerakan dan sensor Touch tidak mendeteksi sentuhan, maka LED akan mati

 7. Video Simulasi [kembali]

 


 8. Download File [kembali]

Komentar

Postingan populer dari blog ini