Translate

Membuat Lampu DIMMER Menggunakan Solid State Relay (SSR) dengan Penampil OLED LCD128x64 dan Kendali SLIDER POTENSIO ARDUINO

Membuat Lampu DIMMER Menggunakan Solid State Relay (SSR) dengan Penampil OLED LCD 128x64 dan Kendali SLIDER POTENSIO ARDUINO


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat alat yang digunakan untuk DIMMER lampu menggunakan ARDUINO dan PWM. device kendali tegangan AC yang digunakan adalah solid stste relay (SSR) maksimal arus 2A dan pengatur PWM menggunakan analog slider potensio yang mana cara kerja slider potensio ini sama seperti potensio putar namun yang membedakan yaitu jika potensio biasa itu diputar untuk merubah resistansinya, kalau slider potensio dengan digeser ke atas atau ke bawah untuk merubah resistansinya. mikrokontroller yang digunakan adalah Arduino. penampil nilai PWM dan ADC nya menggunakan LCD OLED 128x64. pada percobaan kali ini menggunakan frekuensi PWM 20 KHz. untuk lebih jelasnya berikut skema dan programnya.




a. Arduino UNO





b. Solid State Relay (SSR)






c. Analog Slider Potensio





d. LCD OLED 128x64






e. Program Arduino IDE

#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK);  
#include <PWM.h>

//use pin 11 on the Mega instead, otherwise there is a frequency cap at 31 Hz
int led = 9;                // the pin that the LED is attached to
//int brightness = 0;         // how bright the LED is
//int fadeAmount = 125;         // duty cycle
int32_t frequency = 20000; //frequency (in Hz)

int x;
char tmp_string1[8];
char tmp_string2[8];
int dataadc;
int z;


void draw(void) {

  //float dua angka dibelakang koma
  itoa(z, tmp_string1, 8);
  itoa(dataadc, tmp_string2, 8);
 
  // graphic commands to redraw the complete screen should be placed here
  u8g.setFont(u8g_font_unifont);
  //u8g.setFont(u8g_font_osb21);
  u8g.drawStr(0, 22, "Intensitas= ");
  u8g.drawStr(0, 50, tmp_string1);
  u8g.drawStr(60, 50, tmp_string2);

}

void setup(void) {
 
  //initialize all timers except for 0, to save time keeping functions
  InitTimersSafe();
  Serial.begin(9600);
  //sets the frequency for the specified pin
  bool success = SetPinFrequencySafe(led, frequency);

  //if the pin frequency was set successfully, turn pin 13 on
  if(success) {
    pinMode(13, OUTPUT);
    digitalWrite(13, HIGH);  
  }


  if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
    u8g.setColorIndex(255);     // white
  }
  else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
    u8g.setColorIndex(3);         // max intensity
  }
  else if ( u8g.getMode() == U8G_MODE_BW ) {
    u8g.setColorIndex(1);         // pixel on
  }
  else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
    u8g.setHiColorByRGB(255,255,255);
  }
}

void loop(void) {
 
 dataadc = analogRead(A0);

// nilai 1777 maks adc sensor, nilai 0 min adc sensor 
// akan dirubah ke range 0 - 255 , min 0 dan maks 255
 z = map(dataadc, 0, 1777, 0, 255);
     
 pwmWrite(led, z);

  // picture loop
  u8g.firstPage();
  do {
    draw();
  } while( u8g.nextPage() );

  // rebuild the picture after some delay
  delay(500);
}




f. VIDEO HASILNYA













Mengakses Motor Stepper Menggunakan Arduino

Mengakses Motor Stepper Menggunakan Arduino


        Pada kesempatan ini saya akan menjelaskan mengenai bagaimana cara untuk mengendalikan motor steper dengan menggunakan Arduino, jadi ada 2 hal yang bisa dilakukan oleh Arduino terhadap motor stepper yaitu yang pertama adalah kendali kecepatan putarannya dan yang kedua adalah kendali arah putarannya,  jadi Arduino dapat mengendalikan dua buah opsi tersebut. aplikasi alat ini yaitu untuk buka tutup pintu atau pagar, untuk konveyor dan lain sebagainya. yang perlu diperhatikan yaitu konsumsi arus dari motor stepper dan juga konsumsi dayanya, karena jika supply tidak mencukupi kebutuhan tegangan dan arus motor maka akan terjadi drop tegangan. untuk lebih jelasnya berikut adalah skema dan penjelasan programnya.




a. Arduino UNO





b. Skema Motor Stepper Unipolar





c. Skema Motor Stepper Bipolar





d. Motor Stepper dan Driver ULN2003






e. Program Arduino IDE

#include <Stepper.h>

const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution
// for your motor

int speedstep = 0;
int stepCount = 0;  // number of steps the motor has taken

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 2, 3, 4, 5);

void setup() {

}

void loop() {
  //kecepatan putaran 0 - 1023
  speedstep = 900;
 
  // map it to a range from 0 to 100:
  int motorSpeed = map(speedstep, 0, 1023, 0, 100);
 
  // set the motor speed:
  if (motorSpeed > 0) {
    myStepper.setSpeed(motorSpeed);
   
    // step 1/100 of a revolution:
    //cw
    myStepper.step(stepsPerRevolution / 100);
   
    //ccw
    //myStepper.step(-stepsPerRevolution / 100);
   
  }
}




f. Program Arduino Tanpa Library

//sesuaikan dengan PIN yang dipasang
int IN1=8;
int IN2=9;
int IN3=10;
int IN4=11;
int step = 100;
int delaytime=40; //makin kecil delay, makin cepat motor berputar

void setup(){
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
}

void loop(){
//maju 60;
for (int i=0; i<60; i++){
maju();
}
}

void maju(){
//step 4
step1();
delay(delaytime);
//step 3
step2();
delay(delaytime);
//step 2
step3();
delay(delaytime);
//step 1
step4();
delay(delaytime);
}

void mundur(){
//step 4
step4();
delay(delaytime);
//step 3
step3();
delay(delaytime);
//step 2
step2();
delay(delaytime);
//step 1
step1();
delay(delaytime);
}

void step1(){
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,HIGH);
}
void step2(){
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
}
void step3(){
digitalWrite(IN1,HIGH);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
}
void step4(){
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
}






g. VIDEO HASILNYA














Mengakses RFID RDM6300 / RDM630 dengan Arduino

Mengakses RFID RDM6300 / RDM630 dengan Arduino


       Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara mengakses RFID Reader RDM6300 / RDM630 dengan menggunakan Arduino. modul RFID ini sangatlah mudah sekali diakses dan juga harga yang relatif murah dari pada produk RFID reader lainnya. prinsip kerja dari alat ini sangatlah sederhana yaitu menampilkan kode Tag Card dan mencocokkan ID-nya, jika sama maka akan terdapat tulisan yang telah ditentukan, jika berbeda maka ada tulisan yang telah ditentukan pula. alat ini sangat cocok buat buka-tutup pintu atau mesin absensi karyawan. untuk lebih jelasnya berikut adalah skema dan programnya. 




a. Arduino Uno + Skema






b. RFID Reader RDM6300 / RDM630





c. RFID Tag Card 






d. Program Arduino IDE

//sumber:
//http://h-language.blogspot.co.id/2016/06/rdm6300-125khz-rfid-arduino.html

#include <SoftwareSerial.h>
SoftwareSerial RFID(4, 5); // RX and TX

String Teks;
String NoKartu  ;  //No kartu RFID

void setup()
{
Serial.begin(9600);
RFID.begin(9600);
Serial.println("Dekatkan kartu RFID anda …");

NoKartu="48006B440D"; // Masukkan nomor kartu untuk akses (dalam hexa)
}
boolean state=false;
char c;

void loop()
{
while(RFID.available()>0){

delay(5);
c=RFID.read();
Teks += c;
}
if(Teks.length()>20) Cek();
Teks="";
}

void Cek()
{

Teks=Teks.substring(1,11);
Serial.println("ID Kartu anda : "+Teks);
Serial.println("ID Akses : "+NoKartu);

if(NoKartu.indexOf(Teks)>=0)
Serial.println("Akses diterima, pintu terbuka otomatis …");
else Serial.println("Akses ditolak…");

delay(2000);

Serial.println(" ");

Serial.println("Dekatkan kartu RFID anda …");

}





e. VIDEO HASILNYA














Mengakses Sensor Warna / Color Sensor TCS3200 dengan Arduino Untuk Mendeteksi Warna

Mengakses Sensor Warna / Color Sensor TCS3200 dengan Arduino Untuk Mendeteksi Warna


      Pada tulisan kali ini saya akan menjelaskan mengenai bagaimana cara membuat alat deteksi warna dengan menggunakan sensor warna TCS3200. mikrokontroller yang digunakan adalah Arduino Uno. prinsip kerja dari alat ini hanyalah mengambil data frequency yang dihasilkan oleh sensor, yang mana selanjutnya bisa dilakukan diagnose terhadap warna terkait dengan menggunakan perintah IF dan IF else. untuk lebih jelasnya berikut adalah skema dan programnya. 




a, Arduino Uno





b. Sensor Warna TCS3200




c. Program Arduino IDE

//sumber:
//http://howtomechatronics.com/tutorials/arduino/arduino-color-sensing-tutorial-tcs230-tcs3200-color-sensor/
#define S0 2
#define S1 3
#define S2 4
#define S3 5
#define sensorOut 6
int frequency = 0;


void setup() {
  pinMode(S0, OUTPUT);
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  pinMode(sensorOut, INPUT);
 
  // Setting frequency-scaling to 20%
  digitalWrite(S0,HIGH);
  digitalWrite(S1,LOW);
 
  Serial.begin(9600);
}


void loop() {
  // Setting red filtered photodiodes to be read
  digitalWrite(S2,LOW);
  digitalWrite(S3,LOW);
  // Reading the output frequency
  frequency = pulseIn(sensorOut, LOW);
  // Printing the value on the serial monitor
  Serial.print("R= ");//printing name
  Serial.print(frequency);//printing RED color frequency
  Serial.print("  ");
  delay(100);
  // Setting Green filtered photodiodes to be read
  digitalWrite(S2,HIGH);
  digitalWrite(S3,HIGH);
  // Reading the output frequency
  frequency = pulseIn(sensorOut, LOW);
  // Printing the value on the serial monitor
  Serial.print("G= ");//printing name
  Serial.print(frequency);//printing RED color frequency
  Serial.print("  ");
  delay(100);
  // Setting Blue filtered photodiodes to be read
  digitalWrite(S2,LOW);
  digitalWrite(S3,HIGH);
  // Reading the output frequency
  frequency = pulseIn(sensorOut, LOW);
  // Printing the value on the serial monitor
  Serial.print("B= ");//printing name
  Serial.print(frequency);//printing RED color frequency
  Serial.println("  ");
  delay(100);
}





d. VIDEO HASILNYA














Membuat Radio FM Receiver Menggunakan TEA5767 dan Rotary Encoder ARDUINO

Membuat Radio FM Receiver Menggunakan TEA5767 dan Rotary Encoder ARDUINO


        Pada kesempatan yang berbahagia ditemani hujan lebat mengguyur kali ini, saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yaitu Radio FM Receiver menggunakan Arduino dan pemutar channel frequency menggunakan rotary encoder, alat ini sejatinya adalah radio biasa yang digunakan untuk menangkap frequency radio diudara, yang membuat alat ini berbeda dengan yang lainnya yaitu proses pengolahan data dilakukan oleh arduino dengan bantuan modul FM TEA5767. untuk lebih jelasnya berikut adalah skema dan programnya.




a. Arduino Mega





b. Roraty Encoder





c. Modul Radio FM Receiver TEA5767






d. Program Arduino IDE

#include <Wire.h>
#include <TEA5767Radio.h>

TEA5767Radio radio = TEA5767Radio();

 float channel = 93.0;
 int pinA = 11;  // Connected to CLK on KY-040
 int pinB = 10;  // Connected to DT on KY-040
 int encoderPosCount = 0;
 int pinALast; 
 int aVal;
 boolean bCW;

 void setup() {
  
  Wire.begin(); 
   pinMode (pinA,INPUT);
   pinMode (pinB,INPUT);
   pinALast = digitalRead(pinA);  
   Serial.begin (9600);
 }

 void loop() {
  
   radio.setFrequency(channel); // pick your own frequency
 
   aVal = digitalRead(pinA);
   if (aVal != pinALast){ // Means the knob is rotating

     if (digitalRead(pinB) != aVal) { 
       encoderPosCount ++;
       bCW = true;
       channel = channel + 0.1 ;
     } else {
       bCW = false;
       encoderPosCount--;
       channel = channel - 0.1 ;;
     }
    
     Serial.print ("Rotated: ");
     if (bCW){
       Serial.println ("clockwise");
     }else{
       Serial.println("counterclockwise");
     }
     Serial.print("FM Freqquency: ");
     Serial.println(channel);
    
   }
   pinALast = aVal;
 }





e. Gambar Hasilnya






f. Video Hasilnya















Mengakses GPS EM411 dengan Arduino

Mengakses GPS EM411 dengan Arduino


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara mengakses GPS dengan seri EM41 dengan menggunakan Arduino Mega, alat ini sebenarnya hanya menampilkan data yang dikirimkan oleh GPS ke komputer saja tanpa ada suatu pengolahan seperti parsing data atau karakter, maka dari itu jika menginginkan data seperti latitude dan longitude bisa ambil saja data tersebut dengan menggunakan parsing data pada baris GPGGA atau GPRMC yang ada data long dan lat nya. perlu diperhatikan bahwa GPS memerlukan dua buah GND, maka dari itu hubungkan keduanya ke GND dan juga untuk menyambungkan GPS dengan Arduino Mega menggunakan pin 10 dan 11. untuk lebih jelasnya berikut adalah skema dan programnya.

Link Library
https://github.com/mikalhart/TinyGPSPlus/releases/tag/v0.94b




a. Arduino Mega





b. GPS EM411






c. Program Arduino IDE

#include <SoftwareSerial.h>
#include <string.h>
#include <ctype.h>
#include <Wire.h>

char comandoGPR[7] = "$GPRMC";
int rxPin = 10; // RX PIN
int txPin = 11; // TX TX

SoftwareSerial ss = SoftwareSerial(rxPin, txPin);

void setup() {
  Serial.begin(9600);
  ss.begin(4800);
}

void loop() {
  if (ss.available()){
    char c = ss.read();
    Serial.print(c);
   

  }
}





d. Program Arduino GPS Tampil LCD

#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#include "Wire.h"
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

static const int RXPin = 10, TXPin = 11;
static const uint32_t GPSBaud = 4800;

// The TinyGPS++ object
TinyGPSPlus gps;

// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);

void setup()
{
  lcd.begin(16, 2);
  lcd.clear();
  lcd.noCursor();
  Serial.begin(9600);
  ss.begin(GPSBaud);

}

void loop()
{

  while (ss.available() > 0)
    if (gps.encode(ss.read()))
      displayInfo();

  if (millis() > 5000 && gps.charsProcessed() < 10)
  {
 //   Serial.println(F("No GPS detected: check wiring."));
    while(true);
  }
}

void displayInfo()
{
//  Serial.print(F("Location: "));
  if (gps.location.isValid())
  {
//    Serial.print(gps.location.lat(), 6);
//    Serial.print(F(","));
//    Serial.print(gps.location.lng(), 6);
  }
  else
  {
//    Serial.print(F("INVALID"));
  }

  lcd.setCursor(0, 0);
  lcd.print("LAT= ");
  lcd.print(gps.location.lat(), 6);
  lcd.setCursor(0, 1);
  lcd.print("LNG= ");
  lcd.print(gps.location.lng(), 6);
 
/*
  Serial.print(F("  Date/Time: "));
  if (gps.date.isValid())
  {
    Serial.print(gps.date.month());
    Serial.print(F("/"));
    Serial.print(gps.date.day());
    Serial.print(F("/"));
    Serial.print(gps.date.year());
  }
  else
  {
    Serial.print(F("INVALID"));
  }

  Serial.print(F(" "));
  if (gps.time.isValid())
  {
    if (gps.time.hour() < 10) Serial.print(F("0"));
    Serial.print(gps.time.hour());
    Serial.print(F(":"));
    if (gps.time.minute() < 10) Serial.print(F("0"));
    Serial.print(gps.time.minute());
    Serial.print(F(":"));
    if (gps.time.second() < 10) Serial.print(F("0"));
    Serial.print(gps.time.second());
    Serial.print(F("."));
    if (gps.time.centisecond() < 10) Serial.print(F("0"));
    Serial.print(gps.time.centisecond());
  }
  else
  {
    Serial.print(F("INVALID"));
  }

*/
//  Serial.println();
 
 
}





e. Gambar Hasilnya






f. VIDEO HASILNYA














Mengakses Modul Voice Recognition dengan Arduino (Kendali Alat / Device Menggunakan Perintah Suara)

Mengakses Modul Voice Recognition dengan Arduino (Kendali Alat / Device Menggunakan Perintah Suara)


       Pada kesempatan yang berbahagia, ditengah malam yang sunyi ini saya akan menjelaskan mengenai bagaimana cara mengakses modul voice recognition menggunakan Arduino, jadi prinsip kerja dari alat ini yaitu akan mengendalikan nyala led dengan menggunakan perintah suara, misalnya perintah "SATU" maka akan menghidupkan LED 1, jika perintah "DUA" maka akan menghidupkan LED 2, begitu pula dengan perintah "TIGA" yang mana akan menghidupkan LED 3. yang harus diperhatikan yaitu sebelum dihubungkan ke Arduino, terlebih dahulu masukkan perintah suara yang akan dijadikan perintah untuk kendali dengan menggunakan software dan kabel serial, setelah dilakukan perekaman maka modul VR siap digunakan. untuk lebih jelasnya berikut adalah skema dan programnya.




a. Arduino Mega





b. Modul Voice Recognition (VR)





c. Led warna merah






d. Program Arduino IDE

int ledPin1 = 7;
int ledPin2 = 6;
int ledPin3 = 5;

byte com = 0;

void setup()
{
Serial.begin(9600);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);

delay(2000);
Serial.write(0xAA);
Serial.write(0x37);
delay(1000);
Serial.write(0xAA);
Serial.write(0x21);
}

void loop() // run over and over again
{

while(Serial.available())
{
com = Serial.read();
switch(com)
{
case 0x11:
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, HIGH);
break;

case 0x12:
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, HIGH);
break;

case 0x13:
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, LOW);
break;


}
}

}





e. VIDEO HASILNYA










Mengakses Sensor Non-Contact Temperature (Suhu) MLX90614 Dengan Penampil LCD OLED Display 128x64 ARDUINO

Mengakses Sensor Non-Contact Temperature (Suhu) MLX90614 Dengan Penampil LCD OLED Display 128x64 ARDUINO


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara mengakses sensor yang sangat luar biasa ini yaitu sensor suhu MLX90614, perlu diketahui bahwa sensor ini dapat mendeteksi 2 buah jenis suhu. jenis suhu yang pertama yaitu suhu ambient atau suhu ruangan sekitar, kemudian yang kedua yaitu suhu object yang ada didepan sensor, fungsi yang kedua inilah yang membuat sensor ini dapat dipakai buat pengukuran benda misalnya suhu es batu atau suhu pemanggang / boiler. yang luar biasanya lagi sensor ini dapat mendeteksi suhu object dari jarak > 5 cm, semakin dekat maka akurasinya semakin baik. pada contoh kali ini penampil yang digunakan adalah LCD OLED 128x64 dengan mikrokontroller Arduino. untuk lebih jelasnya berikut adalah penjelasan mengenai skema dan programnya.


 

a. Arduino Mega + Skema






b. Sensor MLX90614 





c. LCD OLED 128x64 Display






d. Program Arduino IDE

#include <Wire.h>
#include <Adafruit_MLX90614.h>

#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK);   
Adafruit_MLX90614 mlx = Adafruit_MLX90614();

int x;
char tmp_string1[8];
char tmp_string2[8];

float suhubenda;
float suhuruangan;

void draw(void) {
 
  //float dua angka dibelakang koma
  dtostrf(suhuruangan, 4, 2, tmp_string1);
  dtostrf(suhubenda, 4, 2, tmp_string2);

 
  // graphic commands to redraw the complete screen should be placed here 
  u8g.setFont(u8g_font_unifont);
  //u8g.setFont(u8g_font_osb21);
  u8g.drawStr(0, 22, "suhu R= ");
  u8g.drawStr(60, 22, tmp_string1);

  u8g.drawStr(0, 50, "suhu B= ");
  u8g.drawStr(60, 50, tmp_string2);
 
}

void setup(void) {

  Serial.begin(9600);

  mlx.begin(); 
 
  if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
    u8g.setColorIndex(255);     // white
  }
  else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
    u8g.setColorIndex(3);         // max intensity
  }
  else if ( u8g.getMode() == U8G_MODE_BW ) {
    u8g.setColorIndex(1);         // pixel on
  }
  else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
    u8g.setHiColorByRGB(255,255,255);
  }
}

void loop(void) {
    
  suhuruangan = mlx.readAmbientTempC();
  suhubenda = mlx.readObjectTempC();
 
  Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempC());
  Serial.print("*C\tObject = "); Serial.print(mlx.readObjectTempC()); Serial.println("*C");

  Serial.println();
 
  // picture loop
  u8g.firstPage(); 
  do {
    draw();
  } while( u8g.nextPage() );
 
  // rebuild the picture after some delay
  delay(500);
}





e. VIDEO HASILNYA













Mengakses Sensor Jarak Infrared Sharp GP2Y0A21 (IR Distance) dan Penampil OLED LCD Display 128x64 ARDUINO

Mengakses Sensor Jarak Infrared Sharp GP2Y0A21 (IR Distance) dan Penampil OLED LCD Display 128x64 ARDUINO


        Pada kesempatan yang berbahagia kali ini saya akan menjelaskan mengenai bagaimana cara mengakses sensor IR Distance yaitu Sharp GP2Y0A21 dan data yang dihasilkan oleh sensor tersebut akan ditampilkan ke LCD OLED Display 128x64 dengan menggunakan mikrokontroller Arduino sebagai pemrosesan datanya. jadi data jarak akan ditampilkan ke layar LCD OLED secara real time, sebenarnya jika menggunakan sensor jarak yang lain juga bisa seperti ultrasonik SRF / PING atau range finder dan lainnya, sensor IR ini menggunakan output berupa tegangan, maka dari itu perlu keahlian didalam mengkalibrasikan antara data analog dengan data jarak terukur. untuk lebih jelasnya berikut adalah skema dan programnya.




a. Arduino Mega + Skema






b. Sensor Jarak Infrared Sharp GP2Y0A21






c. OLED LCD Display 128x64

  



d. Program Arduino IDE Tanpa Library

#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK);  

int x;
char tmp_string[8];
int input = 0;
int distance = 0;

void draw(void) {
 
  itoa(distance, tmp_string, 10);

  // graphic commands to redraw the complete screen should be placed here 
  u8g.setFont(u8g_font_unifont);
  //u8g.setFont(u8g_font_osb21);
  u8g.drawStr(0, 22, "Jarak= ");
  u8g.drawStr(60, 22, tmp_string);

  u8g.drawStr( 0, 50, "YANUAR M");
}

void setup(void) {

  Serial.begin(9600);
 
  if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
    u8g.setColorIndex(255);     // white
  }
  else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
    u8g.setColorIndex(3);         // max intensity
  }
  else if ( u8g.getMode() == U8G_MODE_BW ) {
    u8g.setColorIndex(1);         // pixel on
  }
  else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
    u8g.setHiColorByRGB(255,255,255);
  }
}

void loop(void) {
  
  input = analogRead(A0);
  distance = map(input,512,0,15,150);
  //Serial.println(distance);
 
  // picture loop
  u8g.firstPage(); 
  do {
    draw();
  } while( u8g.nextPage() );
 
  // rebuild the picture after some delay
  delay(200);
}




e. Program Arduino IDE Menggunakan Library

#include <DistanceGP2Y0A21YK.h>

DistanceGP2Y0A21YK Dist;
int distance;

void setup()
{
  Serial.begin(9600);
  Dist.begin(0);
}

void loop()
{
  distance = Dist.getDistanceCentimeter();
  Serial.print("\nDistance in centimers: ");
  Serial.print(distance); 
  delay(500); //make it readable
}





f. Gambar Hasilnya







g. VIDEO HASILNYA



    








Membuat Tundaan / Delay 1 Detik Tepat Menggunakan Timer dan Bascom AVR

Membuat Tundaan / Delay 1 Detik Tepat Menggunakan Timer dan Bascom AVR


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagimana cara membuat sebuah alat dengan tundaan / delay 1 detik menggunakan timer dan bahasa bascom avr. kenapa hal ini dilakukan ? dikarenakan jika menggunakan perintah "wait 1" atau "waitms 1000" seringkali tidak 1 detik dan juga selalu melebihi dari 1 detik, jika dibandingkan dengan counter up stopwatch atau jam maka akan terlihat tingkat akurasi penggunaan perintah tersebut. maka dari itu dipakailah Timer sebagai acuan untuk mendeteksi overflow yang terjadi sehingga tundaan atau delay akan sama dengan 1 detik tepat. untuk lebih jelasnya berikut adalah skema dan programnya.



a. Minimum System + LCD





b. Program Bascom AVR

' program timer1_01.bas
' membuat gelombang kotak frekuensi 50 Hz
'Link Sumber:
'http://agfi.staff.ugm.ac.id/blog/index.php/2012/06/menggunakan-timer1-untuk-tundaan-1-detik-avr/
 
$regfile = "m16def.dat"
$crystal = 11059200 
 
Config Lcdpin = Pin , Rs = Portc.7 , E = Portc.6 , Db4 = Portc.5
Config Lcdpin = Pin , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2
Config Lcd = 16 * 2
 
Config Timer1 = Timer , Prescale = 256
Const Inisial = &H5740 
 
dim x as integer
x = 0
 
On Timer1 Timer1_isr    ' timer0 overflow interrupt

Config Portb = Output

Tcnt1l = Low(inisial)
Tcnt1h = High(inisial)

Enable Timer1           ' enable Ovf0
Enable Interrupts

Do 
upperline
lcd x
 
Loop

End

Timer1_isr:               
   Tcnt1l = Low(inisial)  
   Tcnt1h = High(inisial) 
   Toggle Portb.0          
   incr x
Return






c. Cara Set Parameter Menggunakan KAVRCALC






d. Cara Penggunaan Alat

       Untuk menggunakan alat ini yang pertama yaitu hidupkan minimum system dengan memberikan power supply 12v, kemudian pasang led di PORTB.0, bisa aktif low atau aktif high. jangan lupa kasih resistor 220 ohm terlebih dahulu sebelum menuju ke led. jika berhasil maka led akan berkedip selama satu detik dan akan mati selama satu detik. pada tampilan LCD terlihat nilai up-counter dari variabel X dengan tundaan / delay tepat satu detik, jika ingin diuji maka ambillah stopwatch dan bandingkan keduanya, maka hasilnya akan sama, dan juga bandingkan pula dengan perintah "wait 1" dan "waitms 1000". jika sudah mendapatkan hasilnya jangan lupa koment dibawah blog ini terima kasih. 












Mengakses Sensor tekanan udara MPX 5700DP / MPX 5700AP dan Water Flow Sensor ARDUINO

Mengakses Sensor tekanan udara MPX 5700DP / MPX 5700AP dan Water Flow Sensor ARDUINO


         Pada pagi yang cerah bertabur kilauan cahaya, kali ini saya akan mejelaskan mengenai bagaimana cara membuat sebuah alat yang menggunakan sensor MPX5700DP sebagai tekanan udara dan sensor water flow sebagai kecepatan aliran udara, alat ini menggunakan mikrokontroller Arduino sebagai processor dan pengolahan datanya, kemudian ada LCD display sebagai user interface-nya serta penampil angka hasil pengolahan. aplikasi dari alat ini sangatlah banyak salah satunya sebagai tensi meter atau bisa juga pengukur tekanan udara di paru-paru / tabung gas. untuk merubah parameter satuannya bisa di konversi menggunakan rumus. untuk lebih jelasnya berikut adalah skema dan programnya.




a. Arduino UNO + Skema






b. LCD 16x2





c. Sensor Tekanan MPX5700DP






d. Sensor Water Flow Hall Effect






e. Program Arduino IDE

#include "Wire.h"
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

int x;
float v;
float kpa;

byte sensorInterrupt = 0;  // 0 = digital pin 2
byte sensorPin       = 2;

float calibrationFactor = 4.5;

volatile byte pulseCount;

unsigned int frac;
float flowRate;
unsigned int flowMilliLitres;
float totalMilliLitres;

unsigned long oldTime;


void setup() {
  lcd.begin(16, 2);
  lcd.clear();
  lcd.noCursor();
 
  pinMode(sensorPin, INPUT);
  digitalWrite(sensorPin, HIGH);

  pulseCount        = 0;
  flowRate          = 0.0;
  flowMilliLitres   = 0;
  totalMilliLitres  = 0;
  oldTime           = 0;

  attachInterrupt(sensorInterrupt, pulseCounter, FALLING);

}

void loop() {

  if((millis() - oldTime) > 1000) 
  {

    detachInterrupt(sensorInterrupt);
    flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor;
    oldTime = millis();
    flowMilliLitres = (flowRate / 60) * 1000;
    totalMilliLitres += flowMilliLitres;

/*     
    unsigned int frac;
   
    Serial.print("Flow rate: ");
    Serial.print(int(flowRate));  /
    Serial.print(".");            
    frac = (flowRate - int(flowRate)) * 10;
    Serial.print(frac, DEC) ;     
    Serial.print("L/min");
    Serial.print("  Current Liquid Flowing: ");   
    Serial.print(flowMilliLitres);
    Serial.print("mL/Sec");

    Serial.print("  Output Liquid Quantity: ");          
    Serial.print(totalMilliLitres);
    Serial.println("mL");
*/

    pulseCount = 0;
   
    attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
  }
 
 
  x = analogRead(A0);
  v = x*(5.0/1023.0);
  kpa = ((v/5.0)-0.04)/0.0012858;
  
  lcd.setCursor(0, 0);
  lcd.print("kPa= ");
  lcd.print(kpa);
       
  lcd.setCursor(0, 1);
  lcd.print("ml/s= ");
  lcd.print(flowMilliLitres);
 
  delay(200);
  lcd.clear();
 
}


void pulseCounter()
{
  pulseCount++;
}




f. Merubah satuan sensor tekanan MPX


   v =(float)(Dataadc*5.0)/1023.0      
   kpa = (float)((v / 5)-0.04)/0.0012858
   Psi = (float)(kpa * 0.145)
   mmhg = (float)(kpa * 7.5)





g. VIDEO HASILNYA