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
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]);
}
}