---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): ```cpp 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---