LA 1 M1

[menuju akhir]





PERCOBAAN 3 : Led & PIR

1. Prosedur[Kembali]
  1. Buka aplikasi STM32CubeIDE lalu pilih stm project
  2. Setelah itu masukkan pin Input dan pin Output sesuai dengan gambar rangkaian di modul
  3. Masukan program yang telah di buat sesuai kondisi pada kedua file tersebut
  4. Rangkai komponen sesuai dengan gambar rangkaian di modul
  5. Hubungkan laptop dengan rangkaian yang telah dirangkai
  6. Selesai

 2. Hardware dan Diagram Blok[Kembali]


a. Hardware

a) Mikrokontroler STM32F103C8



b) IR Transmitter


c) IR Receiver



d) LED



e) Buzzer




f) Resistor


g) ST-LINK

b) Diagram Block





3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]



Gambar Rangkaian Percobaan 3 Modul 1

Prinsip Kerja :

Sensor PIR digunakan untuk mendeteksi keberadaan gerakan manusia berdasarkan perubahan radiasi inframerah di sekitarnya. Rangkaian ini memiliki dua LED: LED merah yang menyala saat gerakan terdeteksi dan LED kuning yang menyala saat tidak ada gerakan.

Ketika program dijalankan, pin 27 dikonfigurasi sebagai input untuk menerima sinyal dari sensor PIR. Jika sensor mendeteksi gerakan, pin keluaran (GPIO 15) diatur ke HIGH (1) sehingga LED merah menyala, sementara pin GPIO 14 diatur ke LOW (0) sehingga LED kuning mati. Jika tidak ada gerakan, kondisi ini dibalik: LED merah mati dan LED kuning menyala.

Logika utama dari program ini terletak pada loop utama yang secara terus-menerus membaca status sensor PIR menggunakan pir.value(). Jika pir.value() bernilai 1, berarti ada gerakan yang terdeteksi, sehingga LED merah menyala dan LED kuning mati. Sebaliknya, jika pir.value() bernilai 0, berarti tidak ada gerakan, sehingga LED kuning menyala dan LED merah mati.

Program juga menggunakan time.sleep(0.1) untuk memberikan jeda 100 milidetik dalam setiap iterasi loop guna mencegah pembacaan sensor yang terlalu cepat. Ini membantu menghindari false triggering akibat fluktuasi kecil pada sensor PIR.



4. Flowchart dan Listing Program[Kembali]
a. Flowchart




b. Listing Program

 #include "main.h"

 

uint8_t system_enable = 1; uint8_t touch_last = 0;

void SystemClock_Config(void);

 static void MX_GPIO_Init(void);

int main(void)

{

HAL_Init(); SystemClock_Config(); MX_GPIO_Init();

while (1)

{

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; HAL_Delay(200);

}

touch_last = touch_now;

if (system_enable)

{

if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_SET)

{

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);

}

else

{

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);

}

}

else

{

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);

}

}

}

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();

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1, GPIO_PIN_RESET);

GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLDOWN; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 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

 

5. Video Demo[Kembali]





6. Analisa[Kembali]





7. Download File[Kembali]
Download HTML klik disini 
Download file Analisa klik disini
Download video Demo klik disini 
Download Datasheet Sensor PIR klik disini
Download Datasheet LED klik disini
Download Datasheet Resistor klik disini


[menuju awal]

Tidak ada komentar:

Posting Komentar

Modul 3 Communication

[KEMBALI KE MENU SEBELUMNYA] DAFTAR ISI 1. Pendahuluan 2. Tujuan 3. Alat dan Bahan 4. Dasar Teori 5. Percobaan ...