Translate

Mengakses PN532 RFID NFC Mifare Reader Dengan ARDUINO

Mengakses PN532 RFID NFC Mifare Reader Dengan ARDUINO


         Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara mengakses RFID Reader atau NFC / Mifare card PN532 menggunakan Arduino, pada penjelasan kali ini saya hanya menjelaskan bagaimana cara mengaksesnya saja dan bagaimana program yang tepat untuk membuat alatnya. jadi sistem kerjanya yaitu ada mifare card atau NFC yang mana akan dibaca datanya oleh PN532 yang kemudian datanya akan dikirm ke komputer melalui serial port. berikut adalah skema dan programnya.





a. Arduino Mega





b. Reader PN532 







c. Program Arduino IDE

 #include <Wire.h>
//#include <Adafruit_NFCShield_I2C.h>
#include <SPI.h>
#include <Adafruit_PN532.h>

// If using the breakout with SPI, define the pins for SPI communication.
#define PN532_SCK  (2)
#define PN532_MOSI (3)
#define PN532_SS   (4)
#define PN532_MISO (5)

#define IRQ   (2)
#define RESET (3)

Adafruit_PN532 nfc(PN532_SCK, PN532_MISO, PN532_MOSI, PN532_SS);

//Adafruit_NFCShield_I2C nfc(IRQ, RESET);

void setup(void) {
  Serial.begin(115200);
  nfc.begin();

  uint32_t versiondata = nfc.getFirmwareVersion();
  if (! versiondata) {
    Serial.print(">Didn't find PN53x board, please close and open serial monitor. If problem still exist please check your wiring");
    while (1); // halt
  }
 
  // Got ok data, print it out!
  Serial.print(">Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX);
  Serial.print(">Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC);
  Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);
 
  // Set the max number of retry attempts to read from a card
  // This prevents us from waiting forever for a card, which is
  // the default behaviour of the PN532.
  //nfc.setPassiveActivationRetries(0xFF);
 
  // configure board to read RFID tags
  nfc.SAMConfig();
  
  //Serial.println("Waiting for an ISO14443A card");
}

void loop(void) {
  boolean success;
  uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 };  // Buffer to store the returned UID
  uint8_t uidLength;                        // Length of the UID (4 or 7 bytes depending on ISO14443A card type)
 
  // Wait for an ISO14443A type cards (Mifare, etc.).  When one is found
  // 'uid' will be populated with the UID, and uidLength will indicate
  // if the uid is 4 bytes (Mifare Classic) or 7 bytes (Mifare Ultralight)
  success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength);
 
  if (success) {
    //Serial.println("Found a card!");
    //Serial.print("UID Length: ");Serial.print(uidLength, DEC);Serial.println(" bytes");
    //Serial.print("UID Value: ");
    nfc.PrintHex(uid, uidLength);
    uint8_t keya[6] = { 0xD3, 0xF7, 0xD3, 0xF7, 0xD3, 0xF7 };
    success = nfc.mifareclassic_AuthenticateBlock(uid, uidLength, 4, 0, keya);
    //if (success)
    //{
    //  Serial.println("Authentication work");
    //}
    //uint8_t data[16];
    uint8_t data[16];
    success = nfc.mifareclassic_ReadDataBlock(4, data);
    //success = nfc.mifareultralight_ReadPage (32, data);
    nfc.PrintHexChar(data, 16);
    // Wait 1 second before continuing
    delay(1000);
  }

}





d. VIDEO HASILNYA









 

Membuat Alat Monitor Ketinggian Badan Menggunakan Sensor Jarak PING dan OUTPUT Suara ISD1420

Membuat Alat Monitor Ketinggian Badan Menggunakan Sensor Jarak PING dan OUTPUT Suara ISD1420 ARDUINO


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang digunakan untuk mengukur jarak atau tinggi badan seseorang dengan menggunakan sensor jarak PING))) dan output suara ISD1420. jadi alat ini dilengkapi dengan dua buah interface pemberitahuan, yaitu pada tampilan lcd dan output suara. sehinga jika orang yang tuna netra dia akan mengetahui berapa tinggi badannya tanpa harus melihat di layar LCD. untuk lebih jelasnya berikut adalah skema dan programnya.




a. Minimum System ATMega32 + Skema






b. Modul ISD1420





c. Sensor Jarak PING)))






d. LCD 16x2






e. Program Bascom AVR

$regfile = "m32def.dat"
$crystal = 16000000

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

Config Timer1 = Timer , Prescale = 64

Declare Sub Regratusan
Declare Sub Regpuluhan
Declare Sub Regsatuan
Declare Sub Belakang

Sigout Alias Portb.0
Sigin Alias Pinb.0
Dirsig Alias Ddrb.0

Dim Data_timer As Integer
Dim Tinggi As Integer
Dim Ratusan As Integer
Dim Puluhan As Integer
Dim Satuan As Integer
Dim Temp As Integer


Dim A As Integer
Dim X As Integer
A = 0
X = 350

Ddrb.3 = 1
Ddrb.1 = 0
Portb.1 = 1

Ddra = &B11111111

Cls
Cursor Off


Do

Gosub Ambil_datatimer
Data_timer = Data_timer / 10

Tinggi = 200 - Data_timer

If Tinggi > 200 Then
Tinggi = 200
End If

If Tinggi < 1 Then
Tinggi = 0
End If

Locate 1 , 1
Lcd "Tinggi = " ; Tinggi ; " cm    "


Waitms 100

Temp = Tinggi
'Mencari angka Ratusan
Ratusan = Temp / 100
'Mencari angka Puluhan
Temp = Temp Mod 100
Puluhan = Temp / 10
'Mencari angka Satuan
Satuan = Temp Mod 10


'Locate 2 , 1
'Lcd Ratusan

'Locate 2 , 4
'Lcd Puluhan

'Locate 2 , 7
'Lcd Satuan


If Pinb.1 = 0 Then
Wait 1

Porta = 130
Portb.3 = 0
Waitms X
Portb.3 = 1
Waitms X


If Ratusan = 1 Then
A = 0
Call Regratusan

Elseif Ratusan = 2 Then
A = 160
Call Regratusan

Elseif Ratusan = 3 Then
A = 170
Call Regratusan

Elseif Ratusan = 4 Then
A = 40
Call Regratusan

Elseif Ratusan = 5 Then
A = 50
Call Regratusan

Elseif Ratusan = 6 Then
A = 60
Call Regratusan

Elseif Ratusan = 7 Then
A = 70
Call Regratusan

Elseif Ratusan = 8 Then
A = 80
Call Regratusan

Elseif Ratusan = 9 Then
A = 90
Call Regratusan

End If


If Puluhan = 1 And Satuan = 1 Then
Porta = 0
Portb.3 = 0
Waitms X
Portb.3 = 1
Waitms X


Porta = 120
Portb.3 = 0
Waitms X
Portb.3 = 1
Waitms X


Elseif Puluhan = 1 And Satuan = 0 Then
Porta = 0
Portb.3 = 0
Waitms X
Portb.3 = 1
Waitms X


Porta = 110
Portb.3 = 0
Waitms X
Portb.3 = 1
Waitms X


Elseif Puluhan = 2 Then
A = 160
Call Regpuluhan

Elseif Puluhan = 3 Then
A = 170
Call Regpuluhan

Elseif Puluhan = 4 Then
A = 40
Call Regpuluhan

Elseif Puluhan = 5 Then
A = 50
Call Regpuluhan

Elseif Puluhan = 6 Then
A = 60
Call Regpuluhan

Elseif Puluhan = 7 Then
A = 70
Call Regpuluhan

Elseif Puluhan = 8 Then
A = 80
Call Regpuluhan

Elseif Puluhan = 9 Then
A = 90
Call Regpuluhan

End If

If Satuan = 1 And Puluhan <> 1 Then
A = 10
Call Regsatuan

Elseif Satuan = 2 Then
A = 160
Call Regsatuan

Elseif Satuan = 3 Then
A = 170
Call Regsatuan

Elseif Satuan = 4 Then
A = 40
Call Regsatuan

Elseif Satuan = 5 Then
A = 50
Call Regsatuan

Elseif Satuan = 6 Then
A = 60
Call Regsatuan

Elseif Satuan = 7 Then
A = 70
Call Regsatuan

Elseif Satuan = 8 Then
A = 80
Call Regsatuan

Elseif Satuan = 9 Then
A = 90
Call Regsatuan

End If

If Puluhan = 1 And Satuan <> 0 And Satuan <> 1 Then
Porta = 120
Portb.3 = 0
Waitms X
Portb.3 = 1
Waitms X

End If

Porta = 150
Portb.3 = 0
Waitms X
Portb.3 = 1
Waitms X

Waitms 500

End If

Loop


Ambil_datatimer:
Dirsig = 1
Set Sigout
Waitus 10
Reset Sigout

Dirsig = 0
Set Sigout
Bitwait Sigin , Set
Data_timer = 0
Timer1 = 0
Start Timer1
Do
If Sigin = 0 Then
Data_timer = Timer1
Stop Timer1
Exit Do
End If
If Tifr.2 = 1 Then
Stop Timer1
Tifr.2 = 1
Data_timer = 0
Exit Do
End If
Loop
Stop Timer1
Return





Sub Regratusan:
Portb.3 = 1
Porta = A
Portb.3 = 0
Waitms X
Portb.3 = 1
Waitms X

Porta = 100
Portb.3 = 0
Waitms X
Portb.3 = 1
Waitms X

End Sub
Return





Sub Regpuluhan:

Porta = A
Portb.3 = 0
Waitms X
Portb.3 = 1
Waitms X


Porta = 110
Portb.3 = 0
Waitms X
Portb.3 = 1
Waitms X


End Sub
Return


Sub Regsatuan:
Porta = A
Portb.3 = 0
Waitms X
Portb.3 = 1
Waitms X


End Sub
Return







f. VIDEO HASILNYA











Membuat Alat Pengukur Tegangan dan Arus AC serta Frequency 50 Hz

Membuat Alat Pengukur Tegangan dan Arus AC serta Frequency 50 Hz


       Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang digunakan untuk mengukur tegangan dan arus AC serta frequency 50 Hz, alat ini menggunakan sensor tegangan AC satu fasa zmpt101b dan sensor arus WCS1700, untuk sensor Frequency menggunakan Trafo step down dan voltage divider agar output menjadi 5v AC. untuk lebih jelasnya berikut adalah program dan skemanya. 




a. Arduino Mega





b. Sensor Tegangan AC ZMPT101B





c. Sensor Arus WCS1700





d. Sensor Frequency






e. Program Arduino IDE

#include "Wire.h"
#include <LiquidCrystal.h>
LiquidCrystal lcd(19, 18, 17, 16, 15, 14);

int input=5;        //pin yang digunakan adalah pin digital 5
//untuk di arduino mega disediakan khusus pin 5 & 6
int high_time;
int low_time;
float time_period;
float frequency;
float teta = 8.10961446;

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 = 0;

void setup()
{
 
  // 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

 lcd.begin(16, 2);
 lcd.clear();
 lcd.noCursor();

 Serial.begin(9600);
 pinMode(input,INPUT);

}

void loop()
{
   
  //tegangan AC =============================
  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 teg = 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();
  }

 int arus = z;
 z = 0;

high_time=pulseIn(input,HIGH);
low_time=pulseIn(input,LOW);
time_period=high_time+low_time;
time_period=time_period/1000;
frequency=1000/time_period;
//////=============////////

 float arusx = (arus - 524.0) / 33.33;
 float tegx = (teg - 525.0) / 0.882;

if(arusx < 0){
arusx = 0.0;
}

if(tegx < 0){
tegx = 0.0;
}

float cosphi = 4 / (tegx * arusx);

float p = arusx * tegx * cosphi;
float a = p / (2 * 3.14 * frequency * tegx * tegx);
float b = tan(teta) * p / (2 * 3.14 * frequency * tegx * tegx);
float tetal = acos(cosphi);
float c = a * tan(tetal) - b;

  lcd.setCursor(0, 0);
  lcd.print("V= ");
  lcd.print(tegx);
  lcd.print(" ");
  lcd.setCursor(0, 1);
  lcd.print("I= ");
  lcd.print(arusx);
  lcd.setCursor(8, 0);
  lcd.print("F= ");
  lcd.print(frequency);
  lcd.setCursor(8, 1);
  lcd.print("C= ");
  lcd.print(cosphi);

delay(200);
delay(5000);

  lcd.clear();
 
  lcd.setCursor(0, 0);
  lcd.print("P= ");
  lcd.print(p);
  lcd.print(" ");
  lcd.setCursor(0, 1);
  lcd.print("a= ");
  lcd.print(a);
  lcd.setCursor(8, 0);
  lcd.print("b= ");
  lcd.print(b);
  lcd.setCursor(8, 1);
  lcd.print("T= ");
  lcd.print(tetal);

  delay(5000);

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("C= ");
  lcd.print(c);
 
  delay(5000);
  lcd.clear();
 
}
 
 


f. VIDEO HASILNYA















Membuat Alat Kontrol Angle Servo Menggunakan PID Control ARDUINO

Membuat Alat Kontrol Angle Servo Menggunakan PID Control ARDUINO


         Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat untuk kendali angle servo dengan menggunakan PID Control sebagai penentu arah sudutnya. aplikasi dari alat ini bisa untuk buka tutup tempat sampah otomatis atau buka tutup pintu otomatis, prinsip kerjanya yaitu menggunakan sensor jarak SRF04 dan aktuatornya berupa servo, semakin dekat jaraknya maka servo akan semakin membuka / menutup atau menuju ke sudut tertentu yang telah diprogram menggunakan PID. untuk lebih jelasnnya berikut adalah skema dan programnya. 




a. Arduino UNO





b. Sensor Jarak SRF04





c. Motor Servo






d. Program Arduino IDE

#include <Servo.h>

#define trigPin 10
#define echoPin 11

Servo myservo;

int sp = 90;

float kp = 1.18;
float ki = 0.67;
float kd = 0.15;

float p,i,d,suhu,pid,pidx;
float error,errorx,sumerr;
long duration, distance;

void setup() {
  myservo.attach(9);
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  }

void loop() {

  error = sp - distance;
  p = error * kp;
  sumerr = error + errorx;
  i = ki * sumerr;
  d = error - errorx;
  pid = p + i + d;
  pid = 250.0 - pid;
 
  pidx = sp - pid;
 
  myservo.write(pidx);

  if(pidx < 1){
  pidx = 0;
  }
 
  if(pidx > 250){
  pidx = 250;
  }


  digitalWrite(trigPin, LOW);  // Added this line
  delayMicroseconds(2); // Added this line
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
  Serial.print(distance);
  Serial.println(" cm");
  Serial.print("PID= ");
  Serial.println(pidx);
  delay(200);

 errorx = error;

}





e. VIDEO HASILNYA











Membuat Alat Kendali Lampu dan Kipas ON/OFF Menggunakan Sensor PIR dan Suhu LM35

Membuat Alat Kendali Lampu dan Kipas ON/OFF Menggunakan Sensor PIR dan Suhu LM35


          Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat dengan menggunakan sensor gerakan atau manusia yaitu PIR dan sensor suhu LM35, jadi prinsip kerja alat ini yaitu ketika ada orang masuk maka lampu akan menyala secara otomatis kemudian jika suhu yang dideteksi didalam ruangan lebih dari 28 derajat celcius maka kipas akan menyala secara otomatis, kemudian jika suhu sudah 16 derajat celcius maka kipas akan mati sendiri, mikrokontroller yang digunakan yaitu Arduino Uno dan kendalinya menggunakan relay. untuk lebih jelasnya berikut adalah skema dan programnya.




a. Arduino Uno + Skema






b. Sensor Gerakan PIR





c. Sensor Suhu LM35






d. Relay






e. Program Arduino IDE

float suhu;
int pir;
int dataadc;

int lampu = 2;
int ac = 3;
int x = 0;

void setup(){
Serial.begin(9600);
pinMode(lampu,OUTPUT);
pinMode(ac,OUTPUT);
pinMode(4,INPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
}


void loop(){

  dataadc = analogRead(A5);
  suhu = dataadc*(5.0 /1023.0)*100.0;
 
  pir = digitalRead(4);
 
  if((pir == 1)&&(x == 0)){
  digitalWrite(lampu,HIGH);
  digitalWrite(9,HIGH);
  delay(5000);
  pir = 0; 
  x = 1;
  }
 
  if((pir == 1)&&(x == 1)){
  digitalWrite(lampu,LOW);
  digitalWrite(ac,LOW);
  digitalWrite(8,LOW);
  digitalWrite(9,LOW);
  delay(5000);
  pir = 0;
  x = 0;
  }
   
  Serial.println("Suhu= ");
  Serial.println(suhu);
  Serial.println("PIR= ");
  Serial.println(pir);
 
  if((suhu >= 28)&&(x == 1)){
  digitalWrite(ac,HIGH);
  digitalWrite(8,HIGH);
  }
 
  if((suhu <= 16)&&(x == 1)){
  digitalWrite(ac,LOW);
  digitalWrite(8,LOW);
  }
   
  delay(200);
 
}





f. VIDEO HASILNYA











Membuat Alat Ball dan Beam atau Jungkat-jungkit (Alat Untuk Memposisikan Bola Pada Titik Tertentu) Otomatis Menggunakan ARDUINO dan PID Control untuk Balancer

Membuat Alat Ball dan Beam atau Jungkat-jungkit (Alat Untuk Memposisikan Bola Pada Titik Tertentu) Otomatis Menggunakan ARDUINO dan PID Control untuk Balancer


      Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang menggunakan arduino sebagai controllernya untuk alat Ball and Beam atau jungkat jungkit otomatis untuk menstabilkan atau memposisikan bola pada ttitik tertentu, metode program yang digunakan adalah PID Control dengan sensor yang dipakai adalah sensor jarak. kemudian penggeraknya menggunakan motor servo. yang perlu sekali diperhatikan dalam pembuatan alat ini yaitu bola yang digunakan, gunakanlah bola yang bertekstur tidak kasar mudah menggelinding dan sensitif terhadap kemiringan, maka alat ini akan bekerja secara efektif. untuk lebih jelasnya berikut adalah program dan skemanya.




a. Arduino UNO





 b. Motor Servo





c. Sensor Jarak HC-SRF 04






d. Program Arduino IDE

#include <Servo.h>

#define trigPin 5
#define echoPin 6

Servo myservo;

int spx = 57;
int sp;

float kp = 1.15;
float ki = 0.50;
float kd = 0.15;

float p,i,d,suhu,pid,pidx;
float error,errorx,sumerr;
long duration, distance;

void setup() {
  myservo.attach(9);
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  }

void loop() {
 
  sp = spx * 2;
  error = sp - distance;
  p = error * kp;
  sumerr = error + errorx;
  i = ki * sumerr;
  d = error - errorx;
  pid = p + i + d;
  pid = 255.0 - pid;
 
  pidx = sp - pid;
 
  myservo.write(pidx);

  if(pidx < 1){
  pidx = 0;
  }
 
  if(pidx > 255){
  pidx = 255;
  }


  digitalWrite(trigPin, LOW);  // Added this line
  delayMicroseconds(2); // Added this line
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
  //Serial.print(distance);
  //Serial.println(" cm");
  //Serial.print("PID= ");
  //Serial.println(pidx);
  delay(10);

 errorx = error;

}





e. VIDEO HASILNYA













 

Membuat Alat Kendali Pemanas / Heater Menggunakan PID Control ARDUINO dan Sensor Suhu Thermocouple K

Membuat Alat Kendali Pemanas / Heater Menggunakan PID Control ARDUINO dan Sensor Suhu Thermocouple K 


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang menggunakan kontroller untuk menjaga suhu agar tetap stabil pada suhu tertentu. program yang digunakan oleh kontroller adalah PID sehingga suhu akan tetap terjaga pada set point yang telah diberikan pada program. media yang digunakan untuk kendali tegangan AC adalah TRIAC dan MOC3021 kemudian mikrokontroller yang digunakan adalah Arduino dan sensor yang dipakai adalah thermocouple tipe K. untuk lebih jelasnya berikut adalah skema dan programnya.


   

a. Arduino UNO





b. Heater





c. Sensor Suhu Thermocouple K    





d. Rangkaian Optocoupker TRIAC






e. Program Arduino IDE

#include "Wire.h"
#include <max6675.h>

int thermoDO = 11; //bisa juga S0
int thermoCS = 10;
int thermoCLK = 9; //bisa juga SCK

int led = 8;

MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);

float kp = 2.08;
float ki = 1.67;
float kd = 2.15;

float p,i,d,suhu,pid;
float error,errorx,sumerr;


//set point = 95
float sp = 95.0;

void setup() {

  pinMode(led,OUTPUT);
  Serial.begin(9600);
   
  // wait for MAX chip to stabilize
  delay(500);
}



void loop() {

  float suhu = thermocouple.readCelsius();

  analogWrite(led,pid);

  error = sp - suhu;
  p = error * kp;
  sumerr = error + errorx;
  i = ki * sumerr;
  d = error - errorx;
  pid = p + i + d;
  pid = 255.0 - pid;

  if(pid < 1){
  pid = 0;
  }
   

Serial.println("suhu= ");    
Serial.println(suhu);
Serial.println("pid= ");    
Serial.println(pid);

delay(1000);

errorx = error;

}





f. VIDEO HASILNYA












Membuat Robot Arduino Menggunakan Kendali Accelerometer HP Android Via BLUETOOTH

Membuat Kendali Robot Arduino Menggunakan Accelerometer HP Android Via BLUETOOTH


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah robot beroda yang dapat dikendalikan gerakannya menggunakan handphone android melalui fitur accelerometer, jadi syarat utama yang harus dipunyai oleh handphone adalah fitur sensor accelerometer, robot ini menggunakan Arduino sebagai pengolahan datanya dan juga eksekusi robotnya. handphone android hanya mengirimkan koordinat berupa nilai kemiringan X dan Y saja kemudian kedua nilai tersebut dikirimkan secara bersamaan ke Arduino, Pada Arduino dilakukan parsing data yang mana agar didapatkan nilai X dan Y yang dikirimkan oleh HP melalui bluetooth sehingga setelah data didapat, Arduino langsung akan mengeksekusi kedua motor DC agar dapat berjalan sesuai perintah. untuk lebih jelasnya berkut adalah skema dan programnya.





a. Arduino Uno





b. Driver Motor L298





c. Bluetooth HC-05





d. Motor DC + Gearbox + Roda





e. Handphone + Sensor Accelerometer






f. Program Android








g. Program Arduino IDE

int kiri = 2;
int kiri2 = 3;
int kanan = 4;
int kanan2 = 5;

int pwm1 = 6;
int pwm2 = 7;

int sumbux;
int sumbuy;

String accelero;


void setup() {
Serial.begin(9600);
Serial.setTimeout(5);

pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);

analogWrite(6,250);
analogWrite(7,250);

}

void loop() {

if (Serial.available() > 0)
{
 
  accelero = Serial.readString();

if(accelero.startsWith("X"))
{
   accelero.replace("X", "");
   //Serial.print("X= ");
   //Serial.print(accelero);
   //Serial.print("   "); 
   sumbux = accelero.toInt();
   //Serial.println(sumbux);
  
}

else if(accelero.startsWith("Y"))
{
   accelero.replace("Y", "");
   //Serial.print("Y= ");
   //Serial.print(accelero);
   //Serial.println("   ");  
   sumbuy = accelero.toInt();
   //Serial.println(sumbuy);
}

delay(200);


 if ((sumbux > -15) && (sumbux < 15) && (sumbuy > -15) && (sumbuy < 15))
 {
 //stop
 Serial.println("STOP");
 digitalWrite(kiri, LOW);
 digitalWrite(kiri2, LOW);
 digitalWrite(kanan, LOW);
 digitalWrite(kanan2, LOW);
 }

  if ((sumbux > -10) && (sumbux < 10) && (sumbuy > 20) && (sumbuy < 80))
{
 //mundur
 Serial.println("MUNDUR");
 digitalWrite(kiri, LOW);
 digitalWrite(kiri2, HIGH);
 digitalWrite(kanan, LOW);
 digitalWrite(kanan2, HIGH);
}

  if ((sumbux > 20) && (sumbux < 80) && (sumbuy > -10) && (sumbuy < 10))
 {
 //kiri
 Serial.println("KIRI");
 digitalWrite(kiri, HIGH);
 digitalWrite(kiri2, LOW);
 digitalWrite(kanan, LOW);
 digitalWrite(kanan2, LOW);
 }

  if ((sumbux > -80) && (sumbux < -20) && (sumbuy > -10) && (sumbuy < 10))
 {
 //kanan
 Serial.println("KANAN");
 digitalWrite(kiri, LOW);
 digitalWrite(kiri2, LOW);
 digitalWrite(kanan, HIGH);
 digitalWrite(kanan2, LOW);
 }

   if ((sumbux > -10) && (sumbux < 10) && (sumbuy > -80) && (sumbuy < -20))
 {
 //maju
 Serial.println("MAJU");
 digitalWrite(kiri, HIGH);
 digitalWrite(kiri2, LOW);
 digitalWrite(kanan, HIGH);
 digitalWrite(kanan2, LOW);
 }


}

}







h. VIDEO HASILNYA











Membuat Alat Penghitung Jumlah Barang Menggunakan Barcode Scanner MCR12 dan Barcode ITF14

Membuat Alat Penghitung Jumlah Barang Menggunakan Barcode Scanner MCR12 dan Barcode ITF14


       Pada kesenpatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang fungsinya untuk menghitung jumlah barang menggunakan barcode scanner mcr12 dengan code barcode menggunakan itf14, jadi simulasi yang diberikan disini yaitu terdapat barang dengan kode barcode tertentu yang mana jika terkena scanner maka pada tampilan layar lcd akan terlihat jumlah barang yang telah terdeteksi, jadi apapun barcodenya jika dia terdeteksi oleh scanner maka akan dilakukan penjumlahan. untuk lebih jelasnya berikut adalah program dan skemanya.




a. Arduino Mega





b. Barcode Scanner MCR12





c. Rangkaian RS232





d. Barcode ITF14





e. LCD 16x2






f. Program Arduino IDE

#include <Wire.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(11, 12, 4, 5, 6, 7);

String inputString = "";         // a string to hold incoming data
boolean stringComplete = false;  // whether the string is complete
String barcode;
int jumlah = 0;

void setup() {
  lcd.begin(16, 2);
  lcd.clear();
  lcd.noCursor();
 
  pinMode(9,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(10,OUTPUT);
   
  Serial.begin(9600);
  inputString.reserve(200);
}

void loop() {
 
  digitalWrite(8,HIGH);
  digitalWrite(10,LOW);
  analogWrite(9,50);
 
  lcd.setCursor(0, 0);
  lcd.print("JUMLAH= ");
  lcd.print(jumlah);

  if (stringComplete) {
    Serial.println(inputString);
    barcode = inputString.substring(0,14);
    lcd.setCursor(0, 1);
    lcd.print(barcode);
    delay(1000);
    lcd.setCursor(0, 1);
    lcd.print("                ");
    jumlah++;   
    inputString = "";
    stringComplete = false;
  
  }
}


void serialEvent() {
  while (Serial.available()) {
    char inChar = (char)Serial.read();
    inputString += inChar;
    if (inChar == '\n') {
      stringComplete = true;
    }
  }
}






g. VIDEO HASILNYA