TP Percobaan 1 Kondisi 3
DAFTAR ISI
1. Prosedur[Kembali ke Daftar Isi]
- Membuka software Proteus dan membuat project baru untuk simulasi rangkaian.
- Menambahkan komponen yang dibutuhkan seperti STM32F103C8, sensor heartbeat, LED, resistor, buzzer, dan potensiometer.
- Menghubungkan sensor heartbeat ke pin analog mikrokontroler (PA0) sebagai input sinyal.
- Menghubungkan LED merah, kuning, dan biru ke pin GPIO mikrokontroler (port B) sebagai indikator output.
- Menambahkan resistor pada setiap LED sebagai pembatas arus.
- Menghubungkan buzzer ke salah satu pin GPIO sebagai indikator tambahan.
- Menghubungkan semua komponen ke sumber tegangan 3,3 V dan ground yang sama (common ground).
- Melakukan konfigurasi pin pada STM32 menggunakan STM32CubeIDE sesuai dengan rangkaian (ADC untuk input, GPIO untuk output).
- Menuliskan dan meng-compile program hingga menghasilkan file
.hex. - Memasukkan file
.hexke mikrokontroler STM32F103C8 pada Proteus. - Menjalankan simulasi dan memberikan variasi input (melalui sensor atau potensiometer).
- Mengamati perubahan LED:
- LED merah menyala saat kondisi senang (input tinggi)
- LED biru menyala saat kondisi sedih (input rendah)
- Menganalisis hasil simulasi untuk memastikan sistem bekerja sesuai perintah soal.
2. Hardware dan Diagram Blok[Kembali ke Daftar Isi]
Daftar Hardware/Komponen Utama:
Mikrokontroler: Modul STM32F103C8 (sebagai otak/pusat pemrosesan data).
Aktuator/Output: Buzzer (sebagai indikator suara) dan LED (sebagai indikator cahaya tambahan).
LED Merah: Indikator kondisi senang
LED Biru: Indikator kondisi sedih
LED Hijau: Indikator netral
Resistor: Digunakan sebagai pembatas arus pada LED dan mencegah kerusakan komponen akibat arus berlebih.
Potensiometer: Digunakan sebagai pengganti sensor saat simulasi dan memberikan variasi tegangan input ke mikrokontroler.
Ground (GND): Sebagai referensi tegangan dan semua komponen harus terhubung ke ground yang sama (common ground).
Sensor Heartbeat: Berfungsi mendeteksi detak jantung dan juga menghasilkan sinyal analog berupa perubahan tegangan.
3. Rangkaian Simulasi dan Prinsip Kerja[Kembali ke Daftar Isi]
4. Flowchart dan Listing Program[Kembali ke Daftar Isi]
Listing Program:
/* USER CODE END WHILE */ }/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file : main.cpp
* @brief : Heartbeat Mood Detection - Fixed for STM32 Pinout
******************************************************************************
*/
/* USER CODE END Header */
#include "main.h"
/* Private defines -----------------------------------------------------------*/
/* USER CODE BEGIN PD */
#define TH_SENANG 2500
#define TH_SEDIH 1500
#define ADC_SAMPLES 10
// Definisi Pin sesuai Gambar
#define LED_HIJAU_PIN GPIO_PIN_0
#define LED_BIRU_PIN GPIO_PIN_1
#define LED_MERAH_PIN GPIO_PIN_10
#define BUZZER_PIN GPIO_PIN_11
#define LED_PORT GPIOB
/* USER CODE END PD */
/* Private variables ---------------------------------------------------------*/
ADC_HandleTypeDef hadc1;
uint32_t adcValue = 0;
uint8_t kondisi = 0; // 0:Sedih, 1:Netral, 2:Senang
/* Function Prototypes -------------------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_ADC1_Init(void);
uint32_t Read_ADC_Average(void);
void Semua_LED_Mati(void);
void Kondisi_Sedih(void);
void Kondisi_Netral(void);
void Kondisi_Senang(void);
/* Logic Functions -----------------------------------------------------------*/
/* USER CODE BEGIN 0 */
uint32_t Read_ADC_Average(void) {
uint32_t total = 0;
for (uint8_t i = 0; i < ADC_SAMPLES; i++) {
HAL_ADC_Start(&hadc1);
if (HAL_ADC_PollForConversion(&hadc1, 100) == HAL_OK) {
total += HAL_ADC_GetValue(&hadc1);
}
HAL_ADC_Stop(&hadc1);
HAL_Delay(2);
}
return total / ADC_SAMPLES;
}
void Semua_LED_Mati(void) {
// Mematikan semua output di Port B sesuai gambar
HAL_GPIO_WritePin(LED_PORT, LED_HIJAU_PIN | LED_BIRU_PIN | LED_MERAH_PIN | BUZZER_PIN, GPIO_PIN_RESET);
}
void Kondisi_Sedih(void) {
Semua_LED_Mati();
HAL_GPIO_WritePin(LED_PORT, LED_HIJAU_PIN, GPIO_PIN_SET); // Hijau ON
}
void Kondisi_Netral(void) {
Semua_LED_Mati();
HAL_GPIO_WritePin(LED_PORT, LED_BIRU_PIN, GPIO_PIN_SET); // Biru ON
}
void Kondisi_Senang(void) {
Semua_LED_Mati();
HAL_GPIO_WritePin(LED_PORT, LED_MERAH_PIN, GPIO_PIN_SET); // Merah ON
HAL_GPIO_WritePin(LED_PORT, BUZZER_PIN, GPIO_PIN_SET); // Buzzer ON
HAL_Delay(200);
HAL_GPIO_WritePin(LED_PORT, BUZZER_PIN, GPIO_PIN_RESET); // Buzzer OFF
}
/* USER CODE END 0 */
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ADC1_Init();
Semua_LED_Mati();
while (1) {
adcValue = Read_ADC_Average();
if (adcValue >= TH_SENANG) {
kondisi = 2;
Kondisi_Senang();
} else if (adcValue <= TH_SEDIH) {
kondisi = 0;
Kondisi_Sedih();
} else {
kondisi = 1;
Kondisi_Netral();
}
HAL_Delay(200);
}
}
/* Peripheral Initialization --------------------------------------------------*/
static void MX_ADC1_Init(void)



Komentar
Posting Komentar