Translate

Membuat Robot Kendali Remote TV SONY ARDUINO (Sensor TSOP)

Membuat Robot Kendali Remote TV SONY ARDUINO (Sensor TSOP)


          Pada kesempatan yang berbahagia kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah robot yang mana robot ini dikendalikan menggunakan remote TV, memang tidak biasanya sebuah robot dikendalikan oleh remote TV, biasanya robot dikendalikan oleh joystik atau komputer menggunakan wireless. Robot ini memiliki satu buah receiver sinyal remote TV yang bernama TSOP. untuk remote TV yang digunakan adalah remote TV Sony. untuk jenis remote selain Sony mungkin harus dikalibrasi ulang kodenya. Robot ini menggunakan Arduino dan motor driver L298N. untuk lebih jelasnya berikut adalah skema dan programnya.




a. Arduino Uno




b. Sensor TSOP




c. Motor Driver L298N 




d. Motor DC + Gearbox + Roda




e. Remote TV SONY




f. Led dan Buzzer






g. Program Arduino IDE

#include <IRremote.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27 ,2,1,0,4,5,6,7,3, POSITIVE);

int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;

int keki = 6;                                                                                             
int keka = 7;
int motorki1 = 2;
int motorki2 = 3;
int motorka1 = 4;
int motorka2 = 5;
int buzzer=8;
int led1=10;
int led2=12;
int led3=9;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
lcd.begin(16,2); //LCD untuk ukuran 16x2
pinMode(keki,OUTPUT);
pinMode(keka,OUTPUT);
pinMode(motorki1,OUTPUT);
pinMode(motorki2,OUTPUT);
pinMode(motorka1,OUTPUT);
pinMode(motorka2,OUTPUT);
analogWrite(keki,255);
analogWrite(keka,255);

pinMode(buzzer,OUTPUT);
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);


}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value);
    irrecv.resume(); // Receive the next value

if(results.value == 752){
digitalWrite(motorki1,HIGH);
digitalWrite(motorki2,LOW);
digitalWrite(motorka1,HIGH);
digitalWrite(motorka2,LOW);

  }
if(results.value == 4294967295){
digitalWrite(motorki1,LOW);
digitalWrite(motorki2,HIGH);
digitalWrite(motorka1,LOW);
digitalWrite(motorka2,HIGH);

  }
 
if(results.value == 720){
digitalWrite(motorki1,LOW);
digitalWrite(motorki2,LOW);
digitalWrite(motorka1,HIGH);
digitalWrite(motorka2,LOW);

  } 

if(results.value == 3280){
digitalWrite(motorki1,HIGH);
digitalWrite(motorki2,LOW);
digitalWrite(motorka1,LOW);
digitalWrite(motorka2,LOW);

  }

if(results.value == 2672){
digitalWrite(motorki1,LOW);
digitalWrite(motorki2,LOW);
digitalWrite(motorka1,LOW);
digitalWrite(motorka2,LOW);

  } 
 
 if(results.value == 16){
digitalWrite(buzzer,LOW);
}
 if(results.value == 3088){
digitalWrite(led1,HIGH);
}
 if(results.value == 1552){
digitalWrite(led2,HIGH);

 if(results.value == 2960){
digitalWrite(led3,HIGH);

 if(results.value == 2064){
digitalWrite(buzzer,HIGH);
}
 if(results.value == 528){
digitalWrite(led1,LOW);
}
 if(results.value == 3600){
digitalWrite(led2,LOW);
}
 if(results.value == 2320){
digitalWrite(led3,LOW);
}
 
  }
}






h. VIDEO HASILNYA









Membuat Alat Deteksi Getaran / Guncangan (Shake) Kirim SMS Koordinat Posisi GPS ARDUINO dan Kendali Relay via Android Bluetooth Bascom AVR

Membuat Alat Deteksi Getaran / Guncangan Kirim SMS Koordinat Posisi GPS ARDUINO dan Kendali Relay via Android Bluetooth Bascom AVR


           Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat mengirimkan koordinat posisi GPS latitude dan longitude saat terjadi getaran atau guncangan (Shake). alat ini berfungsi untuk memberikan informasi terkait kondisi kendaraan yang mana jika terjadi kecelakaan maka otomatis alat akan berguncang dan akan langsung mengirimkan notifikasi berupa SMS yang mana isi dari SMS tersebut adalah posisi koordinat dari GPS sehingga dapat dengan mudah orang mengetahuinya. alat ini terdiri dari dua buah sistem. sistem lainnya yaitu kendali relay berbasis android, jadi menggunakan HP android dan bluetooth sehingga dapat mengendalikan sebuah relay. untuk lebih jelaskan berikut adalah skema dan programnya.




a. Arduino Mega




b. Minimum System ATMega16




c. SIM800L + Buck Converter





d. GY - GPS6MV2




e. Relay Modul 5v




f. Bluetooth HC-05




g. Sensor Piezo Electric (Sensor Getar)





h. Program Android







i. Program Arduino IDE

//vcc GPS = 5 volt
//vcc SIM800L = 4 volt

#include <Wire.h>  // i2C Conection Library
#include <LiquidCrystal_I2C.h>  //i2C LCD Library
#include <SoftwareSerial.h>
#include <TinyGPS.h>
#include "SIM900.h"

SoftwareSerial mySerial(10, 11);
TinyGPS gps;

#include "sms.h"
SMSGSM sms;

LiquidCrystal_I2C lcd(0x3F, 20, 4);

void gpsdump(TinyGPS &gps);
void printFloat(double f, int digits = 2);

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

char strsms[5];
char latstr[20];
char lonstr[20];
char latlonstr[20];

  long lat, lon;
  float flat, flon;
  unsigned long age, date, time, chars;
  int year;
  byte month, day, hour, minute, second, hundredths;
  unsigned short sentences, failed;

void setup() 
{
     Serial.begin(9600);
    
     Serial.println("GSM Shield testing.");
     //Start configuration of shield with baudrate.
     //For http uses is raccomanded to use 4800 or slower.
     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("083129071737", "ALAT READY"))
          Serial.println("\nSMS sent OK");
     }
    
   lcd.begin();
   lcd.clear();
   lcd.noCursor();
  
  // Oploen serial communications and wait for port to open:
  Serial.begin(9600);
  // set the data rate for the SoftwareSerial port
  mySerial.begin(9600);
  delay(1000);
  Serial.println("uBlox Neo 6M");
  Serial.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version());
  Serial.println("by Mikal Hart");
  Serial.println();
  Serial.print("Sizeof(gpsobject) = ");
  Serial.println(sizeof(TinyGPS));
  Serial.println();
}

void loop() // run over and over
{
 
  int sensorValue = analogRead(A0);
  //Serial.println(sensorValue);
 
  lcd.setCursor(0,2);
  lcd.print("ADC= ");
  lcd.print(sensorValue);
  lcd.print("               ");
  delay(200);
 
  if(sensorValue > 100){
  lcd.clear(); 
  lcd.setCursor(0,2);
  lcd.print("KIRIM SMS");
  lcd.print("               ");
  delay(500);
 
  bool newdata = false;
  unsigned long start = millis();
  // Every 5 seconds we print an update
  while (millis() - start < 5000)
  {
    if (mySerial.available())
   
    {
      char c = mySerial.read();
      //Serial.print(c);  // uncomment to see raw GPS data
      if (gps.encode(c))
      {
        newdata = true;
        break;  // uncomment to print new data immediately!
      }
    }
  }
 
  if (newdata)
  {
    Serial.println("Acquired Data");
    Serial.println("-------------");
    gpsdump(gps);
    Serial.println("-------------");
    Serial.println();
  }
 
 
  dtostrf(flat,10,6,latstr);
  dtostrf(flon,10,6,lonstr);
  sprintf(string,"LAT= %s, LONG= %s", latstr, lonstr);
 
      if (gsm.begin(2400)) {
          Serial.println("\nstatus=READY");
          started=true;
     } else Serial.println("\nstatus=IDLE");

      if(started) {
          if (sms.SendSMS("083129071737", string))
          Serial.println("\nSMS sent OK");
          if (sms.SendSMS("083129071737", "OK"))
          Serial.println("\nSMS sent OK ");
     }


  }
}

 
void gpsdump(TinyGPS &gps)
{

  gps.get_position(&lat, &lon, &age);
  Serial.print("Lat/Long(10^-5 deg): "); Serial.print(lat); Serial.print(", "); Serial.print(lon);
  Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms.");
 
  gps.f_get_position(&flat, &flon, &age);
  Serial.print("Lat/Long(float): "); printFloat(flat, 5); Serial.print(", "); printFloat(flon, 5);
    Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms.");

  lcd.setCursor(0,0);
  lcd.print("LAT:");
  lcd.print(flat, 5);
  
  lcd.setCursor(0,1);
  lcd.print("LONG:");
  lcd.print(flon, 5);
 
}


void printFloat(double number, int digits)
{
  // Handle negative numbers
  if (number < 0.0)
  {
     Serial.print('-');
     number = -number;
  }

  // Round correctly so that print(1.999, 2) prints as "2.00"
  double rounding = 0.5;
  for (uint8_t i=0; i<digits; ++i)
    rounding /= 10.0;
 
  number += rounding;

  // Extract the integer part of the number and print it
  unsigned long int_part = (unsigned long)number;
  double remainder = number - (double)int_part;
  Serial.print(int_part);

  // Print the decimal point, but only if there are digits beyond
  if (digits > 0)
    Serial.print(".");

  // Extract digits from the remainder one at a time
  while (digits-- > 0)
  {
    remainder *= 10.0;
    int toPrint = int(remainder);
    Serial.print(toPrint);
    remainder -= toPrint;
  }
}



j. Program Bascom AVR

$regfile = "m8535.dat"
$crystal = 4000000
$baud = 9600


Ddrc = &B11111111

Portc.0 = 1

Dim Perintah As String * 10

Cls
Cursor Off

Do

Perintah = Waitkey()

Select Case Perintah

    Case "a" :
    Portc.0 = 0

    Case "b" :
    Portc.0 = 1

  End Select

Loop





k. Gambar Hasilnya






l. VIDEO HASILNYA











Membuat Simulasi ADC Mikrokontroller Pembacaan Sensor Analog Menggunakan Bascom AVR

Membuat Simulasi ADC Mikrokontroller Pembacaan Sensor Analog Menggunakan Bascom AVR


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah simulasi yang bisa menjelaskan mengenai cara penggunaan fitur ADC pada mikrokontroller menggunakan bahasa pemrograman Bascom AVR. jadi pada contoh kali ini hanyalah simulasi saja tanpa ada hardware nyatanya. jika ingin dibuat hardware bisa saja dan juga hasilnya pun nanti akan sama seperti pada simulasi. untuk software simulasi menggunakan proteus kemudian untuk contoh sensor menggunakan potensiometer. untuk lebih jelasnya berikut adalah skema dan programnya.



a. Minimum System ATMega




b. Potensiometer




c. LCD 16x2





d. Program Bascom AVR

$regfile = "m16def.dat"
$crystal = 12000000
$baud = 9600
'--------------------------

Config Lcdpin = Pin , Rs = Portc.4 , E = Portc.5 , Db4 = Portc.0
Config Lcdpin = Pin , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3
Config Lcd = 16 * 2

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

Dim Dataadc1 As Word
Dim Volt1 As Single
Dim Dataadc2 As Word
Dim Volt2 As Single

Cls
Cursor Off

Start Adc


Do

Dataadc1 = Getadc(0)

Volt1 = Dataadc1 * 5
Volt1 = Volt1 / 1023

Dataadc2 = Getadc(1)

Volt2 = Dataadc2 * 5
Volt2 = Volt2 / 1023


Print "v1= " ; Volt1
Print "v2= " ; Volt2

   Upperline
   Lcd "v1= " ; Volt1
   Lowerline
   Lcd "v2= " ; Volt2

Waitms 10


Loop





e. VIDEO HASILNYA









Membuat Wiper Otomatis dan Kendali Motor Stepper Driver TB6560 ARDUINO

Membuat Wiper Otomatis dan Kendali Motor Stepper Driver TB6560 ARDUINO


           Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang bisa digunakan untuk membuat sebuah WIPER otomatis dengan 4 mode, alat ini menggunakan ARDUINO sebagai kontrollernya dan menggunakan switch untuk mengubah mode gerakan, driver stepper yang digunakan adalah TB6560 dan tipe motor stepper yang dipakai adalah bipolar. jadi prinsip kerja alat ini yaitu terdapat 4 buah mode gerakan yang digunakan untuk menggerakkan stepper motor, mode 1 adalah wiper stop, mode 2 adalah gerakan wiper normal, mode 3 adalah wiper bergerak lambat, mode 4 adalah wiper bergerak dengan delay 5 detik. untuk lebih jelasnya berikut adalah skema dan programnya.




a. Arduino Uno





b. Motor Stepper Bipolar





c. Driver TB6560





d. Switch Potensio






e. Program Arduino IDE

int distance = 0;
int sw1 = 0;
int sw2 = 0;
int sw3 = 0;
int sw4 = 0;

int kec = 0;
int stepx = 0;
int tunggu = 0;

//kec = 100 / step = 7700

void setup() {
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);

pinMode(7, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);

digitalWrite(8, LOW);
digitalWrite(9, LOW);
}


void loop() {
 
sw1 = digitalRead(4);
sw2 = digitalRead(5);
sw3 = digitalRead(6);
sw4 = digitalRead(7);

if(sw1 == LOW){
digitalWrite(9, LOW);
digitalWrite(8, LOW);
stepx = 0;
kec = 0;
tunggu = 0;
}

if(sw2 == LOW){
stepx = 7700;
kec = 100;
tunggu = 200;
gerak();
balik();
}

if(sw3 == LOW){
stepx = 7700;
kec = 300;
tunggu = 200;
gerak();
balik();
}

if(sw4 == LOW){
stepx = 7700;
kec = 100;
tunggu = 5000;
gerak();
balik();
}

}


void gerak(){

digitalWrite(8, LOW); // atas

digitalWrite(9, HIGH);
delayMicroseconds(kec);
digitalWrite(9, LOW);
delayMicroseconds(kec);
distance++;

if(distance > stepx){
distance = 0;
delay(200);
return;
}
  
 gerak();
}


void balik() {

digitalWrite(8, HIGH); // bawah
 
digitalWrite(9, HIGH);
delayMicroseconds(kec);
digitalWrite(9, LOW);
delayMicroseconds(kec);
distance++;

if(distance > stepx){  
distance = 0;
delay(tunggu);
return;
}

balik();
}






f. VIDEO HASILNYA











 

Membuat Alat Monitor Debu dan Suhu (dust and temperature) Menggunakan ARDUINO

Membuat Alat Monitor Debu dan Suhu (dust and temperature) Menggunakan ARDUINO


          Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang digunakan untuk memonitor suhu dan debu yang berada pada suatu ruangan atau suatu benda, alat ini menggunakan Arduino sebagai processornya kemudian untuk sensor dipakai DHT11 dan GP2Y1010A dari sharp, untuk kalibrasi sensor dan cara akses sensor bisa dilihat pada link dibawah ini. alat ini dilengkapi relay yang mana jika suhu telah mencapai batas maka relay akan ON namun jika suhu masih belum mencapai batas maka relay akan OFF. untuk akurasi suhu dari DHT11 sangatlah bagus dan sesuai dengan standart industri. untuk lebih jelasnya berikut skema dan programnya.





a. Arduino UNO





b. LCD 16x2 + I2C Shield





c. Sensor DEBU / DUST





d. Sensor Suhu DHT11





e. Relay 1 channel







f. Program Arduino IDE

#include <Wire.h> 
#include <LiquidCrystal_I2C.h> 
#include "DHT.h"

#define DHTPIN 2     // what digital pin we're connected to
#define DHTTYPE DHT11   // DHT 11

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x3F, 16, 2);

int ledx = 3;
int relay = 4;

void setup()
{
 dht.begin();
 lcd.begin();
 lcd.clear();
 lcd.noCursor();
 pinMode(ledx,OUTPUT);
 pinMode(relay,OUTPUT);
 digitalWrite(relay,LOW);
}

void loop()
{
 
 float h = dht.readHumidity();
 float t = dht.readTemperature();
 float f = dht.readTemperature(true);

 int hum = h;
 int suhu = t;

  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  float hif = dht.computeHeatIndex(f, h);
  float hic = dht.computeHeatIndex(t, h, false);


//aktif low
//GP2Y1010AU0F_SAMPLEDELAY should be 280us to perform the correct reading
//this delay should consider that ADC conversion takes 13 ADC clock cycles
//ADCtime(s) = (1/ADCclock)*13 = (1/FCPU/ADCprescaler)*13
// es (1/(8000000/64))*13 = 0.000104s = 104us
//so to perform reading at correct time
//280 - (1/FCPU/ADCprescaler)*13*1000000   , 1000000 is the conversion factor from s to us
// es. 280 - 104 = 176

digitalWrite(ledx,LOW);    //on
delayMicroseconds(176);

int dataadc = analogRead(A0);
delayMicroseconds(40);

digitalWrite(ledx,HIGH);   //off
delayMicroseconds(9680);

float v = dataadc * (5.0 / 1023.0);

//y = 0.166x - 0.129
float Dustval = (v * 0.166) - 0.129;

  lcd.setCursor(0,0);
  lcd.print("Suhu= ");
  lcd.print(suhu);
  lcd.print(" C");
 
  lcd.setCursor(0,1);
  lcd.print("Dust= ");
  lcd.print(Dustval);
  lcd.print(" mg/m3");
 
if(suhu > 35){
digitalWrite(relay,LOW);
}
if(suhu <= 35){
digitalWrite(relay,HIGH);
}

delay(80);

}






g. VIDEO HASILNYA










TEMPAT SAMPAH PINTAR BUKA OTOMATIS ( SMART TRASH BIN ) ARDUINO DAN SENSOR JARAK HC-SRF04

TEMPAT SAMPAH PINTAR BUKA OTOMATIS ( SMART TRASH BIN ) ARDUINO DAN SENSOR JARAK HC-SRF04


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat tempat sampah pintar buka dan tutup otomatis menggunakan sensor jarak dan Arduino, alat ini sejatinya difungsikan agar orang tidak peerlu repot-repot lagi membuka tempat sampah yang biasanya kotor dan berbau, maka dari itu dibuatlah tempat sampah yang non-kontak agar terjaga kebersihannya terutama bagi manusia dan tangan dari bakteri. tempat sampah ini dilengkapi alarm dan indikator LED hijau dan merah agar kita bisa tahu apakah tempat sampah sudah penuh atau masih kosong. jika sudah penuh maka buzzer akan berbunyi dan LED merah akan menyala, berikut adalah skema dan programnya.   




a. Arduino Uno





b. Sensor Jarak HC-SRF04





c. LCD + I2C





d. Motor Servo Mini





e. Led dan Buzzer







f. Program Arduino IDE

#include <Wire.h>  // i2C Conection Library
#include <LiquidCrystal_I2C.h>  //i2C LCD Library
LiquidCrystal_I2C lcd(0x3F, 16, 2);

#include <Servo.h>

#define trigPin1 7
#define echoPin1 6

#define trigPin2 5
#define echoPin2 4

#define trigPin3 3
#define echoPin3 2

Servo myservo;

int led1 = A0;
int led2 = A1;
int buzzer = A2;

 long duration1, distance1;
 long duration2, distance2;
 long duration3, distance3;


void setup()
{

myservo.attach(9);
 
lcd.begin();
lcd.noCursor();
lcd.clear();

pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(buzzer,OUTPUT);
digitalWrite(buzzer,HIGH);

pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
pinMode(trigPin3, OUTPUT);
pinMode(echoPin3, INPUT);

myservo.write(170);

}


void loop()
{

  digitalWrite(trigPin1, LOW); 
  delayMicroseconds(2);
  digitalWrite(trigPin1, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin1, LOW);
  duration1 = pulseIn(echoPin1, HIGH);
  distance1 = (duration1/2) / 29.1;
   
lcd.setCursor(0,0);
lcd.print(distance1);
lcd.print("  ");


  digitalWrite(trigPin2, LOW); 
  delayMicroseconds(2);
  digitalWrite(trigPin2, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin2, LOW);
  duration2 = pulseIn(echoPin2, HIGH);
  distance2 = (duration2/2) / 29.1;
   
lcd.setCursor(4,0);
lcd.print(distance2);
lcd.print("  ");



  digitalWrite(trigPin3, LOW); 
  delayMicroseconds(2);
  digitalWrite(trigPin3, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin3, LOW);
  duration3 = pulseIn(echoPin3, HIGH);
  distance3 = (duration3/2) / 29.1;
   
lcd.setCursor(8,0);
lcd.print(distance3);
lcd.print("             ");

//  myservo.write(170);


if(distance3 > 5){

lcd.setCursor(0,1);
lcd.print("     KOSONG       ");

digitalWrite(buzzer,HIGH);
digitalWrite(led1,LOW);
digitalWrite(led2,HIGH);
if((distance1 <= 10)&&(distance2 <= 10)){
  myservo.write(40);
  delay(3000);
  myservo.write(170);
 
}
if((distance1 <= 10)&&(distance2 > 10)){
  myservo.write(40);
  delay(3000);
  myservo.write(170);

}
if((distance1 > 10)&&(distance2 <= 10)){
  myservo.write(40);
  delay(3000);
  myservo.write(170);

}
if((distance1 > 10)&&(distance2 > 10)){
  myservo.write(170);
}

}

if(distance3 < 8){
lcd.setCursor(0,1);
lcd.print("     PENUH       ");

digitalWrite(led1,HIGH); 
digitalWrite(led2,LOW);
digitalWrite(buzzer,LOW); 

myservo.write(170);
}

delay(200);

}




g. VIDEO HASILNYA










Membuat alat pelacak posisi GPS dengan SMS dan kendali Relay via HP Android bluetooth ARDUINO

Membuat alat pelacak posisi GPS dengan SMS dan kendali Relay via HP Android bluetooth ARDUINO


          Pada kesempatan kali ini saya akan menjelaskan mengenai sebuah alat yang berfungsi sebagai alat pelacak posisi GPS dengan menggunakan sms dan alat kendali Relay menggunakan HP Android, jadi fungsi alat ini ada dua seperti yang telah disebutkan, untuk yang pertama yaitu alat pelacak posisi GPS dengan menggunakan sms prinsip kerjanya yaitu jika kita ingin mengetahui lokasi dimana alat / kendaraan berada maka tinggal sms ke nomer alat maka alat akan membalasnya dengan posisi keberadaan yang berupa koordinat longitude dan latitude, kemudian untuk kendali relay digunakan untuk mematikan CDI agar bisa hidupkan dan matikan sepeda motor dengan HP Android via bluetooth.  untuk skema dan programnya berikut adalah penjelasannya.




a. Arduino Mega





b. GPS NEO 6MV2 UBLOX





c. SIM800L MODUL SMS GSM





d. Modul Step Down Buck Converter





e. Modul Sismin ATMega8





f. Bluetooth HC05





g. Modul Relay 5V





h. LCD + I2C






i. Program Arduino IDE

/*********************
 *10 to GPS Module TX*
 *09 to GPS Module RX*
 *********************/
 // vcc gps = 3.3V
 // vcc sim800l = 3.7 - 4.2 v

#include <Wire.h>  // i2C Conection Library
#include <LiquidCrystal_I2C.h>  //i2C LCD Library
#include "SIM900.h"
#include <SoftwareSerial.h>
#include <TinyGPS.h>

#include "sms.h"
SMSGSM sms;

SoftwareSerial mySerial(10, 11);
TinyGPS gps;

LiquidCrystal_I2C lcd(0x3F, 16, 2);

void gpsdump(TinyGPS &gps);
void printFloat(double f, int digits = 2);

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

  long lat, lon;
  float flat, flon;
  unsigned long age, date, time, chars;
  int year;
  byte month, day, hour, minute, second, hundredths;
  unsigned short sentences, failed;


void setup() 
{
     Serial.begin(9600);
     Serial.println("GSM Shield testing.");

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

     if(started) {
          if (sms.SendSMS("083831362852", "Alat Ready"))
          Serial.println("\nSMS sent OK");
     }
    
   lcd.begin();
   lcd.clear();
   lcd.noCursor();
  
  // Oploen serial communications and wait for port to open:
  Serial.begin(9600);
  // set the data rate for the SoftwareSerial port
  mySerial.begin(9600);
  delay(1000);
  Serial.println("uBlox Neo 6M");
  Serial.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version());
  Serial.println("by Mikal Hart");
  Serial.println();
  Serial.print("Sizeof(gpsobject) = ");
  Serial.println(sizeof(TinyGPS));
  Serial.println();
}

void loop() // run over and over
{
  bool newdata = false;
  unsigned long start = millis();
  // Every 5 seconds we print an update
  while (millis() - start < 5000)
  {
    if (mySerial.available())
   
    {
      char c = mySerial.read();
      //Serial.print(c);  // uncomment to see raw GPS data
      if (gps.encode(c))
      {
        newdata = true;
        break;  // uncomment to print new data immediately!
      }
    }
  }
 
  if (newdata)
  {
    Serial.println("Acquired Data");
    Serial.println("-------------");
    gpsdump(gps);
    Serial.println("-------------");
    Serial.println();
  }
 
 
  dtostrf(flat,10,6,latstr);
  dtostrf(flon,10,6,lonstr);
  sprintf(string,"LAT= %s, LONG= %s", latstr, lonstr);

 if(gsm.begin(9600)){
  started=true;
 }
 int pos=0;
 if(started){
  pos=sms.IsSMSPresent(SMS_ALL);
  if(pos){
    sms.GetSMS(pos,n,smsbuffer,100);
 
    if(!strcmp(smsbuffer,"monitor")){
      sms.SendSMS(n,string);
    }
    if(!strcmp(smsbuffer,"Monitor")){
      sms.SendSMS(n,string);
    }

    delsms();
  }
 }
  delay(100);


}


void gpsdump(TinyGPS &gps)
{

  gps.get_position(&lat, &lon, &age);
  Serial.print("Lat/Long(10^-5 deg): "); Serial.print(lat); Serial.print(", "); Serial.print(lon);
  Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms.");
 
  gps.f_get_position(&flat, &flon, &age);
  Serial.print("Lat/Long(float): "); printFloat(flat, 5); Serial.print(", "); printFloat(flon, 5);
    Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms.");

  lcd.setCursor(0,0);
  lcd.print("LAT:");
  lcd.print(flat, 5);
  
  lcd.setCursor(0,1);
  lcd.print("LONG:");
  lcd.print(flon, 5);
 
}


void printFloat(double number, int digits)
{
  // Handle negative numbers
  if (number < 0.0)
  {
     Serial.print('-');
     number = -number;
  }

  // Round correctly so that print(1.999, 2) prints as "2.00"
  double rounding = 0.5;
  for (uint8_t i=0; i<digits; ++i)
    rounding /= 10.0;
 
  number += rounding;

  // Extract the integer part of the number and print it
  unsigned long int_part = (unsigned long)number;
  double remainder = number - (double)int_part;
  Serial.print(int_part);

  // Print the decimal point, but only if there are digits beyond
  if (digits > 0)
    Serial.print(".");

  // Extract digits from the remainder one at a time
  while (digits-- > 0)
  {
    remainder *= 10.0;
    int toPrint = int(remainder);
    Serial.print(toPrint);
    remainder -= toPrint;
  }
}



void delsms()
{
  for (int i=0; i<10; i++)
  {
      int pos=sms.IsSMSPresent(SMS_ALL);
      if (pos!=0)
      {
        if (sms.DeleteSMS(pos)==1){}else{}
      }
  }
}




j. Program Bascom AVR

$regfile = "m8def.dat"
$crystal = 12000000
$baud = 9600


Ddrc = &B11111111

Portc.5 = 1

Dim Perintah As String * 10

Cls
Cursor Off

Do

Perintah = Waitkey()

Select Case Perintah

    Case "a" :
    Portc.5 = 0

    Case "b" :
    Portc.5 = 1

  End Select

Loop





k. Program Android







l. VIDEO HASILNYA