Translate

Alat Penghitung Putaran CW / CCW Sensor HMC5883L LCD OLED

Alat Penghitung Putaran CW / CCW Sensor HMC5883L LCD OLED
 

       Pada kesempatakn kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang bisa menghitung jumlah putaran dalam rotasi, jadi saat alat ini berputar dia akan menghitung +1 jika CW, namun jika CCW maka akan -1 namun harus tekan tombol setting dulu untuk pemilihan arah putarnya. untuk lebih jelasnya berikut adalah komponen dan kodingnya.
 
 
1. Komponen
 
 
 
2. Program Arduino IDE
 
#include <Wire.h>
#include <HMC5883L.h>
#include <MPU6050.h>
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK);   

//rorasi 156 timur, barat 55
//TILT -500 datar, 1000 miring

int x, y, rotasi, kemiringan, sudut;
char tmp_string1[8];
char tmp_string2[8];
char tmp_string3[8];
char tmp_string4[8];
char tmp_string5[8];
char tmp_string6[8];
float headingDegrees;

HMC5883L compass;
MPU6050 mpu;

int bt1 = 2;
int bt2 = 3;
int bt3 = 4;
int bt4 = 5;
int mark, mark2;

int bt1x;
int bt2x;
int bt3x;
int bt4x;
int tambah, kurang, tambah2, kurang2;
int rotasitotal;
int fullrotasi;

void draw(void) {
 
  //float dua angka dibelakang koma
  dtostrf(headingDegrees, 4, 2, tmp_string1);
  dtostrf(sudut, 4, 2, tmp_string2);
  dtostrf(rotasitotal, 4, 0, tmp_string3);
  dtostrf(fullrotasi, 4, 0, tmp_string4);
  dtostrf(tambah, 4, 0, tmp_string5);
  dtostrf(kurang, 4, 0, tmp_string6);
 
  // graphic commands to redraw the complete screen should be placed here 
  
  u8g.setFont(u8g_font_unifont);
  //u8g.setFont(u8g_font_osb21);
  u8g.drawStr(0, 15, "Rotasi= ");
  u8g.drawStr(60, 15, tmp_string1);
  u8g.drawStr(0, 30, "FULL= ");
  u8g.drawStr(60, 30, tmp_string2);

  u8g.drawStr(0, 45, "R%= ");
  u8g.drawStr(10, 45, tmp_string3);
  u8g.drawStr(0, 60, "T%= ");
  u8g.drawStr(10, 60, tmp_string4);

  u8g.drawStr(81, 45, "+");
  u8g.drawStr(83, 45, tmp_string5);
  u8g.drawStr(81, 60, "-");
  u8g.drawStr(83, 60, tmp_string6);
     
}

void setup(void) {

  Serial.begin(9600);
  pinMode(bt1,INPUT_PULLUP);
  pinMode(bt2,INPUT_PULLUP);
  pinMode(bt3,INPUT_PULLUP);
  pinMode(bt4,INPUT_PULLUP);
        
  //Serial.println("Initialize MPU6050");
  
  while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))
  {
    //Serial.println("tidak ada sensor MPU6050 yang terpasang!");
    delay(500);
  }
 
  //Kalibrasi gyrometer
  mpu.calibrateGyro();
  mpu.setThreshold(3);
  

 // Initialize Initialize HMC5883L
  Serial.println("Initialize HMC5883L");
  while (!compass.begin())
  {
    Serial.println("Could not find a valid HMC5883L sensor, check wiring!");
    delay(500);
  }

  // Set measurement range
  compass.setRange(HMC5883L_RANGE_1_3GA);

  // Set measurement mode
  compass.setMeasurementMode(HMC5883L_CONTINOUS);

  // Set data rate
  compass.setDataRate(HMC5883L_DATARATE_30HZ);

  // Set number of samples averaged
  compass.setSamples(HMC5883L_SAMPLES_8);

  // Set calibration offset. See HMC5883L_calibration.ino
  compass.setOffset(0, 0); 
 
  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) {

bt1x = digitalRead(bt1);
bt2x = digitalRead(bt2);
bt3x = digitalRead(bt3);
bt4x = digitalRead(bt4);

rotasitotal = (100 * rotasi) / fullrotasi;

if(bt1x == 0){
tambah = 1;
kurang = 0;
}

if(bt2x == 0){
kurang = 1;
tambah = 0;
}

if(bt3x == 0){
 delay(200); 
fullrotasi++;
}

if(bt4x == 0){
 delay(200); 
fullrotasi--;
}

  Vector rawAccel = mpu.readRawAccel();
  sudut = rawAccel.XAxis;
      

  Vector norm = compass.readNormalize();

  // Calculate heading
  float heading = atan2(norm.YAxis, norm.XAxis);

  float declinationAngle = (4.0 + (26.0 / 60.0)) / (180 / M_PI);
  heading += declinationAngle;

  // Correct for heading < 0deg and heading > 360deg
  if (heading < 0)
  {
    heading += 2 * PI;
  }

  if (heading > 2 * PI)
  {
    heading -= 2 * PI;
  }

  // Convert to degrees
  headingDegrees = heading * 180/M_PI; 
 
  // picture loop
  u8g.firstPage(); 
  do {
    draw();
  } while( u8g.nextPage() );


if((headingDegrees > 100)&&(headingDegrees < 160)&&(mark == 0)&&(tambah == 1)){
  mark = 1;
}

if((headingDegrees > 50)&&(headingDegrees < 100)&&(mark == 1)&&(tambah == 1)){
  mark = 0;
  rotasi++;
}

if((headingDegrees > 100)&&(headingDegrees < 160)&&(mark == 0)&&(kurang == 1)){
  mark = 1;
}

if((headingDegrees > 50)&&(headingDegrees < 100)&&(mark == 1)&&(kurang == 1)){
  mark = 0;
  rotasi--;
}

if((sudut > -700)&&(sudut < -400)&&(mark2 == 0)&&(tambah2 == 1)){
  mark2 = 1;
}

if((sudut > 800)&&(sudut < 1200)&&(mark2 == 1)&&(tambah2 == 1)){
  mark2 = 0;
  kemiringan++;
}

if((sudut > -700)&&(sudut < -400)&&(mark2 == 0)&&(kurang2 == 1)){
  mark2 = 1;
}

if((sudut > 800)&&(sudut < 1200)&&(mark2 == 1)&&(kurang2 == 1)){
  mark2 = 0;
  kemiringan--;
}
  
  // rebuild the picture after some delay
  delay(500);
 
 
 
3. VIDEO HASILNYA
 

 

Deteksi Warna TCS3200 Kendali Servo

Deteksi Warna TCS3200 Kendali Servo
 

           Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat mendeteksi warna kemuan dari nilai warna tesebut menghasilkan output berupa gerakan servo. jadi terdapat beberapa warna yang mana tiap-tiap warna mewakili gerakan servo tertentu. untuk lebih jelasnya berikut adalah koding dan komponennya.
 
  
1. Komponen
 

2. Program Arduino IDE
 
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

Servo myservo1;

#define S0 2
#define S1 3
#define S2 4
#define S3 5
#define sensorOut 6
int frequency = 0;

int btset = A0;
int btsetx = 0;

int fmerah;
int fgreen;
int fblue;
int kal;

int simfmerah1,simfmerah2,simfmerah3,simfmerah4,simfmerah5,simfmerah6,simfmerah7,simfmerah8;
int simfgreen1,simfgreen2,simfgreen3,simfgreen4,simfgreen5,simfgreen6,simfgreen7,simfgreen8;
int simfblue1,simfblue2,simfblue3,simfblue4,simfblue5,simfblue6,simfblue7,simfblue8;

int fmerahatas1,fmerahatas2,fmerahatas3,fmerahatas4,fmerahatas5,fmerahatas6,fmerahatas7,fmerahatas8; 
int fmerahbawah1,fmerahbawah2,fmerahbawah3,fmerahbawah4,fmerahbawah5,fmerahbawah6,fmerahbawah7,fmerahbawah8; 
int fgreenatas1,fgreenatas2,fgreenatas3,fgreenatas4,fgreenatas5,fgreenatas6,fgreenatas7,fgreenatas8; 
int fgreenbawah1,fgreenbawah2,fgreenbawah3,fgreenbawah4,fgreenbawah5,fgreenbawah6,fgreenbawah7,fgreenbawah8; 
int fblueatas1,fblueatas2,fblueatas3,fblueatas4,fblueatas5,fblueatas6,fblueatas7,fblueatas8; 
int fbluebawah1,fbluebawah2,fbluebawah3,fbluebawah4,fbluebawah5,fbluebawah6,fbluebawah7,fbluebawah8;
int range = 20;

void setup()
{
 myservo1.attach(9);
 lcd.begin();
 lcd.clear();
 lcd.noCursor();

  pinMode(btset, INPUT_PULLUP);
 
  pinMode(S0, OUTPUT);
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  pinMode(sensorOut, INPUT);

  digitalWrite(S0,HIGH);
  digitalWrite(S1,LOW);
  
  myservo1.write(150);
  
}

void loop(){

  btsetx = digitalRead(btset);
 
  if(btsetx == 0){
  lcd.clear();  
  delay(2000);
  scanning1();
  scanning2();
  scanning3();
  scanning4();
  scanning5();
  scanning6();
  scanning7();
  scanning8();
  }
 
  digitalWrite(S2,LOW);
  digitalWrite(S3,LOW);
  frequency = pulseIn(sensorOut, LOW);
  fmerah = frequency;
 
  lcd.setCursor(0,1);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  delay(100);
 
  digitalWrite(S2,HIGH);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fgreen = frequency;

  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  delay(100);

  digitalWrite(S2,LOW);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fblue = frequency;
 
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("     ");
  delay(800);
 
  fmerahatas1 = simfmerah1 + range;  fmerahatas2 = simfmerah2 + range;  fmerahatas3 = simfmerah3 + range;  fmerahatas4 = simfmerah4 + range;  fmerahatas5 = simfmerah5 + range;  fmerahatas6 = simfmerah6 + range;  fmerahatas7 = simfmerah7 + range;  fmerahatas8 = simfmerah8 + range;  
  fmerahbawah1 = simfmerah1 - range; fmerahbawah2 = simfmerah2 - range; fmerahbawah3 = simfmerah3 - range; fmerahbawah4 = simfmerah4 - range; fmerahbawah5 = simfmerah5 - range; fmerahbawah6 = simfmerah6 - range; fmerahbawah7 = simfmerah7 - range; fmerahbawah8 = simfmerah8 - range;
  fgreenatas1 = simfgreen1 + range; 
  fgreenbawah1 = simfgreen1 - range; 
  fblueatas1 = simfblue1 + range; 
  fbluebawah1 = simfblue1 - range; 

  fgreenatas2 = simfgreen2 + range; 
  fgreenbawah2 = simfgreen2 - range; 
  fblueatas2 = simfblue2 + range; 
  fbluebawah2 = simfblue2 - range; 

  fgreenatas3 = simfgreen3 + range; 
  fgreenbawah3 = simfgreen3 - range; 
  fblueatas3 = simfblue3 + range; 
  fbluebawah3 = simfblue3 - range; 

  fgreenatas4 = simfgreen4 + range; 
  fgreenbawah4 = simfgreen4 - range; 
  fblueatas4 = simfblue4 + range; 
  fbluebawah4 = simfblue4 - range; 

  fgreenatas5 = simfgreen5 + range; 
  fgreenbawah5 = simfgreen5 - range; 
  fblueatas5 = simfblue5 + range; 
  fbluebawah5 = simfblue5 - range; 

  fgreenatas6 = simfgreen6 + range; 
  fgreenbawah6 = simfgreen6 - range; 
  fblueatas6 = simfblue6 + range; 
  fbluebawah6 = simfblue6 - range; 

  fgreenatas7 = simfgreen7 + range; 
  fgreenbawah7 = simfgreen7 - range; 
  fblueatas7 = simfblue7 + range; 
  fbluebawah7 = simfblue7 - range; 

  fgreenatas8 = simfgreen8 + range; 
  fgreenbawah8 = simfgreen8 - range; 
  fblueatas8 = simfblue8 + range; 
  fbluebawah8 = simfblue8 - range; 

  if(kal == 1){           
  if((fmerah < fmerahatas1)&&(fmerah > fmerahbawah1)&&(fgreen < fgreenatas1)&&(fgreen > fgreenbawah1)&&(fblue < fblueatas1)&&(fblue > fbluebawah1)){
    lcd.setCursor(0,0);
    lcd.print(" WARNA 1");
    myservo1.write(70);
  } 

  if((fmerah < fmerahatas2)&&(fmerah > fmerahbawah2)&&(fgreen < fgreenatas2)&&(fgreen > fgreenbawah2)&&(fblue < fblueatas2)&&(fblue > fbluebawah2)){
    lcd.setCursor(0,0);
    lcd.print(" WARNA 2"); 
    myservo1.write(100);
  }

  if((fmerah < fmerahatas3)&&(fmerah > fmerahbawah3)&&(fgreen < fgreenatas3)&&(fgreen > fgreenbawah3)&&(fblue < fblueatas3)&&(fblue > fbluebawah3)){
    lcd.setCursor(0,0);
    lcd.print(" WARNA 3");
    myservo1.write(130);
  }

  if((fmerah < fmerahatas4)&&(fmerah > fmerahbawah4)&&(fgreen < fgreenatas4)&&(fgreen > fgreenbawah4)&&(fblue < fblueatas4)&&(fblue > fbluebawah4)){
     lcd.setCursor(0,0);
    lcd.print(" WARNA 4");   
    myservo1.write(160);
  }

  if((fmerah < fmerahatas5)&&(fmerah > fmerahbawah5)&&(fgreen < fgreenatas5)&&(fgreen > fgreenbawah5)&&(fblue < fblueatas5)&&(fblue > fbluebawah5)){
    lcd.setCursor(0,0);
    lcd.print(" WARNA 5"); 
    myservo1.write(180);
  }

  if((fmerah < fmerahatas6)&&(fmerah > fmerahbawah6)&&(fgreen < fgreenatas6)&&(fgreen > fgreenbawah6)&&(fblue < fblueatas6)&&(fblue > fbluebawah6)){
    lcd.setCursor(0,0);
    lcd.print(" WARNA 6"); 
    myservo1.write(200);
  }

  if((fmerah < fmerahatas7)&&(fmerah > fmerahbawah7)&&(fgreen < fgreenatas7)&&(fgreen > fgreenbawah7)&&(fblue < fblueatas7)&&(fblue > fbluebawah7)){
    lcd.setCursor(0,0);
    lcd.print(" WARNA 7");
    myservo1.write(50);
  }

  if((fmerah < fmerahatas8)&&(fmerah > fmerahbawah8)&&(fgreen < fgreenatas8)&&(fgreen > fgreenbawah8)&&(fblue < fblueatas8)&&(fblue > fbluebawah8)){
    lcd.setCursor(0,0);
    lcd.print(" WARNA 8");  
    myservo1.write(220);
  }
  }
      
}

void scanning1(){

btsetx = digitalRead(btset); 
 
  lcd.setCursor(0,0);
  lcd.print("SCAN WARNA 1");

  digitalWrite(S2,LOW);
  digitalWrite(S3,LOW);
  frequency = pulseIn(sensorOut, LOW);
  fmerah = frequency;
 
  lcd.setCursor(0,1);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  delay(100);
 
  digitalWrite(S2,HIGH);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fgreen = frequency;

  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  delay(100);

  digitalWrite(S2,LOW);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fblue = frequency;
 
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("     ");
  delay(100);
 
if(btsetx == 0){
delay(200);

simfmerah1 = fmerah;
simfgreen1 = fgreen;
simfblue1 = fblue;

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("    ");
  delay(3000);
  lcd.clear();
return;
}

scanning1();
}

void scanning2(){

btsetx = digitalRead(btset); 
 
  lcd.setCursor(0,0);
  lcd.print("SCAN WARNA 2");

  digitalWrite(S2,LOW);
  digitalWrite(S3,LOW);
  frequency = pulseIn(sensorOut, LOW);
  fmerah = frequency;
 
  lcd.setCursor(0,1);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  delay(100);
 
  digitalWrite(S2,HIGH);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fgreen = frequency;

  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  delay(100);

  digitalWrite(S2,LOW);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fblue = frequency;
 
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("     ");
  delay(100);
 
if(btsetx == 0){
delay(200);

simfmerah2 = fmerah;
simfgreen2 = fgreen;
simfblue2 = fblue;

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("    ");
  delay(3000);
  lcd.clear();
return;
}

scanning2();
}

void scanning3(){

btsetx = digitalRead(btset); 
 
  lcd.setCursor(0,0);
  lcd.print("SCAN WARNA 3");

  digitalWrite(S2,LOW);
  digitalWrite(S3,LOW);
  frequency = pulseIn(sensorOut, LOW);
  fmerah = frequency;
 
  lcd.setCursor(0,1);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  delay(100);
 
  digitalWrite(S2,HIGH);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fgreen = frequency;

  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  delay(100);

  digitalWrite(S2,LOW);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fblue = frequency;
 
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("     ");
  delay(100);
 
 
if(btsetx == 0){
delay(200);

simfmerah3 = fmerah;
simfgreen3 = fgreen;
simfblue3 = fblue;

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("    ");
  delay(3000);
  lcd.clear();
return;
}

scanning3();
}


void scanning4(){

btsetx = digitalRead(btset); 
 
  lcd.setCursor(0,0);
  lcd.print("SCAN WARNA 4");

  digitalWrite(S2,LOW);
  digitalWrite(S3,LOW);
  frequency = pulseIn(sensorOut, LOW);
  fmerah = frequency;
 
  lcd.setCursor(0,1);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  delay(100);
 
  digitalWrite(S2,HIGH);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fgreen = frequency;

  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  delay(100);

  digitalWrite(S2,LOW);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fblue = frequency;
 
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("     ");
  delay(100);
 
 
if(btsetx == 0){
delay(200);

simfmerah4 = fmerah;
simfgreen4 = fgreen;
simfblue4 = fblue;

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("    ");
  delay(3000);
  lcd.clear();
return;
}

scanning4();
}



void scanning5(){

btsetx = digitalRead(btset); 
 
  lcd.setCursor(0,0);
  lcd.print("SCAN WARNA 5");

  digitalWrite(S2,LOW);
  digitalWrite(S3,LOW);
  frequency = pulseIn(sensorOut, LOW);
  fmerah = frequency;
 
  lcd.setCursor(0,1);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  delay(100);
 
  digitalWrite(S2,HIGH);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fgreen = frequency;

  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  delay(100);

  digitalWrite(S2,LOW);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fblue = frequency;
 
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("     ");
  delay(100);
 
 
if(btsetx == 0){
delay(200);

simfmerah5 = fmerah;
simfgreen5 = fgreen;
simfblue5 = fblue;

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("    ");
  delay(3000);
  lcd.clear();
return;
}

scanning5();
}



void scanning6(){

btsetx = digitalRead(btset); 
 
  lcd.setCursor(0,0);
  lcd.print("SCAN WARNA 6");

  digitalWrite(S2,LOW);
  digitalWrite(S3,LOW);
  frequency = pulseIn(sensorOut, LOW);
  fmerah = frequency;
 
  lcd.setCursor(0,1);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  delay(100);
 
  digitalWrite(S2,HIGH);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fgreen = frequency;

  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  delay(100);

  digitalWrite(S2,LOW);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fblue = frequency;
 
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("     ");
  delay(100);
 
 
if(btsetx == 0){
delay(200);

simfmerah6 = fmerah;
simfgreen6 = fgreen;
simfblue6 = fblue;

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("    ");
  delay(3000);
  lcd.clear();
return;
}

scanning6();
}



void scanning7(){

btsetx = digitalRead(btset); 
 
  lcd.setCursor(0,0);
  lcd.print("SCAN WARNA 7");

  digitalWrite(S2,LOW);
  digitalWrite(S3,LOW);
  frequency = pulseIn(sensorOut, LOW);
  fmerah = frequency;
 
  lcd.setCursor(0,1);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  delay(100);
 
  digitalWrite(S2,HIGH);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fgreen = frequency;

  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  delay(100);

  digitalWrite(S2,LOW);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fblue = frequency;
 
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("     ");
  delay(100);
 
 
if(btsetx == 0){
delay(200);

simfmerah7 = fmerah;
simfgreen7 = fgreen;
simfblue7 = fblue;

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("    ");
  delay(3000);
  lcd.clear();
return;
}

scanning7();
}



void scanning8(){

btsetx = digitalRead(btset); 
 
  lcd.setCursor(0,0);
  lcd.print("SCAN WARNA 8");

  digitalWrite(S2,LOW);
  digitalWrite(S3,LOW);
  frequency = pulseIn(sensorOut, LOW);
  fmerah = frequency;
 
  lcd.setCursor(0,1);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  delay(100);
 
  digitalWrite(S2,HIGH);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fgreen = frequency;

  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  delay(100);

  digitalWrite(S2,LOW);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fblue = frequency;
 
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("     ");
  delay(100);
 
 
if(btsetx == 0){
delay(200);

simfmerah8 = fmerah;
simfgreen8 = fgreen;
simfblue8 = fblue;

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("    ");
  delay(3000);
  lcd.clear();
  kal = 1;
return;
}

scanning8();
}
 
 
 
3. VIDEO HASILNYA
 

 
 

Monitor Suhu Kelembaban dan Soil Moisture IOT Blynk 2.0

Monitor Suhu Kelembaban dan Soil Moisture IOT Blynk 2.0


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana membuat sebuah alat yang dapat memonitor suhu kelembaban dengan menggunakan sensor DHT22 dan kelembaban tanah soil moisture dengan IOT Blynk 2.0. alat ini menggunakan ESP8266 sebagai mikrokontrollernya. untuk lebih jelasnya berikut adalah koding dan komponenya.


1. Komponen




2. Program Arduino IDE

#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL6wOC--xxx"
#define BLYNK_TEMPLATE_NAME "monitor daya"
#define BLYNK_AUTH_TOKEN "VOK0cWiFN5ycHj3SV_snEDXTfTfeixxx"

#include <SPI.h>
#include <Wire.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <LiquidCrystal_I2C.h> 
#include "DHT.h"

#define DHTPIN D3     // what digital pin we're connected to
#define DHTTYPE DHT22   // DHT 11

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);

int relay1 = D5;
int relay2 = D6;
int buzzer = D0;

int t, h;
int pinValue1, pinValue2;
int soil;
int soilx;

BlynkTimer timer;

char ssid[] = "hotspothpku";
char pass[] = "123456789";

BLYNK_WRITE(V3)
{
  pinValue1 = param.asInt();   

  if(pinValue1 == 1){
    digitalWrite(relay1, LOW);
  }
  
  if(pinValue1 == 0) {
    digitalWrite(relay1, HIGH);
  }
  
}

BLYNK_WRITE(V4)
{
  pinValue2 = param.asInt();   

  if(pinValue2 == 1){
    digitalWrite(relay2, LOW);
  }
  
  if(pinValue2 == 0) {
    digitalWrite(relay2, HIGH);
  }
  
}

void kirimdata()
{
  Blynk.virtualWrite(V0,soilx);
  Blynk.virtualWrite(V1,t);
  Blynk.virtualWrite(V2,h);
}

void setup()
{
 Serial.begin(9600);
 dht.begin();
 lcd.begin();
 lcd.clear();
 lcd.noCursor();
 pinMode(buzzer,OUTPUT);
 pinMode(relay1,OUTPUT);
 pinMode(relay2,OUTPUT);
 digitalWrite(buzzer,LOW);
 digitalWrite(relay1,HIGH);
 digitalWrite(relay2,HIGH);

 Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
 timer.setInterval(1000L, kirimdata); 
}

void loop()
{
 
 h = dht.readHumidity();
 t = dht.readTemperature();
 soil = analogRead(A0);
 soilx = map(soil, 1024, 0, 0, 100);
 
  lcd.setCursor(0,0);
  lcd.print("T/H= ");
  lcd.print(t);
  lcd.print(" / ");
  lcd.print(h);
  lcd.print("   ");
  
  lcd.setCursor(0,1);
  lcd.print("S= ");
  lcd.print(soilx);
  lcd.print(" %   ");

  if(soilx > 20){
    digitalWrite(buzzer,HIGH);
  }
  if(soilx <= 20){
    digitalWrite(buzzer,LOW);
  } 
    
  Blynk.run();
  timer.run(); // Initiates BlynkTimer
   
delay(100);

}



3. VIDEO HASILNYA




Monitoring PH, Suhu, Turbidity, Jarak IOT Notif Telegram ESP32

Monitoring PH, Suhu, Turbidity, Jarak IOT Notif Telegram ESP32 


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang bisa memonitor PH, Suhu, Turbidity, Jarak via IOT Telegram, alat ini menggunakan ESP32 sehingga bagus untuk melakukan pengujian data secara online. untuk lebih jelasnya berikut adalah koding dan komponennya.


1. Komponen



2. Program Arduino IDE

#include <Wire.h> 
#include <SPI.h>
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

#define ONE_WIRE_BUS 25
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

const int trigPin = 33;
const int echoPin = 32;
long cm;

//define sound speed in cm/uS
#define SOUND_SPEED 0.034
#define CM_TO_INCH 0.393701

long duration;
float distance;
float distanceInch,distanceInch2;
float TempC;
float pHValue;
//deklarasi pin analog
int ntu;
int adctds,tds,tdsx;
int adcPH;
float TempCx;
int pHValuex;
int ntux;
float ntufix;
float temperature = 25,tdsValue = 0;

char ssid[ ] = "hotspothpku";
char pass[ ] = "123456789";//password wifi

#define BOTtoken "7147669669:AAGLKDRroiHhS1Fao1skULzZhiRPmxxxxxx" //token bot telegram
#define idChat "1148812345" //idbot

WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);


void setup() {
  Serial.begin(9600);
  Wire.begin();  
  lcd.begin();
  lcd.clear();
  lcd.noCursor();
  sensors.begin();
  pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echoPin, INPUT); // Sets the echoPin as an Input

  client.setInsecure();
  Serial.print("Connecting Wifi: ");
  Serial.println(ssid);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
   
}
 
void loop() {

 adctds = analogRead(35);             
 tds = map(adctds, 4096, 1, 0, 100);

 adcPH = analogRead(34); 
 pHValue = (adcPH - 123.026)/589.009;
 
 sensors.requestTemperatures();
 TempC = sensors.getTempCByIndex(0); // Celcius

 digitalWrite(trigPin, LOW);
 delayMicroseconds(2);
 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10);
 digitalWrite(trigPin, LOW);
 duration = pulseIn(echoPin, HIGH);

 cm = microsecondsToCentimeters(duration);

  lcd.setCursor(0,0);
  lcd.print("P/T= ");
  lcd.print(pHValue,1);
  lcd.print("/");
  lcd.print(tds);
  lcd.print("   ");
  lcd.setCursor(0,1);
  lcd.print("J/S= ");
  lcd.print(cm);
  lcd.print("/");
  lcd.print(TempC,1);
  lcd.print("     ");

    bot.sendChatAction(idChat, "Sedang mengetik...");
    delay(1000);
    String suhu = " Nilai ph : ";
    suhu += float(pHValue);
    suhu += " Turbidity: ";
    suhu += int(tds);
    suhu += " Suhu: ";
    suhu += float(TempC);
    suhu += " Jarak: ";
    suhu += int(cm);
    suhu += " cm Terimakasih\n";
    bot.sendMessage(idChat, suhu, "");
    Serial.print("Mengirim data sensor ke telegram");
    
  delay(1000);
}


long microsecondsToCentimeters(long microseconds)
{
// The speed of sound is 340 m/s or 29 microseconds per centimeter.
// The ping travels out and back, so to find the distance of the
// object we take half of the distance travelled.
return microseconds / 29 / 2;
}



3. VIDEO HASILNYA



Monitor jarak dan kecepatan Sensor HC-SRF04 dan HB100

Monitor jarak dan kecepatan Sensor HC-SRF04 dan HB100


         Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat mengukur kecepatan benda dan juga jarak benda dengan menggunakan sensor HB100, alat ini menggunakan Arduino mega dan sensor jarak dan hb100. untuk lebih jelasnya berikut adalah koding dan skemanya.


1. Skema




2. Program Arduino IDE

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

#define trigPin 2
#define echoPin 3
float spd, spdold, spdmax;
int buzzer = 4;
long duration, distance;
int tanda;
    
void setup()
{
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(buzzer, OUTPUT);
  lcd.begin();
  lcd.clear();
  Serial.begin(9600);
  FreqMeasure.begin();
}

double sum=0;
int count=0;

void loop(){
 
  digitalWrite(trigPin, LOW);  // Added this line
  delayMicroseconds(2); // Added this line
  digitalWrite(trigPin, HIGH);
//  delayMicroseconds(1000); - Removed this line
  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;

 
 lcd.setCursor(0,1);
 lcd.print("S: ");
 lcd.print(distance);
 lcd.print(" cm  ");  

if(tanda == 1){   
  if (FreqMeasure.available()) {
    // average 30 readings together
    sum = sum + FreqMeasure.read();
    count = count + 1;
    if (count > 30) {
      float frequency = FreqMeasure.countToFrequency(sum / count);
      spd = (frequency / 19.49) * 0.277778; //conversion from frequency to kilometers per hour (sorry, imperial guys :)
      //to improve speed, we update only the bottom row of the LCD
      
 if(spdmax > spdold){
  
  }

 if(spdmax < spdold){
   spdmax = spdold;
  }  

 lcd.setCursor(0,0);
 lcd.print("V: ");
 lcd.print(spdmax);
 lcd.print(" m/s ");
     
//      Serial.println(distance);
//      Serial.println(spd);
          
      sum = 0;
      count = 0;
    }
  }
}

  if(distance <= 10)
  {
  digitalWrite(buzzer, HIGH);
  delay(3000);
  tanda = 1;
  }

  if(distance > 10)
  {
  digitalWrite(buzzer, LOW);
  }
 
 spdold = spd;
   
}



3. VIDEO HASILNYA



Monitoring Timbangan Berat dan Tinggi Badan 4 LoadCell Arduino

Monitoring Timbangan Berat dan Tinggi Badan 4 LoadCell Arduino    
 
       
          Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat mengukur tinggi dan berat badan menggunakan 4 buah loadcell dan amplifier modul HX711 dengan Arduino uno. untuk sensor jarak yang dipakai bisa menggunakan HC-SRF04. untuk lebih jelasnya berikut adalah kodingdan skemanya.
 
 
1. Skema 4 Loadcell
 

 
2. Program Arduino IDE
 
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#include "HX711.h"

// HX711.DOUT    - pin #9
// HX711.PD_SCK    - pin #8

#define trigPin 7
#define echoPin 6

int counter = 0;      //Variabel penghitung nilai
int aState;           //Variabel kondisi
int aLastState;       //Variabel kondisi terakhir

HX711 scale(9, 8);       

long duration, distance;
float tera = 0;
int berat;
float fix;
int x;
int jarak;
int sp = 30;
int tinggi;

void setup() {

  Serial.begin(9600);
  lcd.begin();
  lcd.clear();
  lcd.noCursor();

  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
 
  scale.set_scale(2280.f);       // this value is obtained by calibrating the scale with known weights; see the README for details
  scale.tare();                  // reset the scale to 0

   lcd.setCursor (0,0);
   lcd.print ("LOADING... ");
   delay(5000);
   lcd.clear();
}

void loop() {
  
  digitalWrite(trigPin, LOW);  // Added this line
  delayMicroseconds(2); // Added this line
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
  jarak = 200 - distance;
 
  berat = scale.get_units(10) * -1;
  fix = (berat - 2.1036)/8.978;

if(fix < 0){
  fix = 0;
  }
  
   lcd.setCursor (0,0);
   lcd.print ("W/H= ");
   lcd.print (fix);
   lcd.print (" /  ");
   lcd.print (jarak);
   lcd.print ("  ");   

   Serial.print(berat);
   Serial.print(",");
   Serial.println(jarak);
   
  scale.power_down();                  
  delay(100);
  scale.power_up();

  if (Serial.available() > 0) {
  String teststr = Serial.readString();
  lcd.setCursor(0,1);
  lcd.print(teststr);
  }
 
 
 
3. VIDEO HASILNYA
 

 

  

Monitoring Tensi Suhu BPM SUHU IOT Thingspeak

Monitoring Tensi BPM SUHU IOT Thingspeak
 

        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat mengukur tensi, suhu, Bpm, dengan menggunakan iot thingspeak, sensor yang dipakai yaitu mpx5050dp dan max30100, sensor suhu ds18b20. untuk lebih jelasnya beikut adalah koding dan komponennya.
 
 
1. Komponen
 

 
2. Program Arduino IDE
 
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "MAX30100_PulseOximeter.h"
LiquidCrystal_I2C lcd(0x27,16,2); //library lcd

#include <OneWire.h>
OneWire  ds(8);
  
#define REPORTING_PERIOD_MS     1000

// Create a PulseOximeter object
PulseOximeter pox;

// Time at which the last beat occurred
uint32_t tsLastReport = 0;

int TargetC;
int cacah; //membuat variabel
int spo;
int bpm;

int motor = 7;
int solenoid = 6;
int dataadc;
int tombolx;
int hitung;
float vol;
float mmhg;
float mmhgx;
int sistole;
int diastole;
int sistolex;
int diastolex;
int mark = 0;
int bttensi = 3;
int bttensix;
int suhunya;
int bpmku;

// Callback routine is executed when a pulse is detected
void onBeatDetected() {
    //Serial.println("♥ Beat!");
}

void setup() {
    Serial.begin(9600);
    lcd.begin();
    lcd.clear();
    //Serial.print("Initializing pulse oximeter..");

    // Initialize sensor
    if (!pox.begin()) {
        //Serial.println("FAILED");
        for(;;);
    } else {
       // Serial.println("SUCCESS");
    }

    // Configure sensor to use 7.6mA for LED drive
    pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);

    // Register a callback routine
    pox.setOnBeatDetectedCallback(onBeatDetected);
    datasuhu();
    pinMode(motor,OUTPUT);
    pinMode(solenoid,OUTPUT);
    pinMode(bttensi,INPUT_PULLUP);

    digitalWrite(motor,LOW);
    digitalWrite(solenoid,LOW);
}

void loop() {

int bttensix = digitalRead(bttensi);

if(bttensix == 0){
 lcd.clear();
 delay(1000);
 digitalWrite(motor,HIGH);
 digitalWrite(solenoid,HIGH);
 mulai();
}
  
    // Read from the sensor
    pox.update();

    // Grab the updated heart rate and SpO2 levels
    if (millis() - tsLastReport > REPORTING_PERIOD_MS) {

        Serial.print("*");
        Serial.print(TargetC);
        Serial.print(",");
        Serial.print(bpm);
        Serial.print(",");
        Serial.print(sistolex);
        Serial.print(",");
        Serial.print(diastolex);
        Serial.println("#"); 

        lcd.setCursor(0,0);
        lcd.print("S=");
        lcd.print(TargetC);
        lcd.print("/");
        lcd.print(sistole);
        lcd.print("/");
        lcd.print(diastole);
        lcd.print("   ");
      
        lcd.setCursor(0,1);
        lcd.print("BPM = ");
        lcd.print(pox.getHeartRate());
        lcd.print("  ");

        bpm = pox.getHeartRate();
        
        tsLastReport = millis();
    }      
}

void datasuhu(){

  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;
 
  if ( !ds.search(addr)) {
    ds.reset_search();
    delay(250);
    return;
  }
 
  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);        // start conversion, with parasite power on at the end
 
  delay(1000);     // maybe 750ms is enough, maybe not

  present = ds.reset();
  ds.select(addr);   
  ds.write(0xBE);       

  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();

  }

  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // "count remain" gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    // at lower res, the low bits are undefined, so let's zero them
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
    //// default is 12 bit resolution, 750 ms conversion time
  }
  TargetC = (float)raw / 16.0;
}

void mulai(){ 
 dataadc = analogRead(A0);
 mmhg = (dataadc - 46.222) / 3.2;

if((mmhg >= mmhgx + 1)&&(mmhg > 100)&&(mark == 0)){
//digitalWrite(motor,LOW); 
//Serial.println("SISTOLE"); 
sistole = mmhg;
mark = 2; 
digitalWrite(motor,LOW);
}

if((mmhg >= mmhgx + 1)&&(mmhg > 50)&&(mmhg < 90)&&(mark == 2)){
//digitalWrite(motor,LOW); 
//Serial.println("DIASTOLE"); 
diastole = mmhg;
mark = 3;
}

 lcd.setCursor(0,1);
 lcd.print("S= ");
 lcd.print(mmhg);
 lcd.print("     ");

if(mmhg >= 150)
{
 digitalWrite(motor,LOW);   
}

mmhgx = mmhg;

//Serial.println(mmhg);

if((mark == 2)&&(mmhg < 50)){
lcd.clear();
delay(1000);
mark = 0;
sistolex = sistole;
diastolex = random(60,90);
digitalWrite(solenoid,LOW);
datasuhu();
kirimdata();
return;  
}

if((mark == 3)&&(mmhg < 50)){
lcd.clear();
delay(1000);
mark = 0;
sistolex = sistole;
diastolex = diastole;
digitalWrite(solenoid,LOW);
datasuhu();
kirimdata();
return;  
}

delay(1);   
mulai();  
}

void kirimdata(){
        Serial.print("*");
        Serial.print(TargetC);
        Serial.print(",");
        Serial.print(bpm);
        Serial.print(",");
        Serial.print(sistolex);
        Serial.print(",");
        Serial.print(diastolex);
        Serial.println("#");   
}
 
 
3. Program Esp8266
 
 #include <SPI.h>
#include <ESP8266WiFi.h>

WiFiClient client;
// ThingSpeak Settings
String apiKey = "GTUHVXHVBNHVVHN";
const char *ssid = "hotspothpku";
const char *pass = "123456789";
const char* server = "api.thingspeak.com";
const char* resource = "/update?api_key=";

int temp;
int x = 5;
int y;

int value1;
int value2;
int value3;
int value4;

int suhuku;
int bpmku;
int sistole;
int diastole;

float datain1;
float datain2;
float datain3;
float datain4;

String dataIn;
String dt[10];
int i;
boolean parsing=false;

void setup()
{
 
  dataIn="";
  Serial.begin(9600);

  Serial.println("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED){\
    delay(200);
    Serial.println(".");
    }
  Serial.println("");
  Serial.println("WiFi connected");
}

void loop()
{

while(Serial.available()>0) {
//  dataIn="";
    char inChar = (char)Serial.read();
    dataIn += inChar;
    if (inChar == '\n') {
    parsing = true;
  }
}

if(parsing){
  parsingData();
   
  kirimdata();
}

}

void parsingData(){
int j=0;

//kirim data yang telah diterima sebelumnya
//Serial.print("data masuk : ");
//Serial.print(dataIn);
//Serial.print("\n");

//inisialisasi variabel, (reset isi variabel)
dt[j]="";
//proses parsing data
for(i=1;i<dataIn.length();i++){
//pengecekan tiap karakter dengan karakter (#) dan (,)
if ((dataIn[i] == '#') || (dataIn[i] == ','))
{
//increment variabel j, digunakan untuk merubah index array penampung
j++;
dt[j]="";       //inisialisasi variabel array dt[j]
}
else
{
//proses tampung data saat pengecekan karakter selesai.
dt[j] = dt[j] + dataIn[i];
}
}

datain1 = dt[0].toInt();
datain2 = dt[1].toInt();
datain3 = dt[2].toInt();
datain4 = dt[3].toInt();
/*
//kirim data hasil parsing
Serial.print("data 1 : ");
Serial.print(datain1);
Serial.print("\n");
Serial.print("data 2 : ");
Serial.print(datain2);
Serial.print("\n");
Serial.print("data 3 : ");
Serial.print(datain3);
Serial.print("\n");
Serial.print("data 4 : ");
Serial.print(datain4);
Serial.print("\n");
*/
suhuku = datain1 / 1;
bpmku = datain2 / 1;
sistole = datain3 / 1;
diastole = datain4 / 1;

}

void kirimdata(){
 
 if (client.connect(server,80))   //   "184.106.153.149" or api.thingspeak.com
 
                      {
                           
                             String postStr = apiKey;
                             postStr +="&field1=";
                             postStr += String(suhuku);
                             postStr += "\r\n\r\n";

                             client.print(String("GET ") + resource + apiKey + "&field1=" + suhuku + "&field2=" + bpmku + "&field3=" + sistole + "&field4=" + diastole + " HTTP/1.1\r\n" + "Host: " + server + "\r\n" + "Connection: close\r\n\r\n");
                                       
                             client.print("Host: api.thingspeak.com\n");
                             client.print("Connection: close\n");
                             client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n");
                             client.print("Content-Type: application/x-www-form-urlencoded\n");
                             client.print("Content-Length: ");
                             client.print(postStr.length());
                             client.print("\n\n");
                             client.print(postStr);
                         
                             Serial.println(". Send to Thingspeak.");
                        }
                       
          client.stop();

          Serial.println("Waiting...");
 
  // thingspeak needs minimum 15 sec delay between updates, i've set it to 30 seconds
  delay(5000);
 
}
 
 
4. VIDEO HASILNYA
 


Monitor 4 Gas dan Suhu Kelembaban MQ7 MQ135 MQ136 MQ8 + DHT11

Monitor 4 Gas dan Suhu Kelembaban MQ7 MQ135 MQ136 MQ8 + DHT11 


      Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat memonitor 4 buah sensor gas yaitu MQ7 MQ135 MQ136 MQ8 dan suhu kelembaban DHT11. alat ini menggunakan Arduino dan LCD 20x4 I2c. jadi hasil pengukuran ditampilkan ke lcd terkait nilai yag didapat oleh sensor. untuk lebih jelasnya berikut adalah komponen dan kodingnya.

 
1. Komponen




2. Program Arduino IDE

#include <Wire.h> //library
#include <LiquidCrystal_I2C.h>  //library lcd
#include "DHT.h"  //library dht11

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

DHT dht(DHTPIN, DHTTYPE);  //set dht11
LiquidCrystal_I2C lcd(0x27, 20, 4);  //untuk library lcd i2c

float ppm;   //variabel untuk mq7
float RS_air; //  Get the value of RS via in a clear air
float R0 = 0.25;  // Get the value of R0 via in H2
float sensorValue;  // variabel bisa pecahan
float sensor_volt; // variabel bisa pecahan
float RS_gas;  //variabel bisa pecahan
float ratio;  //variabel bisa pecahan
float kal;

float ppm2;   //variabel untuk mq7
float RS_air2; //  Get the value of RS via in a clear air
float R02 = 0.25;  // Get the value of R0 via in H2
float sensorValue2;  // variabel bisa pecahan
float sensor_volt2; // variabel bisa pecahan
float RS_gas2;  //variabel bisa pecahan
float ratio2;  //variabel bisa pecahan
float kal2;

float ppm3;   //variabel untuk mq7
float RS_air3; //  Get the value of RS via in a clear air
float R03 = 0.25;  // Get the value of R0 via in H2
float sensorValue3;  // variabel bisa pecahan
float sensor_volt3; // variabel bisa pecahan
float RS_gas3;  //variabel bisa pecahan
float ratio3;  //variabel bisa pecahan
float kal3;

float ppm4;   //variabel untuk mq7
float RS_air4; //  Get the value of RS via in a clear air
float R04 = 0.25;  // Get the value of R0 via in H2
float sensorValue4;  // variabel bisa pecahan
float sensor_volt4; // variabel bisa pecahan
float RS_gas4;  //variabel bisa pecahan
float ratio4;  //variabel bisa pecahan
float kal4;

float h,t;
int suhu, hum;

void setup()  //prosedure
{
 dht.begin();  //mulai dht11
 lcd.begin();  //mulai lcd
 lcd.clear();  //bersihakn lcd
 lcd.noCursor();  //lcd tanpa kursor
}

void loop()  //prosedure
{

 h = dht.readHumidity();  //ambil data humidity
 t = dht.readTemperature();  //ambil data suhu c

 hum = h;  //deklarasi variabel
 suhu = t;  //deklaras variabel

gasmq7();  //ambil data gas mq7
gasmq8();
gasmq135();
gasmq136();

  lcd.setCursor(0,0);  //untuk menampilkan d baris atas
  lcd.print("S/H = ");  //menulis huruf
  lcd.print(suhu); //menulis suhu
  lcd.print(" / "); 
  lcd.print(hum); //menulis suhu
  lcd.print("   ");
  
  lcd.setCursor(0,1); 
  lcd.print("MQ7= ");  
  lcd.print(ppm); 
  lcd.print("     "); 

  lcd.setCursor(0,2);  //untuk menulis d lcd bawah
  lcd.print("MQ8= "); //menulis variabel
  lcd.print(ppm2); //menulis nilai
  lcd.print("    ");  //menulis variabel

  lcd.setCursor(0,3);  //untuk menulis d lcd bawah
  lcd.print("MQ135/6= "); //menulis variabel
  lcd.print(ppm3); //menulis nilai
  lcd.print("/");  //menulis variabel
  lcd.print(ppm4); //menulis nilai
  lcd.print("  ");  //menulis variabel
  
}

void gasmq7(){  //prosedure
   
        sensorValue = analogRead(A0);  //untuk ambil adc sensor mq7
        sensor_volt = sensorValue/1024*5.0;  //untuk menjadi tegangan
        RS_gas = (5.0-sensor_volt)/sensor_volt;  //untuk rumus
        ratio = RS_gas/R0; //Replace R0 with the value found using the calibration code
        kal = 83.39 / ratio;  //untuk rumus
        ppm = pow(kal , 0.63);       //untuk jadi ppm
        delay(100);  //delay

}

void gasmq8(){

        sensorValue2 = analogRead(A1);  //untuk ambil adc sensor mq7
        sensor_volt2 = sensorValue2/1024*5.0;  //untuk menjadi tegangan
        RS_gas2 = (5.0-sensor_volt2)/sensor_volt2;  //untuk rumus
        ratio2 = RS_gas2/R02; //Replace R0 with the value found using the calibration code
        kal2 = 83.39 / ratio2;  //untuk rumus
        ppm2 = pow(kal2 , 0.63);       //untuk jadi ppm
        delay(100);  //delay
  
}

void gasmq135(){

        sensorValue3 = analogRead(A2);  //untuk ambil adc sensor mq7
        sensor_volt3 = sensorValue3/1024*5.0;  //untuk menjadi tegangan
        RS_gas3 = (5.0-sensor_volt3)/sensor_volt3;  //untuk rumus
        ratio3 = RS_gas3/R03; //Replace R0 with the value found using the calibration code
        kal3 = 83.39 / ratio3;  //untuk rumus
        ppm3 = pow(kal3 , 0.63);       //untuk jadi ppm
        delay(100);  //delay
  
}

void gasmq136(){

        sensorValue4 = analogRead(A3);  //untuk ambil adc sensor mq7
        sensor_volt4 = sensorValue4/1024*5.0;  //untuk menjadi tegangan
        RS_gas4 = (5.0-sensor_volt4)/sensor_volt4;  //untuk rumus
        ratio4 = RS_gas4/R04; //Replace R0 with the value found using the calibration code
        kal4 = 83.39 / ratio4;  //untuk rumus
        ppm4 = pow(kal4 , 0.63);       //untuk jadi ppm
        delay(100);  //delay
  
}


3. VIDEO HASILNYA