Translate

Monitor Anemometer Lux Tegangan Arus + Suhu Humidity IOT Thingspeak

Monitor Anemometer Lux Tegangan Arus + Suhu Humidity IOT Thingspeak


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat memonitor banyak variabel yaitu Lux Tegangan Arus + Suhu Humidity dengan IOT thingspeak. alat ini menggunakan Arduino Uno wifi sehingga mudah digunakan.


1. Program Arduino 

#include <Wire.h>  // i2C Conection Library
#include <LiquidCrystal_I2C.h>  //i2C LCD Library
#include <BH1750FVI.h>
#include "DHT.h"
#define DHTPIN 8

LiquidCrystal_I2C lcd(0x27, 16, 2);
BH1750FVI LightSensor;
uint16_t lux;
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

// anemometer parameters
volatile byte rpmcount; // count signals
volatile unsigned long last_micros;
unsigned long timeold;
unsigned long timemeasure = 2.00; // seconds
int timetoSleep = 1;               // minutes
unsigned long sleepTime = 15;      // minutes
unsigned long timeNow;
int countThing = 0;
int GPIO_pulse = 2; // Arduino = D2
float rpm, rps;     // frequencies
float radius = 0.1; // meters - measure of the lenght of each the anemometer wing
float velocity_kmh; // km/h
float velocity_ms;  //m/s
float omega = 0;    // rad/s
float calibration_value = 2.0;
int adcteg;
float tegangan;
int adcarus;
float v;
float arus;
int t, h;

void setup() {

  Serial.begin(9600);
  lcd.begin();
  lcd.clear();
  lcd.noCursor();
  dht.begin();
  
  LightSensor.begin();
  LightSensor.SetAddress(Device_Address_H);//Address 0x5C
  LightSensor.SetMode(Continuous_H_resolution_Mode);
  
  pinMode(GPIO_pulse, INPUT_PULLUP);
  digitalWrite(GPIO_pulse, LOW);

  detachInterrupt(digitalPinToInterrupt(GPIO_pulse));                         // force to initiate Interrupt on zero
  attachInterrupt(digitalPinToInterrupt(GPIO_pulse), rpm_anemometer, RISING); //Initialize the intterrupt pin
  rpmcount = 0;
  rpm = 0;
  timeold = 0;
  timeNow = 0;
 
}

void loop()
{

  h = dht.readHumidity();
  t = dht.readTemperature();
  
  adcteg = analogRead(A0);
  tegangan = adcteg * (5.0 / 1023.0) * 4.8;

  adcarus = analogRead(A1);
  v = adcarus * (4.8 / 1023.0);
  arus = (v - 2.4)/0.1;


  //Measure RPM
  if ((millis() - timeold) >= timemeasure * 1000)
  {
    //countThing++;
    detachInterrupt(digitalPinToInterrupt(GPIO_pulse)); // Disable interrupt when calculating
    rps = float(rpmcount) / float(timemeasure);         // rotations per second
    rpm = 60 * rps;                                     // rotations per minute
    omega = 2 * PI * rps;                               // rad/s
    velocity_ms = omega * radius * calibration_value;   // m/s
    velocity_kmh = velocity_ms * 3.6;                   // km/h
        
    timeold = millis();
    rpmcount = 0;
    attachInterrupt(digitalPinToInterrupt(GPIO_pulse), rpm_anemometer, RISING); // enable interrupt
  }

  lux = LightSensor.GetLightIntensity();
  
  lcd.setCursor(0,0);
  lcd.print("m/s=");
  lcd.print(velocity_ms);
  lcd.print(" L:");
  lcd.print(lux);
  lcd.print("   ");

  lcd.setCursor(0,1);
  lcd.print("VI=");
  lcd.print(tegangan,1);
  lcd.print("/");
  lcd.print(arus,1);
  lcd.print("   ");

  Serial.print("*");
  Serial.print(tegangan * 100.0);
  Serial.print(",");
  Serial.print(arus * 100.0);
  Serial.print(",");
  Serial.print(lux);
  Serial.print(",");
  Serial.print(velocity_ms * 100.0);
  Serial.print(",");
  Serial.print(t);
  Serial.print(",");
  Serial.print(h);  
  Serial.println("#");
    
delay(100);
}

void rpm_anemometer()
{
  if (long(micros() - last_micros) >= 5000)
  { // time to debounce measures
    rpmcount++;
    last_micros = micros();
  }
}


2. Program ESP8266

#include <ESP8266WiFi.h>
#include <ThingSpeak.h>
#include <WiFiClient.h>

int temp;
int x = 5;
int y;
int t, h;

int value1;
int value2;
int value3;
int value4;
int value5;
int value6;

float tegangan;
int lux;
float arus;
float velocity_ms;

int datain1;
int datain2;
int datain3;
int datain4;
int datain5;
int datain6;

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

String apiKey = "GFDHJTTTKJHGFVYU";     //  Enter your Write API key from ThingSpeak
const char* resource = "/update?api_key=";

const char* ssid =  "hotspothpku";     // replace with your wifi ssid and wpa2 key
const char* pass =  "1234567890";
const char* server = "api.thingspeak.com";

WiFiClient  client;

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

  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, pass);

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

      while (WiFi.status() != WL_CONNECTED)
     {
            delay(500);
            Serial.print(".");
     }
      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();
       
  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 + "&field3=" + lux + "&field4=" + velocity_ms + "&field5=" + t + "&field6=" + h + " 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...");

  delay(10000);
 
 }
}

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();
 datain5 = dt[4].toInt();
 datain6 = dt[5].toInt();
 
 tegangan = datain1 / 100.0;
 arus = datain2 / 100.0;
 lux = datain3 / 1;
 velocity_ms = datain4 / 100.0;
 t = datain5 / 1;
 h = datain6 / 1;
 
}