Kamis, 08 Februari 2018

EPS Kontrol Module

 
Gambar tata letak komponen SMD (Harap dimirror)

Gambar tata Letak komponen Keseluruhan

Gambar Sablon Jalur PCB

Gambar Tata Letak Komponen Atas

Gambar Sablon Komponen Atas

Skema EPS 2.1
Daftar Komponennya sebagai berikut :
Daftar komponen yang diterima siswa
Resistor
2K2 SMD = 4
10K SMD = 5
100K SMD = 3
10K 1/2W = 1
3K3 1/4W = 4
82k ohm 1/4w = 1
100 ohm 1/2W = 3
10 ohm 1/2W = 1
300 ohm 1/4W = 1

Transistor
8050 = 4 (Harus Tipe S)
8550 = 1 (perhatikan Harus Tipe S jangan H)

Capasitor
Keramik 22Pf = 2
Elco 10V/1000Uf = 2
Lain-Lain
TBlock Wirepad = 2 pcs
Relay = 2
Diode SMD = 3 
IC 7805 SMD = 1
LED biru 5mm = 2
Socket IC 28Pin = 1
Tactile Switch  = 1
Crytal 16Mhz = 1
Pin Deret Bengkok 3 Pin = 1
Pin Deret Bengkok 4 Pin = 1
Pin Deret Lurus 4 Pin = 1
Pin Deret Bengkok 6 Pin = 1 

Trus Programnya dibawah ini:

// -----------------------------------------------
// Program Untuk EPS Module Kontroller Avanza Dengan Hall Torque Sensor Tipe OH49E ratio Metric
// Abaikan Speed Sensor
/* Catatan saja Untuk mencatat Bagian bagian yang perlu dicatat Versi 2.1
 *  Menggunkaan LCD I2C dengan alamat 0x27 atau 0X3F dengan 20 x 4
 *  IC Atmega8/88/168/328
 *  pembacaan baterai 222 adalah 12.40 volt dan 293 adalah 16.30 volt
 *  posisi torque sensor (TS) saat tidak terkena magnet (Dilepas dari poros)
 *  TS1 (sensor0) adalah yang bawah/ TS2 (sensor1) adalah yang atas
 *  Dipasang Pada Daihatsu Caharde dengan Hall Sensor OH49E
 *  Kiri                  Lurus             Kanan           Lepas
 *  TS1 = 440             TS1 = 470         TS1 = 500       TS1 = 0
 *  TS2 = 484             TS2 = 453         TS2 = 422       TS2 = 1021
 *  Saat Sensor Dilepas Dari Socket ECU  TS1 = 358 ; TS2 = 427 (dipengaruhi tegangan baterai)
 *  arus = ADC 0 belum sempat ta hitung
 *  jika putaran dinamo terbalik, balik aja polaritasnya
 *  Program di buat Oleh : Wahyu Arief Budiman
 *  Hp : 085643496555
 *  Blog : Hobbykendaraanlistrik.blogspot.com
 *  email : arief@smkn1seyegan.com
*/
// -----------------------------------------------
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define ON 1
#define OFF 0
LiquidCrystal_I2C lcd(0x27, 20, 4);//0x27 dapat di ganti dengan 0x3F sesuaikan LCD I2C

const int MotorD4 = 4;
const int MotorD5 = 5;
const int MotorPWM = 6;       int PWM = 255;
const int TorqueSensor0 = A0; int Sensor0 = 0;
const int TorqueSensor1 = A1; int Sensor1 = 0;
const int ArusSensor = A2;    int Arus = 0;
const int BateraiSensor = A3; float Baterai = 0;
unsigned int Selisih;
int JumlahTorqueSensor;
int KalibrasiSensor0;
int KalibrasiSensor1;
void setup() {
  Serial.begin(9600);
  Serial.println(F("Module Kontroller EPS Avanza"));
  pinMode(MotorD4, OUTPUT); digitalWrite(MotorD4, OFF);
  pinMode(MotorD5, OUTPUT); digitalWrite(MotorD5, OFF);
  pinMode(MotorPWM, OUTPUT); analogWrite(MotorPWM, PWM);
  pinMode(TorqueSensor0, INPUT);
  pinMode(TorqueSensor1, INPUT);
  pinMode(ArusSensor, INPUT);
  pinMode(BateraiSensor, INPUT);
  lcd.begin();
  lcd.backlight();
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("   OTOTRONIK   "); delay (1000);
  lcd.setCursor(0, 1);
  lcd.print("MODULE EPS V 2.1"); delay (1000);
  lcd.setCursor(0, 0);
  lcd.print("   Dibuat Oleh :"); delay (1000);
  lcd.setCursor(0, 1);
  lcd.print("Wahyu Arief B   "); delay (3000);
  lcd.clear();
  TCCR0B = TCCR0B & B11111000 | B00000010; 
//  setPwmFrequency(6,3);
}

void loop() {
  BacaTorqueSensor();
  BacaArus();
  BacaBaterai();
  GerakanMotor();
  TampilLCD();
}

void BacaTorqueSensor() {
  Sensor0 = analogRead(TorqueSensor0);
  Sensor1 = analogRead(TorqueSensor1);
  JumlahTorqueSensor = Sensor0 + Sensor1;
  Serial.print("Torque Sensor = ");
  Serial.print(Sensor0);
  Serial.print(" ___ ");
  Serial.print(Sensor1);

}
void BacaArus() {
  Arus = analogRead(ArusSensor);
  Serial.print("Sensor Arus = ");
  Serial.print(Arus);
  Serial.println(); //delay(1);
}
void BacaBaterai() {
  Baterai = analogRead(BateraiSensor);
  Baterai = Baterai/17.9;
  Serial.print("Tegangan Baterai = ");
  Serial.print(Baterai);
  Serial.println(); //delay(1);
}
void GerakanMotor() {
  //Gerakan Motor Putar kanan
  if (Sensor0 > 490 && Sensor1 < 432) {//lakukan kalibrasi pada bagian ini dan sesuaikan angkanya
    Selisih = Sensor0 - Sensor1;
    PWM = map(Selisih, 0, 211, 0, 255);
    PWM = 255 - PWM;
    if (PWM<=0){PWM=0;}
    digitalWrite(MotorD4, ON); digitalWrite(MotorD5, OFF);delay(5);
    analogWrite(MotorPWM, PWM);delay(1);
    Serial.print("Putar Kanan");
    Serial.println(); //delay(5);
  }

  //void GerakanMotorKiri() {
  if (Sensor0 < 450 && Sensor1 > 473 && Sensor1 < 900) {//lakukan kalibrasi pada bagian ini sesuaikan angkanya
    digitalWrite(MotorD4, OFF); digitalWrite(MotorD5, ON);delay(5);
    Selisih = Sensor1 - Sensor0;
    PWM = map(Selisih, 0, 150, 0, 255);
    PWM = 255 - PWM;
    if (PWM<=0){PWM=0;}
    analogWrite(MotorPWM, PWM);delay(1);
    Serial.print("Putar Kiri");
    Serial.println(); //delay(5);
  }

  //void GerakanMotorBerhenti() {
  if ((Sensor0 >= 463 && Sensor0 <=483)||(Sensor1 >=443 && Sensor1 <=463)){ //ubah nilai ini sesuai kalibrasi
  PWM = 255;
  analogWrite(MotorPWM, PWM);delay(10);
  digitalWrite(MotorD4, OFF); digitalWrite(MotorD5, OFF); 
    Serial.print("Berhenti");
  Serial.println(); delay(1);}
  //Sensor Lepas
  if (Sensor0 <20 && Sensor1 >929){
  digitalWrite(MotorD4, OFF); digitalWrite(MotorD5, OFF); PWM = 255;
  analogWrite(MotorPWM, PWM);
  Serial.print("TORQUE SENSOR ERROR");delay(1000);
  Serial.println(); delay(5);
  lcd.setCursor(0, 1);
  lcd.print("SENSOR E UCUL!!!"); delay(1000);
  lcd.clear();
  }
}
void TampilLCD(){
//lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(Sensor0); //delay (1);
  lcd.setCursor(4, 0);
  lcd.print(Sensor1); //delay (1);
  lcd.setCursor(8, 0);
  lcd.print(Baterai); //delay (1);
  lcd.setCursor(12, 0);
  lcd.print(" ");
  lcd.setCursor(14, 0);
  lcd.print(" "); 
  lcd.setCursor(13, 0);
  lcd.print(Arus); //delay (1);
  lcd.setCursor(0, 1);
  lcd.print("TS1 TS2 Bat"); //delay (1);
  lcd.setCursor(13, 1);
  lcd.print(PWM);
  lcd.setCursor(0, 3);
  lcd.print("TQ TQ PWM Gap");
}