MODUL 1
TUGAS PENDAHULUAN 2
2. Hardware dan Diagram Blok [Kembali]
A. Hardware
- STM32 NUCLEO-G474RE
- Infrared Sensor
- Buzzer
- LED
- Switch
- Adaptor
- Breadboard
- Buzzer
- Resistor
3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]
A. Rangkaian SimulasiSistem ini menggunakan mikrokontroler STM32 Nucleo G474RE yang diprogram untuk membaca dua buah input, yaitu push button (saklar) pada pin PA0 dan sensor IR pada pin PA1, serta mengendalikan tiga output berupa LED Hijau (PB0), LED Merah (PB1), dan Buzzer (PB2). Kedua input dikonfigurasi dengan pull-down internal, sehingga dalam kondisi tidak aktif, pin input akan membaca logika 0 (rendah), dan ketika ditekan atau mendeteksi benda akan membaca logika 1 (tinggi).
Prinsip kerja utama dari sistem ini adalah menyalakan LED berwarna orange (kombinasi LED merah dan hijau) hanya ketika saklar dalam keadaan ON (ditekan) dan sensor IR tidak mendeteksi adanya benda di depannya. Pada kondisi ini, mikrokontroler akan mengaktifkan kedua LED secara bersamaan dengan cara menulis logika 1 ke pin PB0 dan PB1 melalui register BSRR, sehingga menghasilkan cahaya berwarna orange. Sementara itu, buzzer dibuat dalam keadaan mati.
Apabila kondisi tersebut tidak terpenuhi, yaitu ketika saklar dalam keadaan OFF (tidak ditekan) atau sensor IR mendeteksi adanya benda, maka mikrokontroler akan mematikan semua output. Pemadaman dilakukan dengan menulis logika 1 ke bit reset (bit ke-16) pada register BSRR untuk masing-masing pin PB0, PB1, dan PB2, yang menyebabkan ketiga output tersebut menjadi rendah (mati).
Dengan demikian, sistem ini dapat digunakan untuk aplikasi sederhana seperti indikator jalur yang aman (misalnya pada konveyor atau pintu otomatis), di mana LED orange menyala sebagai tanda bahwa saklar sistem aktif dan tidak ada halangan di depan sensor, sedangkan jika ada benda terdeteksi atau saklar dimatikan, semua indikator padam sebagai tanda kondisi tidak aktif atau terhalang.
4. Flowchart dan Listing Program [Kembali]
A. Flowchart
#ifndef __MAIN_H
#define __MAIN_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
/* Definisi Pin Input */
#define BUTTON_REVERSE_Pin 0
#define BUTTON_REVERSE_GPIO_Port GPIOA
#define IR_SENSOR_Pin 1
#define IR_SENSOR_GPIO_Port GPIOA
/* Definisi Pin Output */
#define LED_GREEN_Pin 0
#define LED_GREEN_GPIO_Port GPIOB
#define LED_RED_Pin 1
#define LED_RED_GPIO_Port GPIOB
#define BUZZER_Pin 2
#define BUZZER_GPIO_Port GPIOB
/* Fungsi delay sederhana */
void delay_ms(uint32_t ms);
#ifdef __cplusplus
}
#endif
#endif /* __MAIN_H */
/* ============================
TAMBAHKAN BAGIAN INI DI BAWAH
============================ */
#include "stm32c0xx.h"
void delay_ms(uint32_t ms) {
volatile uint32_t count;
while (ms--) {
count = 8000;
while (count--) __asm__("nop");
}
}
int main(void)
{
/* Enable clock GPIOA dan GPIOB */
RCC->IOPENR |= (1 << 0); // GPIOAEN
RCC->IOPENR |= (1 << 1); // GPIOBEN
/* PA0 = BUTTON sebagai input */
GPIOA->MODER &= ~(3 << (BUTTON_REVERSE_Pin * 2));
GPIOA->PUPDR &= ~(3 << (BUTTON_REVERSE_Pin * 2));
GPIOA->PUPDR |= (2 << (BUTTON_REVERSE_Pin * 2)); // pull-down
/* PA1 = IR SENSOR sebagai input */
GPIOA->MODER &= ~(3 << (IR_SENSOR_Pin * 2));
GPIOA->PUPDR &= ~(3 << (IR_SENSOR_Pin * 2));
GPIOA->PUPDR |= (2 << (IR_SENSOR_Pin * 2)); // pull-down
/* PB0, PB1, PB2 = output */
GPIOB->MODER &= ~(3 << (LED_GREEN_Pin * 2));
GPIOB->MODER |= (1 << (LED_GREEN_Pin * 2));
GPIOB->MODER &= ~(3 << (LED_RED_Pin * 2));
GPIOB->MODER |= (1 << (LED_RED_Pin * 2));
GPIOB->MODER &= ~(3 << (BUZZER_Pin * 2));
GPIOB->MODER |= (1 << (BUZZER_Pin * 2));
while (1)
{
uint8_t switch_state = (GPIOA->IDR & (1 << BUTTON_REVERSE_Pin)) ? 1 : 0;
uint8_t ir_state = (GPIOA->IDR & (1 << IR_SENSOR_Pin)) ? 1 : 0;
/*
Kondisi:
switch ON dan IR tidak mendeteksi benda
=> LED orange menyala
*/
if (switch_state == 1 && ir_state == 0)
{
/* Orange = merah + hijau */
GPIOB->BSRR = (1 << LED_RED_Pin);
GPIOB->BSRR = (1 << LED_GREEN_Pin);
/* Buzzer mati */
GPIOB->BSRR = (1 << (BUZZER_Pin + 16));
}
else
{
/* Semua mati */
GPIOB->BSRR = (1 << (LED_RED_Pin + 16));
GPIOB->BSRR = (1 << (LED_GREEN_Pin + 16));
GPIOB->BSRR = (1 << (BUZZER_Pin + 16));
}
}
}
Buatlah rangkaian seperti pada gambar percobaan 2 dengan kondisi ketika Infrared sensor tidak mendeteksi benda dan switch on, maka LED menyala orange
Komentar
Posting Komentar