Contoh Coding Neural Network untuk Kendali Robotik dengan STM32

3 min read 23-08-2024
Contoh Coding Neural Network untuk Kendali Robotik dengan STM32

Dalam era teknologi yang semakin maju, penerapan kecerdasan buatan (AI) pada robotik menjadi salah satu topik yang menarik untuk dibahas. Salah satu penerapan AI yang cukup terkenal adalah Neural Network. Dengan menggunakan Neural Network, kita dapat membuat robot yang mampu belajar dari data dan beradaptasi dengan lingkungannya. Dalam artikel ini, kita akan membahas contoh coding Neural Network untuk kendali robotik dengan STM32.

Apa Itu Neural Network?

Neural Network adalah suatu metode dalam machine learning yang terinspirasi oleh cara kerja otak manusia. Jaringan ini terdiri dari neuron-neuron yang saling terhubung dan dapat mempelajari pola dari data yang diberikan. Dengan training yang tepat, Neural Network dapat digunakan untuk berbagai aplikasi, termasuk kendali robotik.

Mengapa STM32?

STM32 adalah keluarga mikrokontroler yang sangat populer dan sering digunakan dalam proyek robotik. Beberapa kelebihan STM32 antara lain:

  • Kinerja Tinggi: Dapat menangani berbagai aplikasi dengan kebutuhan pemrosesan yang tinggi.
  • Paket Periferal Lengkap: Dilengkapi dengan berbagai periferal seperti ADC, PWM, dan lain-lain yang memudahkan pengembangan robotik.
  • Komunitas Besar: Tersedia banyak forum dan sumber daya yang dapat membantu dalam pengembangan.

Persiapan Lingkungan Pengembangan

Sebelum kita mulai coding, ada beberapa langkah persiapan yang perlu dilakukan:

  1. Instalasi Software IDE: Anda dapat menggunakan STM32CubeIDE atau PlatformIO.
  2. Perangkat Keras: Pastikan Anda memiliki board STM32 dan komponen lain yang diperlukan seperti motor driver, sensor, dan sumber daya.
  3. Library: Install library yang dibutuhkan seperti STM32 HAL library dan TensorFlow Lite untuk Microcontrollers (TFLite Micro).

Contoh Coding Neural Network

Berikut adalah contoh sederhana dari coding Neural Network untuk kendali motor menggunakan STM32. Dalam contoh ini, kita akan menggunakan teknik supervised learning untuk mengontrol dua motor berdasarkan input dari dua sensor.

1. Struktur Proyek

Struktur proyek sederhana dapat terlihat sebagai berikut:

/RobotControl
    ├── main.c
    ├── neural_network.c
    ├── neural_network.h
    ├── motor_control.c
    ├── motor_control.h
    └── data.csv

2. Model Neural Network

Sebelum kita memulai coding, kita perlu membuat model Neural Network terlebih dahulu. Di sini kita akan menggunakan TensorFlow untuk melatih model kita dengan data pelatihan yang tersimpan dalam data.csv.

Contoh Data CSV:

sensor1,sensor2,motor1_speed,motor2_speed
0.1,0.2,150,250
0.3,0.4,200,300
0.5,0.6,250,350

Contoh Kode Pyhton untuk Melatih Model:

import pandas as pd
import numpy as np
from tensorflow import keras

# Load data
data = pd.read_csv('data.csv')
X = data[['sensor1', 'sensor2']].values
y = data[['motor1_speed', 'motor2_speed']].values

# Build the model
model = keras.Sequential([
    keras.layers.Dense(16, activation='relu', input_shape=(2,)),
    keras.layers.Dense(2)
])

model.compile(optimizer='adam', loss='mean_squared_error')

# Train the model
model.fit(X, y, epochs=100)

# Save the model
model.save('model.h5')

3. Kode C untuk Kendali Robot

Setelah model dilatih, kita dapat mengimpornya ke dalam STM32. Berikut adalah contoh kode C untuk menggunakan model dan mengontrol motor berdasarkan input sensor:

#include "stm32f4xx_hal.h"
#include "neural_network.h"
#include "motor_control.h"

// Inisialisasi variabel
float sensor1_value, sensor2_value;
float motor_speed[2];

// Fungsi utama
int main(void) {
    HAL_Init();
    SystemClock_Config();
    
    // Inisialisasi motor dan sensor
    Motor_Init();
    Sensor_Init();

    while (1) {
        // Membaca nilai sensor
        sensor1_value = Read_Sensor1();
        sensor2_value = Read_Sensor2();

        // Memanggil neural network untuk prediksi kecepatan motor
        Predict_Motor_Speed(sensor1_value, sensor2_value, motor_speed);

        // Mengatur kecepatan motor
        Set_Motor_Speed(motor_speed[0], motor_speed[1]); 

        HAL_Delay(100);
    }
}

4. Fungsi Prediksi dalam Neural Network

Fungsi Predict_Motor_Speed bertugas untuk melakukan prediksi menggunakan model Neural Network. Dalam kode ini, kita akan melibatkan TensorFlow Lite untuk melakukan inferensi.

#include "tensorflow/lite/c/c_api.h"

// Fungsi untuk memprediksi kecepatan motor
void Predict_Motor_Speed(float sensor1, float sensor2, float* motor_speed) {
    // Inisialisasi input dan output pada model
    float input[2] = {sensor1, sensor2};
    float output[2];

    // Lakukan inferensi menggunakan model TFLite
    tflite::ops::micro::AllOpsResolver resolver;
    ...

    // Selesai, simpan hasil prediksi
    motor_speed[0] = output[0];
    motor_speed[1] = output[1];
}

5. Fungsi Kontrol Motor

Fungsi Set_Motor_Speed akan mengatur kecepatan motor berdasarkan hasil prediksi.

void Set_Motor_Speed(float speed1, float speed2) {
    // Membatasi nilai kecepatan agar tidak melebihi batas
    if (speed1 > MAX_SPEED) speed1 = MAX_SPEED;
    if (speed2 > MAX_SPEED) speed2 = MAX_SPEED;

    // Mengatur PWM untuk motor
    __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, speed1);
    __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, speed2);
}

Kesimpulan

Dalam artikel ini, kita telah membahas bagaimana cara menggunakan Neural Network untuk kendali robotik dengan STM32. Dengan melakukan pelatihan model di luar mikrokontroler dan kemudian menerapkannya di STM32, kita dapat mengembangkan robot yang cerdas dan responsif terhadap lingkungan. Dengan pengetahuan ini, kini Anda dapat mulai bereksperimen dengan proyek robotik Anda sendiri yang menggunakan AI untuk meningkatkan kemampuan robot. Selamat berinovasi!