Selasa, 12 Mei 2020

9. Indikator Gear



Transmisi Manual dengan penunjuk posisi gigi? Kenapa tidak?

Pada prinsipnya, perpindahan gigi 1, 2 dst pada transmisi manual dengan penggerak 2 kabel dari tongkat persneling ke gearbox, adalah pergerakan maju - mundur kabel.
Maka dari itu, tidak sulit untuk menerjemahkan posisi kabel-kabel itu ke program.
Pada project ini menggunakan Arduino, yg relatif murah dan mudah didapat di toko online.
Hanya saja untuk project ini perlu tahu ttg Arduino.

Hardware yang dibutuhkan:
1 Arduino
4 IR Obstacle Sensor
1 8x8 Matrix MAX72xx
1 Voltage Step down
Kabel-kabel



Untuk letak sensor-sensor, silahkan diperkirakan dan diatur. Di sini tidak dibahas detail.
Sensor1 aktif saat tongkat persneling geser paling kiri (Gigi 1 dan 2)
Sensor2 aktif saat tongkat persneling geser paling kanan (Gigi 5 dan R)
Sensor3 aktif saat tongkat persneling geser ke bawah (Gigi 2, 4 dan R)
Sensor4 aktif saat tongkat persneling geser ke bawah (Gigi 1, 3 dan 5)



Berikut Kode Arduino-nya:

// Mulai di sini

#include

int DIN = 12;
int CS =  10;
int CLK = 11;

// Hexadecimal untuk byte "satu"s/d "mundur" di bawah, di dapat dari aplikasi "Pixeltomatrix.exe". Silahkan di-search dan di-download ke komputer

byte satu[8]=     {0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00}; // 1
byte dua[8]=     {0x00,0xFB,0xFB,0xDB,0xDB,0xDF,0xDF,0x00}; // 2
byte tiga[8]=     {0x00,0xDB,0xDB,0xDB,0xDB,0xFF,0xFF,0x00}; // 3
byte empat[8]=     {0x00,0x1F,0x1F,0x18,0x18,0xFF,0xFF,0x00}; // 4
byte lima[8]=    {0x00,0xDF,0xDF,0xDB,0xDB,0xFB,0xFB,0x00}; // 5
byte mundur[8]=     {0x00,0xFF,0xFF,0x33,0x33,0xFF,0xEE,0x00}; // R

LedControl lc=LedControl(DIN,CLK,CS,0);

void setup(){
 lc.shutdown(0,false);      //The MAX72XX is in power-saving mode on startup
 lc.setIntensity(0,2);      // Set the brightness
 lc.clearDisplay(0);        // and clear the display
 delay(2000);
}

void loop(){

   while (digitalRead(4)== LOW && digitalRead(5)== HIGH && digitalRead(6)== HIGH && digitalRead(7)== LOW)
   {
    printByte(satu);
   }

   lc.clearDisplay(0);         // and clear the display

   while (digitalRead(4)== LOW && digitalRead(5)== HIGH && digitalRead(6)== LOW && digitalRead(7)== HIGH)
   {
    printByte(dua);
   }

   lc.clearDisplay(0);         // and clear the display
 
   while (digitalRead(4)== HIGH && digitalRead(5)== HIGH && digitalRead(6)== HIGH && digitalRead(7)== LOW)
   {
    printByte(tiga);
   }

   lc.clearDisplay(0);         // and clear the display
 
   while (digitalRead(4)== HIGH && digitalRead(5)== HIGH && digitalRead(6)== LOW && digitalRead(7)== HIGH)
   {
    printByte(empat); 
   }

   lc.clearDisplay(0);         // and clear the display
 
   while (digitalRead(4)== HIGH && digitalRead(5)== LOW && digitalRead(6)== HIGH && digitalRead(7)== LOW)
   {
    printByte(lima);
   }

   lc.clearDisplay(0);         // and clear the display
 
   while (digitalRead(4)== HIGH && digitalRead(5)== LOW && digitalRead(6)== LOW && digitalRead(7)== HIGH)
   {
    printByte(mundur); 
   }

   lc.clearDisplay(0);         // and clear the display

}

void printByte(byte character [])
{
  int i = 0;
  for(i=0;i<8 i="" p="">  {
    lc.setRow(0,i,character[i]);
  }
}

// kode stop di sini