mr-edu/content/mr/03_aktuator_gerak/matematika_mapping.md

3.6 KiB

---LESSON_INFO--- Matematika Robotika: Skala dan Pemetaan (Mapping).

Learning Objectives:

  • Memahami konsep perbandingan senilai dalam robotika.
  • Menggunakan fungsi map() untuk mengubah rentang nilai data.
  • Menghubungkan input analog dengan output PWM.

Prerequisites:

  • Kendali PWM Motor ---END_LESSON_INFO---

Matematika: Skala dan Pemetaan (Mapping)

Dalam robotika, kita sering menghadapi perbedaan rentang nilai. Contohnya:

  • Sensor Jarak memberikan nilai 0 sampai 1023.
  • Kecepatan Motor diatur dari 0 sampai 255.

Bagaimana cara mengubah nilai 1023 menjadi 255 secara akurat? Kita menggunakan Matematika Pemetaan.

Konsep Perbandingan Senilai

Pemetaan adalah cara memindahkan sebuah nilai dari satu rentang (range) ke rentang lainnya secara proporsional.

Rumus Dasar:

Output = \frac{(Input - InMin) \times (OutMax - OutMin)}{(InMax - InMin)} + OutMin

Untungnya, di Arduino kita tidak perlu menghitung rumus rumit ini secara manual. Kita bisa menggunakan fungsi: map(nilai, dariRendah, dariTinggi, keRendah, keTinggi);

Contoh Kasus:

Jika kita ingin mengubah nilai sensor (0-1023) menjadi terang LED (0-255):

int nilaiSensor = 512; // Nilai di tengah-tengah 0-1023
int terangLED = map(nilaiSensor, 0, 1023, 0, 255);
// Hasilnya: terangLED akan bernilai 127 (tengah-tengah 0-255)

---EXERCISE---

Tantangan: Sinkronisasi Sensor ke Lampu

Bayangkan Pin A0 menerima data dari sensor cahaya (0-1023). Kamu harus mengubah nilai tersebut agar bisa mengendalikan tingkat kecerahan LED di Pin 9 (0-255).

Tugas:

  1. Gunakan fungsi map() untuk mengubah variabel nilaiInput menjadi nilaiOutput.
  2. Cetak kedua nilai tersebut ke Serial Monitor dengan format: Input: [nilai], Output: [nilai].
  3. Gunakan analogWrite() untuk mengirim nilaiOutput ke LED.

Rangkaian:

  • Pin 9 Arduino → Resistor → LED Anode
  • LED Cathode → GND (Input simulasi diberikan secara otomatis melalui kode)

---INITIAL_CODE_ARDUINO--- // Latihan Mapping Matematika const int ledPin = 9; const int inputPin = A0;

void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); }

void loop() { // Membaca nilai analog (simulasi 0-1023) int nilaiInput = analogRead(inputPin);

// --- TULIS KODE KAMU DI BAWAH INI ---

// 1. Lakukan pemetaan dari 0-1023 ke 0-255 int nilaiOutput = 0; // Ganti ini dengan fungsi map()

// 2. Cetak ke Serial Monitor

// 3. Kendalikan kecerahan LED

// ------------------------------------

delay(500); } ---END_INITIAL_CODE_ARDUINO---

---VELXIO_CIRCUIT--- { "board": "arduino:avr:uno", "components": [ { "type": "led", "id": "led-map", "x": 400, "y": -200, "rotation": 0, "props": { "color": "blue", "pin": 9, "label": "OUTPUT LED" } }, { "type": "resistor", "id": "res-map", "x": 300, "y": -200, "rotation": 0, "props": { "value": "220" } } ], "wires": [] } ---END_VELXIO_CIRCUIT---

---EXPECTED_SERIAL_OUTPUT--- Input: Output: ---END_EXPECTED_SERIAL_OUTPUT---

---EXPECTED_WIRING--- { "wires": [ { "start": { "componentId": "arduino-uno", "pinName": "9" }, "end": { "componentId": "res-map", "pinName": "1" } }, { "start": { "componentId": "res-map", "pinName": "2" }, "end": { "componentId": "led-map", "pinName": "A" } }, { "start": { "componentId": "arduino-uno", "pinName": "GND" }, "end": { "componentId": "led-map", "pinName": "C" } } ] } ---END_EXPECTED_WIRING---

---KEY_TEXT--- map analogRead analogWrite ---END_KEY_TEXT---