Laporan Akhir M1=1






1. Prosedur [kembali]
  • Pertama pahamilah modul dan pahami rangkaian pada modul yang akan di lakukan percobaan
  • kedua setelah memahami modul aktifkan aplikasi STM32 yang akan kita pakai
  • selanjutnya jika aplikasi sudah siap digunakan rangkailah rangkaian sesuai dengan prosedur pada modul
  • jika rangkaian sudah dirangkai dan apabila rangkaian sudah di rasa betul
  • lanjut ke pada aplikasi STM32 cocok kan pin input outputnya pada aplikasi
  • pada aplikasi kita sesuaikan input dan output yang ada pada modul
  • selanjutnya jika sudah, kita juga memasukan program yang ada pada modul ke aplikasi STM32 
  • jika program sudah di rasa betul dan tidak ada eror selanjutnya coba sambungkan ke rangkaian yang telah kita buat tadi
  • jika rangkaian sudah terkonek dengan aplikasi coba jalankan rangkaian
  • jika rangkaian berjalan dengan baik berarti percobaan berhasil
2. Hardware dan Diagram Blok [kembali]
  • STM32
komponen
  1. Prosesor Inti 
  2. Memori Flash & SRAM 
  3. GPIO 
  4. USART/UART 
  5. I2C & SPI 
  6. Pengatur Waktu & PWM
  7. ADC (Konverter Analog ke Digital)
  8. USB
  9. SWD/JTAG 
  • Sensor touch
komponen
  1. GPIO 
  2. ADC 
  3. Timer 
  4. I2C/SPI 
  5. Interrupt (EXTI) 
  • Sensor infrared
komponen
  1. LED IR (Inframerah LED)
  2. Fotodioda / Fototransistor
  3. Penghambat
  4. Op-Amp / Komparator 
  5. Mikrokontroler (STM32, Arduino, dll.) 
  6. Transistor (opsional) 
  7. Saring IR 
  • Diagram blok

3. Rangkaian Simulasi dan Prinsip Kerja [kembali]
  • Rangkaian Percobaan

  • Prinsip Kerja Rangkaian
Rangkaian ini menggunakan beberapa komponen seperti led rgb ada resistor sensor touch dan sensor IR dimana rangkaian ini bekerja ketika sensor touch dan sensor IR itu menerima inputan seperti sensor touch adanya sentuhan dan sensor Ir yang mendeteksi cahaya pantulan dan ketika sensor itu ada sentuhan atau ada cahaya maka led rgb itu akan mengeluarkan output cahayanya yang terdiri dari 3 warna yaitu merah hijau biru dan jika led mengeluarkan cahaya beratri percobaan berhasil

4. Flowchart dan Listing Program [kembali]
  • Flow Chart
  • 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); // Membaca IR sensor
(PB10)
 uint8_t touch_status = HAL_GPIO_ReadPin(GPIOB, TOUCH_Pin); // Membaca
Touch Sensor (PB6)
 // LED Biru menyala jika IR aktif
 HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, ir_status);
 // LED Hijau menyala jika Touch aktif
 HAL_GPIO_WritePin(GPIOA, GREEN_Pin, touch_status);
 // LED Merah menyala jika tidak ada sensor yang aktif
 if (ir_status == GPIO_PIN_RESET && touch_status == GPIO_PIN_RESET) {
 HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET); // Nyalakan LED
RED
 } else {
 HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_RESET); // Matikan LED
RED
 }
 HAL_Delay(10); // Delay kecil untuk stabilisasi pembacaan sensor
 }
}
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();
 /*Configure GPIO pin Output Level */
 HAL_GPIO_WritePin(GPIOA, RED_Pin|GREEN_Pin, GPIO_PIN_RESET);
 /*Configure GPIO pin Output Level */
 HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_RESET);
 /*Configure GPIO pins : RED_Pin GREEN_Pin */
 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);
 /*Configure GPIO pin : BLUE_Pin */
 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);
 /*Configure GPIO pins : IR_Pin TOUCH_Pin */
 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 /* USE_FULL_ASSERT */
  • Penjelasan per barisnya

Berikut adalah penjelasan program STM32 baris per baris tersebut:

#include "main.h"

Menyertakan file header "main.h" yang berisi deklarasi fungsi, konstanta, dan konfigurasi untuk mikrokontroler STM32.

void SystemClock_Config(void);

static void MX_GPIO_Init(void);

Deklarasi fungsi yang akan digunakan. SystemClock_Config()untuk mengkonfigurasi sistem jam, dan MX_GPIO_Init()untuk inisialisasi pin GPIO.

int main(void)

{

Fungsi program utama yang akan dijalankan saat mikrokontroler dinyalakan.

 HAL_Init();

Menginisialisasi perpustakaan HAL (Hardware abstraction layer) untuk STM32.

 SystemClock_Config();

Memanggil fungsi untuk mengkonfigurasi jam sistem mikrokontroler.

 MX_GPIO_Init();

Memanggil fungsi untuk inisialisasi pin GPIO yang digunakan.

 while (1)

 {

Loop tak terbatas yang akan terus berjalan selama mikrokontroler aktif.

 uint8_t ir_status = HAL_GPIO_ReadPin(GPIOB, IR_Pin);

Membaca status dari sensor IR yang terhubung ke pin PB10, hasilnya disimpan dalam variabel ir_status.

 uint8_t touch_status = HAL_GPIO_ReadPin(GPIOB, TOUCH_Pin);

Membaca status dari sensor sentuh (touch) yang terhubung ke pin PB6, hasilnya disimpan dalam variabel touch_status.

 HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, ir_status);

Mengatur status LED Biru sesuai dengan sensor status IR. Jika sensor IR aktif, LED Biru akan menyala.

 HAL_GPIO_WritePin(GPIOA, GREEN_Pin, touch_status);

mengatur status LED Hijau sesuai dengan status sensor sentuh. Jika sensor sentuh aktif, LED Hijau akan menyala.

 if (ir_status == GPIO_PIN_RESET && touch_status == GPIO_PIN_RESET) {

Memeriksa apakah kedua sensor (IR dan sentuh) tidak aktif (GPIO_PIN_RESET berarti nilai logika 0).

 HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET);

Jika kedua sensor tidak aktif, maka LED Merah menyala (GPIO_PIN_SET berarti nilai logika 1).

 } else {

Jika salah satu atau kedua sensor aktif, maka:

 HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_RESET);

LED Merah dimatikan.

 }

Akhir dari blok kondisional if-else.

 HAL_Delay(10);

Memberikan delay 10 milidetik untuk stabilisasi pembacaan sensor.

 }

}

Akhir dari loop while dan fungsi utama.

void SystemClock_Config(void)

{

Definisi fungsi untuk mengkonfigurasi sistem jam.

 RCC_OscInitTypeDef RCC_OscInitStruct = {0};

 RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

Membuat struktur untuk mengkonfigurasi osilator dan jam dengan nilai awal 0.

 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;

mengatur tipe osilator menjadi HSI (High-Speed ​​Internal).

 RCC_OscInitStruct.HSIState = RCC_HSI_ON;

Gunung osilator HSI.

 RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;

Mengatur nilai kalibrasi HSI ke nilai default.

 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;

Saya mengaktifkan PLL (Phase-Locked Loop).

 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

 {

Konfigurasikan konfigurasi osilator dan periksa apakah berhasil.

 Error_Handler();

Jika konfigurasi gagal, panggil fungsi penanganan kesalahan.

 }

Akhir dari blok kondisional.

 RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

 |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;

mengatur tipe jam yang akan dikonfigurasi (HCLK, SYSCLK, PCLK1, dan PCLK2).

 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;

mengatur sumber SYSCLK dari HSI.

 RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

Mengatur pembagi AHBCLK menjadi 1 (tidak ada pembagian).

 RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

Mengatur pembagi APB1CLK menjadi 1 (tidak ada pembagian).

 RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

Mengatur pembagi APB2CLK menjadi 1 (tidak ada pembagian).

 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)

Konfigurasikan konfigurasi jam dan periksa apakah berhasil. FLASH_LATENCY_0 mengatur latensi flash.

 {

 Error_Handler();

 }

}

Jika konfigurasi gagal, panggil fungsi penanganan kesalahan. Akhir dari fungsi SystemClock_Config.

static void MX_GPIO_Init(void)

{

Definisi fungsi untuk inisialisasi GPIO.

 GPIO_InitTypeDef GPIO_InitStruct = {0};

Membuat struktur untuk mengkonfigurasi GPIO dengan nilai awal 0.

 __HAL_RCC_GPIOD_CLK_ENABLE();

 __HAL_RCC_GPIOA_CLK_ENABLE();

 __HAL_RCC_GPIOB_CLK_ENABLE();

Mengaktifkan jam untuk port GPIOD, GPIOA, dan GPIOB.

 HAL_GPIO_WritePin(GPIOA, RED_Pin|GREEN_Pin, GPIO_PIN_RESET);

Inisialisasi pin LED Merah dan Hijau pada GPIOA ke status mati (RESET).

 HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_RESET);

Inisialisasi pin LED Biru ke status mati (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);

Mengonfigurasi pin LED Merah dan Hijau sebagai output push-pull dengan kecepatan rendah dan tanpa pull-up/pull-down.

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

Mengonfigurasi pin LED Biru sebagai output push-pull dengan kecepatan rendah dan tanpa pull-up/pull-down.

 GPIO_InitStruct.Pin = IR_Pin|TOUCH_Pin;

 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

 GPIO_InitStruct.Pull = GPIO_NOPULL;

 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

Mengonfigurasi pin IR dan Touch sensor sebagai input tanpa pull-up/pull-down.

}

Akhir dari fungsi MX_GPIO_Init.

void Error_Handler(void)

{

Definisi fungsi untuk menangani kesalahan.

 __disable_irq();

Saya mengaktifkan semua interupsi.

 while (1)

 {

 }

Loop tak terbatas, program akan "hang" jika terjadi kesalahan.

}

Akhir dari fungsi Error_Handler.

#ifdef USE_FULL_ASSERT

void assert_failed(uint8_t *file, uint32_t line)

{

}

#endif

Fungsi untuk menangani kegagalan asertasi, hanya dikompilasi jika USE_FULL_ASSERT didefinisikan. Fungsi ini kosong, tidak melakukan apa-apa.

 

5. Vidio Demo [kembali]


6. Analisa [kembali]
(Dibuat pada kertas hvs) 
  • lembar 1
  • Lembar 2
  • Lembar 3

  • Lembar 4

7. Video Simulasi [kembali]
  • Vidio Percobaan Kelompok (memang tidak dibuat pada LA)

8. Download file [kembali]



Komentar

Postingan populer dari blog ini

MODUL 1 MIKRO

TUGAS BESAR "KONTROL BANJIR OTOMATIS"

UTS