Translate

Membuat Celengan / Tabungan Elektronik Menggunakan SERVO, LCD, Keypad Matrik dan Arduino

Membuat Celengan / Tabungan Elektronik Menggunakan SERVO, LCD, Keypad Matrik dan Arduino


            Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat menggunakan Arduino fungsinya untuk menyimpan uang atau seperti halnya celengan elektronik, alat ini dikhususkan untuk orang yang ingin menabung dan tabungannya bisa dipantau dan juga terdapat target tabungan sehingga jika saldo belum melebihi target maka uang tidak bisa diambil karena belum memenuhi target, namun jika telah mencapai target maka uang bisa diambil. pengunci alat ini menggunakan motor servo yang diberikan pengait agar bisa mengunci kotak uang. untuk lebih jelasnya berikut adalah skema dan programnya. 



a.Arduino Uno




b. Keypad Matrik 4x4




c. Motor Servo




d. LCD 16x2





e. Program Arduino IDE

#include <Keypad.h>
#include <Wire.h>
#include <EEPROM.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

char customKey;
const byte ROWS = 4;
const byte COLS = 4;

char keys[ROWS][COLS] = {
{'D', 'C', 'B', 'A'},
{'#', '9', '6', '3'},
{'0', '8', '5', '2'},
{'*', '7', '4', '1'}
};
byte rowPins[ROWS] = {2,3,4,5};
byte colPins[COLS] = {6,7,8,9};

int x = 0;
int nilaisetmax = 0;
int nilai;
int saldox;
int tabungan;
int valuesal;

Keypad customKeypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS);

Servo myservo1;
Servo myservo2;


void setup()
{
  lcd.begin();
  lcd.clear();
  lcd.noCursor();
  myservo1.attach(10);
  myservo2.attach(11);

  myservo1.write(100);
  myservo2.write(100);

}


void loop()
{
  customKey = customKeypad.getKey();

if(x == 0){
  lcd.setCursor(0,0);
  lcd.print("1.SET MAX       ");
}

if(x == 1){
  lcd.setCursor(0,0);
  lcd.print("2.NABUNG        ");
}

if(x == 2){
  lcd.setCursor(0,0);
  lcd.print("3.CEK SALDO     ");
}

if(nilaisetmax >= saldox){
  //myservo1.write(150);
  myservo2.write(150);
}
if(nilaisetmax < saldox){
  //myservo1.write(100);
  myservo2.write(100);
}
 
  switch(customKey)
  {
  case '0' ... '9':
    break;
   
  case '#':
    break;

  case '*':
    break;
 
  case 'A':
  x++; 
    break;
   
  case 'B':
  x--;
    break;
   
  case 'C':
    break;
   
  case 'D':
  if(x == 0){
  lcd.clear();
  nilai = 0; 
  setmax();
  }
  if(x == 1){
  lcd.clear();
  tabungan = 0; 
  nabung();
  }
  if(x == 2){
  lcd.clear();   
  saldo();
  } 
    break;
  }
 
if(x > 2){
x = 0;
}

if(x < 0){
x = 2;
}
 
}

void setmax(){
  lcd.setCursor(0,0);
  lcd.print("SET MAX TABUNGAN     ");

  customKey = customKeypad.getKey();
 
  if(customKey >= '0' && customKey <= '9')
    {
      nilai = nilai * 10 + (customKey - '0');
      lcd.setCursor(0,1);
      lcd.print(nilai);

    }
  
    if(customKey == '*'){
         
      lcd.clear();
      delay(1000);
      nilaisetmax = nilai;     
      x = x + 2;
      return;
    }
   
setmax();
}


void nabung(){
  lcd.setCursor(0,0);
  lcd.print("Nabung Berapa?");
 
  customKey = customKeypad.getKey();
 
  if(customKey >= '0' && customKey <= '9')
    {
      tabungan = tabungan * 10 + (customKey - '0');
      lcd.setCursor(0,1);
      lcd.print(tabungan);
    }
  
    if(customKey == '*'){
      saldox = saldox + tabungan;
      lcd.clear();
        myservo1.write(150);
        //myservo2.write(150);
        lcd.setCursor(0,0);
        lcd.print("Masukkan Uangnya");
      delay(5000);
        myservo1.write(100);
        //myservo2.write(100);
      x++;
      lcd.clear();
      return;
    }

nabung();
}


void saldo(){
  lcd.setCursor(0,0);
  lcd.print("MAX=");
  lcd.print(nilaisetmax);
 
  lcd.setCursor(0,1);
  lcd.print("SLD=");
  lcd.print(saldox);

  customKey = customKeypad.getKey();
  
    if(customKey == '*'){
      lcd.clear();
      delay(1000);
      return;
    }

saldo();
}





f. VIDEO HASILNYA








Jual Komponen Robot Line Tracer / Line Follower

Jual Minimum System ATMega dan Komponen Robot Line Tracer / Line Follower


         Kami menyediakan komponen untuk robotika yang bisa digunakan untuk lomba dan pelatihan robot atau edukasi. komponen robot yang kami sediakan meliputi sensor dan aktuator, robot yang kami buat yaitu line follower / line tracer, robot wall avoider, robot kendali Android HP, Robot kendali remote TV, robot kendali komputer wireless, robot kendali via WI-FI dan lain sebagainya. untuk komponen sensor yang kami sediakan yaitu meliputi:



1. Motor DC + Gearbox + Roda




2. Minimum System ATMega16 / 32 / 8535




3. Sensor Garis / Sensor Cahaya / Sensor Optocoupler




4. Modul Driver Motor L293








5. VIDEO DEMO MINIMUM SYSTEM






6. VIDEO DEMO ROBOT









Mengakses Sensor FLEX dan Sensor FSR (Force Sensitive Resistor) Menggunakan Arduino

Mengakses Sensor FLEX dan Sensor FSR (Force Sensitive Resistor) Menggunakan Arduino


         Pada keempatan kali ini saya akan menjelaskan mengenai bagaimana cara menggunakan sensor flex dan sensor FSR sebagai sensor untuk mendeteksi suatu kondisi menggunakan mikrokontroller Arduino Uno, jadi untuk sensor FSR digunakan ketika ingin mendeteksi berat atau daya dorong suatu benda atau daya tekan suatu peralatan, yang mana sensor FSR ini akan menghasilkan perubahan resistan yang linier sesuai dengan tekanan yang diterima oleh sensor, kemudian untuk sensor flex yaitu digunakan untuk mendeteksi lengkungan suatu objek atau perubahan kondisi dari keadaan semula, misal untuk tangan robot atau kendali robot menggunakan sarung tangan dan lainnya. untuk lebih jelasnya berikut adalah skema dan program.




a. Arduino Uno




b. Sensor Flex dan FSR + Non Inverting Amplifier IC LM324






c. Program Arduino IDE

void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  int sensorValue1 = analogRead(A1);

 
  // print out the value you read:
  Serial.print("FLEX=");
  Serial.print(sensorValue);
  Serial.print(" FSR=");
  Serial.println(sensorValue1);
 
  delay(200);        // delay in between reads for stability
}





d. VIDEO HASILNYA








Cara Mengakses Rotary Encoder Menggunakan Arduino

Cara Mengakses Rotary Encoder Menggunakan Arduino


          Pada kesempatan yang berbahagia kali ini saya akan menjelaskan mengenai bagaimana cara mengakses sebuah rotary encoder modul menggunakan Arduino Uno kemudian nilai step dari rotary encoder ditampilkan pada LCD 16x2. untuk aplikasi dari alat ini sangatlah banyak salah satunya yaitu untuk pengatur nilai suatu parameter seperti volume, batas atas temperature, batas atas nilai sensor dan sebagainya. rotary encoder sejatinya hanyalah switch yang mana jika diputar akan menghasilkan sinyal kotak / square (HIGH - LOW) namun jika tidak diputar maka tidak akan menghasilkan sinyal kotak. untuk lebih jelasnya berikut adalah skema dan programnya.




a. Arduino Uno




b. Rotary Encoder Modul




c. LCD 16x2 + I2C






d. Program Arduino IDE

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


 #define outputA 6
 #define outputB 7

 float counter = 0;
 int aState;
 int aLastState; 

 void setup() {
  
    lcd.begin();
    lcd.noCursor();
    lcd.clear();
   
   pinMode (outputA,INPUT);
   pinMode (outputB,INPUT);
  
   Serial.begin (9600);
   // Reads the initial state of the outputA
   aLastState = digitalRead(outputA);  
 }

 void loop() {
   aState = digitalRead(outputA); // Reads the "current" state of the outputA
   // If the previous and the current state of the outputA are different, that means a Pulse has occured
   if (aState != aLastState){    
     // If the outputB state is different to the outputA state, that means the encoder is rotating clockwise
     if (digitalRead(outputB) != aState) {
       counter = counter + 0.5;
     } else {
       counter = counter - 0.5;
     }
     int counterx = counter;
    
     Serial.print("Position: ");
     Serial.println(counterx);

   lcd.setCursor(0,0);
   lcd.print("STEP=");
   lcd.print(counterx);
   lcd.print("        ");
  
 }   
   aLastState = aState; // Updates the previous state of the outputA with the current state
 }






e. VIDEO HASILNYA









Cara Mengakses Slide Pot (Slider Potensio) Menggunakan Arduino

Cara Mengakses Slide Pot (Slider Potensio) Menggunakan Arduino


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara mengakses sebuah modul sensor mirip seperti potensio putar namun modul ini tidak diputar melainkan digeser, jadi jika digeser akan merubah nilai resistannya yang akan mengakibatkan tegangan output juga akan berubah, range tegangan output yaitu 0 sampai 5 volt dc dan sangat cocok untuk pengatur perubahan nilai seperti halnya volume audio atau setting parameter lain. untuk lebih jelasnya berikut adalah skema dan programnya.




a. Arduino Uno




b. Potensio Slider (Slide Pot)





c. Program Arduino IDE

void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  // print out the value you read:
  Serial.println(sensorValue);
  delay(200);        // delay in between reads for stability
}





d. VIDEO HASILNYA









Cara Mengakses IC 4094 ARDUINO Menampilkan Nilai ADC Pada 7Segment

Cara Mengakses IC 4094 ARDUINO Menampilkan Nilai ADC Pada 7Segment


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara mengakses IC 4094 sebagai driver untuk menampilkan nilai ADC pada 7segment. pada contoh kali ini menggunakan Arduino sebagai mikrokontroller dan pemberi sinyalnya. jadi nanti akan ditampilkan nilai ADC sebanyak 3 digit pada 7segment yang jumlahnya juga 3 pcs. IC 4094 yang dibutuhkan juga harus 3 buah dikarenakan 1 buah IC 4094 bisa mengendalikan 1 buah 7segment. untuk lebih jelasnya berikut adalah skema dan programnya  




a. Arduino UNO




b. Rangkaian Driver 7Segment IC 4094 






c. Program Arduino IDE

byte zero  = B00000011;
byte one   = B10011111;
byte two   = B00100101;
byte three = B00001101;
byte four  = B10011001;
byte five  = B01001001;
byte six   = B01000001;
byte seven = B00011111;
byte eight = B00000001;
byte nine  = B00001001;


    int latchPin = 4;  //Pin connected to STR(pin 1) of HEF4094
    int clockPin = 3; //Pin connected to CP(pin 3) of HEF4094
    int dataPin = 2;  //Pin connected to D(pin 2) of HEF4094
    int oe = 5;  //Pin connected to OE(pin 2) of HEF4094

    int temp;
    int x = 5;
    int y;
   
void setup() {   
      pinMode(latchPin, OUTPUT);
      pinMode(clockPin, OUTPUT);
      pinMode(dataPin, OUTPUT);
      pinMode(oe, OUTPUT);
      //digitalWrite(oe,LOW);
          
      digitalWrite(oe,HIGH);
 
 }
    
void loop()
 {

  int sensorValue = analogRead(A0);
 
  temp = sensorValue;
  int ribuan = temp / 1000;
  temp = temp % 1000;
  int ratusan = temp / 100;
  temp = temp % 100;
  int puluhan = temp / 10;
  int satuan = temp % 10;

 switch(ribuan){
   case 0:
   ribuan = zero;
   break;
   case 1:
   ribuan = one;
   break;
   case 2:
   ribuan = two;
   break;
   case 3:
   ribuan = three;
   break;
   case 4:
   ribuan = four;
   break;
   case 5:
   ribuan = five;
   break;
   case 6:
   ribuan = six;
   break;
   case 7:
   ribuan = seven;
   break;
   case 8:
   ribuan = eight;
   break;
   case 9:
   ribuan = nine;
   break;  
 }



 switch(ratusan){
   case 0:
   ratusan = zero;
   break;
   case 1:
   ratusan = one;
   break;
   case 2:
   ratusan = two;
   break;
   case 3:
   ratusan = three;
   break;
   case 4:
   ratusan = four;
   break;
   case 5:
   ratusan = five;
   break;
   case 6:
   ratusan = six;
   break;
   case 7:
   ratusan = seven;
   break;
   case 8:
   ratusan = eight;
   break;
   case 9:
   ratusan = nine;
   break;  
 }


  
 switch(puluhan){
   case 0:
   puluhan = zero;
   break;
   case 1:
   puluhan = one;
   break;
   case 2:
   puluhan = two;
   break;
   case 3:
   puluhan = three;
   break;
   case 4:
   puluhan = four;
   break;
   case 5:
   puluhan = five;
   break;
   case 6:
   puluhan = six;
   break;
   case 7:
   puluhan = seven;
   break;
   case 8:
   puluhan = eight;
   break;
   case 9:
   puluhan = nine;
   break;  
 }

 switch(satuan){
   case 0:
   satuan = zero;
   break;
   case 1:
   satuan = one;
   break;
   case 2:
   satuan = two;
   break;
   case 3:
   satuan = three;
   break;
   case 4:
   satuan = four;
   break;
   case 5:
   satuan = five;
   break;
   case 6:
   satuan = six;
   break;
   case 7:
   satuan = seven;
   break;
   case 8:
   satuan = eight;
   break;
   case 9:
   satuan = nine;
   break; 
 }

        digitalWrite(latchPin, HIGH); //Pull latch HIGH to send data
        shiftOut(dataPin, clockPin, LSBFIRST, satuan);
        shiftOut(dataPin, clockPin, LSBFIRST, puluhan);
        shiftOut(dataPin, clockPin, LSBFIRST, ratusan);
        digitalWrite(latchPin, LOW); //Pull latch HIGH to send data
        delay(1000);

    }






d. VIDEO HASILNYA











Cara Mengakses IC 74164 ARDUINO Menampilkan Data ADC dan Text Pada 7Segment

Cara Mengakses IC 74164 ARDUINO Menampilkan Data ADC dan Text Pada 7Segment


         Pada kesempatan yang berbahagia kali ini saya akan menjelaskan mengenai bagaimana cara mengakses IC 74164 yang digunakan untuk driver 7segment sehingga 7segment bisa aktif dan menampilkan nilai yang kita inginkan. Pada contoh ini IC 74164 digunakan untuk menampilkan nilai sebanyak 4 digit 7segment dengan dua mode tampilan, mode yang pertama yaitu mode TEXT yang mana menampilkan tulisan "HALO" dan diikuti dengan upcounter 0 sampai 9, kemudian mode kedua yaitu mode menampilkan nilai ADC Arduino mikrokontroller pada 7segment sebanyak 4 digit. untuk lebih jelasnya berikut adalah skema dan programnya.




a. Arduino UNO




b. Rangkaian 7Segment Driver IC 74164





c. Program Arduino IDE Menampilkan TEXT dan UPCOUNTER

 // pin 7 = CP
// pin 6 = DATA A + B
// pin 5 - 2 = switch

#define data 6
#define clock 7

int sw1 = 5;
int sw2 = 4;
int sw3 = 3;
int sw4 = 2;
int count = 0;

byte zero  = B00000011;
byte one   = B10011111;
byte two   = B00100101;
byte three = B00001101;
byte four  = B10011001;
byte five  = B01001001;
byte six   = B01000001;
byte seven = B00011111;
byte eight = B00000001;
byte nine  = B00001001;
byte clrs  = B11111111;

byte h  = B10010001;
byte a  = B00010001;
byte l  = B11100011;

int x = 5;

void setup()
{
  pinMode(clock, OUTPUT);
  pinMode(data , OUTPUT);

pinMode(sw1,OUTPUT);
pinMode(sw2,OUTPUT);
pinMode(sw3,OUTPUT);
pinMode(sw4,OUTPUT);

}

void loop(){

  digitalWrite(sw1,LOW);
  digitalWrite(sw2,LOW);
  digitalWrite(sw3,LOW);
  digitalWrite(sw4,HIGH);
 
    shiftOut(data, clock, LSBFIRST, h);
    delay(x);
//    shiftOut(data, clock, LSBFIRST, clrs);
//    delay(x);
  
  digitalWrite(sw1,LOW);
  digitalWrite(sw2,LOW);
  digitalWrite(sw3,HIGH);
  digitalWrite(sw4,LOW);
 
    shiftOut(data, clock, LSBFIRST, a);
    delay(x);
//    shiftOut(data, clock, LSBFIRST, clrs);
//    delay(x);
  
  digitalWrite(sw1,LOW);
  digitalWrite(sw2,HIGH);
  digitalWrite(sw3,LOW);
  digitalWrite(sw4,LOW);

    shiftOut(data, clock, LSBFIRST, l);
    delay(x);
 //   shiftOut(data, clock, LSBFIRST, clrs);
 //   delay(x);
  
  digitalWrite(sw1,HIGH);
  digitalWrite(sw2,LOW);
  digitalWrite(sw3,LOW);
  digitalWrite(sw4,LOW);

    shiftOut(data, clock, LSBFIRST, zero);
    delay(x);
  
  digitalWrite(sw1,LOW);
  digitalWrite(sw2,LOW);
  digitalWrite(sw3,LOW);
  digitalWrite(sw4,LOW);

   shiftOut(data, clock, LSBFIRST, clrs);
   delay(x);
count++;

if(count > 500){
count = 0;
counter();
}

}



void counter(){

  digitalWrite(sw1,HIGH);
  digitalWrite(sw2,HIGH);
  digitalWrite(sw3,HIGH);
  digitalWrite(sw4,HIGH);
 
    shiftOut(data, clock, LSBFIRST, zero);
    delay(500);
    shiftOut(data, clock, LSBFIRST, one);
    delay(500);
    shiftOut(data, clock, LSBFIRST, two);
    delay(500);
    shiftOut(data, clock, LSBFIRST, three);
    delay(500);
    shiftOut(data, clock, LSBFIRST, four);
    delay(500);
    shiftOut(data, clock, LSBFIRST, five);
    delay(500);
    shiftOut(data, clock, LSBFIRST, six);
    delay(500);
    shiftOut(data, clock, LSBFIRST, seven);
    delay(500);
    shiftOut(data, clock, LSBFIRST, eight);
    delay(500);
    shiftOut(data, clock, LSBFIRST, nine);
    delay(500);
}




d. Program Arduino IDE Menampilkan Nilai ADC Pada 7Segment

#define data 6
#define clock 7

int sw1 = 5;
int sw2 = 4;
int sw3 = 3;
int sw4 = 2;

byte zero  = B00000011;
byte one   = B10011111;
byte two   = B00100101;
byte three = B00001101;
byte four  = B10011001;
byte five  = B01001001;
byte six   = B01000001;
byte seven = B00011111;
byte eight = B00000001;
byte nine  = B00001001;

int temp;
int x = 5;

void setup()
{
  // put your setup code here, to run once:
  pinMode(clock, OUTPUT); // make the clock pin an output
  pinMode(data , OUTPUT); // make the data pin an output3
pinMode(sw1,OUTPUT);
pinMode(sw2,OUTPUT);
pinMode(sw3,OUTPUT);
pinMode(sw4,OUTPUT);

  Serial.begin(9600);
}

void loop()
{
  int sensorValue = analogRead(A0);
 
  temp = sensorValue;
  int ribuan = temp / 1000;
  temp = temp % 1000;
  int ratusan = temp / 100;
  temp = temp % 100;
  int puluhan = temp / 10;
  int satuan = temp % 10;



 switch(ribuan){
   case 0:
   ribuan = zero;
   break;
   case 1:
   ribuan = one;
   break;
   case 2:
   ribuan = two;
   break;
   case 3:
   ribuan = three;
   break;
   case 4:
   ribuan = four;
   break;
   case 5:
   ribuan = five;
   break;
   case 6:
   ribuan = six;
   break;
   case 7:
   ribuan = seven;
   break;
   case 8:
   ribuan = eight;
   break;
   case 9:
   ribuan = nine;
   break;  
 }



 switch(ratusan){
   case 0:
   ratusan = zero;
   break;
   case 1:
   ratusan = one;
   break;
   case 2:
   ratusan = two;
   break;
   case 3:
   ratusan = three;
   break;
   case 4:
   ratusan = four;
   break;
   case 5:
   ratusan = five;
   break;
   case 6:
   ratusan = six;
   break;
   case 7:
   ratusan = seven;
   break;
   case 8:
   ratusan = eight;
   break;
   case 9:
   ratusan = nine;
   break;  
 }


  
 switch(puluhan){
   case 0:
   puluhan = zero;
   break;
   case 1:
   puluhan = one;
   break;
   case 2:
   puluhan = two;
   break;
   case 3:
   puluhan = three;
   break;
   case 4:
   puluhan = four;
   break;
   case 5:
   puluhan = five;
   break;
   case 6:
   puluhan = six;
   break;
   case 7:
   puluhan = seven;
   break;
   case 8:
   puluhan = eight;
   break;
   case 9:
   puluhan = nine;
   break;  
 }

 switch(satuan){
   case 0:
   satuan = zero;
   break;
   case 1:
   satuan = one;
   break;
   case 2:
   satuan = two;
   break;
   case 3:
   satuan = three;
   break;
   case 4:
   satuan = four;
   break;
   case 5:
   satuan = five;
   break;
   case 6:
   satuan = six;
   break;
   case 7:
   satuan = seven;
   break;
   case 8:
   satuan = eight;
   break;
   case 9:
   satuan = nine;
   break; 
 }

  digitalWrite(sw1,LOW);
  digitalWrite(sw2,LOW);
  digitalWrite(sw3,LOW);
  digitalWrite(sw4,HIGH);
    shiftOut(data, clock, LSBFIRST, ribuan);
    delay(x);
   
   
  digitalWrite(sw1,LOW);
  digitalWrite(sw2,LOW);
  digitalWrite(sw3,HIGH);
  digitalWrite(sw4,LOW);
    shiftOut(data, clock, LSBFIRST, ratusan);
    delay(x);

  digitalWrite(sw1,LOW);
  digitalWrite(sw2,HIGH);
  digitalWrite(sw3,LOW);
  digitalWrite(sw4,LOW);
    shiftOut(data, clock, LSBFIRST, puluhan);
    delay(x);

  digitalWrite(sw1,HIGH);
  digitalWrite(sw2,LOW);
  digitalWrite(sw3,LOW);
  digitalWrite(sw4,LOW);
    shiftOut(data, clock, LSBFIRST, satuan);
    delay(x);

}





e. VIDEO HASILNYA










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