Translate

Membuat Alat Monitoring daya (Arus ACS712 dan Tegangan) DC + SUHU LM35 + LUXMETER BH1750 Menggunakan Arduino dan Datalogger SD Card

Membuat Alat Monitoring daya (Arus ACS712 dan Tegangan) DC + SUHU LM35 + LUXMETER BH1750 Menggunakan Arduino dan Datalogger SD Card


           Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat memonitor daya yang berupa arus dan tegangan dari sumber DC, selain itu alat ini juga bisa mengukur suhu menggunakan sensor LM35 dan mengukur intensitas cahaya atau LUXMETER dengan sensor BH1750. alat ini dilengkapi dengan penyimpanan secara berkala setiap 1 menit sekali pada SD card atau datalogger. untuk lebih jelasnya berikut adalah skema dan programnya.



a. Arduino Uno




b. Sensor Tegangan DC




c. Sensor Arus ACS712




d. LCD 16x2 + I2C




e. Sensor LUX BH1750




f. Sensor Suhu LM35




g. RTC DS1307






h. Program Arduino IDE

#include "Wire.h"
#include <LiquidCrystal_I2C.h> 
#include <BH1750FVI.h>
#define DS3231_I2C_ADDRESS 0x68
#include <SPI.h>
#include <SD.h>

LiquidCrystal_I2C lcd(0x3F, 16, 2);

BH1750FVI LightSensor;

//mosi - 11
//miso - 12
//clk - 13
//cs - 4

int cacah = 0;
File myFile;

int adcteg;
int adcarus;
float tegangan;
float arus;
float v;
int adcsuhu;
int suhu;
uint16_t lux;

byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
  return( (val/10*16) + (val%10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
  return( (val/16*10) + (val%16) );
}


void setup()
{
  lcd.begin();
  lcd.clear();
  lcd.noCursor();
 
  Wire.begin();
  Serial.begin(9600);
  // DS3231 seconds, minutes, hours, day, date, month, year
  // setDS3231time(0,35,8,5,10,4,18);
 
  LightSensor.begin();
  /*
Set the address for this sensor
you can use 2 different address
Device_Address_H "0x5C"
Device_Address_L "0x23"
you must connect Addr pin to A3 .
*/
  LightSensor.SetAddress(Device_Address_H);//Address 0x5C
// To adjust the slave on other address , uncomment this line
// lightMeter.SetAddress(Device_Address_L); //Address 0x5C
//-----------------------------------------------
  /*
   set the Working Mode for this sensor
   Select the following Mode:
    Continuous_H_resolution_Mode
    Continuous_H_resolution_Mode2
    Continuous_L_resolution_Mode
    OneTime_H_resolution_Mode
    OneTime_H_resolution_Mode2
    OneTime_L_resolution_Mode
  
    The data sheet recommanded To use Continuous_H_resolution_Mode
  */

  LightSensor.SetMode(Continuous_H_resolution_Mode);

  //Serial.println("Running...");
 
}


void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte
dayOfMonth, byte month, byte year)
{
  // sets time and date data to DS3231
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0); // set next input to start at the seconds register
  Wire.write(decToBcd(second)); // set seconds
  Wire.write(decToBcd(minute)); // set minutes
  Wire.write(decToBcd(hour)); // set hours
  Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
  Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
  Wire.write(decToBcd(month)); // set month
  Wire.write(decToBcd(year)); // set year (0 to 99)
  Wire.endTransmission();
}


void readDS3231time(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0); // set DS3231 register pointer to 00h
  Wire.endTransmission();
  Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
  // request seven bytes of data from DS3231 starting from register 00h
  *second = bcdToDec(Wire.read() & 0x7f);
  *minute = bcdToDec(Wire.read());
  *hour = bcdToDec(Wire.read() & 0x3f);
  *dayOfWeek = bcdToDec(Wire.read());
  *dayOfMonth = bcdToDec(Wire.read());
  *month = bcdToDec(Wire.read());
  *year = bcdToDec(Wire.read());
}



void displayTime()
{
 
  // retrieve data from DS3231
  readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
  &year);
 
  lcd.setCursor(0,0);
  // send it to the serial monitor
  lcd.print(hour, DEC);
  // convert the byte variable to a decimal number when displayed
  lcd.print(":");
  if (minute<10)
  {
    lcd.print("0");
  }
  lcd.print(minute, DEC);
  lcd.print(":");
  if (second<10)
  {
    lcd.print("0");
  }
  lcd.print(second, DEC);
    
}



void loop()
{
  displayTime();
  delay(1000);
   
  lux = LightSensor.GetLightIntensity();// Get Lux value
 
  adcteg = analogRead(A0);
  tegangan = adcteg * (5.0 / 1023.0) * 4.8;
 
  adcarus = analogRead(A1);
    v = adcarus * (5.0 / 1023.0);
  arus = (v - 2.5)/0.1;
 
  adcsuhu = analogRead(A2);
  suhu = adcsuhu * (5.0 / 1023.0) * 100;
 
  if(arus < 0){
  arus = 0;
  }
  if(tegangan < 0){
  tegangan = 0;
  }
 
  lcd.setCursor(9,0);
  lcd.print("L:");
  lcd.print(lux);

 
  lcd.setCursor(0,1);
  lcd.print(tegangan);
  lcd.print("/");
  lcd.print(arus);
  lcd.print("/");
  lcd.print(suhu,1);
  lcd.print("     ");
 
 
  cacah++;
 
  if(cacah >= 60){
  lcd.clear();
  simpan();
  cacah = 0;
  lcd.clear();
  }
 
}



 void simpan(){

while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }


  Serial.print("Initializing SD card...");
  // On the Ethernet Shield, CS is pin 4. It's set as an output by default.
  // Note that even if it's not used as the CS pin, the hardware SS pin
  // (10 on most Arduino boards, 53 on the Mega) must be left as an output
  // or the SD library functions will not work.
  pinMode(10, OUTPUT);

  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");

  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  myFile = SD.open("test.txt", FILE_WRITE);

  // if the file opened okay, write to it:
  if (myFile) {
    
    myFile.print("Tanggal:");
    myFile.print(dayOfMonth);
    myFile.print("/");
    myFile.print(month);
    myFile.print("/");
    myFile.println(year);
   
    myFile.print("Jam:");
    myFile.print(hour);
    myFile.print(":");
    myFile.print(minute);
    myFile.print(":");   
    myFile.println(second);
   
    myFile.print("V= ");
    myFile.println(tegangan);
    myFile.print("I= ");
    myFile.println(arus);
    myFile.print("P= ");
    myFile.println(tegangan*arus);
    myFile.print("T= ");
    myFile.println(suhu);
    myFile.print("Lux= ");
    myFile.println(lux);
   
    // close the file:
    myFile.close();
    Serial.println("done.");
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }

  // re-open the file for reading:
  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("test.txt:");

    // read from the file until there's nothing else in it:
    while (myFile.available()) {
      Serial.write(myFile.read());
    }
    // close the file:
    myFile.close();
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }

}




  
i. VIDEO HASILNYA

 








Pet Feeder Otomatis Menggunakan Arduino dengan setting waktu via Android dan SMS Gateway

Pet Feeder Otomatis Menggunakan Arduino dengan setting waktu via Android dan SMS Gateway


           Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat alat yang bisa digunakan untuk memberikan makanan kepada hewan peliharaan seperti ikan atau kucing dll. secara otomatis dengan set waktu menggunakan handphone android dan sms, kemudian terdapat motor servo yang digunakan untuk buka-tutup pintu atau katub. alat ini juga dilengkapi dengan sensor jarak yang bisa mendeteksi kondisi pakan ketika masih full atau sudah mau habis. untuk lebih jelasnya berikut adalah skema dan programnya.   



a.Arduino Uno




b. Motor Servo




c.Bluetooth HC-05




d. Modul SMS SIM900A




e. LCD 16x2 I2C




f. RTC DS1302






g. Program Android







h. Program Arduino Pet Feeder

#include <Wire.h>  // i2C Conection Library
#include <LiquidCrystal_I2C.h>  //i2C LCD Library
#include <DS1302.h>
#include <Servo.h>
#define trigPin 3
#define echoPin 4

LiquidCrystal_I2C lcd(0x3F, 16, 2);

DS1302 rtc(7, 6, 5);
long duration, distance;
int mark;
String dataku;
int jampagi;
int jamsore;

Servo myservo1;
Servo myservo2;
Time t;

 int sen1;
 int sen2;
 int sen3;


void setup()
{
  pinMode(A0,INPUT);
  pinMode(A1,INPUT);
  pinMode(A2,INPUT);
 
  myservo1.attach(9);
  myservo2.attach(10);
 
  myservo1.write(100);
  myservo2.write(100);
 
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
 
  rtc.halt(false);
  rtc.writeProtect(false);
 
  Serial.begin(9600);
  lcd.begin();
  lcd.clear();
  lcd.noCursor();
 
  //rtc.setTime(18, 02, 0);     // Set the time to 12:00:00 (24hr format)
  //rtc.setDate(9, 26, 2018);   // Set the date to August 6th, 2010
}


void loop()
{
 
  sen1 = digitalRead(A0);
  sen2 = digitalRead(A1);
  sen3 = digitalRead(A2);
 
  t = rtc.getTime();
 
  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;

  lcd.setCursor(0, 0);
  lcd.print(rtc.getTimeStr());
  lcd.print(" | ");
  lcd.print(distance);
  lcd.print("           ");
 
  delay (1000);
 
  if((sen1 == 0)&&(sen2 == 0)&&(sen3 == 0)){
  lcd.setCursor(13, 1);
  lcd.print("OFF"); 
  }
 
  if((sen1 == 1)&&(sen2 == 0)&&(sen3 == 0)){
  lcd.setCursor(0, 1);
  lcd.print("7 | 17 MODE SMS              ");
  jampagi = 7;
  jamsore = 17;
  }
 
  if((sen1 == 0)&&(sen2 == 1)&&(sen3 == 0)){
  lcd.setCursor(0, 1);
  lcd.print("8 | 16 MODE SMS              ");
  jampagi = 8;
  jamsore = 16;
  }
 
  if((sen1 ==  0)&&(sen2 == 0)&&(sen3 == 1)){
  lcd.setCursor(0, 1);
  lcd.print("9 | 15 MODE SMS              ");
  jampagi = 9;
  jamsore = 15;
  }
 
 
  if((t.min == jampagi)&&(mark == 0)){
    myservo1.write(150);
    myservo2.write(150);
    delay(3000);
    myservo1.write(100);
    myservo2.write(100);
    mark = 1;
   }
  
    if((t.min == jamsore)&&(mark == 1)){
    myservo1.write(150);
    myservo2.write(150);
    delay(3000);
    myservo1.write(100);
    myservo2.write(100);
    mark = 0;
   }
 
  if ((Serial.available() > 0)&&(sen1 == 0)&&(sen2 == 0)&&(sen3 == 0))
{

  dataku = Serial.readString();

if(dataku.startsWith("x"))
{
   dataku.replace("x", "");
   jampagi = dataku.toInt();
}

else if(dataku.startsWith("y"))
{
   dataku.replace("y", "");
   jamsore = dataku.toInt();
}

  lcd.setCursor(0, 1);
  lcd.print(jampagi);
  lcd.print(" | ");
  lcd.print(jamsore);
  lcd.print("           ");

}

if((t.min == jampagi)&&(mark == 0)){
myservo1.write(150);
myservo2.write(150);
delay(3000);
myservo1.write(100);
myservo2.write(100);
mark = 1;
}

if((t.min == jamsore)&&(mark == 1)){
myservo1.write(150);
myservo2.write(150);
delay(3000);
myservo1.write(100);
myservo2.write(100);
mark = 0;
}
 
}




i. Program Arduino SMS

#include "SIM900.h"
#include "sms.h"
#include "SoftwareSerial.h"
#include "sms.h"

SMSGSM sms;
boolean started=false;
char smsbuffer[160];
char n[20];



void setup(){
  pinMode(A0,OUTPUT);
  pinMode(A1,OUTPUT);
  pinMode(A2,OUTPUT);
   
  digitalWrite(A0,LOW);
  digitalWrite(A1,LOW);
  digitalWrite(A2,LOW);
 
  if(gsm.begin(9600)){
    started=true;
  
  }

  if(started){
   delsms();
  }
  delay(1000);
  sms.SendSMS("085726496643","SIAP EKSEKUSI");
}



void loop(){

 if(gsm.begin(9600)){
  started=true;
 }
 int pos=0;
 if(started){
  pos=sms.IsSMSPresent(SMS_ALL);
  if(pos){
    sms.GetSMS(pos,n,smsbuffer,100);
  
    if(!strcmp(smsbuffer,"off")){
    
        digitalWrite(A0,LOW);
        digitalWrite(A1,LOW);
        digitalWrite(A2,LOW);
      sms.SendSMS(n,"mode off");
    }
   
    if(!strcmp(smsbuffer,"mode1")){
    
        digitalWrite(A0,HIGH);
        digitalWrite(A1,LOW);
        digitalWrite(A2,LOW);
      sms.SendSMS(n,"mode satu");
    }
   
     if(!strcmp(smsbuffer,"mode2")){
    
        digitalWrite(A0,LOW);
        digitalWrite(A1,HIGH);
        digitalWrite(A2,LOW);
      sms.SendSMS(n,"mode dua");
    }
   
    if(!strcmp(smsbuffer,"mode3")){
    
        digitalWrite(A0,LOW);
        digitalWrite(A1,LOW);
        digitalWrite(A2,HIGH);
      sms.SendSMS(n,"mode tiga");
    }
 
    delsms();
  }
 }
  delay(100);
}

void delsms()
{
  for (int i=0; i<10; i++)
  {
      int pos=sms.IsSMSPresent(SMS_ALL);
      if (pos!=0)
      {
        if (sms.DeleteSMS(pos)==1){}else{}
      }
  }
}





j. VIDEO HASILNYA











Membuat Alat monitor Getaran Menggunakan Arduino dan sensor IMU (ACCELERO, GYRO, SUHU / TEMPERATURE) MPU 6050 / GY-521

Membuat Alat monitor Getaran Menggunakan Arduino dan sensor IMU (ACCELERO, GYRO, SUHU / TEMPERATURE) MPU 6050 / GY-521


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat untuk mendeteksi getaran dan juga untuk mendeteksi kemiringan, sebenarnya sensor MPU6050 memiliki 3 buah sensor yaitu sensor accelero, gyroscope dan suhu, untuk pengujian kali ini hanya digunakan sensor accelero saja untuk mendeteksi getaran. untuk lebih jelasnya berikut adalah skema dan programnya.



a. Arduino Uno




b. Sensor IMU MPU 6050 / GY-521







c. Program Arduino Test MPU6050 / GY-521

#include<Wire.h>
const int MPU_addr=0x68;  // I2C address of the MPU-6050
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
void setup(){
  Wire.begin();
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x6B);  // PWR_MGMT_1 register
  Wire.write(0);     // set to zero (wakes up the MPU-6050)
  Wire.endTransmission(true);
  Serial.begin(9600);    // 9600
}
void loop(){
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x3B);  // starting with register 0x3B (ACCEL_XOUT_H)
  Wire.endTransmission(false);
  Wire.requestFrom(MPU_addr,14,true);  // request a total of 14 registers
  AcX=Wire.read()<<8|Wire.read();  // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)    
  AcY=Wire.read()<<8|Wire.read();  // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
  AcZ=Wire.read()<<8|Wire.read();  // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
  Tmp=Wire.read()<<8|Wire.read();  // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
  GyX=Wire.read()<<8|Wire.read();  // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
  GyY=Wire.read()<<8|Wire.read();  // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
  GyZ=Wire.read()<<8|Wire.read();  // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
  Serial.print("AcX = "); Serial.print(AcX);
  Serial.print(" | AcY = "); Serial.print(AcY);
  Serial.print(" | AcZ = "); Serial.print(AcZ);
  Serial.print(" | Tmp = "); Serial.print(Tmp/340.00+36.53);  //equation for temperature in degrees C from datasheet
  Serial.print(" | GyX = "); Serial.print(GyX);
  Serial.print(" | GyY = "); Serial.print(GyY);
  Serial.print(" | GyZ = "); Serial.println(GyZ);
  delay(333);
   
}



d. Program Arduino Monitor Getaran

#include<Wire.h>
const int MPU_addr=0x68; 
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;

int led1 = 13;
int led2 = 12;
int led3 = 11;
int led4 = 10;
int getaran;
int cacah;

void setup(){
  Wire.begin();
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x6B); 
  Wire.write(0);   
  Wire.endTransmission(true);
  Serial.begin(9600);  
 
  pinMode(led1,OUTPUT);
  pinMode(led2,OUTPUT);
  pinMode(led3,OUTPUT);
  pinMode(led4,OUTPUT);
 
}

void loop(){
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x3B); 
  Wire.endTransmission(false);
  Wire.requestFrom(MPU_addr,14,true); 
  AcX=Wire.read()<<8|Wire.read();    
  AcY=Wire.read()<<8|Wire.read(); 
  AcZ=Wire.read()<<8|Wire.read(); 
  Serial.print("AcX = "); Serial.print(AcX);
  Serial.print(" | AcY = "); Serial.print(AcY);
  Serial.print(" | AcZ = "); Serial.println(AcZ);
  delay(333);
 
  //30 derajat
  if((AcY > 15000)&&(AcY < 20000)){
  digitalWrite(led1,LOW); //MERAH
  digitalWrite(led2,HIGH); //BIRU
  digitalWrite(led3,LOW);
  digitalWrite(led4,LOW);
  }
 
  if((AcY > 13000)&&(AcY < 15000)){
  counter();
  }
 
  //60 derajat
  if((AcY > 10000)&&(AcY < 13000)) {
  digitalWrite(led1,LOW); //MERAH
  digitalWrite(led2,LOW); //BIRU
  digitalWrite(led3,LOW);
  digitalWrite(led4,HIGH);
  }
 
  if(AcY < 10000){
  counter();
  }
   
}

void counter(){
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x3B); 
  Wire.endTransmission(false);
  Wire.requestFrom(MPU_addr,14,true); 
  AcX=Wire.read()<<8|Wire.read();    
  AcY=Wire.read()<<8|Wire.read(); 
  AcZ=Wire.read()<<8|Wire.read(); 
  Serial.print("AcX = "); Serial.print(AcX);
  Serial.print(" | AcY = "); Serial.print(AcY);
  Serial.print(" | AcZ = "); Serial.print(AcZ);
  Serial.print(" | getaran = "); Serial.println(getaran);

 if(AcY < 10000){
  delay(200);
  getaran++;
  }

  if((AcY > 13000)&&(AcY < 15000)){
  delay(200);
  getaran++;
  }
 
  if(getaran > 3){
  digitalWrite(led1,HIGH); //MERAH
  digitalWrite(led2,LOW); //BIRU
  digitalWrite(led3,HIGH);
  digitalWrite(led4,LOW);
  }
 
 
if(cacah > 50){
  cacah = 0;
  getaran = 0;
  return;
}
 
cacah++;
delay(100);
counter();
}




e. VIDEO HASILNYA











Alat Deteksi Warna Menggunakan ARDUINO sensor warna TCS3200 dan sensor cahaya LDR

Alat Deteksi Warna Menggunakan ARDUINO sensor warna TCS3200 dan sensor cahaya LDR


       Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang bisa digunakan untuk meendeteksi warna dan intensitas cahaya, alat ini menggunakan sensor warna TCS3200 dan sensor LDR dengan penampil LCD. untuk lebih jelasnya berikut adalah skema dan programnya.  



a. Arduino Uno




b. LCD I2C




c. Sensor Warna TCS3200




d. Sensor LDR






e. Program Arduino IDE

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F, 16, 2);

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

int fmerah;
int fgreen;
int fblue;

int fmerahatas = 60;
int fmerahbawah = 30;
int fgreenatas = 90;
int fgreenbawah = 50;
int fblueatas = 80;
int fbluebawah = 40;

int range;
int dataadc;


void setup()
{

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

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

  digitalWrite(S0,HIGH);
  digitalWrite(S1,LOW);

}



void loop(){
 
  digitalWrite(S2,LOW);
  digitalWrite(S3,LOW);
  frequency = pulseIn(sensorOut, LOW);
  fmerah = frequency;

  lcd.setCursor(0,0);
  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);

  
  dataadc = analogRead(A0);
 
  lcd.setCursor(0,1);
  lcd.print("x=");
  lcd.print(dataadc);
  lcd.print("              ");
 
  if((fmerah < fmerahatas)&&(fmerah > fmerahbawah)&&(fgreen < fgreenatas)&&(fgreen > fgreenbawah)&&(fblue < fblueatas)&&(fblue > fbluebawah)){
  lcd.setCursor(8,1);
  lcd.print("FORMALIN");
  }
  
}





f. VIDEO HASILNYA








Alat kendali relay menggunakan VOICE RECOGNITION ARDUINO handphone android via BLUETOOTH

Alat kendali relay menggunakan VOICE RECOGNITION ARDUINO handphone android via BLUETOOTH

 
           Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat digunakan untuk mengendalikan sebuah relay dengan media voice recognition dari handphone android atau smartphone, alat ini dirancang untuk kendali via handphone melalui modul bluetooth hc-05. untuk lebih jelasnya berikut adalah skema dan programnya.



a. Arduino Uno




b. Bluetooth HC-05




c. Modul Relay 1 Channel




d. LCD 16x2 + I2C





e. Program Android







f. Program Arduino IDE

#include <Wire.h>
#include <LiquidCrystal_I2C.h>  //i2C LCD Library
LiquidCrystal_I2C lcd(0x3F, 16, 2); //library i2c lcd

String dataku;

int relay = 7;

void setup() {
  Serial.begin(9600);
  lcd.begin();
  lcd.noCursor();
  lcd.clear();
  pinMode(relay,OUTPUT);
  digitalWrite(relay,HIGH);



void loop() {
 
  if (Serial.available()>0)
  {
    dataku = Serial.readString();
         
    lcd.setCursor(0,0);
    lcd.print(dataku);
  
    if (dataku == "bbb"){
    digitalWrite(relay,HIGH);
    }
   
    if (dataku == "aaa"){
    digitalWrite(relay,LOW);
    }
   
    if (dataku == "ccc"){
    digitalWrite(relay,LOW);
    }
   
    if (dataku == "ddd"){
    digitalWrite(relay,HIGH);
    }
   
  }

}





g. VIDEO HASILNYA










Membuat Alat charge Power Bank dan Handphone menggunakan piezoelektrik dan sepatu lari

Membuat Alat charge Power Bank dan Handphone menggunakan piezoelektrik dan sepatu lari


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat men-charge power bank atau handphone dengan menggunakan piezoelektrik yang diletakkan dibawah insole sepatu sehingga ketika berjalan atau bergerak akan menghasilkan tegangan dan arus. semakin banyak piezo yang terpasang maka arus akan semakin besar. untuk lebih jelasnya berikut adalah skema dan programnya.




a. Arduino Nano




b. Piezoelektrik





c. Program Arduino IDE

void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  // print out the value you read:
  Serial.println(sensorValue);
  delay(1);        // delay in between reads for stability
}





d. VIDEO HASILNYA










Membuat Alat Pasien Monitor Suhu Tubuh DS18B20, BPM heart beat, Respirasi Sound Sensor, GSR Kelenjar Keringat via INTERNET IOT ethernet web server

Membuat Alat Pasien Monitor Suhu Tubuh DS18B20, BPM heart beat, Respirasi Sound Sensor, GSR Kelenjar Keringat via INTERNET IOT ethernet web server


          Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat alat untuk monitoring suhu tubuh, heart beat BPM, respirasi dan keringat tubuh GSR. alat ini dilengkapi dengan fasilitas internet atau database online, jadi data akan masuk ke server dan ditampilkan via website. untuk lebih jelasnya berikut adalah skema dan programnya.



a. Arduino + Ethernet Shield




b. Sensor Suhu DS18b20




c. Sensor Respirasi / SOUND SENSOR




d. Sensor GSR




e. Sensor BPM / Heart Beat





f. Program Arduino IDE

#include "Wire.h"
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <SPI.h>
#include <Ethernet.h>

LiquidCrystal_I2C lcd(0x3F,16,2);

OneWire  ds(7);  // on pin 10 (a 4.7K resistor is necessary)

int n = 0;
int bpm = 0;
int x = 0;

int m = 0;
int resp = 0;
int w = 0;

int suhux = 0;
int bpmx = 0;

int led = 8;

int bt1 = 2;

int bt1x = 0;

  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;
  float voltgsr;

String txData="";
int gsrz;
int suhuz;
int bpmz;
int respirasiz;

String txData2="";

byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
  char server[] = "www.alat-pasien-monitor.com";
IPAddress ip(192,168,0,99);

EthernetClient client;



void setup() {
 
  Serial.begin(9600);
  while (!Serial) {
    ;
  }

  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    Ethernet.begin(mac, ip);
  }

    delay(1000);
    Serial.println("connecting...");
  //  kirim ();

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

  pinMode(led,OUTPUT);

  pinMode(bt1,INPUT_PULLUP); 

  lcd.setCursor(0, 0);
  lcd.print("WELLCOME");
  delay(3000);
  lcd.clear();
 
}


void loop() {
n = 0;
m = 0;

  lcd.setCursor(0, 0);
  lcd.print("Tekan Tombol");
  lcd.setCursor(0, 1);
  lcd.print("START");
 
  bt1x = digitalRead(bt1);

if(bt1x == 0){
  lcd.clear();
  delay(2000);

  digitalWrite(led,LOW);
 
bpm = 0;
resp = 0;

tampilbpm();
tampilrespirasi();
tampilsuhu();
tampilgsr();
kirimbt();

}
        
}


void tampilbpm(){
n = n + 1;

  int dataadc1 = analogRead(A1);          

  lcd.setCursor(0, 0);
  lcd.print("n = ");
  lcd.print(n);
   
  lcd.setCursor(0, 1);
  lcd.print("BPM = ");
  lcd.print(bpm);

  if ((dataadc1 > 512) && (x > 1)) {  
  digitalWrite(led, HIGH);
  x = 0;
  bpm = bpm + 1;
  }

  else if ((dataadc1 < 512) && (x < 1)) {
  x = 2;
  digitalWrite(led, LOW);

  }

  delay(200);

  if ( n > 300 ) {
  lcd.clear();
  return;
  }

 tampilbpm();
}




void tampilrespirasi(){
m = m + 1;
 
  int dataadc2 = analogRead(A2);          

  lcd.setCursor(0, 0);
  lcd.print("m = ");
  lcd.print(m);
   
  lcd.setCursor(0, 1);
  lcd.print("RESP = ");
  lcd.print(resp);

  if ((dataadc2 > 512) && (w > 1)) {  
  digitalWrite(led, HIGH);
  w = 0;
  resp = resp + 1;
  }

  else if ((dataadc2 < 512) && (w < 1)) {
  w = 2;
  digitalWrite(led, LOW);

  }

  delay(200);

  if ( m > 300 ) {
  lcd.clear();
  return;
  }
 
  tampilrespirasi();
}





void tampilsuhu(){

  
  if ( !ds.search(addr)) {
    //Serial.println("No more addresses.");
    //Serial.println();
    ds.reset_search();
    delay(250);
    return;
  }

  //Serial.print("ROM =");
  for( i = 0; i < 8; i++) {
    //Serial.write(' ');
    //Serial.print(addr[i], HEX);
  }

  if (OneWire::crc8(addr, 7) != addr[7]) {
      //Serial.println("CRC is not valid!");
      return;
  }
  //Serial.println();

   //the first ROM byte indicates which chip
  switch (addr[0]) {
    case 0x10:
      //Serial.println("  Chip = DS18S20");  // or old DS1820
      type_s = 1;
      break;
    case 0x28:
      //Serial.println("  Chip = DS18B20");
      type_s = 0;
      break;
    case 0x22:
      //Serial.println("  Chip = DS1822");
      type_s = 0;
      break;
    default:
      //Serial.println("Device is not a DS18x20 family device.");
      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
  // we might do a ds.depower() here, but the reset will take care of it.

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

  //Serial.print("  Data = ");
  //Serial.print(present, HEX);
  //Serial.print(" ");
  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
    //Serial.print(data[i], HEX);
    //Serial.print(" ");
  }
  //Serial.print(" CRC=");
  //Serial.print(OneWire::crc8(data, 8), HEX);
  //Serial.println();

  // Convert the data to actual temperature
  // because the result is a 16 bit signed integer, it should
  // be stored to an "int16_t" type, which is always 16 bits
  // even when compiled on a 32 bit processor.
  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
  }
  celsius = (float)raw / 16.0;
//  lcd.setCursor(0,0);
//  lcd.print("SUHU = ");
//  lcd.print(celsius);
//  lcd.print(" C ");
  return;
}




void tampilgsr(){

int dataadc0 = analogRead(A0);
 voltgsr = dataadc0 * (4.2 / 1023);

return;

}




void kirimbt(){

lcd.setCursor(0,0);
lcd.print("S=");
lcd.print(celsius);
lcd.print(" B=");
lcd.print(bpm);
lcd.print("      ");

lcd.setCursor(0,1);
lcd.print("R=");
lcd.print(resp);
lcd.print(" G=");
lcd.print(voltgsr);
lcd.print("      ");

gsrz = voltgsr;
bpmz = bpm;
suhuz = celsius;
respirasiz = resp;

/*
 if ( bpm >= 100 ) {
 Serial.println("perbanyak istirahat dan ");
 }
else if ( bpm < 60 ) {
 Serial.println("segera hubungi dokter ");
 }

 if ( celsius >= 37.5 ) {
 Serial.println("kompres dengan air dingin");

 }
else if ( celsius < 34.0 ) {

 Serial.println("perbanyak aktifitas ");
 }

 if ( voltgsr >= 4 ) {
 Serial.println("Perbanyak menghibur diri");
 }

 
 if (( bpm > 100 ) && ( celsius > 37.5 ) && ( voltgsr > 4 )) {
 Serial.println("Terdeteksi STRESS");
 Serial.println("hibur diri dan konsul ke psikiater");
 }
*/

kirim();

kirimbt();

}



void kirim (){

  EthernetClient client;

if (client.connect(server, 80)){
    txData = "gsrz="+ (String (gsrz)) + "&bpmz=" + (String (bpmz)) + "&suhuz=" + (String (suhuz)) + "&respirasiz=" + (String (respirasiz));           
    Serial.println("connected");
    Serial.print(txData);
    client.println("POST /updatex.php HTTP/1.1");
    client.println("Host: www.alat-pasien-monitor.com");
    client.println("Connection: close");
    client.print("Content-Type: application/x-www-form-urlencoded\n");
    client.print("Content-Length: ");
    client.print(txData.length());
    client.print("\n\n");
    client.print(txData);
    Serial.println(txData);    
    delay (5000);
        
  }  
  else{
    Serial.println("Connection Failed.");
    Serial.println();
    delay (3000);
  }
}



 
g. VIDEO HASILNYA