Lux Meter PID Control Motor Stepper Sensor BH1750 dan Driver TB6600
Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat mengukur LUX dan putaran motor stepper dengan menggunakan metode PID control. alat ini menggunakan sensor BH1750 dan driver stepper TB6600. untuk lebih jelasnya berikut adalah komponen dan kodingnya.
a. Komponen
b. Program Arduino IDE
/* BH1750 wiring
VCC >>> 3.3V
SDA >>> A4
SCL >>> A5
addr >> A3
Gnd >>>Gnd
*/
#include <Wire.h>
#include <BH1750FVI.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
BH1750FVI LightSensor;
uint16_t lux;
#define dirPin 2
#define stepPin 3
int langkah;
float kp = 0.15;
float ki = 1.67;
float kd = 1.15;
float p,i,d,suhu;
float error,errorx,sumerr;
int sp = 60;
int pid;
void setup() {
Serial.begin(9600);
lcd.begin();
lcd.clear();
lcd.noCursor();
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
LightSensor.begin();
LightSensor.SetAddress(Device_Address_H);//Address 0x5C
LightSensor.SetMode(Continuous_H_resolution_Mode);
}
void loop() {
error = sp - lux;
p = error * kp;
sumerr = error + errorx;
i = ki * sumerr;
d = kd * (error - errorx) ;
pid = p + i + d;
if(pid <= 0){
pid = 0;
}
if(pid > 1000){
pid = 500;
}
Serial.println(pid);
lux = LightSensor.GetLightIntensity();
if(lux < 55){
if(langkah <= 150){
kanan();
}
}
if(lux > 65){
if(langkah >= 0){
kiri();
}
}
lcd.setCursor(0,0);
lcd.print("Lux: ");
lcd.print(lux);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print("ST: ");
lcd.print(langkah);
lcd.print(" ");
lcd.print(pid);
lcd.print(" ");
errorx = error;
}
void kiri(){
digitalWrite(dirPin, LOW); // putar CCW jarum jam
digitalWrite(stepPin, HIGH);
delayMicroseconds(pid); // ganti delay untuk mempercepat motor
digitalWrite(stepPin, LOW);
delayMicroseconds(pid); // ganti delay untuk mempercepat motor
langkah--;
}
void kanan(){
digitalWrite(dirPin, HIGH); // putar CW jarum jam
digitalWrite(stepPin, HIGH);
delayMicroseconds(pid); // ganti delay untuk mempercepat motor
digitalWrite(stepPin, LOW);
delayMicroseconds(pid); // ganti delay untuk mempercepat motor
langkah++;
}
c. VIDEO HASILNYA
No comments:
Post a Comment