Translate

Monitoring Tegangan 3 fasa (3-phase Voltage monitoring) Sensor PZEM-004t TCP-IP WEBSERVER ARDUINO

Monitoring Tegangan 3 fasa (3-phase Voltage monitoring) Sensor PZEM-004t TCP-IP WEBSERVER ARDUINO

         Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat digunakan untuk monitoring tegangan 3 fasa dan juga bisa memonitor tegangan dc serta jarak, alat ini juga dilengkapi fitur kendali relay, alat ini menggunakan komunikasi ke server via TCP-IP sehingga membutuhkan IP address. untuk lebih jelasnya berikut koding dan daftar komponennya.


a. Arduino Mega 




b. Ethernet Shield




c. Sensor PZEM 004t




d. Sensor Tegangan DC




e. Sensor Jarak HC-SRF04




f. Modul Relay




g. Program Arduino IDE

#include <Wire.h>  // i2C Conection Library
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <Ethernet.h>
#include <PZEM004Tv30.h>
#include <SoftwareSerial.h>
#define trigPin 26
#define echoPin 28
LiquidCrystal_I2C lcd(0x27,16,2); 
PZEM004Tv30 pzem1(11, 12);
PZEM004Tv30 pzem2(A8, A9);
PZEM004Tv30 pzem3(A10, A11);
int voltage1, voltage2, voltage3;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0,99);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);
long duration, distance;
EthernetServer server(80);
String readString;
int relay1 = 22;
int relay2 = 24;
int mark = 0;
int markx = 2;
int incomingByte = 0; 

void setup() {
  lcd.begin();   
  lcd.noCursor();
  lcd.clear();
  Serial.begin(9600);  
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  digitalWrite(relay1, HIGH);
  digitalWrite(relay2, HIGH);
  
   while (!Serial) {
  }
  Ethernet.begin(mac, ip);
  server.begin();
    delay(1000);
}

void loop() {
voltage1 = pzem1.voltage();
voltage2 = pzem2.voltage();
voltage3 = pzem3.voltage();
int adcteg = analogRead(A0);
float tegangan = adcteg * (5.0 / 1023.0) * 4.8;
  
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;
distance = 23 - distance;
if(distance < 0){
  distance = 0;
}
lcd.setCursor(0, 0);
lcd.print(voltage1);
lcd.print("/");
lcd.print(voltage2);
lcd.print("/");
lcd.print(voltage3);
lcd.print("               ");
lcd.setCursor(0, 1);
lcd.print(tegangan);
lcd.print("/");
lcd.print(distance);
lcd.print("              ");
  EthernetClient client = server.available();
  if (client) {
   // Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
     //   Serial.write(c);
     if (readString.length() < 100) {
          //store characters to string
          readString += c;
          //Serial.print(c);
        }
        
        if (c == '\n' && currentLineIsBlank) {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println("Refresh: 3");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println(" ");
          client.println("<title> Monitor </title> ");     
          client.println("<body bgcolor = #000000>");     
          client.println("<center>");
            client.println("<font color = yellow><center><h2>MONITORING TEGANGAN RST </h2></center><br></font>");
            client.println("<font color = #FFFFFF>");
            client.println("<h1>");
            client.println(" Tegangan R = ");
            client.print(voltage1);
            client.println("<br />");
            client.println(" Tegangan S = ");
            client.print(voltage2);
            client.println("<br />");
            client.println(" Tegangan T = ");
            client.print(voltage3);
            client.println("<br />");
            client.println(" VDC = ");
            client.print(tegangan);
            client.println("<br />"); 
            client.println(" Jarak = ");
            client.print(distance);
            client.println("<br />");          
            client.println("</h1>");      
            client.println("</font><br><br>");
           client.println("<a href = \"/?lighton1\"\"><input type = 'button' value = 'ON 1' ></a>");
           client.println("<a href = \"/?lightof2\"\"><input type = 'button' value = 'TOG 1' ></a> ");    
           client.println("<a href = \"/?lighton3\"\"><input type = 'button' value = 'ON 2' ></a>");
           client.println("<a href = \"/?lightof4\"\"><input type = 'button' value = 'TOG 2' ></a> "); 
           client.println("</center>");
//untuk kirim data ke client via TCPIP 
        server.print("Tegangan R = ");
        server.print(voltage1);
        server.print(" Tegangan S = ");
        server.print(voltage1);
        server.print(" Tegangan T = ");
        server.print(voltage1);
        server.print(" VDC = ");
        server.print(tegangan);
        server.print(" Jarak = ");
        server.println(distance);
        break; 
  
        }    
        if (c == '\n') {
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    delay(1);
    client.stop();
  //  Serial.println("client disonnected");
  }
          if((readString.indexOf("?lighton1") >0)&&(mark == 1))
          {
             digitalWrite(relay1, LOW);
             delay(3000);
             digitalWrite(relay1, HIGH);                
             mark = 0;
          }
         
          if((readString.indexOf("?lightof2") >0)&&(mark == 0))
          {
             mark = 1;
          }
        
          if((readString.indexOf("?lighton3") >0)&&(markx == 3))
          {
             digitalWrite(relay2, LOW);
             delay(3000);
             digitalWrite(relay2, HIGH);                
             markx = 2;   
          }
         
          if((readString.indexOf("?lightof4") >0)&&(markx == 2))
          {
             markx = 3;
          }
 
readString="";
delay(1000);
}



h. VIDEO HASILNYA



      

Alat Monitor Arus dan Tegangan DC Server Thingspeak + Arduino Ethernet Shield webserver

Alat Monitor Arus dan Tegangan DC Server Thingspeak + Arduino Ethernet Shield  Webserver


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang berguna untuk monitor arus dan tegangan DC via internet atau server THINGSPEAK. alat ini menggunakan sensor tegangan dc dan ACS712 untuk monitor arus dc. yang berbeda dari biasanya yaitu alat ini menggunakan ethernet shield sehngga bisa menggunakan arduino uno yang mana pin ADC bisa lebih dari satu. untuk lebih jelasnya berikut adalah komponen dan programnya.



a. Arduino + Ethernet Shield




b. Sensor tegangan DC



c. Sensor arus  ACS712




d. LCD + I2C






e. Program Arduino IDE 

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

LiquidCrystal_I2C lcd(0x3F,16,2);

byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0,99);

int datain1;
int datain2;

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

String apiKey = "AABBVHJ678UUIGFJW";     //  Enter your Write API key from ThingSpeak
const char* resource = "/update?api_key=";
const char* server = "api.thingspeak.com";

EthernetClient client;


void setup() {
  lcd.begin();
  lcd.clear();
  lcd.noCursor(); 
  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...");
      
}


void loop() {
  
int adcteg = analogRead(A3);
float tegangan = adcteg * (5.0 / 1023.0) * 4.8;

int adcarus = analogRead(A2);
float v = adcarus * (5.0 / 1023.0);
float arus = (v - 2.5)/0.1;
  
lcd.setCursor(0,0);
lcd.print("V= ");
lcd.print(tegangan);
lcd.print("   ");
lcd.setCursor(0,1);
lcd.print("I= ");
lcd.print(arus);
lcd.print("   ");

EthernetClient client;

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

   client.print(String("GET ") + resource + apiKey + "&field1=" + tegangan + "&field2=" + arus + " 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.print("Tegangan: ");
  Serial.print(tegangan);
  Serial.print(" Arus: ");
  Serial.print(arus);
  Serial.println(". Send to Thingspeak.");
 }
                       
  client.stop();

  Serial.println("Waiting...");

  delay(10000);
  
}




f. VIDEO HASILNYA









Alat Ukur Intesitas Cahaya dan Jarak Sensor APDS9930 Arduino IOT Blynk

Alat Ukur Intesitas Cahaya dan Jarak Sensor APDS9930 Arduino IOT Blynk


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang menggunakan sensor APDS untuk mengukur tingkat intensitas cahaya atau bisa juga untuk pengukur jarak, alat ini dipantau secara online dengan menggunakan Blynk sehingga jarak bisa jauh. untuk lebih jelasnya berikut adalah program dan daftar komponennya.



a. Wemos Mini 




b. Sensor APDS9930




c. Led






d. Program Arduino IDE

#define BLYNK_PRINT Serial 
#define DUMP_REGS
#include <SPI.h>
#include <ESP8266WiFi.h> 
#include <Wire.h>
#include <APDS9930.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
 
// Global Variables
APDS9930 apds = APDS9930();
float ambient_light = 0; // can also be an unsigned long
uint16_t ch0 = 0;
uint16_t ch1 = 1;

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "hgfjhfEJDGjghgjhgjfuouiosreawhvjhvmnbkjhkjhk";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "myhotspotku";
char pass[] = "123456789";

SimpleTimer timer;

void sendSensor()
{

 Blynk.virtualWrite(V5, ambient_light);
 
}
 
void setup() 
{
  pinMode(D8,OUTPUT);
  pinMode(D7,OUTPUT);
  pinMode(D6,OUTPUT);
  pinMode(D5,OUTPUT);
  
  Serial.begin(9600);
  Serial.println();

  Blynk.begin(auth, ssid, pass);
  timer.setInterval(1000L, sendSensor);

  // Initialize APDS-9930 (configure I2C and initial values)
  if ( apds.init() ) 
  {
    Serial.println(F("APDS-9930 initialization complete"));
  } 
  else 
  {
    Serial.println(F("Something went wrong during APDS-9930 init!"));
  }
 
  // Start running the APDS-9930 light sensor (no interrupts)
  if ( apds.enableLightSensor(false) ) 
  {
    Serial.println(F("Light sensor is now running"));
  } 
  else 
  {
    Serial.println(F("Something went wrong during light sensor init!"));
  }
 
  // Wait for initialization and calibration to finish
  delay(500);
}
 
 
void loop() 
{
 
  // Read the light levels (ambient, red, green, blue)
  if (  !apds.readAmbientLightLux(ambient_light) ||
        !apds.readCh0Light(ch0) || 
        !apds.readCh1Light(ch1) ) {
    Serial.println(F("Error reading light values"));
  } 
  else 
  {
    Serial.print(F("Intensitas: "));
    Serial.println(ambient_light);

    if((ambient_light > 0)&&(ambient_light < 30)){
      digitalWrite(D8,HIGH);
      digitalWrite(D7,LOW);
      digitalWrite(D6,LOW);
      digitalWrite(D5,LOW);
      }

    if((ambient_light > 30)&&(ambient_light < 60)){
      digitalWrite(D8,LOW);
      digitalWrite(D7,HIGH);
      digitalWrite(D6,LOW);
      digitalWrite(D5,LOW);
      }

    if((ambient_light > 60)&&(ambient_light < 100)){
      digitalWrite(D8,LOW);
      digitalWrite(D7,LOW);
      digitalWrite(D6,HIGH);
      digitalWrite(D5,LOW);
      }

    if(ambient_light > 100){
      digitalWrite(D8,LOW);
      digitalWrite(D7,LOW);
      digitalWrite(D6,LOW);
      digitalWrite(D5,HIGH);
      }  
      
  }

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




e. VIDEO HASILNYA





 


PID Control Kendali Servo Sensor Suhu Thermocouple Max6675 Arduno

PID Control Kendali Servo Sensor Suhu Thermocouple Max6675 Arduno


          Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang menggunakan PID control sebagai metode kendalinya. alat ini menggunakan servo sebagai kendali pemanasnya sehngga servo akan merespon tiap kali panas terdeteksi. alat ini menggunakan sensor thermocouple dan modul max6675. untuk lebih jelasnya berikut adalah program dan daftar komponennya.



a. Arduino Uno




b. Motor Servo




c. LCD + I2C




d. Sensor suhu Thermocouple + max6675

 




e. Program arduino IDE 

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

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

int btok = 8;
int btup = 10;
int btdown = 11;
int btset = 12;

int btokx;
int btupx;
int btdownx;
int btsetx;

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

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

int sp;
Servo myservo;

MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);

LiquidCrystal_I2C lcd(0x27,16,2);

// make a cute degree symbol
uint8_t degree[8]  = {140,146,146,140,128,128,128,128};

void setup() {

  Serial.begin(9600);
  lcd.clear();
  lcd.begin();
  lcd.createChar(0, degree);

  pinMode(btok,INPUT_PULLUP);
  pinMode(btup,INPUT_PULLUP);
  pinMode(btdown,INPUT_PULLUP);
  pinMode(btset,INPUT_PULLUP);
  
  myservo.attach(9);
  
  delay(500);
}

void loop() {
  
  myservo.write(pid);

  error = sp - suhu;
  p = error * kp;
  sumerr = error + errorx;
  i = ki * sumerr;
  d = error - errorx;
  pid = p + i + d;
 
  if(pid < 0){
  pid = 0;
  }

  if(pid > 200){
  pid = 200;
  }       

lcd.setCursor(0, 1);
lcd.print("P=");
lcd.print(pid);
lcd.print(" SP=");
lcd.print(sp);
lcd.print("   ");

 suhu = thermocouple.readCelsius();

lcd.setCursor(0, 0);
lcd.print("SUHU = "); 
lcd.print(suhu);
 
#if ARDUINO >= 100
  lcd.write((byte)0);
#else
  lcd.print(0, BYTE);
#endif
  lcd.print("C ");
  delay(1000);

btsetx = digitalRead(btset);

if(btsetx == 0){
lcd.clear();
delay(200);
setting();
}

errorx = error;
 
}

void setting(){
lcd.setCursor(0, 0);
lcd.print("SP= ");
lcd.print(sp);
lcd.print("   ");

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

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

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

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

if(sp < 0){
  sp = 0;
}
  
setting();  
}




f. VIDEO HASILNYA