Minggu, 22 April 2018

Jam digital 4 digit 7 segmen, IC 74HC595 dengan arduino

hai gays....
selamat berjumpa kembali di tutorial microcontroler dan robotika.
Pada kesempatan kali ini kita akan memberikan tutorial untuk jam digital 7 segmen menggunakan ic 74HC595 dengan program arduino...
Sebenarnya bisa juga sih tidak mempergunakan ic 74HC595 untuk 7 segmennya, tapi berhubung di google sangat jarang sekali postingan mempergunakan ic 74HC595 untuk shifregiter 7 segmen an demi menghemat pin arduino makanya saya share ne cara bikin jam digital menggunakan 7 segmen engan ic shifregiter 74HC595.

Ok cuy dari pada basa-basinya terlalu panjang mari kita lanjutkan tutorialnya

1. siapkan bahan yang akan digunakan seperti di bawah ini :

  • Arduino
  • 7 segment
  • IC 74HC595
  • RTC ds1307
  • dan resistor
Setelah di persiapkan rangkaiannya seperti yang dibawah ini ya :




Ok lanjutkan listing programnya,
Sebelumnya persiapkan dulu library untuk ds1307  nya ya, kalau ngk punya coment aja dibawah ntr saya kirim librarynya.

ne programnya cuy:

#include <Wire.h>              
#include "RTClib.h"                
                               
const int  Data = 10;      
const int  Latch = 11; 
const int  Clock = 12;     
const int  ledPin = 13;         
RTC_DS1307 RTC;                 

byte g_digits [10];            

int g_numberToDisplay = 0;     

const int g_registers = 4;     

byte g_registerArray [g_registers];

// Begin setup() functions //

void setup()
{
   Wire.begin();
   RTC.begin();
  pinMode (Latch, OUTPUT);      
  pinMode (Clock, OUTPUT);          
  pinMode (Data, OUTPUT);           
  pinMode (ledPin, OUTPUT);             
 
  Serial.begin (9600);                   
  g_digits [0] = 0b01000000;//0
  g_digits [1] = 0b01111001;//1
  g_digits [2] = 0b00100100;//2
  g_digits [3] = 0b00110000;//3
  g_digits [4] = 0b00011001;//4
  g_digits [5] = 0b00010010;//5
  g_digits [6] = 0b00000010;//6
  g_digits [7] = 0b01111000;//7
  g_digits [8] = 0b00000000;//8
  g_digits [9] = 0b00010000;//9
 
  for (int i=0;i<5;i++) {
 
    g_registerArray [0] = g_digits [8];
    g_registerArray [1] = g_digits [8];
    g_registerArray [2] = g_digits [8];
    g_registerArray [3] = g_digits [8];
  
    sendSerialData (g_registers, g_registerArray);
    delay(300);
    
  }
}
void sendSerialData (byte registerCount, byte *pValueArray) {
  digitalWrite (Latch, LOW);
  for (byte reg = registerCount; reg > 0; reg--)
  {
    byte value = pValueArray [reg - 1];
    for (byte bitMask = 128; bitMask > 0; bitMask >>= 1)
    {
      digitalWrite (Clock, LOW);
      digitalWrite (Data, value & bitMask ? HIGH : LOW);
      digitalWrite (Clock, HIGH);
    }
  }
  digitalWrite (Latch, HIGH);
}
void loop()
{
  int hour,minute,sec,disp = 0;
   DateTime now = RTC.now(); 
   hour = now.hour();        
   minute = now.minute();    
   sec = now.second();       

   Serial.print(hour);
   Serial.print(':');
   Serial.print(minute);
   Serial.print(':');   
   Serial.print(sec);
   Serial.println();
  disp = (hour * 100) + minute;
  g_numberToDisplay = disp;
  if (g_numberToDisplay < 10)
  {
    g_registerArray [0] = g_digits [0];
    g_registerArray [1] = g_digits [0];
    g_registerArray [2] = g_digits [0];
    g_registerArray [3] = g_digits [g_numberToDisplay];
  }
  else if (g_numberToDisplay < 100)
  {
    g_registerArray [0] = g_digits [0];
    g_registerArray [1] = g_digits [0];
    g_registerArray [2] = g_digits [g_numberToDisplay / 10];
    g_registerArray [3] = g_digits [g_numberToDisplay % 10];
  }
  else if (g_numberToDisplay < 1000)
  {
    g_registerArray [0] = g_digits [0];
    g_registerArray [1] = g_digits [g_numberToDisplay / 100];
    g_registerArray [2] = g_digits [(g_numberToDisplay % 100) / 10];
    g_registerArray [3] = g_digits [g_numberToDisplay % 10];
  }
  else
  {
    g_registerArray [0] = g_digits [g_numberToDisplay / 1000];
    g_registerArray [1] = g_digits [(g_numberToDisplay % 1000) / 100];
    g_registerArray [2] = g_digits [(g_numberToDisplay % 100) / 10];
    g_registerArray [3] = g_digits [g_numberToDisplay % 10];
  }
  sendSerialData (g_registers, g_registerArray);
  digitalWrite(ledPin,HIGH);
  delay(500);
  digitalWrite(ledPin,LOW);
  delay(500);
}


 kalau rangkaian dan programnya dibikn seperti yang diatas udah pasti jalan jam cuy, atau kalau ada yang bermasalah kalau agan mempraktekannya silahkan coment aja nanti biar saya bantu OK.
Share:

Kamis, 15 Maret 2018

Sistem keamanan menggunakan fringerprin & gps tracker untuk mengakses lokasi

Selamat berjumpa kembali...
Sesuai dengan postingan diatas pada kesempatan kali ini saya akan menjelaskan bagaimana prinsip kerja dari alat ini, kebetulan ada job tugas akhir mahasiswa ilmu komputer yang diaplikasikan sama sistem keamanan kotak amal brow....
Zaman sekarang orang mau maling tu ngk mikrin dosanya kali ya... hahahaha.
Terpaksa deh kotak amal harus dipasangin fringerprint & gps untuk sistem keamanannya biar makin aman dari maling, Tapi maling tu ngk bakalan kehabisan akal brow...
jadi waspada aja deh.

Ok brow udah basa-basinya kita mulai aja.
Persiapkan dulu komponennya seperti yang dibawah ini:
  1.  Arduino Mega 2560
  2. Fringerprint
  3. Modul GPS
  4. Modul GSM
  5. Lcd 20 * 4
  6. Modul Mp3 + Speaker
  7.  Relay 1 Chanel
  8. Door Lock
  9. Stepdown untuk modul gsm untuk mengatur arus 3.7 volt
  10. Button
Rangkaiannya seperti dibawah ini:

Selesai dirangkai saatnya kita program brow...
Sebelumnya persiapkan dulu librarynya, kebetulan saya cuma menggunakan 2 library untuk fringerprint dan modul mp3 aja kalau modul GSM, sama GPSnya saya pake program serial aja jadi ngk usah pake library jadi kalian cari dulu tu library nya di google

Ne programnya brow:

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

int getFingerprintIDez();
SoftwareSerial mySerial(12, 13);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

TinyGPSPlus gps;
double latitude, longitude;
int kunci = 11;
int tombol = 10;

int a = HIGH;
byte stat = 0;


char text[500] = "";
int currentLineIndex = 0;
bool nextLineIsMessage = false;

void Start_sensor()
{
 finger.fingerID = getFingerprintIDez();
 delay(50);
 if(finger.fingerID == 3)
{
  mp3_play (4);
  lcd.clear();
  lcd.setCursor(0,1);
  lcd.print(" SIDIK JARI 1 FALID ");
  lcd.setCursor(0,2);
  lcd.print(" KOTAK AMAL TERBUKA ");
  delay(5000);
  digitalWrite(kunci, LOW);
  delay(10000);
  digitalWrite(kunci, HIGH);
  delay(3000);
  mulai();
}
if(finger.fingerID == 4)
{
  mp3_play (4);
   lcd.clear();
  lcd.setCursor(0,1);
  lcd.print(" SIDIK JARI 2 FALID ");
  lcd.setCursor(0,2);
  lcd.print(" KOTAK AMAL TERBUKA ");
   delay(5000);
  digitalWrite(kunci, LOW);
  delay(10000);
  digitalWrite(kunci, HIGH);
  delay(3000);
  mulai();
}
if(finger.fingerID == 0)
{
  mp3_play (4);
   lcd.clear();
  lcd.setCursor(0,1);
  lcd.print(" SIDIK JARI 2 FALID ");
  lcd.setCursor(0,2);
  lcd.print(" KOTAK AMAL TERBUKA ");
   delay(5000);
  digitalWrite(kunci, LOW);
  delay(10000);
  digitalWrite(kunci, HIGH);
  delay(3000);
  mulai();
}
}

int getFingerprintIDez()
{
 
  if (!finger.verifyPassword())
    {
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("SIDIK JARI TIDAK ");
  lcd.setCursor(0,1);
  lcd.print("    DITEMUKAN    ");
        return 1;
    }
  uint8_t p = finger.getImage();
  if (p != FINGERPRINT_OK)
  return -1;

  p = finger.image2Tz();
  if (p != FINGERPRINT_OK)
  return -1;

  p = finger.fingerFastSearch();
  if (p != FINGERPRINT_OK)
  return -1;
 
  // found a match!
  Serial.print("ID ditemukan #");
  Serial.print(finger.fingerID);
  Serial.print(" Akurasi ");
  Serial.println(finger.confidence);
  return finger.fingerID;
}


void setup() {
  Serial.begin(9600);
  Serial2.begin(9600);
  Serial3.begin(9600);
  finger.begin(57600);
  pinMode(kunci, OUTPUT);
  pinMode(tombol, INPUT);
  digitalWrite(kunci, HIGH);
  mp3_set_serial (Serial2);  //set Serial for DFPlayer-mini mp3 module
  mp3_set_volume (28);
  Serial.println("GPS Mulai");
  lcd.begin(20, 4);
  lcd.clear();
   mp3_play (1);
  tampilan_judul();
  delay(3000);
  tampilan_nama();
  delay(3000);
  Serial1.println("AT+CMGF=1");
  delay(200);
  Serial1.println("AT+CNMI=2,2,0,0,0");
  delay(5000);
  stat = 0;
}

void loop() {
  mulai();
}

void mulai() {
  info();
  sim();
  a = digitalRead(tombol);
  if (a == LOW)
  {
    tampil();
    stat = 10;
    delay(500);
    sensor();
  }
  mulai();
}



void sensor()
{
 if (stat == 10)
  {
  Start_sensor();
  getFingerprintIDez();
  }
  sensor();
}

void info(){
    lcd.setCursor(0,0);
    lcd.print("KOTAK AMAL LOCATION ");
    lcd.setCursor(0,1);
    lcd.print(" KOTAK AMAL MESJID  ");
    lcd.setCursor(0,2);
    lcd.print("  LAT = ");
    lcd.print(gps.location.lat(), 6);
    lcd.setCursor(18,2);
    lcd.print("  ");
    lcd.setCursor(0,3);
    lcd.print("  LNG = ");
    lcd.print(gps.location.lng(), 6);
    lcd.setCursor(18,3);
    lcd.print("  ");
   
  while(Serial3.available()) {
    gps.encode(Serial3.read());
  }
  if(gps.location.isUpdated()) {
    latitude = gps.location.lat();
    longitude = gps.location.lng();
   
    Serial.print(gps.location.lat(), 6);
    Serial.print(F(","));
    Serial.println(gps.location.lng(), 6);
}
}

void kirim(){

    Serial1.println("AT+CMGS=\"082387039947\"");//Change the receiver phone number
    delay(200);
    Serial1.print(gps.location.lat(), 6);
    Serial1.print(F(","));
    Serial1.println(gps.location.lng(), 6);
    delay(200);
    Serial1.write(26);
    delay(200);
    Serial1.println("AT+CMGD=1,4");
    Serial.println("Sms dihapus");
    delay(500);
}

void tampil()
{
  lcd.clear();
  lcd.setCursor(0,1);
  lcd.print("PROSES  PENDETEKSIAN");
  lcd.setCursor(0,2);
  lcd.print(" SIDIK JARI DIMULAI ");
}

void sim()
{
  Serial1.begin(9600);
  if(Serial1.available()){
    char lastCharRead = Serial1.read();
      if(lastCharRead == '\r' || lastCharRead == '\n'){
        String lastLine = String(text);
        if(lastLine.startsWith("+CMT:")){
          
          Serial1.println(lastLine);
          nextLineIsMessage = true;
          
        } else if (lastLine.length() > 0) {
          
          if(nextLineIsMessage) {
            Serial1.println(lastLine);
            if(lastLine.indexOf("Track") >= 0){
              digitalWrite(kunci, HIGH);
              mp3_play (3);
              delay(5000);
              kirim();
              delay(1000);
     
            } else if(lastLine.indexOf("Buka") >= 0) {
              buka();
              mp3_play (5);
              delay(5000);
              digitalWrite(kunci, LOW);
              delay(10000);
              digitalWrite(kunci, HIGH);
              delay(200);
    Serial1.write(26);
    delay(200);
    Serial1.println("AT+CMGD=1,6");
    Serial.println("Sms dihapus");
    delay(3000);
                    }    
            nextLineIsMessage = false;
          }
          
        }
        
        for( int i = 0; i < sizeof(text);  ++i ) {
         text[i] = (char)0;
        }
        currentLineIndex = 0;
    } else {
      text[currentLineIndex++] = lastCharRead;
    }
  }
}


void tampilan_judul()
{
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("   SISTEM KEMANAN   ");
  lcd.setCursor(0,1);
  lcd.print("  KOTAK AMAL MESJID ");
  lcd.setCursor(0,2);
  lcd.print("   BERASIS ARUINO   ");
  lcd.setCursor(0,3);
  lcd.print("   DAN GPS TRACKER  ");
 }
void tampilan_nama()
{
  lcd.clear();
  lcd.setCursor(0,1);
  lcd.print("    XXXXXXXXX   ");
  lcd.setCursor(0,2);
  lcd.print("   BP :  XXXXXXX ");
  delay(2000);
 }

 void buka()
{
  lcd.clear();
  lcd.setCursor(0,1);
  lcd.print(" KOTAK AMAL DIBUKA ");
  lcd.setCursor(0,2);
  lcd.print("  MENGGUNAKAN SMS  ");
  delay(2000);
 }




Jadi cara kerja pada alat ini bisa dibuka menggunakan fringerprint dan modul gsmnya untuk menerima dan mengirim sms titik lokasi kotak amalnya apabiala dicuri sama orang.
Oh ya jangan lupa nomor telfonnya di ganti
kalau masih kurang ngerti komen aja dibawah atau ada yang mau nanya" OK Brow.....
Share:

Kamis, 22 Februari 2018

Tutorial menggunakan lcd grafik 128x64 dengan arduino mega

Sebelumnya selamat datang di blog ini, dan terima kasih telah berkunjung,
Kali ini saya sebagai bloger akan memberikan tutorial bagaimana cara mempergunakan lcd grafik 128x64 dengan arduino mega,
Mungkin bagi rekan - rekan yang belum pernah mempergunakannya akan terasa sulit dalam pemakaiannya, dan tutorialnya kebanyakan mempergunakan arduino uno sebagai kontroler.

Yang perlu rekan - rekan sediakan paa tutorial ini komponenya sebagai berikut:
  Setelah bahan diatas tersedia maka rangkailah seperti yang di bawah ini:

Selanjutnya buka arduino IDE pada pc saudara dan silahkan upload program yang dibawah ini:

#include "U8glib.h"

U8GLIB_ST7920_128X64 u8g(13, 11, 12, U8G_PIN_NONE);

void text() {
  u8g.firstPage(); 
  do {
  u8g.setFont(u8g_font_helvB08);
  u8g.drawFrame(0,0,128,64); 
  u8g.drawFrame(2,2,124,60);
  u8g.drawStr( 18, 30, "BINTANG ROBOTIKA");//tampilan lcd
  u8g.drawHLine( 12, 34, 105);
  u8g.drawStr( 22, 48, "LCD GRAFIK 128x64");// tampilan lcd
   } while( u8g.nextPage() );
}

void draw() {
 u8g.firstPage(); 
  do {
u8g.setFont(u8g_font_04b_03b);
//u8g.setFont(u8g_font_osb21);
u8g.drawStr( 0, 22, "MIKROCONTROLER ARDUINO MEGA");////tampilan lcd
} while( u8g.nextPage() );
}


void setup(void) {
// assign default color value
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
}

void loop(void) {
text();
delay(3000);
draw();
delay(3000);
}

Setelah di upload maka lcd akan menampilkan void text dan void draw secara bergantian dengan delay 3000 ms seperti yang telah kita program untuk lama atau cepat tampilan rekan - rekan silahkan aja rubah delaynya.
Untuk merubah tampilan pada lcd silahkan di ubah aja tulisan yang ada dialam kutip 2 terserah mau diganti pake apa.
catatan bagi para pemula ya bagi yang baru belajar silahkan download library dan masukan kedalam library arduino IDE nya kalau tiak maka programnya akan salah.
untuk cara memasukan librarynya kalian tanya saja sama OM google, atau komen aja dibawah mungkin mau tanya - tanya lebih lanjut.

Share:

Rabu, 21 Februari 2018

Mengontrol lampu menggunakan modul gsm dan arduino mega

Hai para sahabat Mikrocontroler & Robotika...
Pada postingan kali ini kita akan mencoba untuk mengontol hidup dan mati lampu menggunkan modul gsm sesuai dengan judul postingan di atas.
Sebelum kita mulai project kali ini mari kita persiapkan dulu bahan-bahannya seperti berikut:
  1. Arduino Mega (terserah para sahabat menggunakan arduino apa yang penting ada arduinonya)
  2. Modul Gsm sim 800L (kita pake yang murah meriah aja modul gsm nya,bisa pake modul yg lain asalkan modul gsm)
  3. Relay 5 Volt 2 Chanel  ( disini saya menggunakan relay Aktifnya = LOW & matinya = HIGH)
  4. 2 buah bola lampu  

Setelah bahannya cukup mari kita bikin rangkaiannya seperti yang dibawah ini:

Rangkain di atas kita pergunakan untuk mengontrol 2 buah lampu dengan cara mengirimkan sms untuk menghidup dan mematikan lampu, bisa dipergunakan lebih banyak lagi untuk selanjutnya rekan - rekan berkarya aja sendiri.
Untuk modul Gsmnya kita pergunakan stepdown karna arus untuk modul Gsm menggunakan arus Dc 3,7 - 4.0 Volt, kelebihan arus modul Gsm akan rusak.
Selanjutnya kita langsung aja memulai programnya, pada postingan kali ini kita tidak memerlukan libray untuk modul gsmnya kita akan pergunakan pin serial 1 pada arduino mega yang terletak pada pin 18 dan 19, bagi rekan - rekan yang mau pake library sim 800L silahkan cari sendiri librarynya.

Berikut program Arduino & modul Gsmnya:

int lampu1 = 10;
int lampu2 = 11;

char text[500] = "";
int amak = 0;
bool abak = false;

void setup() {
 Serial.begin(9600);
 Serial1.begin(9600);

 pinMode(lampu1, OUTPUT);
 pinMode(lampu2, OUTPUT);
 digitalWrite(lampu1, HIGH);
 digitalWrite(lampu2, HIGH);

 Serial1.println("AT+CMGF=1");
 delay(200);
 Serial1.println("AT+CNMI=2,2,0,0,0");
 delay(1000);
}

void loop()
{
  if(Serial1.available()){
    char lastCharRead = Serial1.read();
      if(lastCharRead == '\r' || lastCharRead == '\n'){
        String sms = String(text);
        if(sms.startsWith("+CMT:")){
          
          Serial1.println(sms);
          abak = true;

         
        } else if (sms.length() > 0) {
          // kirim text sms 
          if(abak) {
            Serial1.println(sms);
            if(sms.indexOf("LAMPU 1 ON") >= 0){
            digitalWrite(lampu1, LOW);// lampu 1 hidup
            Serial.print("lampu 1 hidup");
            }
            else if(sms.indexOf("LAMPU 1 OFF") >= 0) {
            digitalWrite(lampu1, HIGH);// lampu 1 mati
            Serial.print("lampu 1 mati");
            } 
            else if(sms.indexOf("LAMPU 2 ON") >= 0) {
            digitalWrite(lampu2, LOW);//lampu 2 hidup
            Serial.print("lampu 2 hidup");
            } 
            else if(sms.indexOf("LAMPU 2 OFF") >= 0) {
            digitalWrite(lampu2, HIGH);// lampu 2 mati
            Serial.print("lampu 2 mati");
            } 
            else if(sms.indexOf("SEMUA ON") >= 0) {
            digitalWrite(lampu1, LOW);// lampu 1 & 2 hidup
            digitalWrite(lampu2, LOW);
            Serial.print("lampu 1 & 2 hidup");
            }
            else if(sms.indexOf("SEMUA OFF") >= 0) {
            digitalWrite(lampu1, HIGH);// lampu 1 & 2 mati
            digitalWrite(lampu2, HIGH);
            Serial.print("lampu 1 & 2 mati");
            }  
            abak = false;
          }
          
        }
        
        for( int i = 0; i < sizeof(text);  ++i ) {
         text[i] = (char)0;
        }
        amak = 0;
    } else {
      text[amak++] = lastCharRead;
    }
  }
}

Cara kerja dari program diatas silahkan kirim sms "LAMPU 1 ON" untuk mengaktifkan lampu 1 "LAMPU 1 OFF" untuk mematikannya, selanjutnya "LAMPU2 ON" untuk mengaktifkan lampu 2 "LAMPU 2 OFF" untuk mematikan lampu 2, "SEMUA ON" untuk menghidupkan lampu 1 & 2, dan "SEMUA OFF" untuk mematikan lampu 1 & 2.

Bagi rekan - rekan yang masih belum mengerti atau terkendala dengan program silahkan komentar dibawah atau mgkin kita bisa saling sering dan belajar tentang mikrocontroler & robotika.

Share:

Senin, 12 Februari 2018

Sensor Ph dengan Arduino

Sensor Ph berfungsi untuk mengukur ph air dan bisa di aplikasikan untuk mengetahui apakah air layak untuk dikonsumsi atau tidak.
Pada kesempatan kali ini saya akan mencoba memberikan tutorial menggunakan sensor Ph engan arduino silahkan persiapkan bahannya seperti dibawah ini:
  1. Sensor Ph
  2. Arduino Mega(Tidak harus arduino mega)
  3. Lcd 16x2
Rangkaian nya di bikin kayak gambar yang dibawah ini aja:

 Setelah rekan rangkai seperti yang diatas upload program di bawah ini:

#include <LiquidCrystal.h>
LiquidCrystal lcd(0, 1, 2, 3, 4, 5);

const int analogInPin = A0;
unsigned long int avgValue;
int buf[10],temp;

void setup() {
 lcd.begin(16, 2);
 lcd.clear();
}

void loop() {
 for(int a=0;a<10;a++)
 {
  buf[a]=analogRead(analogInPin);
  delay(10);
 }
 for(int a=0;a<9;a++)
 {
  for(int j=a+1;j<10;j++)
  {
   if(buf[a]>buf[j])
   {
    temp=buf[a];
    buf[a]=buf[j];
    buf[j]=temp;
   }
  }
 }
 avgValue=0;
 for(int a=2;a<8;a++)
 avgValue+=buf[a];
 float pHVol=(float)avgValue*2.0/1024;
 float phValue = 4.20 * pHVol - 21.34;
 lcd.setCursor(0,0);
 lcd.print("BINTANG ROBOTIKA");
 lcd.setCursor(0,1);
 lcd.print("  pH =  ");
 lcd.println(phValue);
 lcd.setCursor(12,1);
 lcd.print("   ");
 delay(500);
}

Untuk program diatas rekan jangan gunakan Serial begin pada void setup() nanti lcdnya tidak bisa tampil, karna lcd untuk pin rs dan e menggunakan pin 0 & 1 yaitu pin serial 0 pada arduino
cara kerjanya nanti akan tampil pada lcd nilai pH yg sudah di kalibrasikan sinyal analognya,
sekian dari saya terima kasih, semoga bermanfaat.
Share:

Minggu, 11 Februari 2018

Voice recognition V3 dan Arduino Mega

Voice Recognition v3 adalah sebuah modul yang bisa mengontrol perangkat dengan menggunakan suara. Dengan cara memasukan atau merekam suara ke dalam voice itu sendiri.
Untuk lebih lengkapnya rekan-rekan bisa baca sendiri pada datasheet voice recognition v3 itu sendiri. 

Langsung aja persiapkan komponen-komponen yang dibutuhkan
  • 1 buah voice recognition v3 
  • 1 buah arduino, untuk arduino terserah mau pake yang mana kali ini saya menggunakan arduino mega soalnya jarang sekali tutorial tentang voice menggunakan arduino mega.
  • 2 buah led dan resistor 220 ohm.
 Dan rangkailah seperti gambar dibawah ini:


Rangkain voice recognition V3 dengan arduino

Selanjutnya buka arduino IDE dan buka library voice v3 nya, bagi yang belum punya download dulu librarynya di https://github.com/elechouse/VoiceRecognitionV3.


Selanjutnya ganti pin 2 dan 3 menjadi pin 12 dan 13 seperti gambar dibawah ini:

Silahkan upload ke arduino dan buka serial monitor seperti gambar dibawah ini:


  Rubah baudrate menjadi 115200, untuk mengisi suaranya silahkan ketikan pada kolom atasnya 
  • sigtrain 1 led1on ( untuk led1on terserah rekan maunya menuliskan apa) usahakan kata" jangan terlalu panjang
  • sigtrain 2 led2on
  • sigtrain 3 led1off
  • sigtrain 4 led2off
  • sigtrain 5 ledoff
setelah selesai memasukan suara kita akan mengontrol 2 buah led menggunakan suara untuk on dan off nya silahkan upload progam yang dibawah ini:

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

VR myVR(12,13);  
uint8_t records[7];
uint8_t buf[64];

int led1 = 10;
int led1 = 11;

#define led1on   (1)
#define led2on   (2)
#define led1off  (3)
#define led2off  (4)
#define ledoff   (5)

void printSignature(uint8_t *buf, int len)
{
  int i;
  for(i=0; i<len; i++){
    if(buf[i]>0x19 && buf[i]<0x7F){
      Serial.write(buf[i]);
    }
    else{
      Serial.print("[");
      Serial.print(buf[i], HEX);
      Serial.print("]");
    }
  }
}

void printVR(uint8_t *buf)
{
  Serial.println("VR Index\tGroup\tRecordNum\tSignature");

  Serial.print(buf[2], DEC);
  Serial.print("\t\t");

  if(buf[0] == 0xFF){
    Serial.print("NONE");
  }
  else if(buf[0]&0x80){
    Serial.print("UG ");
    Serial.print(buf[0]&(~0x80), DEC);
  }
  else{
    Serial.print("SG ");
    Serial.print(buf[0], DEC);
  }
  Serial.print("\t");

  Serial.print(buf[1], DEC);
  Serial.print("\t\t");
  if(buf[3]>0){
    printSignature(buf+4, buf[3]);
  }
  else{
    Serial.print("NONE");
  }
  Serial.println("\r\n");
}

void setup()
{
  myVR.begin(9600);
  Serial.begin(115200);
  Serial.println("Elechouse Voice Recognition V3 Module\r\nControl LED sample");
 
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  
  if(myVR.clear() == 0){
    Serial.println("Recognizer cleared.");
  }else{
    Serial.println("Not find VoiceRecognitionModule.");
    Serial.println("Please check connection and restart Arduino.");
    while(1);
  }
 
  if(myVR.load((uint8_t)led1on) >= 0){
    Serial.println("onRecord led1");
  }
 
  if(myVR.load((uint8_t)led2on) >= 0){
    Serial.println("onRecord led2");
  }

   if(myVR.load((uint8_t)led1off) >= 0){
    Serial.println("offRecord led1");
  }
 
  if(myVR.load((uint8_t)led2off) >= 0){
    Serial.println("offRecord led2");
  }

   if(myVR.load((uint8_t)ledoff) >= 0){
    Serial.println("off led 1 & 2");
  }
 
}

void loop()
{
  int ret;
  ret = myVR.recognize(buf, 50);
  if(ret>0){
    switch(buf[1]){
      case led1on:
        digitalWrite(led1, HIGH);
        break;
      case led2on:
        digitalWrite(led2, HIGH);
        break;
      case led1off:
        digitalWrite(led1, LOW);
        break;
      case led2off:
        digitalWrite(led2, LOW);
        break;
      case ledoff:
        digitalWrite(led1, LOW);
        digitalWrite(led2, LOW);
        break;
      default:
        Serial.println("Record function undefined");
        break;
    }
    printVR(buf);
  }
}

Silahkan upload programnya ke arduino
keterangan kerjanya silahkan gunakan
  • led1on untuk mengaktifkan led 1
  • led2on untuk mengaktifkan led 2
  • led1off untuk mematikan led 1
  • led2off untuk mematikan led 2
  • ledoff untuk mematikan led 1 & led 2
 bagi teman yang masih belum mengerti, kurang paham silahkan komentar di bawah atau kita bisa saling shering dan berbagi ilmu pengetahuan.
Share:

BTemplates.com


zulpandru hendra. Diberdayakan oleh Blogger.