LA Modul 1 P3K2



Percobaan 3

1. Prosedur[Kembali]

1. Buat rangkaian dipapan rangkaian sesuai dengan percobaan yang dilakukan pada modul.
2. Buat program STM 32 IDE CLUB
3. Connect Rangkaian STM32 dengan ST LINK ke laptop
4. Jalankan program
5. Selesai.

2. Hardware dan Diagram Blok[Kembali]

Hardware :

  • ST-LINK
  • STM32F103C8
  • IR Transmitter dan IR Receiver
  • Touch Sensor 
  • Buzzer 
  • LED
  • Resistor
Diagram Blok

 

3. Rangkaian Simulasi[Kembali]

  • Rangkaian 
  • Prinsip Kerja 

Rangkaian yang digunakan terdiri dari sensor sentuh, sensor inframerah, mikrokontroler STM32, dan output seperti LED. Alur rangkaiannya dimulai dari kedua sensor sebagai input yang terhubung ke pin GPIO pada STM32. Supaya rangkaian bekerja dengan baik, setiap sensor harus terhubung ke VCC dan GND dengan benar, lalu pin output sensor masuk ke pin input STM32. Untuk bagian output, LED sebaiknya dipasang dengan resistor secara seri sebelum ke ground agar tidak mudah rusak. Selain itu, jalur kabel sebaiknya dirapikan supaya tidak membingungkan saat pengecekan rangkaian.

Prinsip kerja rangkaian ini adalah saat sistem dinyalakan, STM32 akan menginisialisasi semua pin yang digunakan. Sensor sentuh akan mendeteksi jika ada sentuhan, sedangkan sensor inframerah akan mendeteksi objek di depannya. Ketika salah satu sensor aktif, sinyal akan dikirim ke STM32 untuk diproses sesuai program yang sudah dibuat. Setelah itu, STM32 akan memberikan output, misalnya menyalakan LED. Jika tidak ada input dari sensor, maka LED tetap mati. Jadi secara sederhana, rangkaian ini bekerja dengan membaca input dari sensor lalu diproses oleh STM32 untuk mengontrol output.


4. Flowchart dan Listing Program[Kembali]

  • Flowchart

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


// Input PA0 & PA1

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


// Output PB0 & PB1

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. Kondis[Kembali]

Percobaan 3 Kondisi 2

Buatlah rangkaian seperti pada gambar percobaan 3 dengan kondisi ketika Infrared sensor mendeteksi benda dan sensor Touch tidak mendeteksi sentuhan, maka LED akan mati


7. Analisa[Kembali]


7. Download File[Kembali]

HTML [Download]
Listing Program [Download]
Video Simulasi [Download]  
  









Komentar

Postingan populer dari blog ini

Modul 1 General Input dan Output

Sub chapter 7.6

Modul 1 Sistem Digital