LAMPIRAN
-
Gambar Rangkaian Keseluruhan
3.5 Flowchart Sistem Tangki berpengaduk
D
LCD 16X2
D
V SAKLAR
C1
1000u C5
100u
C6
1nF 5V to microkontroler
RV1
1k
RELAY 5V
10A 250VAC
Q
PIN 13 ARDUINO
0.0
DS18S20 ATAS 1
R1
DS18S20 BAWAH 2 IN1
IN2
ENA
OUT1 OUT2 ENB OUT3 OUT4 IN3
IN4
SENSA SENSB GND
VS
Motor DC
Propeller Fan Heater/pemanas
S1
S2
Demodulator OPTOCOUPLER
optocoupler module
Inisialisasi pin, LCD, sensor suhu,
optocoupler
Tampilkan Nilai Suhu, Kondisi Pemanas &
Kecepatan Motor
Jika upper == true
Jika Sensor Suhu bawah <=36°C
Ya
Hidupkan pemanas upper=false
Proses Kendali proportional Baca nilai suhu sensor atas dan sensor bawah
Kendalikan Nilai Pwm
Tidak
Jika Sensor Suhu bawah <38°C Atau
Sensor suhu atas <38°C
Hidupkan pemanas Ya
Matikan pemanas upper=true Tidak Tidak
LAMPIRAN
Listing Program Dengan Software Arduino IDE #include <OneWire.h>
#include <DallasTemperature.h> #include <LiquidCrystal.h>
#define ONE_WIRE_BUS A4 //pin sensor become to pin 18 digital #define pinPWM 10
#define dir1 11 #define dir2 12 #define pemanas 13 #define ON LOW #define OFF HIGH
OneWire oneWire(ONE_WIRE_BUS); DallasTemperature DS(&oneWire); LiquidCrystal lcd(7, 6, 5, 8, 3, 4); int kp=200;
int tick = 0; int temp = 0;
int dsAtas,dsBawah; bool upper;
bool heater; float rpm = 0; float rps = 0; float tunda = 0;
void getTemp() // fungsi baca sensor {
DS.requestTemperatures();
dsAtas = DS.getTempCByIndex(0); dsBawah = DS.getTempCByIndex(1); Serial.print(char(dsAtas));
Serial.print(char(dsBawah)); Serial.print(char(rpm)); Serial.print(char(heater)); tampil_lcd();
}
void tampil_lcd() {
lcd.clear();
lcd.print("S2="); lcd.print(dsBawah); lcd.print("C"); lcd.setCursor(7,0); lcd.print("H=");
if(heater) {lcd.print("ON");} else {lcd.print("OFF");} lcd.setCursor(7,1); lcd.print("R="); lcd.print(rpm,2); }
void kontrol_kp() //fungsi PROPORSIONAL {
int error,Pro,pwm;
error = abs(dsBawah - dsAtas); Pro = kp*error;
analogWrite(pinPWM,pwm);
if(pwm <= 0)
pinMode(pinPWM,OUTPUT); pinMode(dir1,OUTPUT); pinMode(dir2,OUTPUT); pinMode(pemanas,OUTPUT); Serial.begin(9600);
digitalWrite(dir1,HIGH); digitalWrite(dir2,LOW);
attachInterrupt(0, count, FALLING); // Optocoupler PIN D2 }
void count() {
tick++; if(tick > 1) {
detachInterrupt(0); tunda = millis() - temp; rps = (float)(1000/tunda); rpm = rps * 60;
//Serial.println(rpm); tick = 0;
attachInterrupt(0, count, FALLING); }
temp = millis(); }
void loop() {
getTemp();
if(upper == true && dsBawah <= 36) {
heater = true;
digitalWrite(pemanas, ON); // Heater nyalakan upper = false;
}
else if(upper == false) {
if(dsBawah < 38 || dsAtas < 38) {
heater = true;
digitalWrite(pemanas, ON); // Heater nyalakan }
else // diatas 38 heater padam {
heater = false;
digitalWrite(pemanas, OFF); // Heater padamkan upper = true;
} }