Jumat, 28 Maret 2025

LA 2 MODUL 1 PRAK MIKRO



Percobaan 2 

LED RGB, Touch Sensor, & Sensor Infrared


1. Prosedur [Kembali]

1. Persiapkan semua alat dan bahan yang diperlukan.

2. Rangkai semua komponen pada breadboard yang telah disediakan.

3. Download stlink pada laptop, lalu masukkan listing program ke aplikasi STM32 CubeIDE.

4. Rangkaian dihubungkan ke laptop dengan kabel stlink dan dirunning.

5. Amati hasilnya, apakah output sesuai dengan program yang diinputkan.

6. Selesai.


2. Hardware dan Diagram Blok [Kembali]

Hardware:

1. Mikrokontroler STM32F103C8

STM32F103C8 board – Microscale

2. Infrared Sensor

Infrared Sensor Module
3. Touch Sensor
Touch Sensor Module — SunFounder Ultimate Sensor Kit documentation
4. LED RGB

Jual LED RGB 4 PIN WARNA MERAH HIJAU BIRU 5mm ( ARDUINO ) - Common Cathode  - Jakarta Barat - Ardushop-id | Tokopedia

5. Push Button

6. Resistor

Diagram Blok:



3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]


Prinsip kerja :

Pada rangkaian percobaan 2 ini  terdiri dari LED RGB, sensor inframerah, dan touch sensor dengan mikrokontroler STM32F103C8. Sensor inframerah (IR) digunakan sebagai inputan untuk mendeteksi keberadaan objek berdasarkan pantulan sinyal inframerah, touch sensor juga sebagai inputan yang berfungsi mendeteksi sentuhan pada area sensornya. Kedua sensor ini dihubungkan ke pin GPIO pada STM32F103C8, yaitu IR sensor pada pin PB10 dan touch sensor pada pin PB6. Mikrokontroler membaca sinyal dari kedua sensor melalui fungsi HAL_GPIO_ReadPin(). Dan RGB LED sebagai ouput yang memiliki 3 warna. Warna Red dihubungkan ke pin PA6, Green dihubungkan ke pin PA7 dan Blue dihubungkan ke pin PB0.

Saatsensor inframerah mendeteksi adanya objek (menghasilkan nilai logika HIGH), maka mikrokontroler akan menyalakan LED biru dengan menulis nilai logika HIGH pada pin GPIO yang terhubung dengan LED biru menggunakan fungsi HAL_GPIO_WritePin(). Jika touch sensor mendeteksi adanya sentuhan (menghasilkan nilai logika HIGH), maka mikrokontroler akan menyalakan LED hijau. Jika tidak ada input dari kedua sensor (kedua sensor menghasilkan nilai logika LOW), maka LED merah akan menyala untuk menandakan bahwa tidak ada aktivitas dari sensor. Logika ini diatur menggunakan pernyataan if-else dalam program.

Selain itu, fungsi HAL_Delay(10) digunakan untuk memberikan jeda singkat antara pembacaan sensor, sehingga memastikan stabilitas sinyal yang diterima oleh mikrokontroler. Seluruh proses ini berjalan secara terus-menerus dalam loop utama (while(1)), sehingga rangkaian dapat secara real-time merespons perubahan pada sensor inframerah dan touch sensor, serta mengendalikan LED RGB sesuai dengan kondisi yang terdeteksi. Rangkaian ini memungkinkan integrasi sederhana antara sensor digital dan perangkat output menggunakan STM32F103C8 sebagai pengendali utama.


4. Flowchart dan Listing Program [Kembali]

Flowchart:


Listing Program:

#include "main.h"

void SystemClock_Config(void);
static void MX_GPIO_Init(void);

int main(void) {
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();

  while (1) {
    uint8_t ir_status = HAL_GPIO_ReadPin(GPIOB, IR_Pin);
    uint8_t touch_status = HAL_GPIO_ReadPin(GPIOB, TOUCH_Pin);

    if (ir_status == GPIO_PIN_SET && touch_status == GPIO_PIN_SET) {
      HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET);
      HAL_GPIO_WritePin(GPIOA, GREEN_Pin, GPIO_PIN_SET);
      HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_SET);
    } else {
      HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, ir_status);
      HAL_GPIO_WritePin(GPIOA, GREEN_Pin, touch_status);

      if (ir_status == GPIO_PIN_RESET && touch_status == GPIO_PIN_RESET) {
        HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET);
      } else {
        HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_RESET);
      }
    }
    HAL_Delay(10);
  }
}

void SystemClock_Config(void) {
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
    Error_Handler();
  }

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK |
                                RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) {
    Error_Handler();
  }
}

static void MX_GPIO_Init(void) {
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  __HAL_RCC_GPIOD_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  HAL_GPIO_WritePin(GPIOA, RED_Pin | GREEN_Pin, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_RESET);

  GPIO_InitStruct.Pin = RED_Pin | GREEN_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  GPIO_InitStruct.Pin = BLUE_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(BLUE_GPIO_Port, &GPIO_InitStruct);

  GPIO_InitStruct.Pin = IR_Pin | TOUCH_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}

void Error_Handler(void) {
  __disable_irq();
  while (1) {}
}

#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t *file, uint32_t line) {}

#endif

5. Video Demo [Kembali] 



6. Analisa [Kembali]


7. Download File [Kembali]

Download HTML [download]

Download Video Demo [download]

Download Infrared Sensor  [download]

Download Datasheet Mikrokontroler STM32F103C8 [download]

Download Datasheet Touch Sensor [download]

Download Datasheet LED [download]

Download Datasheet Resistor [download]


LA 1 MODUL 1 PRAK MIKRO



Percobaan 1 

LED & Push Button

1. Prosedur [Kembali]

1Rangkai semua komponen pada breadboard yang terhubung ke mikrokontroler Raspberry Pi Pico.

2. Buat program untuk mikrokontroler Raspberry Pi Pico di software Thonny.

3. Inputkan program ke dalam mikrokontroler melalui USB.

4. Setelah program diinputkan, uji rangkaian yang telah dirangkai sesuai dengan output yang ditentukan.

5. Selesai'

2. Hardware dan Diagram Blok [Kembali]

Hardware :

a) Raspberry Pi Pico
Raspberry Pi Pico - Seeed Studio | Mouser

2. Resistor

Resistor 220 ohm – Pendidikan Teknik Elektronika
3. Push Button

push button 4 kaki di Sabara Mikro | Tokopedia

4. Breadboard
BREADBOARD / PROJECTBOARD / PROTOBOARD 400 HOLES di M-kontrol | Tokopedia
 
5. LED Merah
Jual Lampu led 3mm warna merah | Shopee Indonesia

Diagram Blok  :


3. Rangkaian Simulasi dan Prinsip Kerja [Kembali] 



Prinsip Kerja :

Prinsip kerja rangkaian ini adalah dengan menggunakan Raspberry Pi Pico untuk mengatur hidupnya LED RGB menggunakan push button sebagai input. Setiap push button bertindak sebagai input sekaligus saklar yang mengatur masing masing LED secara langsung. Rangkaian ini bekerja dengan prinsip logika digital, di mana setiap tombol berfungsi sebagai input dengan kondisi LOW (0) saat tidak ditekan dan HIGH (1) saat ditekan, sementara LED berfungsi sebagai output yang menyala atau mati tergantung pada status tombol.
 

Saat sebuah push button ditekan, sinyal HIGH (1) dikirim ke pin GPIO yang telah diprogram sebagai input, sehingga Raspberry Pi Pico mengenali bahwa tombol tersebut sedang aktif. Mikrocontroller kemudian mengaktifkan pin GPIO yang terhubung ke LED dengan mengeluarkan sinyal HIGH (1), menyebabkan arus listrik mengalir dari pin output melalui LED dan resistor pembatas, sehingga LED menyala. Sebaliknya, jika tombol tidak ditekan, Raspberry Pi Pico mengatur output LED ke LOW (0), menghentikan aliran arus dan mematikan LED.

Setelah rangkaian bekerja, agar memastikan bahwa sistem bekerja dengan stabil, push button dikonfigurasi dengan pull-down resistor internal, yang menjaga nilai logika tetap LOW (0) saat tombol tidak ditekan, mencegah kesalahan pembacaan akibat sinyal mengambang (floating). Selain itu, program menerapkan delay kecil (50 milidetik) untuk mengatasi efek bouncing, yaitu fenomena di mana tombol mekanis dapat menghasilkan beberapa pulsa cepat saat ditekan atau dilepaskan.


4. Flowchart dan Listing Program [Kembali]

Flowchart :


Listing Program :

from machine import Pin
import time

# Daftar GPIO untuk LED dan push button
led_pins = [2, 3, 4, 5, 6, 7, 16] # Output LED
button_pins = [9, 10, 11, 12, 13, 14, 17] # Input dari push button

# Inisialisasi LED sebagai output
leds = [Pin(pin, Pin.OUT) for pin in led_pins]

# Inisialisasi push button sebagai input dengan pull-down
buttons = [Pin(pin, Pin.IN, Pin.PULL_DOWN) for pin in button_pins]

while True:
for i in range(len(buttons)): # Gunakan len() agar lebih fleksibel
if buttons[i].value() == 1: # Jika push button ditekan
leds[i].on() # Nyalakan LED
else:
leds[i].off() # Matikan LED

time.sleep(0.05) # Delay untuk debounce sederhana

5. Video Demo [Kembali] 



6. Analisa [Kembali]


7. Download File [Kembali]

Download HTML [download]

Download Video Demo [download]

Download Listing Program [download]

Download Datasheet Mikrokontroler Raspberry Pi Pico [download]

Download Datasheet Push Button [download]

Download Datasheet LED [download]

Download Datasheet Resistor [download]