LA Percobaan 5 (Modul 3)
1. Rangkai semua komponen pada breadboard yang terhubung ke devboard Raspberry Pi Pico dan STM32F103C8T6.
2. Buat program untuk mikrokontroler Raspberry Pi Pico di software Thonny dan STM32F103C8T6 di software STM32 IDE.
3. Inputkan program ke dalam mikrokontroler melalui Micro USB ke Raspberry Pi Pico.
4. Setelah program diinputkan, uji rangkaian yang telah dirangkai sesuai dengan output yang ditentukan.
5. Selesai.
2. Hardware dan Diagram Blok
[Kembali]
a) Hardware
a) Hardware

b) Diagram Blok
3. Rangkaian Simulasi dan Prinsip Kerja
[Kembali]
a) Rangkaian Simulasi
a) Rangkaian Simulasi
b) Prinsip Kerja
Sistem ini mengintegrasikan Raspberry Pi Pico sebagai master dan STM32F103C8T6 sebagai slave melalui komunikasi SPI untuk mengendalikan perangkat input dan output secara terkoordinasi. Sensor infrared (IR) terhubung ke Pico mendeteksi keberadaan objek. Saat IR sensor mendeteksi objek, Pico mengirimkan sinyal melalui SPI ke STM32 untuk menyalakan RGB LED, dan jika tidak, untuk mematikannya. Sebaliknya, push button yang terhubung ke STM32 memungkinkan STM32 mengirimkan sinyal ke Pico melalui SPI untuk mengaktifkan atau menonaktifkan buzzer yang terhubung ke Pico, tergantung pada status tombol. Dengan demikian, kedua mikrokontroler saling bertukar data melalui SPI untuk mengontrol perangkat output berdasarkan input yang diterima, menciptakan sistem interaktif yang responsif.
4. Flowchart dan Listing Program
[Kembali]
a) Flowchart
b) Listing Program-) Untuk Raspberry Pi Pico (Master / Control)
from machine import Pin, SPI
import time
# Inisialisasi pin dan SPI
spi = SPI(0, baudrate=1000000, polarity=0, phase=0, sck=Pin(18), mosi=Pin(19),
miso=Pin(16))
cs = Pin(17, Pin.OUT)
# Pin sensor dan push button
ir_sensor = Pin(14, Pin.IN) # IR sensor
push_button = Pin(15, Pin.IN) # Push button
def send_data(data):
cs.value(0)
spi.write(bytes([data]))
cs.value(1)
while True:
# Cek status IR sensor
if ir_sensor.value() == 1:
send_data(1) # IR terdeteksi, kirim '1'
print("IR Detected - LED ON")
else:
send_data(0) # IR tidak terdeteksi, kirim '0'
print("No IR - LED OFF")
# Cek status push button
if push_button.value() == 1:
send_data(2) # Tombol ditekan, kirim '2'
print("Button Pressed - Buzzer ON")
else:
send_data(3) # Tombol tidak ditekan, kirim '3'
print("Button Released - Buzzer OFF")
time.sleep(0.1)
-) Untuk STM32F103C8T6 (Slave / Peripheral)
#include "stm32f1xx.h"
void SPI1_Init(void);
void GPIO_Init(void);
uint8_t SPI1_Receive(void);
int main(void) {
GPIO_Init();
SPI1_Init();
while (1) {
uint8_t data = SPI1_Receive();
switch (data) {
case 1:
// LED ON (IR Detected)
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
break;
case 0:
// LED OFF
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
break;
case 2:
// Buzzer ON (Button Pressed)
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
break;
case 3:
// Buzzer OFF
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
break;
}
}
}
void SPI1_Init(void) {
__HAL_RCC_SPI1_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
SPI_HandleTypeDef hspi1;
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_SOFT;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
HAL_SPI_Init(&hspi1);
}
uint8_t SPI1_Receive(void) {
uint8_t received_data = 0;
return received_data;
}
void GPIO_Init(void) {
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct = {0};
// LED (PC13)
GPIO_InitStruct.Pin = GPIO_PIN_13;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
// Buzzer (PA5)
GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
5. Video Rangkaian
[Kembali]
6. Analisa
[Kembali]
7. Link Download
[Kembali]
Komentar
Posting Komentar