1.siapkan PIR sensor, Touch sensor, dan 1 RGB LED
2.pilih STM32
3.buat rangkaian seperti percobaan 4 pada modul
2. Hardware dan Diagram Blok [kembali]
- STM32
STM32 merupakan keluarga mikrokontroler berbasis ARM Cortex-M yang dikembangkan oleh STMicroelectronics. Mikrokontroler ini dirancang untuk aplikasi embedded system dengan berbagai fitur unggulan, termasuk efisiensi daya, performa tinggi, serta dukungan periferal yang luas.
Keunggulan STM32:
-
Arsitektur ARM Cortex-M yang mendukung berbagai tingkatan performa, mulai dari Cortex-M0 untuk aplikasi hemat daya hingga Cortex-M7 untuk komputasi berkecepatan tinggi.
-
Beragam varian dan konfigurasi, memungkinkan fleksibilitas dalam pemilihan sesuai dengan kebutuhan sistem.
-
Dukungan periferal yang luas, seperti ADC, PWM, UART, SPI, I2C, USB, dan Ethernet, yang memudahkan komunikasi dengan berbagai perangkat eksternal.
-
Penggunaan Hardware Abstraction Layer (HAL) yang menyederhanakan proses pemrograman dan meningkatkan kompatibilitas antar perangkat.
-
Kompatibilitas dengan berbagai lingkungan pengembangan, seperti STM32CubeIDE, Keil, IAR Embedded Workbench, dan Arduino (STM32duino).
Aplikasi STM32:
Mikrokontroler STM32 banyak digunakan dalam berbagai bidang, antara lain:
-
Sistem kendali motor (BLDC, servo, dan stepper)
-
Otomasi industri dan robotika
-
Sistem Internet of Things (IoT)
-
Pengolahan sinyal digital (DSP)
-
Elektronika medis dan perangkat pintar
Dengan keunggulan tersebut, STM32 menjadi salah satu pilihan utama bagi insinyur dan pengembang dalam merancang sistem tertanam yang efisien dan berkinerja tinggi.
- RGB Led
RGB LED (Red, Green, Blue LED) adalah jenis LED yang terdiri dari tiga warna dasar—merah, hijau, dan biru—yang dapat dikombinasikan untuk menghasilkan berbagai warna cahaya. Dengan mengatur intensitas masing-masing warna, RGB LED dapat menampilkan spektrum warna yang luas.
RGB LED umumnya dikendalikan menggunakan mikrokontroler atau rangkaian elektronik dengan teknik PWM (Pulse Width Modulation) untuk mengatur kecerahan setiap warna. Ada dua jenis utama RGB LED:
-
Common Anode – Katoda (negatif) masing-masing warna terpisah, sementara anoda (positif) terhubung bersama.
-
Common Cathode – Anoda (positif) masing-masing warna terpisah, sementara katoda (negatif) terhubung bersama.
RGB LED sering digunakan dalam dekorasi, tampilan visual, indikator status, dan proyek elektronik interaktif.
- TOUCH SENSOR
Touch sensor adalah sensor yang mendeteksi sentuhan fisik atau tekanan pada permukaannya. Sensor ini bekerja dengan prinsip kapasitif atau resistif, di mana perubahan kapasitansi atau resistansi akibat sentuhan akan dikenali oleh rangkaian elektronik di dalamnya.
Cara Kerja Touch Sensor
-
Sensor Kapasitif
-
Menggunakan medan listrik untuk mendeteksi kehadiran benda konduktif (seperti jari manusia).
-
Ketika jari menyentuh permukaan sensor, kapasitansi berubah dan sensor mengenali sebagai input aktif.
-
-
Sensor Resistif
-
Terdiri dari dua lapisan konduktif yang terpisah oleh ruang kecil.
-
Saat ditekan, kedua lapisan bersentuhan dan resistansi berubah, yang diterjemahkan menjadi sinyal input.
-
Sensor PIR (Passive Infrared Sensor) adalah sensor yang mendeteksi pergerakan berdasarkan perubahan radiasi inframerah di sekitarnya. Sensor ini sering digunakan dalam sistem keamanan, pencahayaan otomatis, dan aplikasi lain yang memerlukan deteksi gerakan.
Cara Kerja Sensor PIR
-
Deteksi Radiasi Infrared
-
Setiap objek dengan suhu di atas nol mutlak memancarkan radiasi inframerah.
-
Sensor PIR memiliki dua elemen peka panas yang menangkap perubahan radiasi di sekitarnya.
-
-
Perubahan Radiasi (Gerakan Terdeteksi)
-
Jika tidak ada gerakan, kedua elemen menerima jumlah radiasi yang sama.
-
Jika ada objek bergerak (misalnya manusia), satu elemen akan menerima perubahan radiasi lebih dulu, yang memicu sinyal output sensor.
-
-
Keluaran Sinyal Digital
-
Jika sensor mendeteksi perubahan radiasi, output akan bernilai HIGH (1).
-
Jika tidak ada gerakan, output akan LOW (0).
-
3. Rangkaian Simulasi dan Prinsip Kerja [kembali]
- Flowchart
- 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 pir_status = HAL_GPIO_ReadPin(GPIOB, PIR_Pin);
uint8_t touch_status = HAL_GPIO_ReadPin(GPIOB, TOUCH_Pin);
HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, pir_status);
if (touch_status == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GREEN_Pin, GPIO_PIN_SET);
HAL_Delay(3000);
HAL_GPIO_WritePin(GPIOA, GREEN_Pin, GPIO_PIN_RESET);
HAL_Delay(3000);
}
else
{
if (pir_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);
}
}
}
}
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 = PIR_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)
{
}
}
Tidak ada komentar:
Posting Komentar