Translate

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