{
  "app": {
    "name": "Simulator Interaktif Mikropengawal (MikroBit)",
    "subject": "Reka Bentuk dan Teknologi (RBT)",
    "version": "v1.2.0",
    "language": "ms",
    "targetAudience": "Tahun 4 - Tahun 6 (10-12 tahun)",
    "devMode": true,
    "_devModeNote": "Set devMode to false for production. When true: anchor dots are draggable, coordinates displayed at bottom, and logged to console."
  },
  "audio": {
    "backgroundMusic": {
      "src": "./audio/music.mp3",
      "volume": 0.3,
      "loop": true
    },
    "clickSound": {
      "src": "./audio/click.mp3",
      "volume": 0.5
    }
  },
  "_rotationNote": "ALL rotation values are in DEGREES (0-360). The app converts to radians automatically.",
  "_labelInfoNote": "Each label can have an optional 'info' object with 'title', 'body', 'speech' (mp3 path). Clicking the anchor dot opens a detail panel for that part.",
  "infoIcon": {
    "model": "./models/info.glb",
    "defaultScale": [
      0.3,
      0.3,
      0.3
    ],
    "defaultPosition": [
      0,
      2.5,
      0
    ],
    "defaultRotation": [
      0,
      0,
      0
    ],
    "animationSpeed": 1.5,
    "hoverColor": "#FFD700"
  },
  "info3DPanel": {
    "width": 3.2,
    "offsetX": 3.2,
    "offsetY": 1,
    "offsetZ": 0,
    "fontSize": 40,
    "titleFontSize": 50,
    "maxHeight": 3.8
  },
  "categories": [
    {
      "id": "mikropengawal",
      "name": "Mikropengawal",
      "icon": "🧠",
      "color": "#4A90D9"
    },
    {
      "id": "input",
      "name": "Peranti Input",
      "icon": "📥",
      "color": "#4CAF50"
    },
    {
      "id": "output",
      "name": "Peranti Output",
      "icon": "📤",
      "color": "#FF6B6B"
    },
    {
      "id": "litar",
      "name": "Komponen Litar",
      "icon": "🔌",
      "color": "#9B59B6"
    },
    {
      "id": "suis",
      "name": "Suis & Kawalan",
      "icon": "🔘",
      "color": "#F39C12"
    }
  ],
  "components": [
    {
      "id": "arduino",
      "name": "Arduino Uno",
      "category": "mikropengawal",
      "model": {
        "src": "./models/components/arduino.glb",
        "position": [
          0,
          0,
          0
        ],
        "rotation": [
          0,
          0,
          0
        ],
        "scale": [
          50,
          50,
          50
        ]
      },
      "infoIcon": {
        "position": [
          0,
          1,
          0
        ],
        "rotation": [
          0,
          0,
          0
        ],
        "scale": [
          0.3,
          0.3,
          0.3
        ]
      },
      "info": {
        "title": "Arduino Uno",
        "body": "Arduino Uno ialah papan mikropengawal yang paling popular untuk pemula.\n\n• 14 pin digital (input/output)\n• 6 pin analog (input)\n• Sambungan USB untuk pengaturcaraan\n• Penyambung kuasa\n\nArduino Uno menggunakan mikrocip ATmega328P dan boleh diprogramkan menggunakan bahasa Arduino (berdasarkan C/C++).",
        "speech": "./audio/speech/arduino.mp3"
      },
      "labels": [
        {
          "text": "Pin Digital",
          "position": [
            -1.257,
            1.555,
            -2.016
          ],
          "anchor": [
            -0.5,
            0.2,
            -1
          ],
          "info": {
            "title": "Pin Digital (D0-D13)",
            "body": "Arduino Uno mempunyai 14 pin digital yang boleh berfungsi sebagai input atau output.\n\n• Pin 0-1: Komunikasi Serial (TX/RX)\n• Pin 2-13: Pin digital serba guna\n• Pin 3,5,6,9,10,11: Menyokong PWM (~)\n\nPin digital hanya membaca atau menghantar nilai HIGH (5V) atau LOW (0V).",
            "speech": "./audio/speech/arduino-pin-digital.mp3"
          }
        },
        {
          "text": "Pin Analog",
          "position": [
            2.348,
            1.131,
            2.048
          ],
          "anchor": [
            1.127,
            0.439,
            1.302
          ],
          "info": {
            "title": "Pin Analog (A0-A5)",
            "body": "Arduino Uno mempunyai 6 pin analog input yang membaca voltan dari 0V hingga 5V.\n\n• Resolusi 10-bit (nilai 0-1023)\n• Boleh disambung kepada sensor analog seperti LDR, potensiometer\n• Boleh juga digunakan sebagai pin digital (D14-D19)",
            "speech": "./audio/speech/arduino-pin-analog.mp3"
          }
        },
        {
          "text": "USB",
          "position": [
            -3.241,
            1.092,
            0.183
          ],
          "anchor": [
            -2.005,
            0.437,
            -0.242
          ],
          "info": {
            "title": "Port USB Type-B",
            "body": "Port USB digunakan untuk:\n\n• Memuat naik kod program dari komputer ke Arduino\n• Komunikasi serial antara Arduino dan komputer\n• Membekalkan kuasa 5V kepada Arduino\n\nGunakan kabel USB Type-A ke Type-B untuk menyambung ke komputer.",
            "speech": "./audio/speech/arduino-usb.mp3"
          }
        }
      ]
    },
    {
      "id": "breadboard",
      "name": "Papan Roti (Breadboard)",
      "category": "litar",
      "model": {
        "src": "./models/components/breadboard.glb",
        "position": [
          0,
          0,
          0
        ],
        "rotation": [
          0,
          0,
          0
        ],
        "scale": [
          0.005200000000000001,
          0.005200000000000001,
          0.005200000000000001
        ]
      },
      "infoIcon": {
        "position": [
          0,
          2.5,
          0
        ],
        "rotation": [
          0,
          0,
          0
        ],
        "scale": [
          0.3,
          0.3,
          0.3
        ]
      },
      "info": {
        "title": "Papan Roti (Breadboard)",
        "body": "Papan roti ialah alat prototaip yang membolehkan anda membina litar tanpa perlu pateri.\n\n• Lubang-lubang kecil untuk memasukkan komponen\n• Baris kuasa (+) dan ground (-)\n• Sambungan dalaman mengikut baris\n\nPapan roti sangat berguna untuk menguji litar sebelum membuat litar kekal.",
        "speech": "./audio/speech/breadboard.mp3"
      },
      "labels": [
        {
          "text": "Baris Kuasa (+)",
          "position": [
            -3.368,
            1.475,
            1.925
          ],
          "anchor": [
            -2.295,
            0.292,
            1.346
          ],
          "info": {
            "title": "Baris Kuasa (+)",
            "body": "Baris merah di sisi papan roti disambung secara mendatar.\n\nSambungkan ke pin 5V atau 3.3V Arduino untuk membekalkan kuasa kepada komponen.\n\nSetiap sisi papan roti mempunyai satu baris kuasa.",
            "speech": "./audio/speech/breadboard-power.mp3"
          }
        },
        {
          "text": "Baris Ground (-)",
          "position": [
            -0.425,
            1.839,
            -2.721
          ],
          "anchor": [
            -0.515,
            0.257,
            -1.38
          ],
          "info": {
            "title": "Baris Ground (-)",
            "body": "Baris biru disambung secara mendatar.\n\nSambungkan ke pin GND Arduino. Setiap komponen memerlukan sambungan ground untuk melengkapkan litar.",
            "speech": "./audio/speech/breadboard-ground.mp3"
          }
        },
        {
          "text": "Pembahagi Tengah",
          "position": [
            3.485,
            1.704,
            -0.194
          ],
          "anchor": [
            2.53,
            0.281,
            0.164
          ],
          "info": {
            "title": "Pembahagi Tengah",
            "body": "Alur di tengah memisahkan papan kepada dua bahagian.\n\nLubang-lubang di setiap bahagian disambung secara menegak (dalam lajur 5 lubang).\n\nIC (Integrated Circuit) biasanya dipasang merentasi pembahagi ini.",
            "speech": "./audio/speech/breadboard-divider.mp3"
          }
        }
      ]
    },
    {
      "id": "resistor",
      "name": "Perintang (Resistor)",
      "category": "litar",
      "model": {
        "src": "./models/components/resistor.glb",
        "position": [
          0,
          0,
          0
        ],
        "rotation": [
          0,
          0,
          0
        ],
        "scale": [
          1,
          1,
          1
        ]
      },
      "infoIcon": {
        "position": [
          0,
          2,
          0
        ],
        "rotation": [
          0,
          0,
          0
        ],
        "scale": [
          0.3,
          0.3,
          0.3
        ]
      },
      "info": {
        "title": "Perintang (Resistor)",
        "body": "Perintang digunakan untuk mengawal aliran arus elektrik dalam litar.\n\n• Mengurangkan arus elektrik\n• Melindungi komponen daripada arus berlebihan\n• Membahagikan voltan\n\nNilai perintang diukur dalam Ohm (Ω) dan dikenal pasti melalui jalur warna pada badannya.",
        "speech": "./audio/speech/resistor.mp3"
      },
      "labels": [
        {
          "text": "Jalur Warna",
          "position": [
            0.143,
            1.159,
            -0.443
          ],
          "anchor": [
            0.011,
            0.259,
            0.021
          ],
          "info": {
            "title": "Jalur Warna Perintang",
            "body": "Jalur warna menunjukkan nilai rintangan:\n\n• Jalur 1 & 2: Digit nombor\n• Jalur 3: Faktor gandaan\n• Jalur 4: Toleransi (emas=5%, perak=10%)\n\nContoh: Coklat-Hitam-Merah-Emas = 1000Ω (1kΩ) ±5%",
            "speech": "./audio/speech/resistor-colorbands.mp3"
          }
        },
        {
          "text": "Kaki Kiri",
          "position": [
            -2.931,
            1.522,
            -0.36
          ],
          "anchor": [
            -2.638,
            0.191,
            -0.056
          ],
          "info": {
            "title": "Kaki Perintang",
            "body": "Perintang tiada kutub — boleh disambung dalam mana-mana arah. Kedua-dua kaki berfungsi sama.",
            "speech": ""
          }
        },
        {
          "text": "Kaki Kanan",
          "position": [
            3.278,
            1.572,
            -0.288
          ],
          "anchor": [
            2.4,
            0.088,
            -0.072
          ],
          "info": {
            "title": "Kaki Perintang",
            "body": "Perintang tiada kutub — boleh disambung dalam mana-mana arah. Kedua-dua kaki berfungsi sama.",
            "speech": ""
          }
        }
      ]
    },
    {
      "id": "potentiometer",
      "name": "Potensiometer",
      "category": "input",
      "model": {
        "src": "./models/components/potentiometer.glb",
        "position": [
          0,
          0,
          0
        ],
        "rotation": [
          0,
          0,
          0
        ],
        "scale": [
          1,
          1,
          1
        ]
      },
      "infoIcon": {
        "position": [
          0,
          2.5,
          0
        ],
        "rotation": [
          0,
          0,
          0
        ],
        "scale": [
          0.3,
          0.3,
          0.3
        ]
      },
      "info": {
        "title": "Potensiometer",
        "body": "Potensiometer ialah perintang boleh laras yang menukar kedudukan putaran menjadi isyarat elektrik.\n\n• Mengawal kecerahan LED\n• Mengawal kelajuan motor\n• Menghantar nilai analog (0-1023) kepada Arduino\n\nPotensiometer mempunyai 3 pin: VCC, GND dan pin isyarat (output).",
        "speech": "./audio/speech/potentiometer.mp3"
      },
      "labels": [
        {
          "text": "Tombol Putaran",
          "position": [
            1.971,
            2.02,
            -1.201
          ],
          "anchor": [
            -0.017,
            1.425,
            -0.272
          ],
          "info": {
            "title": "Tombol Putaran",
            "body": "Pusingkan tombol ini untuk menukar nilai rintangan.\n\nNilai analog berubah dari 0 hingga 1023 bergantung pada kedudukan putaran.",
            "speech": ""
          }
        },
        {
          "text": "Pin VCC",
          "position": [
            0.872,
            -0.109,
            1.708
          ],
          "anchor": [
            0.099,
            -0.821,
            0.424
          ],
          "info": {
            "title": "Pin VCC (Kuasa)",
            "body": "Sambungkan pin ini ke bekalan kuasa 5V dari Arduino.",
            "speech": ""
          }
        },
        {
          "text": "Pin Isyarat",
          "position": [
            -2.171,
            0.39,
            -0.031
          ],
          "anchor": [
            -0.565,
            -0.746,
            -0.754
          ],
          "info": {
            "title": "Pin Isyarat (Output)",
            "body": "Pin tengah menghantar nilai voltan yang berubah mengikut kedudukan tombol.\n\nSambungkan ke pin analog Arduino (A0-A5) untuk membaca nilai.",
            "speech": ""
          }
        },
        {
          "text": "Pin GND",
          "position": [
            1.946,
            0.66,
            -0.737
          ],
          "anchor": [
            0.618,
            -0.655,
            -0.636
          ],
          "info": {
            "title": "Pin GND (Ground)",
            "body": "Sambungkan pin ini ke GND pada Arduino untuk melengkapkan litar.",
            "speech": ""
          }
        }
      ]
    },
    {
      "id": "led",
      "name": "LED",
      "category": "output",
      "model": {
        "src": "./models/components/led.glb",
        "position": [
          0,
          1.5,
          0
        ],
        "rotation": [
          0,
          0,
          0
        ],
        "scale": [
          0.25,
          0.25,
          0.25
        ]
      },
      "infoIcon": {
        "position": [
          0,
          2.5,
          0
        ],
        "rotation": [
          0,
          0,
          0
        ],
        "scale": [
          0.3,
          0.3,
          0.3
        ]
      },
      "info": {
        "title": "LED (Diod Pemancar Cahaya)",
        "body": "LED ialah komponen yang memancarkan cahaya apabila arus elektrik melaluinya.\n\n• Kaki anod (+) yang lebih panjang\n• Kaki katod (-) yang lebih pendek\n• Memerlukan perintang untuk mengehadkan arus\n• Tersedia dalam pelbagai warna\n\nLED biasanya memerlukan perintang 220Ω apabila disambung dengan Arduino.",
        "speech": "./audio/speech/led.mp3"
      },
      "labels": [
        {
          "text": "Kubah LED",
          "position": [
            2.298,
            2.328,
            1.094
          ],
          "anchor": [
            0.138,
            1.923,
            -0.003
          ],
          "info": {
            "title": "Kubah LED",
            "body": "Kubah plastik lutsinar yang memancarkan cahaya.\n\nBentuk kubah membantu menyebarkan cahaya ke sudut yang lebih luas.\n\nWarna kubah menentukan warna cahaya yang dipancarkan.",
            "speech": ""
          }
        },
        {
          "text": "Anod (+) Panjang",
          "position": [
            -3.342,
            0.035,
            0.568
          ],
          "anchor": [
            -0.168,
            -0.249,
            -0.021
          ],
          "info": {
            "title": "Anod (+)",
            "body": "Kaki yang LEBIH PANJANG ialah anod (positif).\n\nSambungkan ke bekalan kuasa melalui perintang.\n\nTips: 'A' untuk Anod = 'A' untuk lebih pAnjang.",
            "speech": ""
          }
        },
        {
          "text": "Katod (-) Pendek",
          "position": [
            1.843,
            0.588,
            -2.081
          ],
          "anchor": [
            0.178,
            0.266,
            -0.016
          ],
          "info": {
            "title": "Katod (-)",
            "body": "Kaki yang LEBIH PENDEK ialah katod (negatif).\n\nSambungkan ke GND (ground).\n\nTips: Bahagian rata pada kubah LED juga menunjukkan sisi katod.",
            "speech": ""
          }
        }
      ]
    },
    {
      "id": "buzzer",
      "name": "Buzzer",
      "category": "output",
      "model": {
        "src": "./models/components/buzzer.glb",
        "position": [
          0,
          0,
          0
        ],
        "rotation": [
          0,
          0,
          0
        ],
        "scale": [
          60,
          60,
          60
        ]
      },
      "infoIcon": {
        "position": [
          0,
          2.5,
          0
        ],
        "rotation": [
          0,
          0,
          0
        ],
        "scale": [
          0.3,
          0.3,
          0.3
        ]
      },
      "info": {
        "title": "Buzzer (Pembaz)",
        "body": "Buzzer ialah komponen yang menghasilkan bunyi apabila menerima isyarat elektrik.\n\n• Buzzer Aktif: Hanya perlu kuasa untuk berbunyi\n• Buzzer Pasif: Memerlukan isyarat frekuensi untuk nada berbeza\n\nBuzzer digunakan untuk membuat penggera, melodi muzik ringkas, dan maklum balas bunyi.",
        "speech": "./audio/speech/buzzer.mp3"
      },
      "labels": [
        {
          "text": "Lubang Bunyi",
          "position": [
            -0.924,
            1.593,
            0.948
          ],
          "anchor": [
            0,
            0.26,
            0
          ],
          "info": {
            "title": "Lubang Bunyi",
            "body": "Lubang kecil di bahagian atas buzzer yang mengeluarkan bunyi.\n\nPiezo di dalam buzzer bergetar apabila menerima isyarat elektrik.",
            "speech": ""
          }
        },
        {
          "text": "Tanda (+)",
          "position": [
            2.65,
            1.078,
            -1.308
          ],
          "anchor": [
            0.3,
            0.16,
            0
          ]
        },
        {
          "text": "Pin (+)",
          "position": [
            -2.176,
            -0.079,
            0.207
          ],
          "anchor": [
            -0.278,
            -0.463,
            -0.015
          ],
          "info": {
            "title": "Pin Positif (+)",
            "body": "Sambungkan pin ini ke pin digital Arduino.\n\nGunakan fungsi tone() untuk menghasilkan bunyi pada frekuensi tertentu.",
            "speech": ""
          }
        },
        {
          "text": "Pin (-)",
          "position": [
            2.103,
            -0.465,
            -0.103
          ],
          "anchor": [
            0.205,
            -0.504,
            -0.027
          ],
          "info": {
            "title": "Pin Negatif (-)",
            "body": "Sambungkan pin ini ke GND pada Arduino.",
            "speech": ""
          }
        }
      ]
    },
    {
      "id": "pushbutton",
      "name": "Butang Tekan (Push Button)",
      "category": "suis",
      "model": {
        "src": "./models/components/pushbutton.glb",
        "position": [
          0,
          0,
          0
        ],
        "rotation": [
          0,
          0,
          0
        ],
        "scale": [
          0.26,
          0.26,
          0.26
        ]
      },
      "infoIcon": {
        "position": [
          0,
          2,
          0
        ],
        "rotation": [
          0,
          0,
          0
        ],
        "scale": [
          0.3,
          0.3,
          0.3
        ]
      },
      "info": {
        "title": "Butang Tekan (Push Button)",
        "body": "Butang tekan ialah suis yang menghantar isyarat digital kepada Arduino apabila ditekan.\n\n• Mempunyai 4 pin (2 pasang bersambung)\n• Menghantar isyarat HIGH atau LOW\n• Biasanya digunakan dengan perintang pull-up atau pull-down\n\nButang tekan digunakan untuk memulakan tindakan atau menukar keadaan dalam litar.",
        "speech": "./audio/speech/pushbutton.mp3"
      },
      "labels": [
        {
          "text": "Butang Merah",
          "position": [
            2.247,
            2.254,
            -0.058
          ],
          "anchor": [
            0.043,
            0.96,
            -0.014
          ],
          "info": {
            "title": "Butang Tekan",
            "body": "Tekan butang untuk menyambung litar.\n\nLepaskan untuk memutuskan litar.\n\nIni dipanggil suis 'momentary' — hanya aktif semasa ditekan.",
            "speech": ""
          }
        },
        {
          "text": "Pin 1",
          "position": [
            -1.675,
            0.232,
            -0.537
          ],
          "anchor": [
            -0.141,
            0.137,
            -0.047
          ]
        },
        {
          "text": "Pin 2",
          "position": [
            2.164,
            0.362,
            -0.071
          ],
          "anchor": [
            0.206,
            0.084,
            -0.106
          ]
        }
      ]
    },
    {
      "id": "servo",
      "name": "Motor Servo",
      "category": "output",
      "model": {
        "src": "./models/components/servo.glb",
        "position": [
          0,
          0,
          0
        ],
        "rotation": [
          0,
          0,
          0
        ],
        "scale": [
          0.77,
          0.77,
          0.77
        ]
      },
      "infoIcon": {
        "position": [
          0,
          2.5,
          0
        ],
        "rotation": [
          0,
          0,
          0
        ],
        "scale": [
          0.3,
          0.3,
          0.3
        ]
      },
      "info": {
        "title": "Motor Servo",
        "body": "Motor servo ialah motor yang boleh dikawal kedudukannya dengan tepat.\n\n• Boleh berputar dari 0° hingga 180°\n• 3 wayar: Kuasa (merah), Ground (coklat/hitam), Isyarat (oren/kuning)\n• Dikawal menggunakan isyarat PWM\n\nMotor servo digunakan dalam projek robotik, lengan mekanikal, dan kawalan pintu.",
        "speech": "./audio/speech/servo.mp3"
      },
      "labels": [
        {
          "text": "Lengan Servo",
          "position": [
            2.417,
            2.273,
            0.181
          ],
          "anchor": [
            0.094,
            1.923,
            0.221
          ],
          "info": {
            "title": "Lengan Servo (Horn)",
            "body": "Lengan servo berputar mengikut sudut yang ditetapkan dalam kod Arduino.\n\nGunakan fungsi servo.write(sudut) untuk menetapkan kedudukan dari 0° hingga 180°.",
            "speech": ""
          }
        },
        {
          "text": "Badan Motor",
          "position": [
            -2.305,
            1.828,
            -0.439
          ],
          "anchor": [
            -0.358,
            1.15,
            0.185
          ]
        },
        {
          "text": "Wayar Kuasa",
          "position": [
            -2.886,
            -0.367,
            0.453
          ],
          "anchor": [
            -0.148,
            0.265,
            1.44
          ],
          "info": {
            "title": "Wayar Kuasa (Merah)",
            "body": "Sambungkan wayar merah ke bekalan 5V.\n\nUntuk servo besar, gunakan bekalan kuasa luaran kerana Arduino mungkin tidak dapat membekalkan arus yang mencukupi.",
            "speech": ""
          }
        },
        {
          "text": "Wayar GND",
          "position": [
            0.826,
            0.486,
            3.278
          ],
          "anchor": [
            0.17,
            0.164,
            1.487
          ],
          "info": {
            "title": "Wayar GND (Coklat/Hitam)",
            "body": "Sambungkan wayar coklat atau hitam ke GND pada Arduino.",
            "speech": ""
          }
        },
        {
          "text": "Wayar Isyarat",
          "position": [
            1.819,
            -0.021,
            0.814
          ],
          "anchor": [
            -0.006,
            0.223,
            1.096
          ],
          "info": {
            "title": "Wayar Isyarat (Oren/Kuning)",
            "body": "Sambungkan wayar oren/kuning ke pin digital Arduino yang menyokong PWM (pin 3, 5, 6, 9, 10, atau 11).",
            "speech": ""
          }
        }
      ]
    },
    {
      "id": "ultrasonic",
      "name": "Sensor Ultrasonik",
      "category": "input",
      "model": {
        "src": "./models/components/ultrasonic.glb",
        "position": [
          0,
          0,
          0
        ],
        "rotation": [
          0,
          0,
          0
        ],
        "scale": [
          4,
          4,
          4
        ]
      },
      "infoIcon": {
        "position": [
          0,
          2.5,
          0
        ],
        "rotation": [
          0,
          0,
          0
        ],
        "scale": [
          0.3,
          0.3,
          0.3
        ]
      },
      "info": {
        "title": "Sensor Ultrasonik (HC-SR04)",
        "body": "Sensor ultrasonik mengukur jarak dengan menghantar gelombang bunyi dan mengira masa pantulan.\n\n• Jarak pengukuran: 2cm hingga 400cm\n• 4 pin: VCC, Trig, Echo, GND\n• Menggunakan gelombang bunyi 40kHz\n\nSensor ini digunakan untuk mengesan halangan, mengukur jarak, dan projek robot mengelak halangan.",
        "speech": "./audio/speech/ultrasonic.mp3"
      },
      "labels": [
        {
          "text": "Pemancar (Tx)",
          "position": [
            -1.5,
            1.5,
            1
          ],
          "anchor": [
            -0.418,
            0.066,
            1.294
          ],
          "info": {
            "title": "Pemancar Ultrasonik (Tx)",
            "body": "Silinder ini menghantar gelombang bunyi ultrasonik pada frekuensi 40kHz.\n\nGelombang bunyi ini tidak boleh didengari oleh manusia.",
            "speech": ""
          }
        },
        {
          "text": "Penerima (Rx)",
          "position": [
            1.5,
            1.5,
            1
          ],
          "anchor": [
            0.508,
            0.016,
            1.47
          ],
          "info": {
            "title": "Penerima Ultrasonik (Rx)",
            "body": "Silinder ini menerima pantulan gelombang bunyi dari objek.\n\nMasa antara hantar dan terima digunakan untuk mengira jarak.",
            "speech": ""
          }
        },
        {
          "text": "Pin VCC",
          "position": [
            -1.61,
            -0.104,
            1.747
          ],
          "anchor": [
            -0.08,
            -0.422,
            0.892
          ]
        },
        {
          "text": "Pin Trig",
          "position": [
            -1.111,
            -0.174,
            -1.017
          ],
          "anchor": [
            0.082,
            -0.413,
            0.83
          ],
          "info": {
            "title": "Pin Trigger",
            "body": "Hantar isyarat HIGH selama 10 mikrosaat ke pin ini untuk memulakan pengukuran jarak.",
            "speech": ""
          }
        },
        {
          "text": "Pin Echo",
          "position": [
            0.878,
            -0.525,
            -0.623
          ],
          "anchor": [
            0.17,
            -0.453,
            0.958
          ],
          "info": {
            "title": "Pin Echo",
            "body": "Pin ini menghantar isyarat HIGH yang tempohnya berkadar dengan jarak objek.\n\nGunakan fungsi pulseIn() untuk membaca tempoh isyarat.",
            "speech": ""
          }
        },
        {
          "text": "Pin GND",
          "position": [
            2.098,
            0.036,
            2.014
          ],
          "anchor": [
            0.297,
            -0.435,
            0.903
          ]
        }
      ]
    },
    {
      "id": "ldr",
      "name": "Perintang Peka Cahaya (LDR)",
      "category": "input",
      "model": {
        "src": "./models/components/ldr.glb",
        "position": [
          0,
          0,
          0
        ],
        "rotation": [
          0,
          0,
          0
        ],
        "scale": [
          0.14,
          0.14,
          0.14
        ]
      },
      "infoIcon": {
        "position": [
          0,
          2,
          0
        ],
        "rotation": [
          0,
          0,
          0
        ],
        "scale": [
          0.3,
          0.3,
          0.3
        ]
      },
      "info": {
        "title": "Perintang Peka Cahaya (LDR)",
        "body": "LDR (Light Dependent Resistor) ialah perintang yang berubah nilainya mengikut keamatan cahaya.\n\n• Rintangan berkurang apabila cahaya meningkat\n• Rintangan meningkat dalam kegelapan\n• Digunakan sebagai sensor cahaya analog\n\nLDR digunakan dalam projek lampu automatik, penggera keselamatan, dan sistem pencahayaan pintar.",
        "speech": "./audio/speech/ldr.mp3"
      },
      "labels": [
        {
          "text": "Permukaan Peka Cahaya",
          "position": [
            -0.454,
            0.914,
            0.794
          ],
          "anchor": [
            0,
            0.08,
            0
          ],
          "info": {
            "title": "Permukaan Fotosensitif",
            "body": "Permukaan zigzag di atas LDR diperbuat daripada bahan kadmium sulfida (CdS).\n\nApabila cahaya mengenai permukaan ini, rintangan berkurang dan lebih banyak arus mengalir.",
            "speech": ""
          }
        },
        {
          "text": "Kaki 1",
          "position": [
            -2.221,
            -0.727,
            0.029
          ],
          "anchor": [
            -0.328,
            -1.052,
            -0.023
          ]
        },
        {
          "text": "Kaki 2",
          "position": [
            2.754,
            -0.37,
            0.06
          ],
          "anchor": [
            0.236,
            -0.971,
            0.007
          ]
        }
      ]
    }
  ],
  "viewer3D": {
    "camera": {
      "fov": 50,
      "near": 0.1,
      "far": 1000,
      "defaultPosition": [
        0,
        3,
        8
      ]
    },
    "isometricView": {
      "_note": "Camera starts at this isometric angle when loading a component. angleX=elevation, angleY=azimuth (degrees)",
      "distance": 10,
      "angleX": 30,
      "angleY": 45
    },
    "controls": {
      "enableDamping": true,
      "dampingFactor": 0.08,
      "minDistance": 2,
      "maxDistance": 20,
      "enablePan": true,
      "autoRotate": true,
      "autoRotateSpeed": 1
    },
    "lighting": {
      "ambientIntensity": 0.6,
      "directionalIntensity": 0.8,
      "directionalPosition": [
        5,
        10,
        7
      ]
    },
    "grid": {
      "size": 20,
      "divisions": 20,
      "visible": true
    }
  }
}