Translate

ECG AD8232 ARDUINO

ECG AD8232 ARDUINO
 

      Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara mengakses modul sensor ECG AD8232 dengan menggunakan Arduino Uno. jadi alat ini akan menampilkan sinyal PQRS di serial monitor atau serial plotter Arduino. alat ini bisa dikembangkan lagi untuk keperluan yang lebih canggih misal sinyal ECG ditampilkan ke Android atau ke internet. untuk lebih jelasnya berikut adalah skema dan kodingnya. 
 
Link Sumber : https://how2electronics.com/ecg-monitoring-with-ad8232-ecg-sensor-arduino/
 
 
a. Skema 
 

 
 
b. Cara Pemasangan ke Tubuh
 

 
 
c. Program Arduino Uno
 
void setup() {
// initialize the serial communication:
Serial.begin(9600);
pinMode(10, INPUT); // Setup for leads off detection LO +
pinMode(11, INPUT); // Setup for leads off detection LO -
 
}
 
void loop() {
 
if((digitalRead(10) == 1)||(digitalRead(11) == 1)){
Serial.println('!');
}
else{
// send the value of analog input 0:
Serial.println(analogRead(A0));
}
//Wait for a bit to keep serial data from saturating
delay(1);
}
 
 
 
d. VIDEO HASILNYA
 

 

Timer Countdown, Jam Digital, Stopwatch, Lap Counter Panel P10 RGB HUB75 ARUINO

Timer Countdown, Jam Digital, Stopwatch, Lap Counter Panel P10 RGB HUB75 ARDUINO


         Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang memiliki 4 fitur berbeda yaitu Timer Countdown, Stopwatch, Jam Digital, Lap Counter dengan penampilnya menggunakan panel P10 RGB HUB75. untuk lebih jelasnya berikut adalah koding dan komponennya. 



a. Arduino Uno




b. Panel P10 RGB





c. Modul RTC DS3231






d. Program Arduino IDE

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DS3231.h>
#include <Adafruit_GFX.h>   
#include <RGBmatrixPanel.h> 
LiquidCrystal_I2C lcd(0x27, 16, 2);

DS3231  rtc(SDA, SCL);
Time  t;

#define F2(progmem_ptr) (const __FlashStringHelper *)progmem_ptr

#define CLK 8  // MUST be on PORTB! (Use pin 11 on Mega)
#define LAT A3
#define OE  9
#define A   A0
#define B   A1
#define C   A2

RGBmatrixPanel matrix(A, B, C, CLK, LAT, OE, false);

String sjam,smenit,sdetik;
int jam,menit,detik;
int pilih;
float xjam, xmenit, xdetik, xmiliDetik;
int xjamx, xmenitx, xdetikx, xmiliDetikx;
unsigned long over;

int lap;
int btset = 10;
int btup = 11;
int btdown = 12;
int btok = 13;
int btsetx;
int btupx;
int btdownx;
int btokx;
int countdown;
int detikku;
int mulai;
int seconds;
int cs;
long start_time = 0;
int jams,menits;
unsigned long mulaix, selesai, dataStopWatch;
int i=0;
int fPaus = 0;
long lastButton = 0; 
long delayAntiBouncing = 50; 
long dataPaus = 0;


void setup()
{
  lcd.begin();
  lcd.clear();
  lcd.noCursor();
  pinMode(btset,INPUT_PULLUP);
  pinMode(btup,INPUT_PULLUP);
  pinMode(btdown,INPUT_PULLUP);
  pinMode(btok,INPUT_PULLUP);
  matrix.begin();
  matrix.setTextWrap(false); // Allow text to run off right edge
  matrix.fillScreen(0);
  rtc.begin();
  //rtc.setDOW(THURSDAY);     // Set Day-of-Week to SUNDAY
  //rtc.setTime(15, 53, 0);     // Set the time to 12:00:00 (24hr format)
  //rtc.setDate(13, 5, 2022);   // Set the date to January 1st, 2014
}

void loop()
{
    
btsetx = digitalRead(btset);
btupx = digitalRead(btup);
btdownx = digitalRead(btdown);
btokx = digitalRead(btok);

if(btupx == 0){
delay(200);
pilih++;  
}

if(btdownx == 0){
delay(200);
pilih--;  
}

if(pilih > 3){
pilih = 0;  
}

if(pilih < 0){
pilih = 3;  
}

if(pilih == 0){
  lcd.setCursor(0,0);
  lcd.print("1.Countdown    ");
}

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

if(pilih == 2){
  lcd.setCursor(0,0);
  lcd.print("3.Jam          ");
}

if(pilih == 3){
  lcd.setCursor(0,0);
  lcd.print("4.Lap Counter  ");
}

if((btokx == 0)&&(pilih == 0)){
lcd.clear();
delay(2000);
countdownku();  
}

if((btokx == 0)&&(pilih == 1)){
lcd.clear();
delay(2000);
lcd.print("  Tekan Tombol");
lcd.setCursor(0, 1); 
lcd.print("  Start / Stop");
stopwatch();  
}

if((btokx == 0)&&(pilih == 2)){
lcd.clear();
delay(2000);
jamku();  
}

if((btokx == 0)&&(pilih == 3)){
lcd.clear();
delay(2000);
lapcounter();  
}

}


void lapcounter(){

lcd.setCursor(0,0);
lcd.print("Lap: ");
lcd.print(lap);
lcd.print("   ");

btsetx = digitalRead(btset);
btupx = digitalRead(btup);
btdownx = digitalRead(btdown);
btokx = digitalRead(btok);

if(btupx == 0){
delay(200);
lap++;  
}

if(btdownx == 0){
delay(200);
lap--;  
}

if(btokx == 0){
lcd.clear();
delay(2000);
return; 
}

if(lap <= 9){
matrix.setTextSize(2);
matrix.setTextColor(matrix.Color444(1, 0, 0));
matrix.setCursor(10, 1); //x,y
matrix.print(lap);   
}

if(lap > 9){
matrix.setTextSize(2);
matrix.setTextColor(matrix.Color444(1, 0, 0));
matrix.setCursor(4, 1); //x,y
matrix.print(lap);   
}

delay(100);
matrix.fillScreen(0);
 

lapcounter();  
}


void setjam(){

lcd.setCursor(0,0);
lcd.print("Jam: ");
lcd.print(jam);
lcd.print("   ");

btsetx = digitalRead(btset);
btupx = digitalRead(btup);
btdownx = digitalRead(btdown);
btokx = digitalRead(btok);

if(btupx == 0){
delay(200);
jam++;  
}

if(btdownx == 0){
delay(200);
jam--;  
}

if(btokx == 0){
lcd.clear();
delay(2000);
return; 
}

if(jam > 23){
jam = 0;
}

if(jam < 0){
jam = 23;
}  

setjam();
}


void setmenit(){

  lcd.setCursor(0,0);
  lcd.print("Min: ");
  lcd.print(menit);
  lcd.print("   ");

btsetx = digitalRead(btset);
btupx = digitalRead(btup);
btdownx = digitalRead(btdown);
btokx = digitalRead(btok);

if(btupx == 0){
delay(200);
menit++;  
}

if(btdownx == 0){
delay(200);
menit--;  
}

if(btokx == 0){
lcd.clear();
delay(2000);
return; 
}

if(menit > 59){
menit = 0;
}

if(menit < 0){
menit = 59;
}  

setmenit();
}


void setdetik(){

  lcd.setCursor(0,0);
  lcd.print("Detik: ");
  lcd.print(detik);
  lcd.print("   ");

btsetx = digitalRead(btset);
btupx = digitalRead(btup);
btdownx = digitalRead(btdown);
btokx = digitalRead(btok);

if(btupx == 0){
delay(200);
detik++;  
}

if(btdownx == 0){
delay(200);
detik--;  
}

if(btokx == 0){
lcd.clear();
delay(2000);
t.hour = jam;
t.min = menit;
t.sec = detik;
rtc.setTime(jam,menit,detik);     // Set the time to 12:00:00 (24hr format)
return; 
}

if(detik > 59){
detik = 0;
}

if(detik < 0){
detik = 59;
}  

setdetik();
}


void jamku(){
  
btsetx = digitalRead(btset);
btupx = digitalRead(btup);
btdownx = digitalRead(btdown);
btokx = digitalRead(btok);

if((btupx == 0)&&(btdownx == 0)){
lcd.clear();
delay(2000);
return;
}

if(btsetx == 0){
delay(200);
lcd.clear();  
setjam();
setmenit();
setdetik();  
}

 t = rtc.getTime();
 
  lcd.setCursor(0,0);
  lcd.print(t.hour);
  lcd.print(":");
  lcd.print(t.min);
  lcd.print(":");
  lcd.print(t.sec);
  lcd.print("   ");

  matrix.setTextSize(1);
  matrix.setTextColor(matrix.Color444(1, 0, 0));
  matrix.setCursor(1, 8); //x,y
  matrix.print(t.hour);
  matrix.setTextColor(matrix.Color444(3, 1, 0));
  matrix.print(":");
  matrix.setTextColor(matrix.Color444(0, 1, 0));
  matrix.print(t.min);
 
  matrix.setCursor(10, 1); //x,y
  matrix.setTextColor(matrix.Color444(0, 0, 1));
  matrix.print(t.sec);
 
  delay(1000);
  matrix.fillScreen(0);
  
jamku();  
}



void countdownku(){
matrix.setTextSize(2);
    
t = rtc.getTime();

btsetx = digitalRead(btset);
btupx = digitalRead(btup);
btdownx = digitalRead(btdown);
btokx = digitalRead(btok);

if((btupx == 0)&&(btdownx == 0)){
lcd.clear();
delay(2000);
return;
}

if(btsetx == 0){
delay(200);
lcd.clear();  
setjam();
setmenit();
setdetik();  
}

  lcd.setCursor(0,0);
  lcd.print(t.hour);
  lcd.print(":");
  lcd.print(t.min);
  lcd.print(":");
  lcd.print(t.sec);
  lcd.print("   ");

detikku = 59 - t.sec;

if(t.sec == 30){

  matrix.drawLine(4, 3, 5, 3 , matrix.Color333(1, 0, 0));
  matrix.drawLine(3, 4, 6, 4 , matrix.Color333(1, 0, 0));
  matrix.drawLine(2, 5, 7, 5 , matrix.Color333(1, 0, 0));
  matrix.drawLine(1, 6, 8, 6 , matrix.Color333(1, 0, 0));
  matrix.drawLine(0, 7, 9, 7 , matrix.Color333(1, 0, 0));
  matrix.drawLine(0, 8, 9, 8 , matrix.Color333(1, 0, 0));
  matrix.drawLine(1, 9, 8, 9 , matrix.Color333(1, 0, 0));
  matrix.drawLine(2, 10, 7, 10 , matrix.Color333(1, 0, 0));
  matrix.drawLine(3, 11, 6, 11 , matrix.Color333(1, 0, 0));
  matrix.drawLine(4, 12, 5, 12 , matrix.Color333(1, 0, 0));

countdown = 30;
matrix.setTextColor(matrix.Color444(1, 1, 1));
matrix.setCursor(10, 1); //x,y
matrix.print(countdown); 
delay(2000);
matrix.fillScreen(0);
}

if(detikku == 10){
  
  matrix.drawLine(4, 3, 5, 3 , matrix.Color333(1, 0, 0));
  matrix.drawLine(3, 4, 6, 4 , matrix.Color333(1, 0, 0));
  matrix.drawLine(2, 5, 7, 5 , matrix.Color333(1, 0, 0));
  matrix.drawLine(1, 6, 8, 6 , matrix.Color333(1, 0, 0));
  matrix.drawLine(0, 7, 9, 7 , matrix.Color333(1, 0, 0));
  matrix.drawLine(0, 8, 9, 8 , matrix.Color333(1, 0, 0));
  matrix.drawLine(1, 9, 8, 9 , matrix.Color333(1, 0, 0));
  matrix.drawLine(2, 10, 7, 10 , matrix.Color333(1, 0, 0));
  matrix.drawLine(3, 11, 6, 11 , matrix.Color333(1, 0, 0));
  matrix.drawLine(4, 12, 5, 12 , matrix.Color333(1, 0, 0));

countdown = 10;
  
matrix.setTextColor(matrix.Color444(1, 1, 1));
matrix.setCursor(10, 1); //x,y
matrix.print(countdown);   
delay(1000);
matrix.fillScreen(0);
}

if((detikku > 0 )&&(detikku <= 5)){
matrix.setTextColor(matrix.Color444(1, 1, 1));
matrix.setCursor(15, 1); //x,y
matrix.print(detikku);   
}

if(detikku > 0){
  matrix.drawLine(4, 3, 5, 3 , matrix.Color333(1, 0, 0));
  matrix.drawLine(3, 4, 6, 4 , matrix.Color333(1, 0, 0));
  matrix.drawLine(2, 5, 7, 5 , matrix.Color333(1, 0, 0));
  matrix.drawLine(1, 6, 8, 6 , matrix.Color333(1, 0, 0));
  matrix.drawLine(0, 7, 9, 7 , matrix.Color333(1, 0, 0));
  matrix.drawLine(0, 8, 9, 8 , matrix.Color333(1, 0, 0));
  matrix.drawLine(1, 9, 8, 9 , matrix.Color333(1, 0, 0));
  matrix.drawLine(2, 10, 7, 10 , matrix.Color333(1, 0, 0));
  matrix.drawLine(3, 11, 6, 11 , matrix.Color333(1, 0, 0));
  matrix.drawLine(4, 12, 5, 12 , matrix.Color333(1, 0, 0));
}

if(detikku == 0){
  matrix.drawLine(4, 3, 5, 3 , matrix.Color333(0, 1, 0));
  matrix.drawLine(3, 4, 6, 4 , matrix.Color333(0, 1, 0));
  matrix.drawLine(2, 5, 7, 5 , matrix.Color333(0, 1, 0));
  matrix.drawLine(1, 6, 8, 6 , matrix.Color333(0, 1, 0));
  matrix.drawLine(0, 7, 9, 7 , matrix.Color333(0, 1, 0));
  matrix.drawLine(0, 8, 9, 8 , matrix.Color333(0, 1, 0));
  matrix.drawLine(1, 9, 8, 9 , matrix.Color333(0, 1, 0));
  matrix.drawLine(2, 10, 7, 10 , matrix.Color333(0, 1, 0));
  matrix.drawLine(3, 11, 6, 11 , matrix.Color333(0, 1, 0));
  matrix.drawLine(4, 12, 5, 12 , matrix.Color333(0, 1, 0));
  matrix.setTextColor(matrix.Color444(0, 1, 0));
  matrix.setCursor(10, 1); //x,y
  matrix.print("GO");   
  delay(3000);
  matrix.fillScreen(0);
}
  delay(1000);
  matrix.fillScreen(0);
    
countdownku();  
}



void stopwatch(){
  
btsetx = digitalRead(btset);
btupx = digitalRead(btup);
btdownx = digitalRead(btdown);
btokx = digitalRead(btok);

if((btupx == 0)&&(btdownx == 0)){
lcd.clear();
delay(2000);
return;
}

if (btsetx == 0){
  if ((millis() - lastButton) > delayAntiBouncing){
      if (i==0){
          lcd.clear();
          lcd.setCursor(0, 0);
          lcd.print("Start Timer");
          mulaix = millis();
          fPaus = 0;
        }
       else if (i==1){
        lcd.setCursor(0, 0);
        lcd.print("Stop Timer  ");
        dataPaus = dataStopWatch;
        fPaus = 1;
        }
       i =!i;
      }
      lastButton = millis();
  }
  
if ((btupx == 0) && (fPaus == 1)){
  dataStopWatch = 0;
  dataPaus = 0; 
  lcd.clear();
  lcd.print("Reset Stopwatch");
  lcd.setCursor(0, 1); 
  lcd.print("0:0:0.0");  
  xjamx = 0;
  xmenitx = 0;
  xdetikx = 0;
  xmiliDetikx = 0;
 }
  
  if (i==1){
      selesai = millis(); 

      // MATH time!!!
      dataStopWatch = selesai - mulaix;
      dataStopWatch = dataPaus + dataStopWatch;

      xjam = int(dataStopWatch / 3600000);
      over = dataStopWatch % 3600000;
      xmenit = int(over / 60000);
      over = over % 60000;
      xdetik = int(over / 1000);
      xmiliDetik = over % 100;

      lcd.setCursor(0, 1);
      lcd.print(xjam, 0); 
      lcd.print(":"); 
      lcd.print(xmenit, 0);
      lcd.print(":");
      lcd.print(xdetik, 0);
      lcd.print(".");
      if (xjam < 10){
          lcd.print(xmiliDetik, 0);
          lcd.print("   ");
       }
   }

xjamx = xjam;
xmenitx = xmenit;
xdetikx = xdetik;
xmiliDetikx = xmiliDetik;
   
matrix.setTextSize(1);
matrix.setTextColor(matrix.Color444(1, 0, 0));
matrix.setCursor(1, 1); //x,y
matrix.print(xjamx);   
matrix.print(":");   
matrix.print(xmenitx);  
matrix.setCursor(1, 8); //x,y
matrix.print(xdetikx);  
matrix.print(":");   
matrix.print(xmiliDetikx);   

delay(1);
matrix.fillScreen(0);
  
stopwatch();  
}




e. VIDEO HASILNYA



Timer Counter Down Panel P10 RGB HUB75

Timer Counter Down Panel P10 RGB HUB75



        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat menampilkan nilai countdown untuk tujuan tertentu. alat ini menggunakan panel P10 RGB dengan HUB75. pada tampilan di panel P10 terdapat simbol merah dan hijau serta terdapat pula nilai yang countdown. untuk lebih jelasnya berikut adalah program dan komponennya.  


a. Arduino Uno




b. Panel P10 RGB





c. Modul RTC DS3231





d. Program Arduino IDE

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DS3231.h>
#include <Adafruit_GFX.h>   
#include <RGBmatrixPanel.h> 
LiquidCrystal_I2C lcd(0x27, 16, 2);

DS3231  rtc(SDA, SCL);
Time  t;

#define F2(progmem_ptr) (const __FlashStringHelper *)progmem_ptr

#define CLK 8  // MUST be on PORTB! (Use pin 11 on Mega)
#define LAT A3
#define OE  9
#define A   A0
#define B   A1
#define C   A2

RGBmatrixPanel matrix(A, B, C, CLK, LAT, OE, false);

String sjam,smenit,sdetik;
int jam,menit,detik;

int btset = 10;
int btup = 11;
int btdown = 12;
int btok = 13;
int btsetx;
int btupx;
int btdownx;
int btokx;
int countdown;
int detikku;


void setup()
{
  lcd.begin();
  lcd.clear();
  lcd.noCursor();
  pinMode(btset,INPUT_PULLUP);
  pinMode(btup,INPUT_PULLUP);
  pinMode(btdown,INPUT_PULLUP);
  pinMode(btok,INPUT_PULLUP);
  matrix.begin();
  matrix.setTextWrap(false); // Allow text to run off right edge
  matrix.setTextSize(2);
  matrix.fillScreen(0);
  rtc.begin();
  //rtc.setDOW(THURSDAY);     // Set Day-of-Week to SUNDAY
  //rtc.setTime(15, 53, 0);     // Set the time to 12:00:00 (24hr format)
  //rtc.setDate(13, 5, 2022);   // Set the date to January 1st, 2014
}

void loop()
{
  
t = rtc.getTime();

btsetx = digitalRead(btset);
btupx = digitalRead(btup);
btdownx = digitalRead(btdown);
btokx = digitalRead(btok);

if(btsetx == 0){
delay(200);
lcd.clear();  
setjam();
setmenit();
setdetik();  
}

  lcd.setCursor(0,0);
  lcd.print(t.hour);
  lcd.print(":");
  lcd.print(t.min);
  lcd.print(":");
  lcd.print(t.sec);
  lcd.print("   ");

detikku = 59 - t.sec;

if(t.sec == 30){

  matrix.drawLine(4, 3, 5, 3 , matrix.Color333(1, 0, 0));
  matrix.drawLine(3, 4, 6, 4 , matrix.Color333(1, 0, 0));
  matrix.drawLine(2, 5, 7, 5 , matrix.Color333(1, 0, 0));
  matrix.drawLine(1, 6, 8, 6 , matrix.Color333(1, 0, 0));
  matrix.drawLine(0, 7, 9, 7 , matrix.Color333(1, 0, 0));
  matrix.drawLine(0, 8, 9, 8 , matrix.Color333(1, 0, 0));
  matrix.drawLine(1, 9, 8, 9 , matrix.Color333(1, 0, 0));
  matrix.drawLine(2, 10, 7, 10 , matrix.Color333(1, 0, 0));
  matrix.drawLine(3, 11, 6, 11 , matrix.Color333(1, 0, 0));
  matrix.drawLine(4, 12, 5, 12 , matrix.Color333(1, 0, 0));

countdown = 30;
matrix.setTextColor(matrix.Color444(1, 1, 1));
matrix.setCursor(10, 1); //x,y
matrix.print(countdown); 
delay(2000);
matrix.fillScreen(0);
}

if(detikku == 10){
  
  matrix.drawLine(4, 3, 5, 3 , matrix.Color333(1, 0, 0));
  matrix.drawLine(3, 4, 6, 4 , matrix.Color333(1, 0, 0));
  matrix.drawLine(2, 5, 7, 5 , matrix.Color333(1, 0, 0));
  matrix.drawLine(1, 6, 8, 6 , matrix.Color333(1, 0, 0));
  matrix.drawLine(0, 7, 9, 7 , matrix.Color333(1, 0, 0));
  matrix.drawLine(0, 8, 9, 8 , matrix.Color333(1, 0, 0));
  matrix.drawLine(1, 9, 8, 9 , matrix.Color333(1, 0, 0));
  matrix.drawLine(2, 10, 7, 10 , matrix.Color333(1, 0, 0));
  matrix.drawLine(3, 11, 6, 11 , matrix.Color333(1, 0, 0));
  matrix.drawLine(4, 12, 5, 12 , matrix.Color333(1, 0, 0));

countdown = 10;
  
matrix.setTextColor(matrix.Color444(1, 1, 1));
matrix.setCursor(10, 1); //x,y
matrix.print(countdown);   
delay(1000);
matrix.fillScreen(0);
}

if((detikku > 0 )&&(detikku <= 5)){
matrix.setTextColor(matrix.Color444(1, 1, 1));
matrix.setCursor(15, 1); //x,y
matrix.print(detikku);   
}

if(detikku > 0){
  matrix.drawLine(4, 3, 5, 3 , matrix.Color333(1, 0, 0));
  matrix.drawLine(3, 4, 6, 4 , matrix.Color333(1, 0, 0));
  matrix.drawLine(2, 5, 7, 5 , matrix.Color333(1, 0, 0));
  matrix.drawLine(1, 6, 8, 6 , matrix.Color333(1, 0, 0));
  matrix.drawLine(0, 7, 9, 7 , matrix.Color333(1, 0, 0));
  matrix.drawLine(0, 8, 9, 8 , matrix.Color333(1, 0, 0));
  matrix.drawLine(1, 9, 8, 9 , matrix.Color333(1, 0, 0));
  matrix.drawLine(2, 10, 7, 10 , matrix.Color333(1, 0, 0));
  matrix.drawLine(3, 11, 6, 11 , matrix.Color333(1, 0, 0));
  matrix.drawLine(4, 12, 5, 12 , matrix.Color333(1, 0, 0));
}

if(detikku == 0){
  matrix.drawLine(4, 3, 5, 3 , matrix.Color333(0, 1, 0));
  matrix.drawLine(3, 4, 6, 4 , matrix.Color333(0, 1, 0));
  matrix.drawLine(2, 5, 7, 5 , matrix.Color333(0, 1, 0));
  matrix.drawLine(1, 6, 8, 6 , matrix.Color333(0, 1, 0));
  matrix.drawLine(0, 7, 9, 7 , matrix.Color333(0, 1, 0));
  matrix.drawLine(0, 8, 9, 8 , matrix.Color333(0, 1, 0));
  matrix.drawLine(1, 9, 8, 9 , matrix.Color333(0, 1, 0));
  matrix.drawLine(2, 10, 7, 10 , matrix.Color333(0, 1, 0));
  matrix.drawLine(3, 11, 6, 11 , matrix.Color333(0, 1, 0));
  matrix.drawLine(4, 12, 5, 12 , matrix.Color333(0, 1, 0));
  matrix.setTextColor(matrix.Color444(0, 1, 0));
  matrix.setCursor(10, 1); //x,y
  matrix.print("GO");   
  delay(3000);
  matrix.fillScreen(0);
}
  delay(1000);
  matrix.fillScreen(0);
}

void setjam(){

  lcd.setCursor(0,0);
  lcd.print("Jam: ");
  lcd.print(jam);
  lcd.print("   ");

btsetx = digitalRead(btset);
btupx = digitalRead(btup);
btdownx = digitalRead(btdown);
btokx = digitalRead(btok);

if(btupx == 0){
delay(200);
jam++;  
}

if(btdownx == 0){
delay(200);
jam--;  
}

if(btokx == 0){
lcd.clear();
delay(2000);
return; 
}

if(jam > 23){
jam = 0;
}

if(jam < 0){
jam = 23;
}  

setjam();
}


void setmenit(){

  lcd.setCursor(0,0);
  lcd.print("Min: ");
  lcd.print(menit);
  lcd.print("   ");

btsetx = digitalRead(btset);
btupx = digitalRead(btup);
btdownx = digitalRead(btdown);
btokx = digitalRead(btok);

if(btupx == 0){
delay(200);
menit++;  
}

if(btdownx == 0){
delay(200);
menit--;  
}

if(btokx == 0){
lcd.clear();
delay(2000);
return; 
}

if(menit > 59){
menit = 0;
}

if(menit < 0){
menit = 59;
}  

setmenit();
}


void setdetik(){

  lcd.setCursor(0,0);
  lcd.print("Detik: ");
  lcd.print(detik);
  lcd.print("   ");

btsetx = digitalRead(btset);
btupx = digitalRead(btup);
btdownx = digitalRead(btdown);
btokx = digitalRead(btok);

if(btupx == 0){
delay(200);
detik++;  
}

if(btdownx == 0){
delay(200);
detik--;  
}

if(btokx == 0){
lcd.clear();
delay(2000);
t.hour = jam;
t.min = menit;
t.sec = detik;
rtc.setTime(jam,menit,detik);     // Set the time to 12:00:00 (24hr format)
return; 
}

if(detik > 59){
detik = 0;
}

if(detik < 0){
detik = 59;
}  

setdetik();




e. VIDEO HASILNYA




Timer Counter Board Mini 4WD 3 Jalur Line / Track

 Timer Counter Board Mini 4WD 3 Jalur Line / Track 

        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang bisa digunakan untuk counter timer untuk balapan mobil mini 4WD, jadi alat ini menggunakan 3 buah sensor sesuai dengan jumlah track yang dipakai kemudian terdapat 3 lap sehingga jika ada yang telah mencapai 3 lap terlebih dahulu dialah yang menang. untuk lebih jelasnya berikut adalah koding dan komponennya.

 

a. Arduino Uno


b. Sensor Proximity


c. Koneksi Arduino ke P10 HUB12



d. Program Arduino IDE

#include <Wire.h>
#include <SPI.h>        //SPI.h must be included as DMD is written by SPI (the IDE complains otherwise)
#include <DMD.h>        //Library DMD yang menyediakan fungsi penampilan teks, gambar dsb
#include <TimerOne.h>   //Library peripheral Timer1 untuk menjalankan prosedur pindai panel DMD
#include <Time.h>     //Library waktu yang menyediakan tipe data, struktur, dan obyek waktu
#include "Arial_black_16.h"
#include "Arial_Black_16_ISO_8859_1.h"
#include "Arial14.h"
#include "DejaVuSans9.h"
#include "Droid_Sans_12.h"
#include "Droid_Sans_16.h"
#include "DejaVuSansItalic9.h"
#include "Mono5x7.h"
#include "SystemFont5x7.h"

#define WAKTU_TAMPIL_JAM      10    //detik
#define WAKTU_TAMPIL_KALENDAR 5     //detik

#define DISPLAY_COLUMN_COUNT  2
#define DISPLAY_ROW_COUNT     1

#define PIXELS_PER_COLUMN  32
#define PIXELS_PER_ROW    16

DMD dmd(DISPLAY_COLUMN_COUNT, DISPLAY_ROW_COUNT);
unsigned char show = 0;

char lineBuff[20];
char lineBuff2[20];

int lineA;
int lineB;
int lineC;
int mulai;
int seconds;
int cs;
long start_time = 0;
int lapa,lapb,lapc;
 
void ScanDMD()
{
  dmd.scanDisplayBySPI();
}


void setup(void)
{
 
  pinMode(2,INPUT);
  pinMode(3,INPUT);
  pinMode(4,INPUT);
 
  dmd.clearScreen( true );   //true is normal (all pixels off), false is negative (all pixels on)
  Serial.begin(9600);
   //initialize TimerOne's interrupt/CPU usage used to scan and refresh the display
  Timer1.initialize( 1000 );           //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 );
 
}


void loop(void)
{

//============================================
lineA = digitalRead(2);
lineB = digitalRead(3);
lineC = digitalRead(4);

if((lineA == 0)&&(lineB == 1)&&(lineC == 1)&&(mulai == 1)){
lapa++;
delay(100);
}

if((lineA == 1)&&(lineB == 0)&&(lineC == 1)&&(mulai == 1)){
lapb++;
delay(100);
}

if((lineA == 1)&&(lineB == 1)&&(lineC == 0)&&(mulai == 1)){
lapc++;
delay(100);
}

if((lineA == 0)&&(lineB == 0)&&(lineC == 1)&&(mulai == 1)){
lapa++;
lapb++;
delay(100);
}

if((lineA == 0)&&(lineB == 1)&&(lineC == 0)&&(mulai == 1)){
lapa++;
lapc++;
delay(100);
}

if((lineA == 1)&&(lineB == 0)&&(lineC == 0)&&(mulai == 1)){
lapb++;
lapc++;
delay(100);
}

if((lineA == 0)&&(lineB == 0)&&(lineC == 0)&&(mulai == 1)){
lapa++;
lapb++;
lapc++;
delay(100);
}

//=============================================
if(lapa > 2){
dmd.clearScreen( true );  
hasila();  
}

if(lapb > 2){
dmd.clearScreen( true );  
hasilb();  
}

if(lapc > 2){
dmd.clearScreen( true );  
hasilc();  
}

//=============================================
lineA = digitalRead(2);

if((lineA == 0)&&(mulai == 0)){
  delay(200);
  mulai = 1;
  start_time = millis();  
}  

if(mulai == 1){
seconds = (millis() - start_time) / 1000;
cs = ((millis() - start_time) / 10) % 100;;
}

//===========================================================================  
sprintf(lineBuff, "%d:%d ", seconds, cs);
dmd.selectFont(Droid_Sans_12);
dmd.drawString( 37,  3, lineBuff, strlen(lineBuff), GRAPHICS_NORMAL);  

sprintf(lineBuff2, "%d/%d/%d ", lapa, lapb, lapc);
dmd.selectFont(Droid_Sans_12);
dmd.drawString( 3,  3, lineBuff2, strlen(lineBuff2), GRAPHICS_NORMAL);  
//===========================================================================

}


void hasila(){
 
sprintf(lineBuff, "%d:%d ", seconds, cs);
dmd.selectFont(Droid_Sans_12);
dmd.drawString( 35,  3, lineBuff, strlen(lineBuff), GRAPHICS_NORMAL);  

sprintf(lineBuff2, " A", lapa, lapb, lapc);
dmd.selectFont(Droid_Sans_12);
dmd.drawString( 3,  3, lineBuff2, strlen(lineBuff2), GRAPHICS_NORMAL);  

hasila();  
}


void hasilb(){
 
sprintf(lineBuff, "%d:%d ", seconds, cs);
dmd.selectFont(Droid_Sans_12);
dmd.drawString( 35,  3, lineBuff, strlen(lineBuff), GRAPHICS_NORMAL);  

sprintf(lineBuff2, " B", lapa, lapb, lapc);
dmd.selectFont(Droid_Sans_12);
dmd.drawString( 3,  3, lineBuff2, strlen(lineBuff2), GRAPHICS_NORMAL);  

hasilb();  
}


void hasilc(){
 
sprintf(lineBuff, "%d:%d ", seconds, cs);
dmd.selectFont(Droid_Sans_12);
dmd.drawString( 35,  3, lineBuff, strlen(lineBuff), GRAPHICS_NORMAL);  

sprintf(lineBuff2, " C", lapa, lapb, lapc);
dmd.selectFont(Droid_Sans_12);
dmd.drawString( 3,  3, lineBuff2, strlen(lineBuff2), GRAPHICS_NORMAL);  

hasilc();  
}

 

e. VIDEO HASILNYA



Simulasi Autoclave Arduino Sensor MPX5500 dan Thermocouple Tipe-K

Simulasi Autoclave Arduino Sensor MPX5500 dan Thermocouple Tipe-K 

      Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang berfungsi untuk memanaskan benda di suhu tertentu agar bersih dari kuman atau bakteri, jadi alat ini terdapat dua sensor yaitu sensor suhu dan sensor tekanan. yang dimonitor adalah suhunya terlebih dahulu kemudian tekanannya dalam satuan bar. untuk lebih jelasnya berikut koding dan kompoennya.

 

a. Komponen


 

b. Program Arduino IDE

#include <Wire.h>
#include <max6675.h>
#include <LiquidCrystal_I2C.h>
#include <DS3231.h>
LiquidCrystal_I2C lcd(0x27,16,2);

int thermoDO = 4; //bisa juga S0
int thermoCS = 5;
int thermoCLK = 6; //bisa juga SCK
int dataku;

MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);

int solenoid = 7;
int heater = 8;
int btset = 12;
int btsetx;
int sp = 125;
int mark;
int buzzer = 9;
int sensorValue;
float sensorVoltage;
float kPa;
float bar;

DS3231 rtc(SDA, SCL);
Time t;


void setup() {
  lcd.begin();
  lcd.noCursor();
  lcd.clear();
  Serial.begin(9600);

  rtc.begin();
  rtc.setDOW(FRIDAY);     // Set Day-of-Week to SUNDAY
  rtc.setTime(0, 0, 0);     // Set the time to 12:00:00 (24hr format)
  rtc.setDate(13, 5, 2022);   // Set the date to January 1st, 2014

  pinMode(btset,INPUT_PULLUP);
  pinMode(solenoid,OUTPUT);
  pinMode(heater,OUTPUT);
  pinMode(buzzer,OUTPUT);
  digitalWrite(solenoid,HIGH); //OFF
  digitalWrite(heater,LOW);
  digitalWrite(buzzer,HIGH); //OFF
  delay(500);  
}


void loop() {
 
 sensorValue = analogRead(A0);
 sensorVoltage = sensorValue * (5.0 / 1023.0);
// convert the reading to it’s PSI equivilant [(Vout = Vs*(0.0018*P+0.04)), (Vs = 5.0Vdc)]
// thus: P= (-V+0.2)/0.009 (kPa)
 kPa = (sensorVoltage - 0.2) / 0.009;
 bar = kPa / 100.0;

  dataku = thermocouple.readCelsius();

  btsetx = digitalRead(btset);
 
 if(btsetx == 0){
  mark = 1;
  lcd.setCursor(10, 1);
  lcd.print("ON");
  }

  lcd.setCursor(0, 0);
  lcd.print("T=");
  lcd.print(dataku);
  lcd.print(" ");
  lcd.print("P=");
  lcd.print(bar);
  lcd.print("   ");
  lcd.setCursor(0, 1);
  lcd.print("SP=");
  lcd.print(sp);
  lcd.print(" ");

if((dataku < sp)&&(mark == 1)){
digitalWrite(heater,HIGH);
}

if((dataku >= sp)&&(mark == 1)){
lcd.clear();
delay(2000);
rtc.setTime(0, 29, 0);
mulai();
pendinginan();
}
 
delay(200);
}


void pendinginan(){

 sensorValue = analogRead(A0);
 sensorVoltage = sensorValue * (5.0 / 1023.0);
// convert the reading to it’s PSI equivilant [(Vout = Vs*(0.0018*P+0.04)), (Vs = 5.0Vdc)]
// thus: P= (-V+0.2)/0.009 (kPa)
 kPa = (sensorVoltage - 0.2) / 0.009;
 bar = kPa / 100.0;
 
  digitalWrite(heater,LOW); //OFF
    
  lcd.setCursor(0, 0);
  lcd.print("Pendinginan");
  lcd.setCursor(0, 1);
  lcd.print("P= ");
  lcd.print(bar);
  lcd.print("   ");

if(bar < 0.1){
   lcd.clear();
   lcd.setCursor(0, 0);
   lcd.print("SOLENOID ON");
   digitalWrite(solenoid,LOW); //ON solenoid
   delay(10000);
   digitalWrite(solenoid,HIGH); //OFF solenoid
   digitalWrite(heater,LOW); //OFF
   mark = 0;
   return;   
}

delay(200);
pendinginan();
}


void mulai(){

 t = rtc.getTime();
 
 sensorValue = analogRead(A0);
 sensorVoltage = sensorValue * (5.0 / 1023.0);
// convert the reading to it’s PSI equivilant [(Vout = Vs*(0.0018*P+0.04)), (Vs = 5.0Vdc)]
// thus: P= (-V+0.2)/0.009 (kPa)
 kPa = (sensorVoltage - 0.2) / 0.009;
 bar = kPa / 100.0;
 
 dataku = thermocouple.readCelsius();

  lcd.setCursor(0, 0);
  lcd.print("T=");
  lcd.print(dataku);
  lcd.print(" ");
  lcd.print("P=");
  lcd.print(bar);
  lcd.print("   ");
 
  lcd.setCursor(0, 1);
  lcd.print("SP=");
  lcd.print(sp);
  lcd.print(" ");
  lcd.print(t.hour);
  lcd.print(":");
  lcd.print(t.min);
  lcd.print(":");
  lcd.print(t.sec);
  lcd.print("   ");

if(dataku < sp){
digitalWrite(heater,HIGH);
}

if(dataku >= sp){
digitalWrite(heater,LOW);
}

if(t.min == 30){
 lcd.clear();
 digitalWrite(buzzer,LOW); //ON
 delay(3000);
 digitalWrite(buzzer,HIGH); //OFF
 return;
}
 
delay(200);  
mulai();  
}

 

 

c. VIDEO HASILNYA


Kendali Motor Stepper Menggunakan Fingerprint Arduino

 Kendali Motor Stepper Menggunakan Fingerprint Arduino

           Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang menggunakan sensor fingerprint untuk mengendalikan motor stepper. alat ini menggunakan driver TB6600 dan arduino. untuk fingerprint yang digunakan menggunakan modul DY-50 untuk lebih jelasnya berikut adalah komponen dan kodingnya.


a. Komponen yang dipakai


b. Program Arduino IDE

#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
#define dirPin 2
#define stepPin 3

int getFingerprintIDez();
int parkir1;
int parkir2;
int parkir3;
int parkir4;
int parkir5;
int parkir6;

int nilaifp;
int a,b,c,d;
int cw, ccw;
int stepsPerRevolution;

SoftwareSerial mySerial(10,11);

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

void setup()
{
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);

  pinMode(A1,INPUT);
  pinMode(A2,INPUT);
  pinMode(A3,INPUT);
  pinMode(A4,INPUT);
  pinMode(A5,INPUT);
  pinMode(A6,INPUT);
 
  Serial.begin(9600);
  Serial.println("fingertest");

  // set the data rate for the sensor serial port
  finger.begin(57600);
 
  if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
  } else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1);
  }
  Serial.println("Waiting for valid finger...");
}

void loop()                     // run over and over again
{
  getFingerprintIDez();
  delay(50);            //don't ned to run this at full speed.
}

uint8_t getFingerprintID() {
  uint8_t p = finger.getImage();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image taken");
      break;
    case FINGERPRINT_NOFINGER:
      Serial.println("No finger detected");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      return p;
    case FINGERPRINT_IMAGEFAIL:
      Serial.println("Imaging error");
      return p;
    default:
      Serial.println("Unknown error");
      return p;
  }

  // OK success!

  p = finger.image2Tz();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image converted");
      break;
    case FINGERPRINT_IMAGEMESS:
      Serial.println("Image too messy");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      return p;
    case FINGERPRINT_FEATUREFAIL:
      Serial.println("Could not find fingerprint features");
      return p;
    case FINGERPRINT_INVALIDIMAGE:
      Serial.println("Could not find fingerprint features");
      return p;
    default:
      Serial.println("Unknown error");
      return p;
  }
 
  // OK converted!
  p = finger.fingerFastSearch();
  if (p == FINGERPRINT_OK) {
    Serial.println("Found a print match!");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("Communication error");
    return p;
  } else if (p == FINGERPRINT_NOTFOUND) {
    Serial.println("Did not find a match");
    return p;
  } else {
    Serial.println("Unknown error");
    return p;
  }  
 
  // found a match!
  Serial.print("Found ID #"); Serial.print(finger.fingerID);
  Serial.print(" with confidence of "); Serial.println(finger.confidence);  
}

// returns -1 if failed, otherwise returns ID #
int getFingerprintIDez() {
  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("Found ID #"); Serial.print(finger.fingerID);
  Serial.print(" with confidence of "); Serial.println(finger.confidence);
  bacasensor();
 
  if(finger.fingerID == 0){
  nilaifp = 1;
  stepsPerRevolution = 0;
  }
 
  if(finger.fingerID == 1){
  nilaifp = 2;
  stepsPerRevolution = 600;
  gerakccw();
  delay(3000);
  stepsPerRevolution = 600;
  gerakcw();
  }
 
  if(finger.fingerID == 2){
  nilaifp = 3;
  stepsPerRevolution = 1200;
  gerakccw();
  delay(3000);
  stepsPerRevolution = 1200;
  gerakcw();
  }

  if(finger.fingerID == 3){
  nilaifp = 4;
  stepsPerRevolution =1800;
  gerakcw();
  delay(3000);
  stepsPerRevolution = 1800;
  gerakccw();
  }

  if(finger.fingerID == 4){
  nilaifp = 5;
  stepsPerRevolution = 1200;
  gerakcw();
  delay(3000);
  stepsPerRevolution = 1200;
  gerakccw();
  }

  if(finger.fingerID == 5){
  nilaifp = 6;
  stepsPerRevolution = 600;
  gerakcw();
  delay(3000);
  stepsPerRevolution = 600;
  gerakccw();
  }

  return finger.fingerID;
}

void gerakcw(){
 
digitalWrite(dirPin, LOW); // CW    
for (int i = 0; i < stepsPerRevolution; i++) {
 digitalWrite(stepPin, HIGH);
 delayMicroseconds(1000); // ganti delay untuk mempercepat motor
 digitalWrite(stepPin, LOW);
 delayMicroseconds(1000); // ganti delay untuk mempercepat motor
}  
 
}

void gerakccw(){
 
digitalWrite(dirPin, HIGH); // CCW    
for (int i = 0; i < stepsPerRevolution; i++) {
 digitalWrite(stepPin, HIGH);
 delayMicroseconds(1000); // ganti delay untuk mempercepat motor
 digitalWrite(stepPin, LOW);
 delayMicroseconds(1000); // ganti delay untuk mempercepat motor
}  
 
}

void bacasensor(){

//jika terdeteksi ada yg parkir nilainya 0
//kosong nilainya 1

parkir1 = digitalRead(A1);
parkir2 = digitalRead(A2);
parkir3 = digitalRead(A3);
parkir4 = digitalRead(A4);
parkir5 = digitalRead(A5);
parkir6 = digitalRead(A6);  

Serial.print("Parkir: ");
Serial.print(parkir1);
Serial.print(parkir2);
Serial.print(parkir3);
Serial.print(parkir4);
Serial.print(parkir5);
Serial.println(parkir6);  
 
}



c. VIDEO HASILNYA


MONITOR TEMPERATURE HUMIDITY DHT11 PANEL P10 RGB HUB75

MONITOR TEMPERATURE HUMIDITY DHT11 PANEL P10 RGB HUB75
 

       Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat memonitor suhu dan kelembaban dengan menggunakan interface panel p10 rgb dengan hub75 dan Arduino. untuk lebih jelasnya berikut adalah komponen dan kodingnya.
 
 
a. Arduino Uno
 

 
b. Panel P10 RGB HUB75
 


 
c. Sensor DHT11
 

 
 
d. Program Arduino IDE

#include <Wire.h>
#include <Adafruit_GFX.h>   
#include <RGBmatrixPanel.h>
#include "DHT.h"  //library dht11

#define DHTPIN 10     // pin digital untuk dht11
#define DHTTYPE DHT11   // set dht11

DHT dht(DHTPIN, DHTTYPE);  //set dht11

#define F2(progmem_ptr) (const __FlashStringHelper *)progmem_ptr

#define CLK 8  // MUST be on PORTB! (Use pin 11 on Mega)
#define LAT A3
#define OE  9
#define A   A0
#define B   A1
#define C   A2

RGBmatrixPanel matrix(A, B, C, CLK, LAT, OE, false);

String t,h;
int suhu,humy;

void setup()
{
  dht.begin();  //mulai dht11
  matrix.begin();
  matrix.setTextWrap(false); // Allow text to run off right edge
  matrix.setTextSize(1);
}

void loop()
{
 
  humy = dht.readHumidity();  //ambil data humidity
  suhu = dht.readTemperature();  //ambil data suhu c
 
  t = String(suhu);
  h = String(humy);
 
  matrix.fillScreen(0);
  matrix.setTextColor(matrix.Color444(1, 0, 0));
  matrix.setCursor(1, 1); //x,y
  matrix.print("T:");
  matrix.setTextColor(matrix.Color444(0, 1, 0));
  matrix.print(t);

  matrix.setTextColor(matrix.Color444(1, 1, 15));
  matrix.setCursor(1, 8); //x,y  
  matrix.print("H:");
  matrix.setTextColor(matrix.Color444(3, 1, 0));
  matrix.print(h);
 
  delay(1000);  
}




e. VIDEO HASILNYA