Laporan Akhir 1
1. Prosedur [kembali]
1. Menyiapkan alat dan bahan berupa STM32F103C8, touch sensor, PIR sensor, LED, buzzer,
resistor, breadboard, dan kabel jumper.
2. Merangkai rangkaian sesuai dengan ketentuan pada modul percobaan 1 (kontrol lampu lorong).
3. Menghubungkan board STM32F103C8 ke laptop menggunakan kabel USB.
4. Membuat project baru pada software STM32CubeIDE sesuai dengan tipe mikrokontroler yang
digunakan.
5. Mengatur konfigurasi GPIO dengan menjadikan pin PA0 dan PA1 sebagai input serta PB0 dan
PB1 sebagai output.
6. Melakukan generate code pada STM32CubeIDE.
7. Memasukkan listing program percobaan 1 ke dalam file main.c.
8. Melakukan proses build dan meng-upload program ke mikrokontroler.
9. Menguji sistem dengan menyentuh touch sensor untuk mengaktifkan atau menonaktifkan sistem
serta mengamati respon LED dan buzzer saat PIR sensor mendeteksi gerakan.
2. Hardware dan Diagram Blok [kembali]
A. Hardware
1. STM32F103C8
2. Touch Sensor SPESIFIKASI :
- Konsumsi daya yang rendah
- Bisa menerima tegangan dari 2 ~ 5.5V DC
- Dapat menggantikan fungsi saklar tradisional
- Dilengkapi 4 lobang baut untuk memudahkan pemasangan
- Tegangan kerja : 2v s/d 5.5v (optimal 3V)
- Output high VOH : 0.8 VCC (typical)
- Output low VOL : 0.3 VCC (max)
- Arus Output Pin Sink (@ VCC 3V, VOL 0.6V) : 8 mA
- Arus Output pin pull-up (@ VCC=3V, VOH=2.4V) : 4 mA
- Waktu respon (low power mode): max 220 ms
- Waktu respon (touch mode): max 60 ms
- Ukuran: 24 mm x 24 mm x 7.2 mm
- Wide range on input voltage varying from 4.V to 12V (+5V recommended)
- Output voltage is High/Low (3.3V TTL)
- Can distinguish between object movement and human movement
- Has to operating modes - Repeatable(H) and Non- Repeatable(H)
- Cover distance of about 120° and 7 meters
- Low power consumption of 65mA
- Operating temperature from -20° to +80° Celsius
B. Diagram Blok
3. Rangkaian Simulasi dan Prinsip Kerja [kembali]
Prinsip Kerja:
Sistem kontrol lampu lorong bekerja dengan memanfaatkan dua input yaitu touch sensor dan PIR
sensor yang diproses oleh mikrokontroler STM32F103C8. Touch sensor berfungsi sebagai pengubah
kondisi sistem (enable/disable). Setiap kali touch sensor disentuh, sistem akan melakukan toggle
kondisi, yaitu dari nonaktif menjadi aktif atau sebaliknya. Ketika sistem diaktifkan, buzzer akan
berbunyi sesaat sebagai indikator bahwa sistem telah aktif.
PIR sensor digunakan untuk mendeteksi adanya gerakan. Jika PIR mendeteksi gerakan, maka LED
akan menyala sebagai simulasi lampu lorong. Selain itu, buzzer juga akan berbunyi sesaat hanya
pada saat pertama kali gerakan terdeteksi (tidak terus-menerus selama ada gerakan). Jika tidak ada
gerakan, maka LED akan mati hanya jika sistem dalam kondisi nonaktif.
Namun, apabila sistem dalam kondisi aktif, LED akan tetap menyala meskipun tidak ada deteksi
gerakan dari PIR sensor. Dengan demikian, sistem dapat bekerja dalam dua mode, yaitu mode
otomatis berdasarkan sensor gerak dan mode manual (selalu menyala) ketika sistem diaktifkan
melalui touch sensor.
4. Flowchart dan Listing Program [kembali]
A. Flowchart
B. Listing Program
#include "stm32f1xx_hal.h"
uint8_t system_enable = 0;
uint8_t touch_last = 0;
uint8_t pir_first_trigger = 1;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
void Error_Handler(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
uint8_t pir_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
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;
if (system_enable)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
}
HAL_Delay(200);
}
touch_last = touch_now;
if (pir_now == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
if (pir_first_trigger)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
pir_first_trigger = 0;
}
}
else
{
pir_first_trigger = 1;
if(!system_enable)
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
}
if(system_enable)
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
}
}
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_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = 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_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1, GPIO_PIN_RESET);
}
void Error_Handler(void)
{
__disable_irq();
while(1)
{
}
}
5. Video Demo [kembali]
6. Analisa [kembali]
7. Download File [kembali]



Komentar
Posting Komentar