LAPORAN AKHIR 1

                                              [KEMBALI KE MENU SEBELUMNYA]



Percobaan 3

1. Prosedur
 [Kembali]
  • Rangkai semua komponen 
  • Buat rangkaian di proteus 
  • Jalankan rangkaian dan cobakan sesuai kondisi

2. Hardware dan Diagram Blok [Kembali]

Hardware :
1. STM32F103C8 (Bluepill)




2. Jumper




3. Push Button

4. Fan


5. ST-LINK




7.Breadboard 

8.Resistor


9.Sensor  LDR



10. LED





BLOK DIAGRAM









3. Rangkaian Simulasi Dan Prinsip Kerja [Kembali]


Rangkaian Simulasi 


Prinsip Kerja :

Prinsip kerja rangkaian pada gambar tersebut adalah mengendalikan kipas DC dari jarak jauh menggunakan dua mikrokontroler STM32 yang berkomunikasi melalui protokol SPI. STM32 yang berperan sebagai master terhubung dengan sensor getaran SW-420, push button, dan LED indikator. Sensor getaran akan menghasilkan sinyal logika HIGH ketika mendeteksi getaran, sedangkan push button dapat digunakan sebagai input manual untuk mengaktifkan sistem. Setelah membaca kondisi input tersebut, master memproses data dan menentukan nilai logika 1 atau 0. Jika terdeteksi getaran atau tombol ditekan, master mengirim data 1; jika tidak, master mengirim data 0.

Data dari master dikirim ke STM32 slave melalui jalur SPI, yaitu SCK sebagai sinyal clock, MOSI sebagai jalur data, MISO sebagai jalur data balikan (jika diperlukan), dan SS sebagai penanda pemilihan slave. Slave menerima data secara sinkron mengikuti clock dari master. Ketika slave menerima data 1, pin output pada slave akan aktif dan memberikan sinyal ke modul relay. Relay kemudian menutup kontaknya sehingga sumber tegangan terhubung ke kipas DC dan kipas berputar. Sebaliknya, jika slave menerima data 0, relay akan nonaktif, kontak kembali terbuka, dan kipas berhenti.

LED pada sisi master berfungsi sebagai indikator visual bahwa sensor mendeteksi getaran atau sistem sedang mengirim perintah aktif. Dengan demikian, rangkaian ini bekerja sebagai sistem monitoring dan kontrol, di mana kondisi sensor pada master dikirim melalui komunikasi SPI ke slave untuk mengendalikan beban berupa kipas secara otomatis dan real time.



4. Flowchart dan Listing Program [Kembali]

Flowchart :

 A.Master


B.Slave







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]

1. Bagaimana konfigurasi rangkaian dan program dari percobaan ynag telah dilakukan?
jawab :

A. Konfigurasi Rangkaian 

1. Konfigurasi Project Master
a. Atur pin PB0 sebagai GPIO Input dengan konfigurasi Pull-up.
b. Aktifkan SPI1 dengan pengaturan:
Mode: Full Duplex Master
Hardware NSS Signal: Output

2. Konfigurasi Project Slave
a. Atur pin PB0 sebagai GPIO Output, level output High.
b. Atur pin PB1 sebagai GPIO Output, level output High.
c. Aktifkan SPI1 dengan pengaturan:
Mode: Full Duplex Slave
Hardware NSS Signal: Input 

B. Konfigurasi Program
Membuat dua project baru pada STM32CubeIDE menggunakan mikrokontroler STM32F103C8T6.
Project_Master
Project_Slave. 


2. Jelaskan bagaimana proses komunikasi yang terjadi pada percobaan yang telah dilakukan (UART/SPI/I2C)!
jawab :
Pada percobaan ini, komunikasi antara STM32 master dan slave menggunakan protokol SPI yang memanfaatkan empat jalur, yaitu SCK, MOSI, MISO, dan SS. Master membaca data dari sensor getaran dan push button, kemudian menentukan nilai data 1 atau 0. Saat akan mengirim data, master mengaktifkan pin SS (LOW) dan menghasilkan sinyal clock pada SCK. Data dikirim melalui MOSI secara bit per bit mengikuti pulsa clock. Slave menerima data tersebut dan memprosesnya: jika menerima 1, relay aktif sehingga kipas menyala; jika menerima 0, relay mati dan kipas berhenti. Setelah pengiriman selesai, master menonaktifkan SS (HIGH) untuk mengakhiri komunikasi.


3. Analisa penyebab kesalahan pengiriman data yang sering error!
Jawab :

Kesalahan komunikasi dapat disebabkan oleh beberapa faktor:

a. Baudrate Tidak Sama
Jika master 9600 bps dan slave 115200 bps, data akan terbaca salah.
b. Ground Tidak Tersambung
Tanpa ground bersama, referensi tegangan berbeda sehingga logika HIGH dan LOW tidak dikenali dengan benar.
c. Noise pada Kabel
Gangguan elektromagnetik dari relay atau motor kipas dapat menyebabkan bit berubah.
d. Kabel TX dan RX Salah
Jika TX tidak terhubung ke RX lawan, data tidak akan diterima.
e. Overflow Buffer
Data dikirim terlalu cepat sehingga buffer penerima penuh.
f. Program Tidak Menunggu Data
Slave mungkin membaca buffer sebelum data benar-benar diterima.
g. Tegangan Tidak Stabil
Catu daya yang turun akibat relay dapat menyebabkan reset mikrokontroler.


4. Pada percobaan komunikasi antar mikrokontroler, mengapa konfigurasi parameter komunikasi seperti baudrate pada UART atau clock polarity dan clock phase pada SPI harus sama antara master dan slave? Jelaskan pengaruhnya terhadap proses pengiriman data!
Jawab :

Parameter komunikasi seperti baudrate (UART) atau CPOL dan CPHA (SPI) harus sama agar kedua perangkat memahami waktu dan posisi bit secara identik.
Pada SPI
Jika CPOL/CPHA berbeda:

  • Data dibaca pada tepi clock yang salah.
  • Bit yang diterima bergeser atau salah.
Pengaruhnya
  • Data salah.
  • Karakter acak muncul.
  • Perangkat tidak merespons.
  • Sistem menjadi tidak stabil.


5. Analisa hubungan antara data sensor/input yang dibaca mikrokontroler dengan respon output yang dihasilkan pada sistem komunikasi yang telah dibuat!
Jawab :

Pada sistem ini terdapat hubungan langsung antara input pada master dan output pada slave.

Sensor/Input

  • Sensor cahaya LDR menghasilkan logika HIGH saat mendeteksi cahaya.
  • Push button memberikan logika HIGH saat ditekan.

Proses pada Master

Master membaca input:

  • Jika HIGH → kirim '1'.
  • Jika LOW → kirim '0'.

Proses pada Slave

Slave menerima:

  • '1' → relay ON → kipas menyala.
  • '0' → relay OFF → kipas mati.

Analisa Sistem

Sistem bekerja sebagai pengendalian jarak jauh sederhana:

  1. Sensor mendeteksi kondisi.
  2. Data dikirim serial.
  3. Slave mengeksekusi perintah.

Semakin akurat pembacaan sensor dan komunikasi, semakin tepat respon output.




7. Link Download [Kembali]
1. Download Rangkaian Proteus  [disini]
























Tidak ada komentar:

Posting Komentar

                                            BAHAN PRESENTASI UNTUK MATA KULIAH  ELEKTRONIKA 2024   Nama : Muhammad Fadhil Dwi Kesuma NIM : 2...