TP2 M1 uP uC

 


[KEMBALI KE MENU SEBELUMNYA]



1. Prosedur [Kembali]

1. Rangkai rangkaian di proteus sesuai dengan kondisi percobaan.

2. Tulis program di software STM32IDE.

3. Compile program tadi, lalu upload file dengan format .hex ke dalam IC STM32.

4. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.


2. Hardware dan diagram blok [Kembali]

a. Hardware
1. STM32F103C8
2. Push Button
3. Resistor

4. RGB-LED
5. Infrared Sensor
6. Touch Sensor


b. Diagram Blok
3. Rangaian simulasi dan prinsip kerja [Kembali]



Prinsip kerja sistem ini diawali dengan penerimaan sinyal digital dari sensor yang mendeteksi perubahan di lingkungan sekitar. Sensor infrared akan memberikan sinyal HIGH (1) ketika mendeteksi keberadaan objek di depannya, sedangkan sensor touch akan mengeluarkan sinyal HIGH saat disentuh. Sinyal digital dari kedua sensor ini diterima oleh pin GPIO pada STM32, yang telah dikonfigurasi dalam mode input. Program kemudian membaca status sensor menggunakan fungsi HAL_GPIO_ReadPin(), yang akan mengembalikan GPIO_PIN_SET jika sensor aktif dan GPIO_PIN_RESET jika tidak aktif.

Berdasarkan hasil pembacaan tersebut, STM32 mengontrol output pada pin LED RGB. Dengan memanfaatkan fungsi HAL_GPIO_WritePin(), mikrokontroler dapat menyalakan atau mematikan warna LED sesuai dengan kondisi sensor. Proses ini berjalan secara cepat dan terus-menerus dalam loop while(1), sehingga sistem mampu merespons perubahan sensor secara real-time serta menyesuaikan tampilan LED dengan kondisi terbaru.

Logika warna LED ditentukan sebagai berikut:

  • Jika sensor infrared bernilai HIGH dan sensor touch bernilai LOW, LED akan menyala dengan warna biru.
  • Jika sensor infrared bernilai LOW dan sensor touch bernilai HIGH, LED akan menyala dengan warna hijau.
  • Jika kedua sensor bernilai LOW, LED akan berwarna merah.
  • Jika kedua sensor bernilai HIGH, LED akan menyala dengan warna putih.

4. Flowchart dan Listing Program[Kembali]

a. Flowchart



b. Listing Program

#include "main.h"

void SystemClock_Config(void);
static void MX_GPIO_Init(void);

int main(void) {
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();

  while (1) {
    uint8_t ir_status = HAL_GPIO_ReadPin(GPIOB, IR_Pin);
    uint8_t touch_status = HAL_GPIO_ReadPin(GPIOB, TOUCH_Pin);

    if (ir_status == GPIO_PIN_SET && touch_status == GPIO_PIN_SET) {
      HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET);
      HAL_GPIO_WritePin(GPIOA, GREEN_Pin, GPIO_PIN_SET);
      HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_SET);
    } else {
      HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, ir_status);
      HAL_GPIO_WritePin(GPIOA, GREEN_Pin, touch_status);

      if (ir_status == GPIO_PIN_RESET && touch_status == GPIO_PIN_RESET) {
        HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET);
      } else {
        HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_RESET);
      }
    }
    HAL_Delay(10);
  }
}

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(GPIOA, RED_Pin | GREEN_Pin, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_RESET);

  GPIO_InitStruct.Pin = RED_Pin | GREEN_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  GPIO_InitStruct.Pin = BLUE_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(BLUE_GPIO_Port, &GPIO_InitStruct);

  GPIO_InitStruct.Pin = IR_Pin | TOUCH_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  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. Kondisi [Kembali]

Percobaan 2 Kondisi 8

Buatlah Rangkaian seperti gambar percobaan 2 dengan kondisi ketika sensor Infrared mendeteksi gerakan dan sensor touch mendeteksi sentuhan maka LED RGB akan menampilkan warna Putih.


6. Video simulasi [Kembali]


7. Link Download [Kembali]

Komentar

Postingan populer dari blog ini