LA Modul 3 P1



1. Prosedur [Kembali]

a) Asistensi dilakukan 1x

b) Praktikum dilakukan 1x 

2. Hardware dan Diagram Blok[Kembali]

Development Board STM32: 1 buah (Bisa menggunakan STM32F103C8T6 "Blue Pill" atau Nucleo-G474RE sesuai spesifikasi lab).







Bluepill



Nucleo





ST-Link V2 / Programmer: 1 buah (Jika menggunakan Blue Pill. Untuk board Nucleo, ST-Link sudah terintegrasi).



Kabel Jumper (Male-to-Male, Male-to-Female): Secukupnya.







Breadboard / Project Board: 1 buah.








LED RGB (Common Cathode/Anode): 1 buah (Bisa diganti dengan 3 LED terpisah: Merah, Hijau, Biru).








Resistor








Push Button / Toggle Switch








Active Buzzer (3.3V - 5V)








Modul Sensor LDR










FAN


11. OLED

12. PIR SENSOR

13. INFRARED SENSOR

14. MOTOR SERVO

3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]








  • Prinsip Kerja Sistem Lampu Jalan Otomatis 

    1. Inisialisasi Sistem:

      • Mikrokontroler STM32 (misalnya STM32F4) melakukan inisialisasi pada pin GPIO yang terhubung ke sensor PIR (sebagai input digital), sensor LDR atau Potensiometer yang mensimulasikan LDR (sebagai input analog pada kanal ADC), dan LED (sebagai output).

    2. Pembacaan Sensor:

      • Secara real-time, mikrokontroler membaca data dari sensor LDR/Potensiometer melalui kanal ADC untuk menentukan kondisi cahaya lingkungan.

      • Secara bersamaan, mikrokontroler membaca status sinyal digital dari sensor PIR untuk mendeteksi keberadaan gerakan.

    3. Logika Pengendalian Berdasarkan Kondisi Cahaya Terang:

      • Jika hasil pembacaan LDR/Potensiometer menunjukkan kondisi cahaya terang (tegangan input analog berada di bawah ambang batas tertentu), sistem masuk ke mode siang hari.

    4. Respon Terhadap Gerakan (Selama Cahaya Terang):

      • Dalam kondisi cahaya terang tersebut, jika sensor PIR mendeteksi adanya gerakan, mikrokontroler akan segera mengirimkan sinyal logika rendah (low) ke pin output LED.

      • Akibatnya, LED akan mati atau tetap mati. Sinyal low ini akan terus dipertahankan selama sensor PIR masih mendeteksi adanya gerakan (misalnya, orang yang lewat tersebut berhenti di depan sensor).

    5. Pemulihan Kondisi (Gerakan Hilang):

      • Setelah sensor PIR tidak lagi mendeteksi adanya gerakan (orang tersebut sudah lewat dan menjauh), mikrokontroler mendeteksi perubahan sinyal input PIR dari high menjadi low (aktif rendah pada banyak modul PIR).

      • Mikrokontroler kemudian akan kembali mengirimkan sinyal logika tinggi (high) ke pin output LED, sehingga LED akan kembali menyala.

4. Flowchart dan Listing Program[Kembali]

  • Flowchart




Listing program:

A. MASTER

#include "main.h"
ADC_HandleTypeDef hadc1;
SPI_HandleTypeDef hspi1;
uint8_t txData[2];
uint32_t ldrValue;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_ADC1_Init(void);
static void MX_SPI1_Init(void);
/*=========================================================*/
uint32_t Read_LDR(void)
{
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,100);
return HAL_ADC_GetValue(&hadc1);
}
/*=========================================================*/
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ADC1_Init();
MX_SPI1_Init();
while (1)
{
ldrValue = Read_LDR();

if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==GPIO_PIN_RESET)
txData[0] = 1;
else
txData[0] = 0;
if(ldrValue < 1500)
txData[1] = 1;
else
txData[1] = 0;
HAL_SPI_Transmit(&hspi1, txData, 2, 100);
HAL_Delay(200);
}
}
/*=========================================================*/
void SystemClock_Config(void)
{
}
/*=========================================================*/
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_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
/*=========================================================*/
static void MX_ADC1_Init(void)
{
ADC_ChannelConfTypeDef sConfig = {0};
hadc1.Instance = ADC1;
hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
hadc1.Init.ContinuousConvMode = DISABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 1;
HAL_ADC_Init(&hadc1);
sConfig.Channel = ADC_CHANNEL_9;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
}
/*=========================================================*/
static void MX_SPI1_Init(void)
{
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi1.Init.NSS = SPI_NSS_HARD_OUTPUT;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi1.Init.CRCPolynomial = 7;
HAL_SPI_Init(&hspi1);
}

B.SLAVE
#include "main.h"
SPI_HandleTypeDef hspi1;
uint8_t rxData[2];
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_SPI1_Init(void);
/*=========================================================*/
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_SPI1_Init();
while (1)
{
HAL_SPI_Receive(&hspi1, rxData, 2, HAL_MAX_DELAY);
if(rxData[0]==1)
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
else
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
if(rxData[1]==1)
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
else
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);
}
}
/*=========================================================*/
void SystemClock_Config(void)
{
}
/*=========================================================*/
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1,
GPIO_PIN_RESET);
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);
}
/*=========================================================*/
static void MX_SPI1_Init(void)
{
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_SLAVE;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi1.Init.NSS = SPI_NSS_HARD_INPUT;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi1.Init.CRCPolynomial = 7;
HAL_SPI_Init(&hspi1);
}

5. Video Demo [Kembali]





6. Analisa[Kembali]













7. Download File [Kembali]

1. Download HTML [disini]

2. Download Rangkaian Proteus  [disini]








Komentar

Postingan populer dari blog ini

TUGAS ELEKTRONIKA