Tugas Pendahuluan 1




Tugas Pendahuluan 1 Modul 1

(Percobaan 1 Kondisi 2)

 1. Prosedur[kembali]

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. Selesai.

 2. Hardware dan Diagram Blok [kembali]

Hardware :

a) Mikrokontroler STM32F103C8



b) Touch Sensor



c) PIR Sensor




d) LED




e) Buzzer




f) Resistor



Diagram Blok

 3. Rangkaian Simulasi Dan Prinsip Kerja [kembali]


Prinsip Kerja:

Prinsip kerja rangkaian ini adalah sistem kontrol lampu lorong berbasis mikrokontroler STM32 yang menggunakan dua input, yaitu sensor PIR dan sensor touch, serta dua output berupa LED dan buzzer. Sensor PIR dan sensor touch masing-masing terhubung ke pin GPIO mikrokontroler sebagai input digital, di mana pin OUT dari kedua sensor akan mengirimkan logika HIGH (1) saat aktif (terdeteksi gerakan atau sentuhan) dan logika LOW (0) saat tidak aktif. Sinyal dari kedua sensor ini kemudian diproses oleh mikrokontroler untuk menentukan kondisi output.

Jika sensor PIR tidak mendeteksi gerakan dan sensor touch tidak mendeteksi sentuhan (keduanya LOW), maka mikrokontroler akan memberikan logika LOW pada pin output sehingga LED dan buzzer mati. Sebaliknya, jika salah satu atau kedua sensor memberikan logika HIGH, maka mikrokontroler akan mengaktifkan pin output sehingga LED menyala dan buzzer berbunyi. LED terhubung ke pin output melalui resistor sebagai pembatas arus, sedangkan buzzer juga dikendalikan melalui pin output untuk menghasilkan suara sebagai indikator. Dengan demikian, keseluruhan sistem bekerja dengan membaca kondisi input pada pin GPIO dan mengatur output sesuai logika yang telah diprogram.

 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)

{

}

}

 5. Video Demo [kembali]




 6. Kondisi [kembali]

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