Mesin Antrian Arduino, Bagaimana Membuatnya

on
Categories: Belajar Arduino, Produk, Tutorial

Membuat mesin antrian arduino sebenarnya sudah beberapa kali saya lakukan di artikel dan di channel youtube saya sebelum nya. Namun mesin antrian atau kontroler antrian yang saya buat masih memiliki fungsi yang terpisah pisah.

Saya membuat mesin antrian, kontroler nya masih terpisah seperti untuk mencetak nomor antrian nya, pemanggil antrian nya dan juga display antrian nya yang dibuat secara terpisah.

Nah sekarang kontroler antrian tersebut saya sudah rancang dalam satu papan PCB yang tentunya akan membuat kita manjadi hemat uang dalam membuat mesin antrian arduino ini.

Alat dan Bahan

Alat dan bahan yang dipakai dalam merancang alat antrian ini adalah :

  • Atmega328p-au
  • RTC DS3231
  • Modul DFPlayer
  • Terminal Screw
  • Crystal 16MHz
  • LED
  • IC LM2596S
  • Tactile Switch
  • Multiturn 10K
  • Capacitor 22pF
  • Capacitor 100nF
  • DC connector
  • Connector Battery RTC
  • Inductor 470
  • Elco 220uF/16V
  • Header Male
  • Memory Card
  • Resistor 1K
  • Sensor Remote
  • Speaker
  • Printer Thermal TTL
  • Display P10
  • Remote Merk Sony
  • Adaptor 9V

Gambar Skematik & Layout Kontroler

Untuk gambar rangkaian mesin nya saya sudah menggambar nya dengan menggunakan software eagle seperti yang bisa kalian perhatikan dibawah ini.

skematik mesin antrian arduino
Layout atas mesin antrian arduino
Layout Bawah mesin antrian arduino
Tata letak komponen mesin antrian arduino

Seperti yang kalian perhatikan pada gambar diatas. PCB yang ukuran nya tidak sampai 6cm tersebut saya maksimalkan untuk mampu berfungsi sebagai mesin pencetak karcis, mesin pemanggil antrian, sekaligus mesin display antrian.

Untuk mencetak papan PCB antrian nya saya menggunakan jasa cetak PCB di PCBWAY.COM yang mencetak pcb saya dengan waktu yang cukup cepat dan hasil yang sangat baik.

Coding Mesin Antrian Arduino

#include <MyBigFont.h>
#include <PString.h>
#include <SPI.h>        
#include <DMD.h>        //
#include <TimerOne.h>   //
#include "Adafruit_Thermal.h"
#include "SoftwareSerial.h"
#define TX_PIN 4
#define RX_PIN 3 
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;

SoftwareSerial mySerial(RX_PIN, TX_PIN); 
Adafruit_Thermal printer(&mySerial);   
char buffer[160];
#include "DFRobotDFPlayerMini.h"
#include <IRremote.h>
#define DISPLAYS_ACROSS 1
#define DISPLAYS_DOWN 1
DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);
byte value;
int RECV_PIN = 2;
int tombol=14;
int hitung2=0;
const int buttonPin = 15;
const int buttonPin2 = 16;
long lastDebounceTime = 0;  
long debounceDelay = 50;
int buttonState=0;  
int lastButtonState = LOW;  
IRrecv irrecv(RECV_PIN);

//int hitung=0;
decode_results results;
unsigned long last = millis();
long int hitung=0;
PString str(buffer, sizeof(buffer));
void setup(){
  Wire.begin();
    RTC.begin();
     if (! RTC.isrunning()) {
    //Serial.println("RTC is NOT running!");
    
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
  pinMode(tombol,INPUT_PULLUP);
   pinMode(buttonPin, INPUT_PULLUP);
 pinMode(buttonPin2, INPUT_PULLUP);
 mySerial.begin(9600); 
  
  printer.begin();       
  Serial.begin (9600);
  myDFPlayer.begin(Serial);
  myDFPlayer.volume(30);
  irrecv.enableIRIn();
  Timer1.initialize( 5000 ); 
//Timer1.pwm(PIN_DMD_nOE, 150);     //period in microseconds to call ScanDMD. Anything longer than 5000 (5ms) and you can see flicker.
   Timer1.attachInterrupt( ScanDMD );   //attach the Timer1 interrupt to ScanDMD which goes to dmd.scanDisplayBySPI()

   //clear/init the DMD pixels held in RAM
   dmd.clearScreen( true );   //true is normal (all pixels off), false is negative (all pixels on)
dmd.selectFont(MyBigFont);
        dmd.clearScreen( true );
        
  dmd.drawString(0,0,"-----",5,GRAPHICS_NORMAL );
}
void ScanDMD()
{ 
  dmd.scanDisplayBySPI();
}


void loop(){
  
 buttonState = digitalRead(buttonPin);
 if (!buttonState) { 
   printer.wake();
   printer.setDefault(); 
    hitung2+=1;
    char buffer[40];
  PString str(buffer, sizeof(buffer));
  str.begin();
   if(hitung2<100)
  {
    str.print(0);
    if(hitung2<10)
    {
      str.print(0);
    }
  }
  else if(hitung2<10)
    {
      str.print(0);
    }
  str.print(hitung2);
  printer.boldOn();
  printer.justify('C');
  printer.setSize('L');
  printer.println(F("DUWIARSANA"));
   printer.setSize('S');
  printer.println(F("Nomor Antrian :"));
  printer.feed(1);
  printer.setSize('L');
  printer.println(str);
  printer.feed(1);
  printer.setSize('S');
  printer.println(F("Supported by PCBWay.com"));
//  DateTime now = RTC.now();
//  str.begin();
//  str.print("tgl.");
//  str.print(now.day(), DEC);
//  str.print('-');
//  str.print(now.month(), DEC);
//  str.print('-');
//  str.print(now.year(), DEC);
//  str.print(' ');
//   printer.setSize('S');
//  
//  
//  printer.println("CUSTOMER SERVICE");
  
  
  
    printer.feed(4);
  printer.sleep();      
  
  printer.wake();       
  printer.setDefault(); 
  
 }
 if(!(digitalRead(buttonPin2))){    
    printer.wake();       
  printer.setDefault();  
     printer.justify('C');

   printer.setSize('M');
  printer.println(F("Printer Direset"));
  hitung2=0;
     printer.feed(6);
  printer.sleep();      
  //delay(3000);         
  printer.wake();       
  printer.setDefault(); 
     
     
   }
  
  if(!(digitalRead(tombol))){
    hitung++;
    baca(hitung);
    delay(1000);
    
    
  }
  if (irrecv.decode(&results)) {
    //Serial.println(results.value);
    if (results.value == 0x90) { 
      
        hitung++;
        str.begin();
        str.print(hitung);
        dmd.selectFont(MyBigFont);
        dmd.clearScreen( true );
        if(hitung<10){
          dmd.drawString(11,0,buffer,sizeof(buffer),GRAPHICS_NORMAL );
        }
        else if(hitung<100){
          dmd.drawString(7,0,buffer,sizeof(buffer),GRAPHICS_NORMAL );
        }
        else
  dmd.drawString(0,0,buffer,sizeof(buffer),GRAPHICS_NORMAL );
  myDFPlayer.playMp3Folder(911);
  delay(2000);
        baca(hitung);
        
        //irrecv.resume();
        
      delay(2000);
      
    }    
  
    //Serial.println(results.value);
    if (results.value == 0x490) { 
      
        //str.begin();
        //str.print(hitung);
        
  myDFPlayer.playMp3Folder(912);
  delay(2000);
  myDFPlayer.playMp3Folder(911);
  delay(2000);
        baca(hitung);
        
        //irrecv.resume();
        
      delay(2000);
      
    }    
    
    //Serial.println(results.value);
    if (results.value == 0xA70) { 
      
        
        dmd.selectFont(MyBigFont);
        dmd.clearScreen( true );
        
  dmd.drawString(0,0,"-----",5,GRAPHICS_NORMAL );
       // baca(hitung);
//        str.begin();
//        str.print(hitung);
        hitung=0;
        
      delay(2000);
      
    }    
    
    irrecv.resume();
    
    
  }
  
  
  
  
}

void baca(int angka){
  if(angka>99)ratusan(angka);
  else if(angka>9)puluhan(angka);
  else if(angka>0)satuan(angka);
  
}

void puluhan(int angka){
  
  int tmp1,tmp2;
  tmp1=angka/10;
  tmp2=angka%10;
  
  switch(tmp1){
   case 1:{
    if(tmp2==0)        myDFPlayer.playMp3Folder (10);
    else if(tmp2==1)   myDFPlayer.playMp3Folder (11);
    else if(tmp2==2)   myDFPlayer.playMp3Folder (12);
    else if(tmp2==3)   myDFPlayer.playMp3Folder (13);
    else if(tmp2==4)   myDFPlayer.playMp3Folder (14);
    else if(tmp2==5)   myDFPlayer.playMp3Folder (15);
    else if(tmp2==6)   myDFPlayer.playMp3Folder (16);
    else if(tmp2==7)   myDFPlayer.playMp3Folder (17);
    else if(tmp2==8)   myDFPlayer.playMp3Folder (18);
    else if(tmp2==9)   myDFPlayer.playMp3Folder (19);
    break;
   } 
    case 2:myDFPlayer.playMp3Folder (20);break;
    case 3:myDFPlayer.playMp3Folder (30);break;
    case 4:myDFPlayer.playMp3Folder (40);break;
    case 5:myDFPlayer.playMp3Folder (50);break;
    case 6:myDFPlayer.playMp3Folder (60);break;
    case 7:myDFPlayer.playMp3Folder (70);break;
    case 8:myDFPlayer.playMp3Folder (80);break;
    case 9:myDFPlayer.playMp3Folder (90);break;
 
  }
  delay(1300);
  if(tmp2>0&&angka>19)satuan(tmp2);
}

void satuan(int angka){
  
 switch(angka){
  case 1:              myDFPlayer.playMp3Folder (1);break;
  case 2:              myDFPlayer.playMp3Folder (2);break;
  case 3:              myDFPlayer.playMp3Folder (3);break;
  case 4:              myDFPlayer.playMp3Folder (4);break;
  case 5:              myDFPlayer.playMp3Folder (5);break;
  case 6:              myDFPlayer.playMp3Folder (6);break;
  case 7:              myDFPlayer.playMp3Folder (7);break;
  case 8:              myDFPlayer.playMp3Folder (8);break;
  case 9:              myDFPlayer.playMp3Folder (9);break;
 } 
 delay(700);
}


void ratusan(int angka){
  int tmp1,tmp2;
  tmp1=angka/100; tmp2=angka%100;
  //Serial.println();
  switch(tmp1){
case 1: myDFPlayer.playMp3Folder(100);break;
case 2: myDFPlayer.playMp3Folder(200);break;
case 3: myDFPlayer.playMp3Folder(300);break;
case 4: myDFPlayer.playMp3Folder(400);break;
case 5: myDFPlayer.playMp3Folder(500);break;
case 6: myDFPlayer.playMp3Folder(600);break;
case 7: myDFPlayer.playMp3Folder(700);break;
case 8: myDFPlayer.playMp3Folder(800);break;
case 9: myDFPlayer.playMp3Folder(900);break;
  }
  //Serial.println(tmp1);
  delay(1000);
  if(tmp2>9)puluhan(tmp2);
  else if(tmp2>0)satuan(tmp2);
}

Coding arduino tersebut kalian harus lengkapi dulu file library yang diperlukan agar dapat bekerja dengan baik. Dalam coding tersebut saya sudah melengkapi dengan algoritma bagaimana mengubah angka menjadi bilangan terbilang yang sangat penting digunakan dalam sistem sebagai pemanggil antrian bersuara.

Baca juga  5 Aplikasi Gratis Kreatifitas Anak

Foto Alat Jadi

Foto alat mesin antrian arduino
Foto alat mesin antrian arduino

Pemesanan Alat 085739786669

Untuk kalian yang ingin membeli produk ini bisa langsung menghubungi bagian penjualan atau teknis di nonor whatsapp : 085739786669

Video Uji Coba Alat

Oke mungkin sekian dulu artikel saya tentang membuat kontroler antrian kali ini, semoga bermanfaat bagi kalian, dan file untuk alat antrian yang saya bagikan di artikel ini bisa di download pada link download yang sudah saya sediakan. Terima kasih. Semoga kalian bisa membuat kontroler antrian seperti saya ini :)