Translate

Membuat Alat Kendali Relay Menggunakan SWITCH Mobil 5 channel ARDUINO

Membuat Alat Kendali Relay Menggunakan SWITCH Mobil 5 channel ARDUINO


         Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat digunakan untuk kendali 4 buah relay dengan menggunakan switch yang ada pada stir mobil, jadi fungsi utama dari alat ini adalah untuk mengaktifkan relay saat tombol pada switch kita gerakkan baik itu keatas maupun kearah lain. pergerakan switch akan mengaktifkan relay yang berbeda. untuk lebih jelasnya berikut adalah skema dan programnya.



a. Arduino Uno




b. Voltage Divider




c. Switch 5 channel




d. Modul Relay 




e. Program Arduino IDE

int relay1 = 2;
int relay2 = 3;
int relay3 = 4;
int relay4 = 5;


void setup(){
pinMode(relay1,OUTPUT);
pinMode(relay2,OUTPUT);
pinMode(relay3,OUTPUT);
pinMode(relay4,OUTPUT);

Serial.begin(9600);

digitalWrite(relay1,HIGH);
digitalWrite(relay2,HIGH);
digitalWrite(relay1,HIGH);
digitalWrite(relay1,HIGH);
}


void loop(){

int x = analogRead(A0);

if((x > 100)&&(x < 105)){
digitalWrite(relay1,LOW);
digitalWrite(relay2,HIGH);
digitalWrite(relay1,HIGH);
digitalWrite(relay1,HIGH);
}

if((x > 200)&&(x < 205)){
digitalWrite(relay1,HIGH);
digitalWrite(relay2,LOW);
digitalWrite(relay1,HIGH);
digitalWrite(relay1,HIGH);
}

if((x > 300)&&(x < 305)){
digitalWrite(relay1,HIGH);
digitalWrite(relay2,HIGH);
digitalWrite(relay1,LOW);
digitalWrite(relay1,HIGH);
}

if((x > 400)&&(x < 405)){
digitalWrite(relay1,HIGH);
digitalWrite(relay2,HIGH);
digitalWrite(relay1,HIGH);
digitalWrite(relay1,LOW);
}

if(x == 0){
digitalWrite(relay1,HIGH);
digitalWrite(relay2,HIGH);
digitalWrite(relay1,HIGH);
digitalWrite(relay1,HIGH);
}

}




 f. VIDEO HASILNYA









Membuat Alat Monitor Tegangan dan Arus AC Menggunakan ARDUINO dan notifikasi via SMS GATEWAY

Membuat Alat Monitor Tegangan dan Arus AC Menggunakan ARDUINO dan notifikasi via SMS GATEWAY


        Pada kesempatan kali ini saya akan menjelaskan mengenai sebuah alat yang digunakan untuk monitoring arus dan tegangan AC via Arduino Mega dan juga bisa mengirimkan notifikasi ketika tegangan terukur kurang dari 217 Vrms, jadi jika tegangan diatas 217 Vrms alat tidak akan mengirim SMS namun ketika tegangan turun sampai dibawah 217 maka akan mengirimkan sms notifikasi. alat ini menggunakan sensor ACS712 dan ZMPT101b. modul sms menggunakan SIM900A. untuk lebih jelasnya berikut adalah skema dan programnya.



a. Arduino Mega





b. Sensor Tegangan AC ZMPT101B





c. Sensor Arus AC ACS712





d. SIM900A Module






e. Program Arduino IDE

#include "SIM900.h"
#include <SoftwareSerial.h>

//#include <stdlib.h>
#include "sms.h"
SMSGSM sms;


#include <Wire.h>  // i2C Conection Library
#include <LiquidCrystal_I2C.h>  //i2C LCD Library

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x3F, 16, 2);

char string[160];
int numdata;
boolean started=false;
char smsbuffer[160];
char n[20];
char strsms[5];

unsigned long start_times[300];
unsigned long stop_times[300];
unsigned long values[300];

// Define various ADC prescaler
const unsigned char PS_16 = (1 << ADPS2);
const unsigned char PS_32 = (1 << ADPS2) | (1 << ADPS0);
const unsigned char PS_64 = (1 << ADPS2) | (1 << ADPS1);
const unsigned char PS_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

int a = 0;
int zero = 1;
int vin = 0;
int iin = 0;

void setup() {

  lcd.begin();
  lcd.clear();
  lcd.noCursor();

  Serial.begin(9600);

  // set up the ADC
  ADCSRA &= ~PS_128;  // remove bits set by Arduino library

  // you can choose a prescaler from above.
  // PS_16, PS_32, PS_64 or PS_128
  ADCSRA |= PS_128;    // set our own prescaler to 64

  Serial.println("GSM Shield testing.");

  if (gsm.begin(2400)){
    Serial.println("\nstatus=READY");
    started=true;
  }
  else Serial.println("\nstatus=IDLE");


if(started) {
          //Enable this two lines if you want to send an SMS.
          if (sms.SendSMS("087810016xxx", "Ready"))
          Serial.println("\nSMS sent OK");
     }


}


void loop() {

  unsigned int i;
  unsigned int z;
  z = 0;
  
  // capture the values to memory
  for(i=0;i<300;i++) {
    start_times[i] = micros();
    values[i] = analogRead(A0);            

  if (values[i] >= z) {
  z = values[i];
  }
    stop_times[i] = micros();
  }

   int vin = z ;

  z = 0;

  //================================
  // capture the values to memory
  for(i=0;i<300;i++) {
    start_times[i] = micros();
    values[i] = analogRead(A1);            

  if (values[i] >= z) {
  z = values[i];
  }
    stop_times[i] = micros();
  }
     float v1 = z * (5.0/1023.0);
     float iin = (v1-2.5)/0.1 ;

z = 0;

  // capture the values to memory
  for(i=0;i<300;i++) {
    start_times[i] = micros();
    values[i] = analogRead(A1);            

  if (values[i] >= z) {
  z = values[i];
  }
    stop_times[i] = micros();
  }
     float v1x = z * (5.0/1023.0);
     float iinx = (v1x-2.5)/0.1 ;

float iintot = (iin + iinx) / 2;

if (iintot < 0) {
iintot = 0;
}

 z = 0;

float vrms = (vin - 505.1) / 0.431 ;

if (vrms < 60) {
vrms = 0;
}

float p = (vrms * 20)/231;

 sprintf(string,"Daya: %s watt", dtostrf(p, 8, 5, strsms));
 
  lcd.setCursor(0, 0);
  lcd.print("v=");
  lcd.print(vrms,1);
  //lcd.print(vin);
 
  lcd.print(" I=");
  lcd.print(iintot);
  lcd.print("     ");
 
  lcd.setCursor(0, 1);
  lcd.print("P=");
  lcd.print(p,1);
  lcd.print("     ");

if((vrms > 0)&&(vrms < 217)){
if (sms.SendSMS("087810016xxx", string))
 Serial.println("\nSMS sent OK");
 delay(30000);
}

delay(200);

}






f. VIDEO HASILNYA









Membuat Robot Line Follower / Line Tracer Sendiri

Membuat Robot Line Follower Sendiri


           Pada postingan kali ini benar2 tingkat tinggi levelnya karena sudah masuk ke robot line follower atau robot pengikut garis, sebenarnya sangat sederhana sekali prinsip kerjanya yaitu terdapat 8 buah led putih atau infrared yang mana masing-masing led / infrared tersebut terdapat satu penampung atau yang mengambil cahaya tersebut namanya photodioda, nah sensor photodioda lah yang akan memberikan arahan untuk robot dapat bergerak ke kanan, ke kiri, lurus atau mundur, robot ini tidak dilengkapi dengan PID control karena untuk pemahaman PID control ada pada halaman sendiri dan pada alat yang berbeda, Anda bisa menggabungkan kedua program tersebut jika menginginkan robot LF ini menggunakan PID control. 



                Jadi ada 8 led dan photodioda yang mana masing-masing mewakili satu kontrol arah, misal seperti gambar diatas, 3 led bagian kiri akan mengendalikan robot untuk belok ke kanan, begitu pula dengan led dan photodioda bagian kanan akan mengendalikan robot atau motor untuk belok ke kanan, berikut penjelasan gambar untuk skematik dan programnya.  


 a. Minimum System ATMega16




b. Sensor Photodioda dan LED



 c. Motor Driver L293



d. Program Bascom AVR

$regfile = "m32def.dat"

$crystal = 11059200



Dirkiri1 Alias Portd.2

Dirkiri2 Alias Portd.3

Dirkanan1 Alias Portd.6

Dirkanan2 Alias Portd.7



Config Portd.3 = Output

Config Portd.2 = Output

Config Portd.6 = Output

Config Portd.7 = Output

Config Portc.7 = Output

Tombol1 Alias Pinb.3

Tombol2 Alias Pinb.2

Tombol3 Alias Pinb.1

Tombol4 Alias Pinb.0

Config Pinb.0 = Input

Config Pinb.1 = Input

Config Pinb.2 = Input

Config Pinb.3 = Input

Set Portb.0

Set Portb.1

Set Portb.2

Set Portb.3

Reset Portc.7



Config Timer1 = Pwm , Pwm = 8 , Prescale = 64 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down

Config Adc = Single , Prescaler = 8 , Reference = Avcc



Declare Sub Pwm(byval Kiri As Byte , Byval Kanan As Byte)

Declare Sub Isibobot

Declare Sub Bacaadc

Declare Sub Kalibrasi

Declare Sub Ceksensor

Declare Sub Setting

Declare Sub Aturpid

Declare Sub Liatadc

Declare Sub Cekregister

Declare Sub Maju_dikit



Dim Sensor As Byte

Dim Pilihan As Byte

Dim Kecepatan As Byte



Dim Regkan As Byte

Dim Regkir As Byte



Dim Pwm_ka_max As Integer , Pwm_ki_max As Integer , Pwm_ka As Integer , Pwm_ki As Integer

Dim Kp As Byte , Kd As Byte , Ki As Byte , Sum_error As Integer , Diff As Integer , Bobot As Integer , Bobot_lalu As Integer

Dim Kpeeprom As Eram Byte

Dim Kdeeprom As Eram Byte

Dim Kieeprom As Eram Byte

Dim Keceeprom As Eram Byte



Dim Prop As Integer , Deriv As Integer , Integ As Integer , Integral As Single , X As Byte



Dim Vref0 As Word , Vref1 As Word , Vref2 As Word , Vref3 As Word , Vref4 As Word , Vref5 As Word , Vref6 As Word , Vref7 As Word

Dim Dataadc0 As Word , Dataadc1 As Word , Dataadc2 As Word , Dataadc3 As Word , Dataadc4 As Word , Dataadc5 As Word , Dataadc6 As Word , Dataadc7 As Word

Dim Eeprom0 As Eram Word , Eeprom1 As Eram Word , Eeprom2 As Eram Word , Eeprom3 As Eram Word , Eeprom4 As Eram Word , Eeprom5 As Eram Word , Eeprom6 As Eram Word , Eeprom7 As Eram Word



Dim Href0 As Word , Href1 As Word , Href2 As Word , Href3 As Word , Href4 As Word , Href5 As Word , Href6 As Word , Href7 As Word

Dim Lref0 As Word , Lref1 As Word , Lref2 As Word , Lref3 As Word , Lref4 As Word , Lref5 As Word , Lref6 As Word , Lref7 As Word



Dim A As Byte

Sensor0 Alias Sensor.0

Sensor1 Alias Sensor.1

Sensor2 Alias Sensor.2

Sensor3 Alias Sensor.3

Sensor4 Alias Sensor.4

Sensor5 Alias Sensor.5

Sensor6 Alias Sensor.6

Sensor7 Alias Sensor.7

'=====================================================================

Config Lcdpin = Pin , Rs = Portc.0 , E = Portc.1 , Db4 = Portc.2

Config Lcdpin = Pin , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5

Config Lcd = 16 * 2

Cursor Off

'Deflcdchar 0 , 32 , 10 , 21 , 17 , 17 , 17 , 10 , 4

'=====================================================================

Inisialisasi:



   Vref0 = Eeprom0

   Vref1 = Eeprom1

   Vref2 = Eeprom2

   Vref3 = Eeprom3

   Vref4 = Eeprom4

   Vref5 = Eeprom5

   Vref6 = Eeprom6

   Vref7 = Eeprom7



'========================

Atur:

Cls

Locate 1 , 1

Lcd "    ROBOMAN    "

Locate 2 , 1

Lcd " set     start"

Do

   If Tombol1 = 0 Then

   Call Setting

   End If



   If Tombol4 = 0 Then

   Set Portc.7

   Cls

   Goto Utama

   End If

   Waitms 50

Loop

'================================== mulai =======================

Utama:

Do



Call Bacaadc

Call Ceksensor

Cls

Locate 2 , 5

Lcd Bin(sensor)



Select Case Pilihan

   Locate 1 , 1

   Case 1 : Lcd "DATAADC0= " ; Dataadc0

   Case 2 : Lcd "DATAADC1= " ; Dataadc1

   Case 3 : Lcd "DATAADC2= " ; Dataadc2

   Case 4 : Lcd "DATAADC3= " ; Dataadc3

   Case 5 : Lcd "DATAADC4= " ; Dataadc4

   Case 6 : Lcd "DATAADC5= " ; Dataadc5

   Case 7 : Lcd "DATAADC6= " ; Dataadc6

   Case 8 : Lcd "DATAADC7= " ; Dataadc7

End Select



Call Ceksensor



   If Sensor = &B10000000 Or Sensor = &B01000000 Or Sensor = &B00100000 Or Sensor = &B11000000 Or Sensor = &B11100000 Or Sensor = &B11110000 Then

   Dirkiri1 = 0                         ‘robot belok kiri

   Dirkiri2 = 1

   Dirkanan1 = 1

   Dirkanan2 = 0

   Pwm1a = 200

   Pwm1b = 0



   Elseif Sensor = &B00000001 Or Sensor = &B00000010 Or Sensor = &B00000100 Or Sensor = &B00000011 Or Sensor = &B00000111 Or Sensor = &B00001111 Then

   Dirkiri1 = 0                         ‘robot belok kanan

   Dirkiri2 = 1

   Dirkanan1 = 1

   Dirkanan2 = 0

   Pwm1a = 0

   Pwm1b = 200



   Elseif Sensor = &B00011000 Or Sensor = &B00111100 Or Sensor = &B00001000 Or Sensor = &B00010000 Then

   Dirkiri1 = 0

   Dirkiri2 = 1                         ‘robot jalan Lurus

   Dirkanan1 = 1

   Dirkanan2 = 0

   Pwm1a = 200

   Pwm1b = 200



   Elseif Sensor = &B00000000 Then

   Dirkiri1 = 1

   Dirkiri2 = 0                         ‘robot jalan mundur

   Dirkanan1 = 0

   Dirkanan2 = 1

   Pwm1a = 100

   Pwm1b = 100



   End If

Loop

 '===========================================

Sub Bacaadc:

Start Adc

   Dataadc0 = Getadc(0)

   Dataadc1 = Getadc(1)

   Dataadc2 = Getadc(2)

   Dataadc3 = Getadc(3)

   Dataadc4 = Getadc(4)

   Dataadc5 = Getadc(5)

   Dataadc6 = Getadc(6)

   Dataadc7 = Getadc(7)

Stop Adc

End Sub

'============================================

Sub Kalibrasi

Cls

Lcd "proses kalibrasi"



Do

Call Bacaadc



If Dataadc0 < Href0 Then Lref0 = Dataadc0

If Dataadc1 < Href1 Then Lref1 = Dataadc1

If Dataadc2 < Href2 Then Lref2 = Dataadc2

If Dataadc3 < Href3 Then Lref3 = Dataadc3

If Dataadc4 < Href4 Then Lref4 = Dataadc4

If Dataadc5 < Href5 Then Lref5 = Dataadc5

If Dataadc6 < Href6 Then Lref6 = Dataadc6

If Dataadc7 < Href7 Then Lref7 = Dataadc7



If Dataadc0 > Lref0 Then Href0 = Dataadc0

If Dataadc1 > Lref1 Then Href1 = Dataadc1

If Dataadc2 > Lref2 Then Href2 = Dataadc2

If Dataadc3 > Lref3 Then Href3 = Dataadc3

If Dataadc4 > Lref4 Then Href4 = Dataadc4

If Dataadc5 > Lref5 Then Href5 = Dataadc5

If Dataadc6 > Lref6 Then Href6 = Dataadc6

If Dataadc7 > Lref7 Then Href7 = Dataadc7



Waitms 50

Loop Until Tombol1 = 0



Vref0 = Lref0 + Href0

Vref1 = Lref1 + Href1

Vref2 = Lref2 + Href2

Vref3 = Lref3 + Href3

Vref4 = Lref4 + Href4

Vref5 = Lref5 + Href5

Vref6 = Lref6 + Href6

Vref7 = Lref7 + Href7



Vref0 = Vref0 / 2

Vref1 = Vref1 / 2

Vref2 = Vref2 / 2

Vref3 = Vref3 / 2

Vref4 = Vref4 / 2

Vref5 = Vref5 / 2

Vref6 = Vref6 / 2

Vref7 = Vref7 / 2



Eeprom0 = Vref0

Eeprom1 = Vref1

Eeprom2 = Vref2

Eeprom3 = Vref3

Eeprom4 = Vref4

Eeprom5 = Vref5

Eeprom6 = Vref6

Eeprom7 = Vref7



Kalibrasi_x:

Cls

Lcd "kalibrasi sukses"

Wait 2



Do

Call Ceksensor

Cls

Lcd Bin(sensor)

Waitms 50

Loop Until Tombol1 = 0

Goto Setting



End Sub



Sub Ceksensor



   Call Bacaadc



   If Dataadc0 > 922 Then

      Sensor.0 = 1

   End If

   If Dataadc0 < 922 Then

      Sensor.0 = 0

   End If

   If Dataadc1 > 900 Then

      Sensor.1 = 1

   End If

   If Dataadc1 < 900 Then

      Sensor.1 = 0

   End If

   If Dataadc2 > 890 Then

      Sensor.2 = 1

   End If

   If Dataadc2 < 890 Then

      Sensor.2 = 0

   End If

   If Dataadc3 > 989 Then

      Sensor.3 = 1

   End If

   If Dataadc3 < 989 Then

      Sensor.3 = 0

   End If

   If Dataadc4 > 960 Then

      Sensor.4 = 1

   End If

   If Dataadc4 < 960 Then

      Sensor.4 = 0

   End If

   If Dataadc5 > 994 Then

      Sensor.5 = 1

   End If

   If Dataadc5 < 994 Then

      Sensor.5 = 0

   End If

   If Dataadc6 > 989 Then

      Sensor.6 = 1

   End If

   If Dataadc6 < 989 Then

      Sensor.6 = 0

    End If

   If Dataadc7 > 967 Then

      Sensor.7 = 1

   End If

   If Dataadc7 < 967 Then

      Sensor.7 = 0

   End If



End Sub

'=======================================



Liatadc:

Do

Call Bacaadc

Call Ceksensor

Cls

Locate 2 , 5

Lcd Bin(sensor)



Select Case Pilihan

   Locate 1 , 1

   Case 1 : Lcd "DATAADC0= " ; Dataadc0

   Case 2 : Lcd "DATAADC1= " ; Dataadc1

   Case 3 : Lcd "DATAADC2= " ; Dataadc2

   Case 4 : Lcd "DATAADC3= " ; Dataadc3

   Case 5 : Lcd "DATAADC4= " ; Dataadc4

   Case 6 : Lcd "DATAADC5= " ; Dataadc5

   Case 7 : Lcd "DATAADC6= " ; Dataadc6

   Case 8 : Lcd "DATAADC7= " ; Dataadc7

End Select



If Tombol3 = 0 Then

Waitms 200

Incr Pilihan

   If Pilihan > 8 Then Pilihan = 1

End If



If Tombol2 = 0 Then

Waitms 200

Decr Pilihan

   If Pilihan < 1 Then Pilihan = 8

End If



If Tombol1 = 0 Or Tombol4 = 0 Then Goto Setting



Waitms 100

Loop

'========================================

Setting:



Cls

Locate 1 , 1

Lcd "ADC SENSOR PID"



Do

Waitms 200



   If Tombol1 = 0 Then

   Waitms 200

   Goto Liatadc

   End If



   If Tombol2 = 0 Then

   Waitms 200

   Call Kalibrasi

   End If



   If Tombol4 = 0 Then

   Waitms 200

   Goto Atur

   End If



Waitms 50

Loop

'================ selesai =====================





Tabel 5.2.2 Tabel Kalibrasi ADC Sensor
Port ADC
Nilai ADC pada Kertas Putih
Nilai ADC pada Kertas Hitam
Nilai tengah
ADC.0
822
1022
922
ADC.1
800
1000
900
ADC.2
780
1020
890
ADC.3
800
1020
989
ADC.4
810
1021
960
ADC.5
812
1024
994
ADC.6
811
1023
989
ADC.7
811
1012
967

                  Sehingga dari data table diatas jika sensor mengenai medan berwarna hitam akan dihasilkan nilai 1 dan jika mengenai medan putih akan dihasilkan nilai 0, karena terkena eksekusi program yang di Bold berikut

If Dataadc0 > 922 Then  
      Sensor.0 = 1
   End If
   If Dataadc0 < 922 Then
      Sensor.0 = 0
   End If



5.2.5 Cara Penggunaan Robot
                  Cara penggunaan robot line follower ini pertama pilih tampilan pada menu “Set”, maka akan masuk ke menu kalibrasi, jika sensor sudah membaca dengan baik pada track, langkah kedua yaitu menyimpan nilai kalibrasi tersebut dengan menekan tombol 2, setelah itu kembali ke menu awal dengan menekan tombol 4, sehingga akan tampak tampilan awal “set” dan “start”, pilihlah menu “start” yang menandakan robot siap untuk dijalankan.




5.2.6 VIDEO HASILNYA