Translate

Monitoring Jarak Max 10 Meter Sensor Gy-TOF10M via Wireless Lora SX1278 433Mhz

Monitoring Jarak Max 10 Meter Sensor Gy-TOF10M via Wireless Lora SX1278 433Mhz
 

         Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat mengukur jarak max 10 meter dengan wireless Lora SX1278. alat ini terdiri dari 2 device yaitu transmitter dan receiver, data yang dikirim hanya data jarak saja kemudian ditampilkan ke LCD Oled mini untuk interfacenya. untuk lebih jelasnya berikut adalah koding dan komponennya.
 
 
1. Komponen
 

 
2. Program Arduino IDE Transmitter
 
#include <SoftwareSerial.h>
#include "Wire.h"
#include "Adafruit_GFX.h"
#include "OakOLED.h"
#include <SPI.h>
#include <LoRa.h>

/*
  Module SX1278 // Arduino UNO/NANO    
    GND         ->   GND
    Vcc         ->   3.3V
    MISO        ->   D12
    MOSI        ->   D11     
    SLCK        ->   D13
    Nss         ->   D10
    Di00        ->   D2
    RST         ->   D9      
 */
 
OakOLED oled;

typedef struct
{
    float distance;
    uint16_t amp;
    int8_t temp;
} gytof;
SoftwareSerial mySerial(3, 4);  // pin sensor gy-tof10m RX, TX
byte add=0xa4;
byte len=0,start_reg=0;
unsigned char Re_buf[30],counter=0;
unsigned char sign=0;
gytof my_tof;

int jarak;

void setup() {
   Serial.begin(115200);
   mySerial.begin(9600);
   mySerial.listen();  
   oled.begin();
   oled.display();    

   while (!Serial);  
  Serial.println("LoRa Sender");
  if (!LoRa.begin(433E6)) { // or 915E6, the MHz speed of yout module
    Serial.println("Starting LoRa failed!");
    while (1);
  }


void loop() {
  unsigned char i=0,sum=0;
  while (mySerial.available()) {  
  
    Re_buf[counter]=(unsigned char)mySerial.read();
    switch(counter)
    {
      case 0:
      if(Re_buf[0]!=add)
      return;
      break;
      case 1:
    
      if(Re_buf[1]!=0x03)
        { 
          counter=0;
          return;
      }
      break;
      case 2:
        if(Re_buf[2]<16)
         start_reg=Re_buf[2];
         else
            { 
          counter=0;
          return;
         }
      break;
      case 3:
         if((start_reg+Re_buf[3])<16)
            len=Re_buf[3];
            else
            { 
              counter=0;
             return;
         }
            
      break;
      default:
         if(len+5==counter)
         {  
            sign=1;
         }
      break;
    }
    
  if(sign)
  {   
     sign=0;
     for(i=0;i<counter-1;i++)
      sum+=Re_buf[i]; 
       counter=0;
     if(sum==Re_buf[i] )        //检查帧头,帧尾
     {           
        if(start_reg==0x08)
        {
         my_tof.distance=(Re_buf[4]<<8)|Re_buf[5];
   my_tof.amp=(Re_buf[6]<<8)|Re_buf[7];
   my_tof.temp=Re_buf[8];
  
        }
        /*
         Serial.print("distance:");
         Serial.print((float)my_tof.distance/10);
         Serial.print("cm,amp:");
         Serial.print(my_tof.amp);
         Serial.print(",temp:");
         Serial.println(my_tof.temp);
        */                
     }
//     else
//        {
//          Serial.print(" sum ");
//          Serial.println(sum);
//      } 
   }
   else
   counter++; 
//   Serial.print("cont:");
//   Serial.println(counter);
  }

  jarak = my_tof.distance/10;

  oled.clearDisplay();
  oled.setTextSize(2);
  oled.setTextColor(1);
  oled.setCursor(0, 0);
  oled.print(jarak); 
  oled.display(); 
     
  LoRa.beginPacket();  
  LoRa.print(jarak);
  LoRa.endPacket();
  delay(50);
   
}
 
 
3. Program Arduino IDE Receiver
 
#include <SPI.h>
#include <LoRa.h>   //Download here: http://electronoobs.com/eng_arduino_LoRa_SX1278.php.php
#include "Wire.h"
#include "Adafruit_GFX.h"
#include "OakOLED.h"

OakOLED oled;

String inString = "";    // string to hold input
int jarak = 0;

void setup() {
  Serial.begin(115200);
  oled.begin();
  oled.display(); 
   
  while (!Serial);
  Serial.println("LoRa Receiver");
  if (!LoRa.begin(433E6)) { // or 915E6
    Serial.println("Starting LoRa failed!");
    while (1);
  }
}

void loop() {
  
  // try to parse packet
  int packetSize = LoRa.parsePacket();
  if (packetSize) { 
    // read packet    
    while (LoRa.available())
    {
      int inChar = LoRa.read();
      inString += (char)inChar;
      jarak = inString.toInt();       
    }
    inString = "";     
    LoRa.packetRssi();    
  }
      
  //Serial.println(jarak); 
  oled.clearDisplay();
  oled.setTextSize(2);
  oled.setTextColor(1);
  oled.setCursor(0, 0);
  oled.print(jarak); 
  oled.display();  

}
 
 
4. VIDEO HASILNYA
 
 


Kendali Oven dengan Metode PID dan IOT Blynk 2.0

Kendali Oven dengan Metode PID dan IOT Blynk 2.0


          Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang bisa dikendalikan dengan metode pid, alat ini yaitu oven listrik yang menggunakan tegangan 220 volt selain itu juga bisa dipantau menggunakan IOT Blynk karena menggunakan ESP32. untuk lebih jelasnya berikut adalah koding dan daftar komponennya.


1. Daftar komponen

- ESP32
- LCD 16x2 I2c
- SSR Modul
- Thermocouple Type K
- Elemen pemanas


2. Program Arduino IDE

#define BLYNK_TEMPLATE_ID "TMPL662sTjRVt"
#define BLYNK_TEMPLATE_NAME "oven pid"
#define BLYNK_AUTH_TOKEN "p0MGEqfrRkPDCDwNvZZszpA6-fvA9b5V"
#define BLYNK_PRINT Serial 

#include <Wire.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <LiquidCrystal_I2C.h>  //i2C LCD Library
#include <max6675.h>

LiquidCrystal_I2C lcd(0x27, 16, 2); 

int thermoDO = 19; //bisa juga S0
int thermoCS = 23; //bisa juga CS
int thermoCLK = 5; //bisa juga SCK

int ssr = 34;

MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);

float kp = 2.08;
float ki = 1.67;
float kd = 2.15;

float p,i,d,suhu,pid;
float error,errorx,sumerr;

//set point = 95
float sp = 80.0;

BlynkTimer timer;

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

void sendSensor()
{
 Blynk.virtualWrite(V0, suhu);
 Blynk.virtualWrite(V1, pid);
 delay(1000);
}

void setup() {

  pinMode(ssr,OUTPUT);
  Serial.begin(9600);
  lcd.begin();
  lcd.clear();
  lcd.noCursor();
  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
  timer.setInterval(1000L, sendSensor); 
  // wait for MAX chip to stabilize
  delay(500);
}

void loop() {

  float suhu = thermocouple.readCelsius();

  analogWrite(ssr,pid);

  error = sp - suhu;
  p = error * kp;
  sumerr = error + errorx;
  i = ki * sumerr;
  d = error - errorx;
  pid = p + i + d;
  pid = 255.0 - pid;

  if(pid < 1){
  pid = 0;
  }

  lcd.setCursor(0,0);
  lcd.print("Suhu: ");
  lcd.print(suhu);
  lcd.print("   ");
      
  lcd.setCursor(0,1);
  lcd.print("PID: "); 
  lcd.print(pid);
  lcd.print("   ");
  
  Blynk.run();
  timer.run();  
     
delay(200);

errorx = error;

}



Kendali Relay 4 Channel via WIFI Local IP Address

Kendali Relay 4 Channel via WIFI Local IP Address


         Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat mengendalikan relay 4 channel dengan menggunakan wifi local IP Address. jadi alat ini bisa mengendalikan berbagai peralatan rumah tangga atau lampu. untuk lebihjelasnya berikut adalah kodingnya.


1. Interface Browser
 


2. Program Arduino IDE

 #include <ESP8266WiFi.h>

const char* ssid = "hotspotwifiku";
const char* password = "123456789";

int ledPin1 = D1; 
int ledPin2 = D2;
int ledPin3 = D3;
int ledPin4 = D4;
WiFiServer server(80);

void setup() {
  Serial.begin(9600);
  delay(10);

  pinMode(ledPin1, OUTPUT);
  digitalWrite(ledPin1, HIGH);
  pinMode(ledPin2, OUTPUT);
  digitalWrite(ledPin2, HIGH);
  pinMode(ledPin3, OUTPUT);
  digitalWrite(ledPin3, HIGH);
  pinMode(ledPin4, OUTPUT);
  digitalWrite(ledPin4, HIGH);

  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.print("Use this URL to connect: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");

}

void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }

  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }

  // Read the first line of the request
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();

  // Match the request

  int value1 = HIGH;
  int value2 = HIGH;
  int value3 = HIGH;
  int value4 = HIGH;
  
  if (request.indexOf("/LED1=ON") != -1)  {
    digitalWrite(ledPin1, LOW);
    value1 = LOW;
  }
  if (request.indexOf("/LED1=OFF") != -1)  {
    digitalWrite(ledPin1, HIGH);
    value1 = HIGH;
  }

  if (request.indexOf("/LED2=ON") != -1)  {
    digitalWrite(ledPin2, LOW);
    value2 = LOW;
  }
  if (request.indexOf("/LED2=OFF") != -1)  {
    digitalWrite(ledPin2, HIGH);
    value2 = HIGH;
  }

  if (request.indexOf("/LED3=ON") != -1)  {
    digitalWrite(ledPin3, LOW);
    value3 = LOW;
  }
  if (request.indexOf("/LED3=OFF") != -1)  {
    digitalWrite(ledPin3, HIGH);
    value3 = HIGH;
  }

  if (request.indexOf("/LED4=ON") != -1)  {
    digitalWrite(ledPin4, LOW);
    value4 = LOW;
  }
  if (request.indexOf("/LED4=OFF") != -1)  {
    digitalWrite(ledPin4, HIGH);
    value4 = HIGH;
  }

// Set ledPin according to the request
//digitalWrite(ledPin, value);

  // Return the response
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  do not forget this one
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");
  
  client.println("<br><br>");
  client.println("<a href=\"/LED1=ON\"\"><button>Turn1 On </button></a>");
  client.println("<a href=\"/LED1=OFF\"\"><button>Turn1 Off </button></a><br />"); 
  client.println("<br>");
  client.println("<a href=\"/LED2=ON\"\"><button>Turn2 On </button></a>");
  client.println("<a href=\"/LED2=OFF\"\"><button>Turn2 Off </button></a><br />");
  client.println("<br>");
  client.println("<a href=\"/LED3=ON\"\"><button>Turn3 On </button></a>");
  client.println("<a href=\"/LED3=OFF\"\"><button>Turn3 Off </button></a><br />");
  client.println("<br>");
  client.println("<a href=\"/LED4=ON\"\"><button>Turn4 On </button></a>");
  client.println("<a href=\"/LED4=OFF\"\"><button>Turn4 Off </button></a><br />");    
  
  client.println("</html>");

  delay(1);
  Serial.println("Client disonnected");
  Serial.println("");

}


3. VIDEO HASILNYA



Alat Pakan ikan Otomatis Monitor Ph turbidity suhu dan water level IOT Blynk 2.0

Alat Pakan ikan Otomatis Monitor Ph turbidity suhu dan water level 
 


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat untuk pakan ikan otomatis dan mengukur PH Turbidity Suhu Amoniak Water Level IOT Blynk. jadi alat ini menggunakan arduino nano dan esp32. untuk lebih jelasnya berikut adalah kodingnya.
 
 
1. Program Arduino Nano
 
 #include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
#include <DS3231.h>
#include <EEPROM.h>
#define ONE_WIRE_BUS 12  
#include <Servo.h>
#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // RX pin 2, TX pin 3

#define trigPin1 9
#define echoPin1 6
#define trigPin2 13
#define echoPin2 10
 
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

LiquidCrystal_I2C lcd(0x27,20,4);
DS3231  rtc(SDA, SCL);
Servo myservo1;

int addr1 = 0;
int addr2 = 1;
int addr3 = 2;
int addr4 = 3;
int addr5 = 4;

Time  t;
int jampagi,jamsiang,jamsore;
float TempC;
float pHValue;
int tds;
int adctds;
int adcPH;
int TempCx;
int pHValuex;
int ntux;
float ntufix;
long duration1, distance1;
long duration2, distance2;  
int btset = 4;
int btup = 8;
int btdown = 7;
int btok = 11;
int btsetx;
int btupx;
int btdownx;
int btokx;
float batasamo;
float batasph;
float amoniak;
int relayaerator = A2;
int relayout = A3;
int relayin = A6;
int tanda = 0;
int kolam;
int tinggipakan;
int tdsValue;

void setup(){  
  
jampagi = EEPROM.read(addr1);
jamsiang = EEPROM.read(addr2);
jamsore = EEPROM.read(addr3);
batasamo = EEPROM.read(addr4);
batasph = EEPROM.read(addr5);

pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT); 

pinMode(relayaerator,OUTPUT);
digitalWrite(relayaerator,HIGH);
pinMode(relayin,OUTPUT);
digitalWrite(relayin,HIGH);
pinMode(relayout,OUTPUT);
digitalWrite(relayout,HIGH);

pinMode(btset,INPUT_PULLUP);
pinMode(btup,INPUT_PULLUP);
pinMode(btdown,INPUT_PULLUP);
pinMode(btok,INPUT_PULLUP);

Wire.begin();  
sensors.begin();
mySerial.begin(9600);
lcd.begin();  
lcd.clear(); 

rtc.begin();
//rtc.setDOW(WEDNESDAY);     // Set Day-of-Week to SUNDAmy
//rtc.setTime(17, 20, 0);     // Set the time to 12:00:00 (24hr format)
//rtc.setDate(1, 1, 2014);   // Set the date to January 1st, 2014

myservo1.attach(5);
}

void loop(){

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

if(btsetx == 0){
delay(1000);
lcd.clear();
setjampagi();
setjamsiang();
setjamsore();
setbatasamo();
setbatasph();
}
  
 t = rtc.getTime();
    
 adcPH = analogRead(A0); //menggunakan pin A0 untuk membaca output sensor pH
 pHValue = (adcPH - 1093.4) / -30.897;

 adctds = analogRead(A1);             
 tdsValue = map(adctds, 566, 1, 0, 100);
 
 pHValuex = pHValue * 100.0;
 
  sensors.requestTemperatures();
  TempC = sensors.getTempCByIndex(0); // Celcius
  TempCx =  TempC * 100.0;

if(pHValue < 6.5){
  amoniak = (pHValue / TempC) * 0.202; 
}

if(pHValue == 7.0){
  amoniak = (pHValue / TempC) * 1.131; 
}

if(pHValue > 7.0){
  amoniak = (pHValue / TempC) * 3.306; 
}

if(amoniak > batasamo){
  digitalWrite(relayaerator,HIGH);
  }

if(amoniak <= batasamo){
  digitalWrite(relayaerator,LOW);
  }

if((t.hour == jampagi)&&(jampagi > 0)&&(tanda == 0)){
  myservo1.write(150);
  delay(5000);
  myservo1.write(100);
  tanda = 1;
}

if((t.hour == jamsiang)&&(jamsiang > 0)&&(tanda == 1)){
  myservo1.write(150);
  delay(5000);
  myservo1.write(100);
  tanda = 2;
}

if((t.hour == jamsore)&&(jamsore > 0)&&(tanda == 2)){
  myservo1.write(150);
  delay(5000);
  myservo1.write(100);
  tanda = 0;
}

  lcd.setCursor(0,0);
  lcd.print("TDS:");
  lcd.print(tdsValue);
  lcd.print(" ");
 
  lcd.print("PH:");
  lcd.print(pHValue);
  lcd.print(" ");

  lcd.setCursor(0,1);
  lcd.print("T:");
  lcd.print(TempC,1);
  lcd.print("c ");
  
  lcd.print(batasamo,1);
  lcd.print("/");
  lcd.print(batasph,1);
  lcd.print("");

  lcd.setCursor(0,2);
  lcd.print(t.hour, DEC);
  lcd.print(":");
  lcd.print(t.min, DEC);
  lcd.print(":");
  lcd.print(t.sec, DEC);
  lcd.print("  ");
  lcd.print(jampagi);
  lcd.print("/");
  lcd.print(jamsiang);
  lcd.print("/");
  lcd.print(jamsore);
  lcd.print("");

  lcd.setCursor(0,3);
  lcd.print("Mg/l:");
  lcd.print(amoniak,1);
  lcd.print(" ");
  lcd.print(kolam);
  lcd.print("/");
  lcd.print(tinggipakan);
  lcd.print("  ");

  //ketinggian air kolam 
  digitalWrite(trigPin1, LOW);  // Added this line
  delayMicroseconds(2); // Added this line
  digitalWrite(trigPin1, HIGH);
  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin1, LOW);
  duration1 = pulseIn(echoPin1, HIGH);
  distance1 = (duration1/2) / 29.1;

  //ketinggian pakan ikan
  digitalWrite(trigPin2, LOW);  // Added this line
  delayMicroseconds(2); // Added this line
  digitalWrite(trigPin2, HIGH);
  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin2, LOW);
  duration2 = pulseIn(echoPin2, HIGH);
  distance2 = (duration2/2) / 29.1;
  
  if(distance1 > 35){
    distance1 = 35;
  }

  if(distance2 > 30){
    distance2 = 30;
  }
  
  kolam = 35 - distance1; 
  tinggipakan = map(distance2, 5,30,100,0);

if((kolam >= 29)&&(kolam <= 31)){
  digitalWrite(relayin,LOW);
  digitalWrite(relayout,LOW);  
  }

if(kolam < 29){
  digitalWrite(relayin,HIGH);
  digitalWrite(relayout,LOW);
  }

if(kolam > 31){
  digitalWrite(relayin,LOW);
  digitalWrite(relayout,HIGH);
  }

  mySerial.print("*");
  mySerial.print(pHValue * 100.0);
  mySerial.print(",");
  mySerial.print(tdsValue);
  mySerial.print(",");
  mySerial.print(amoniak * 100.0);
  mySerial.print(",");
  mySerial.print(TempC * 100.0);
  mySerial.println("#");
  
  delay(1000);
}

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

  lcd.setCursor(0,0);
  lcd.print("Waktu Pakan Pagi");
  lcd.setCursor(0,1);
  lcd.print("Jam: ");
  lcd.print(jampagi);
  lcd.print("   ");

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

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

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

if(btokx == 0){
  lcd.clear();
  delay(2000);
  EEPROM.write(addr1, jampagi);
  return; 
}

setjampagi();  
}

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

  lcd.setCursor(0,0);
  lcd.print("Waktu Pakan Siang  ");
  lcd.setCursor(0,1);
  lcd.print("Jam: ");
  lcd.print(jamsiang);
  lcd.print("   ");

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

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

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

if(btokx == 0){
  lcd.clear();
  delay(2000);
  EEPROM.write(addr2, jamsiang);
  return; 
}

setjamsiang();  
}

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

  lcd.setCursor(0,0);
  lcd.print("Waktu Pakan Sore  ");
  lcd.setCursor(0,1);
  lcd.print("Jam: ");
  lcd.print(jamsore);
  lcd.print("   ");

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

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

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

if(btokx == 0){
  lcd.clear();
  delay(2000);
  EEPROM.write(addr3, jamsore);
  return; 
}

setjamsore();  
}

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

  lcd.setCursor(0,0);
  lcd.print("BATAS AMONIAK  ");
  lcd.setCursor(0,1);
  lcd.print("mg/l: ");
  lcd.print(batasamo);
  lcd.print("   ");

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

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

if(batasamo > 100.0){
batasamo = 0;  
}

if(btokx == 0){
  lcd.clear();
  delay(2000);
  EEPROM.write(addr4, batasamo);
  return; 
}

setbatasamo();  
}

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

  lcd.setCursor(0,0);
  lcd.print("BATAS PH  ");
  lcd.setCursor(0,1);
  lcd.print("PH: ");
  lcd.print(batasph);
  lcd.print("   ");

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

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

if(batasph > 100.0){
batasph = 0;  
}

if(btokx == 0){
  lcd.clear();
  delay(2000);
  EEPROM.write(addr5, batasph);
  return; 
}

setbatasph();  
}
 
 
 
2. Program ESP32 
 
#define BLYNK_TEMPLATE_ID "TMX8978HJDWEY"
#define BLYNK_TEMPLATE_NAME "pakan ikan"
#define BLYNK_AUTH_TOKEN "mycwL9MegtQgqhjhgjhftytljpouoiyuyytetxgfch"
#define  BLYNK_PRINT Serial  
#include <SPI.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#define RXD2 16
#define TXD2 17

int temp;
int x = 5;
int y;

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

float ph;
int tds;
float amoniak;
float suhu;

int datain1;
int datain2;
int datain3;
int datain4;

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

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

void sendSensor()
{
 Blynk.virtualWrite(V0, ph);
 Blynk.virtualWrite(V1, tds);
 Blynk.virtualWrite(V2, amoniak);
 Blynk.virtualWrite(V3, suhu);
 delay(1000);
}

void setup(){  
Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
timer.setInterval(1000L, sendSensor);
}

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

if(parsing){
    parsingData();

  Blynk.run();
  timer.run();
  delay(200);

}
 
delay(100);
}

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();

 ph = datain1 / 100.0;
 tds = datain2 / 1;
 amoniak = datain3 / 100.0;
 suhu = datain4 / 100.0;
 
 
 
 
3. VIDEO HASILNYA
 

 

Kendali Pagar Manual / Otomatis Motor Stepper + Sensor PIR IOT Blynk 2.0

Kendali Pagar Manual / Otomatis Motor Stepper + Sensor PIR IOT Blynk 2.0
  

        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang diginakan sebagai kontroller pagar manual atau otomatis via IOT Blynk. jadi alat ini dikendalikan via internet dan tedapat satu sensor pir untuk kendali otomatisnya. untuk lebih jelasnya berikut koding dan video demo alatnya.
 
 
1. Program Arduino IDE
 
#define BLYNK_TEMPLATE_ID "GHJHGtyuytuvb"
#define BLYNK_TEMPLATE_NAME "PAGAR"
#define BLYNK_AUTH_TOKEN "UYUyixmbmhjhgjTGDGFHHGfhgjhgjhddghfc"
#define BLYNK_PRINT Serial

#include <Wire.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

int PUL = 25; //define Pulse pin
int DIR = 26; //define Direction pin
int ENA = 27; //define Enable Pin

int pinValue1, pinValue2, pinValue3, modex, tanda;
int buzzer = 15;
BlynkTimer timer;

char ssid[] = "hotspotwifi";
char pass[] = "1234567890";


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

  if((pinValue1 == 1)&&(tanda == 0)){
  buka();
  }
  
  if(pinValue1 == 0) {

  }
  
}

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

  if((pinValue2 == 1)&&(tanda == 1)){
  tutup();
  }
  
  if(pinValue2 == 0) {

  }
  
}


BLYNK_WRITE(V2)
{
  pinValue3 = param.asInt();   

  if(pinValue3 == 1){
  modex = 1; 
  }
  
  if(pinValue3 == 0) {
  modex = 0;
  }
  
}

void kirimdata()
{

}

void setup() {
  lcd.begin();
  lcd.clear();
  pinMode (PUL, OUTPUT);
  pinMode (DIR, OUTPUT);
  pinMode (ENA, OUTPUT);
  pinMode (buzzer, OUTPUT);
    
  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
  timer.setInterval(1000L, kirimdata);
}

void loop() {
int pir = analogRead(34);

if((pir > 100)&&(modex == 1)&&(tanda == 0)){
  buka();
  delay(5000);
  tutup();
  }
  
  lcd.setCursor(0,0);
  lcd.print("PIR: ");
  lcd.print(pir);
  lcd.print("   ");

Blynk.run();
timer.run();
}

void tutup(){

  lcd.setCursor(0,1);
  lcd.print("TUTUP  ");
  
  for (int i = 0; i < 6400; i++) // Forward 5000 steps
  {
    digitalWrite(DIR, LOW);
    digitalWrite(ENA, HIGH);
    digitalWrite(PUL, HIGH);
    delayMicroseconds(50);
    digitalWrite(PUL, LOW);
    delayMicroseconds(50);
  }  

  tanda = 0;
}

void buka(){

  digitalWrite(buzzer,HIGH);
  delay(1000);
  digitalWrite(buzzer,LOW);
  
  lcd.setCursor(0,1);
  lcd.print("BUKA   ");
    
  for (int i = 0; i < 6400; i++) // Backward 5000 steps
  {
    digitalWrite(DIR, HIGH);
    digitalWrite(ENA, HIGH);
    digitalWrite(PUL, HIGH);
    delayMicroseconds(50);
    digitalWrite(PUL, LOW);
    delayMicroseconds(50);
  }
  
  tanda = 1;
}
 
 
2. Interface Blynk
 

3. VIDEO HASILNYA
 

 

Modifikasi Door Lock Mobil dengan Arduino

Modifikasi Door Lock Mobil dengan Arduino


      Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuat simulasi dengan tujuan untuk modifikasi pintu mobil atau door lock mobil dengan ketentuan yaitu seperti berikut. Door switch = Trigger (-12V) lampu nyala, timer 5 menit mati Apabila trigger (-12V) hilang, tetap hidup selama 10 detik, Unlock = Trigger pulse (+12V), lampu nyala selama 10 detik, Lock = Trigger pulse (+12V), diatas tidak berfungsi, Kontak ON = Trigger (+12V), timer batal semua.


1. Program Arduino

#include <DS3231.h>
DS3231  rtc(SDA, SCL);
Time  t;

int doorswitch = 2;
int unlock = 3;
int lock = 4;
int kontakon = 5;
int relaylampu = 6;

int doorswitchx;
int unlockx;
int lockx;
int kontakonx;
int tanda = 0;
int kunci;

void setup() {
 Serial.begin(9600); 
 rtc.begin();  
 rtc.setDOW(WEDNESDAY);     // Set Day-of-Week to SUNDAY
 rtc.setTime(0, 0, 0);     // Set the time to 12:00:00 (24hr format)
 rtc.setDate(1, 1, 2014);   // Set the date to January 1st, 2014

 pinMode(relaylampu,OUTPUT);
}

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

doorswitchx = digitalRead(doorswitch);
unlockx = digitalRead(unlock);
lockx = digitalRead(lock);
kontakonx = digitalRead(kontakon);

if(kontakonx == 1){
kunci = 1;
rtc.setTime(0, 0, 0);
digitalWrite(relaylampu,HIGH); //lampu off
}

if(lockx == 1){
kunci = 1;
}

if(lockx == 0){
kunci = 0;
}

if((unlockx == 1)&&(lockx == 0)){
  digitalWrite(relaylampu,LOW); //lampu on
  delay(10000); //10 detik
  digitalWrite(relaylampu,HIGH); //lampu off
}


if((doorswitchx == 0)&&(tanda == 0)&&(lockx == 0)){
  digitalWrite(relaylampu,HIGH); //lampu off
  rtc.setTime(0, 0, 0);
}

if((doorswitchx == 0)&&(tanda == 1)&&(lockx == 0)){
  digitalWrite(relaylampu,LOW); //lampu on
  delay(10000); //10 detik
  digitalWrite(relaylampu,HIGH); //lampu off
  rtc.setTime(0, 0, 0);
  tanda = 0;
}

if((doorswitchx == 1)&&(tanda == 0)&&(t.min < 5)&&(lockx == 0)){
  digitalWrite(relaylampu,LOW); //lampu on
  t = rtc.getTime();
  tanda = 1;
}

if((doorswitchx == 1)&&(t.min >= 5)&&(lockx == 0)){
  digitalWrite(relaylampu,HIGH); //lampu off
  t = rtc.getTime();
  tanda = 1;
}

  Serial.print(t.hour, DEC);
  Serial.print("/");
  Serial.print(t.min, DEC);
  Serial.print("/");
  Serial.println(t.sec, DEC);  

}


2. VIDEO HASILNYA




Monitor Gula Darah Non Invasive

Monitor Gula Darah Non Invasive
 

          Pada kesempatan kali ini saya akan menjelaskan bagaimana cara membuat sebuah alat yang dapat memonitor gula darah secara non invasive dengan menggunakan Arduino dan tampilan LCD 16x2 I2c, alat ini menggunakan sensor photodioda dan led merah. untuk lebih jelasnya berikut adalah programnya.
 
 
1. Program Arduino IDE
 
#include "Wire.h"
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

int bt = 5;
int btx;
int adcsensor;
float fix;
int datafix;
int cacah;
float kalibrasi;

void setup() {

  lcd.begin();
  lcd.clear();
  lcd.noCursor();
  Serial.begin(9600);
  pinMode(bt,INPUT_PULLUP);
 
}

void loop(){

 lcd.setCursor(0,0);
 lcd.print("TEKAN MULAI");
 lcd.setCursor(0,1);
 lcd.print("mg/dl= ");
 lcd.print(fix);
 lcd.print("      ");

 btx = digitalRead(bt);

 if(btx == 0){
 lcd.clear();
 delay(1000);
 cacah = 0;
 datafix = 0;
 fix = 0;
 proses();
 }

delay(1000);
}

void proses(){
 
adcsensor = analogRead(A0);

 lcd.setCursor(0,0);
 lcd.print("ADC= ");
 lcd.print(adcsensor);
 lcd.print("      ");

 cacah++;

datafix = adcsensor + datafix;

delay(100);

if(cacah > 20){
  fix = datafix / 20.0;
  //kalibrasi = (fix - 1022.1) / 0.0967;
  return;
}

proses();
}    
 
 
 
2. VIDEO HASILNYA