Prinsip kerja Awal dari anemometer adalah menghitung frekuensi putaran rotor Anemometer,sehingga selanjutnya dari putaran rotor tersebut bisa menghitung kecepatan angin . Penghitung frekuensi (Frequency Counter) digunakan untuk menghitung banyaknya gelombang dalam satu detik, sehingga mempunyai satuan Hz (Hertz). Pada mikrokontroler Arduino Mega terdapat port untuk masukan counter 1 (T1) dan terhubung dengan pin 5 Arduino Uno. Pulsa yang akan kita ukur frekuensinya dihubungkan dengan pin 47. Library frequency counter ini juga telah tersedia, tinggal kita pakai saja.
Rangkaian yang digunakan terdapat pada gambar 1. Yang meupakan rangkaian amplifier yang berfungsi sebagai penguat sinyal dari frekuensi masukan dari optocopler ataupun rangkaian decoder pembaca detak frekuensi Poros Anemometer.Catatan Kerja J-Creator Electronic
Anemometer digital
Prinsip kerja Awal dari anemometer adalah menghitung frekuensi putaran rotor Anemometer,sehingga selanjutnya dari putaran rotor tersebut bisa menghitung kecepatan angin . Penghitung frekuensi (Frequency Counter) digunakan untuk menghitung banyaknya gelombang dalam satu detik, sehingga mempunyai satuan Hz (Hertz). Pada mikrokontroler Arduino Mega terdapat port untuk masukan counter 1 (T1) dan terhubung dengan pin 47 Arduino Mega. Pulsa yang akan kita ukur frekuensinya dihubungkan dengan pin 47. Library frequency counter ini juga telah tersedia, tinggal kita pakai saja.
Rangkaian yang digunakan terdapat pada gambar 1. Yang meupakan rangkaian amplifier yang berfungsi sebagai penguat sinyal dari frekuensi masukan dari optocopler ataupun rangkaian decoder pembaca detak frekuensi Poros Anemometer.
Pulsa yang akan dihitung frekuensinya dihubungkan ke pin F_ in. Sumber pulsa dapat menggunakan piringan dekoder. Piringan Dekoder tersebut terpasang pada Poros Anemometer, dan terpasang juga rangkaian pembaca dekoder menggunakan Optocoupler yang selanjutnya terhubung ke rangkaian preamplifier sinyal masukan. Piringan Dekoder tersebut berupa Piringan yang terdapat Lubang lubang yang berjumlah 32.yang berfungsi sebagai pendetak frekuensi.Jika rangkaian sensor Mengenai lubang Maka Sensor akan mendeteksi Low, Sebaliknya jika sensor tidak mengenai lubang maka Sensor akan mendeteksi High. Dan kejadian tersebut terjadi berulang selama Rotor Anemometer Berputar, sehingga Menghasilkan pulsa frekuensi dan terbaca oleh Mikrokontroler Arduino sebagai Frejuensi Masukan.dan Jumlah Frekuensi Masukan tiap detiknya dihitung sehingga Menghasilkan nilai Frekuensi dalam Hz. Selanjutnya Nilai frekuensi tersebut di konversi menjadi Nilai RPM dan Kecepatan Angin dalam m/s. Dan di masukkan pada skrip program RPM = (float)count * (60.0/32.0) ; selanjutnya ditampilkan pada lcd dengan skrip progam lcd.print(RPM lcd.print(" "); Selain menampilkan data Frekuensi pada LCD arduino juga memproses data Kecepatan angin ke SD card berupa data logger, dengan adanya datalogger maka setiap pembacaan kecepatan angin akan direcord oleh modul SD card
#include <FreqCount.h>
#include "LiquidCrystal.h";
LiquidCrystal lcd(12, 11, 5, 4, 3,2 );
#include <SD.h>
#define LOG_INTERVAL 1000 // mills between entries (reduce to take more/faster data)
#define SYNC_INTERVAL 1000 // mills between calls to flush() - to write data to the card
uint32_t syncTime = 0; // time of last sync()
int Phi = 3.1428571428571428571428571428571;
int JariJari = 1.0;
float frekuensi;
const int chipSelect = 53;
File logfile;
void error(char *str)
{
lcd.setCursor(0,0);
lcd.print("PASANG MEMORI..! ");
lcd.setCursor(1,1);
lcd.print("LOG DATA GAGAL");
Serial.println(str);
digitalWrite(redLEDpin, HIGH);
while(1);
}
void setup(void)
{
lcd.begin(16, 2);
// Tulis Temperatur di LCD
pinMode(redLEDpin, OUTPUT);
pinMode(buzzer, OUTPUT);
#if WAIT_TO_START
Serial.println("Type any character to start");
while (!Serial.available());
#endif //WAIT_TO_START
Serial.print("Initializing SD card...");
pinMode(53, OUTPUT);
if (!SD.begin(chipSelect)) {
error("Card failed, or not present");
}
Serial.println("card initialized.");
char filename[] = "LOGGER00.CSV";
for (uint8_t i = 0; i < 100; i++) {
filename[6] = i/10 + '0';
filename[7] = i%10 + '0';
if (! SD.exists(filename)) {
logfile = SD.open(filename, FILE_WRITE);
break; // leave the loop!
}
}
if (! logfile) {
error("couldnt create file");
}
lcd.setCursor(0,0);
lcd.print("FILE SUKSES: ");
lcd.setCursor(1,1);
lcd.println(filename);
delay(5000);
lcd.clear();
logfile.println("Freq >> RPM >> Kecepatan angin");
#if ECHO_TO_SERIAL
Serial.println("Freq >> RPM >> Kecepatan angin");
#endif //ECHO_TO_SERIAL
lcd.print("Freq>>RPM>>Kec");
FreqCount.begin(1000);
}
void loop(void)
{
// delay for the amount of time we want between readings
delay((LOG_INTERVAL -1) - (millis() % LOG_INTERVAL));
digitalWrite(buzzer, HIGH);
// fetch the time
//Pencacahan frekuensi
if (FreqCount.available())
{
unsigned long count = FreqCount.read();
lcd.setCursor(0, 1);
lcd.print(count);
lcd.print(" ");
float RPM;
lcd.setCursor(5,1);
RPM = (float)count * (60.0/32.0) ;
lcd.print(RPM);
lcd.print(" ");
float KecepatanAngin;
float RPM2Rad;
RPM2Rad = ((2.0 * Phi/60.0) * RPM );
lcd.setCursor(11,1);
KecepatanAngin = RPM2Rad * JariJari ;
lcd.print(KecepatanAngin);
lcd.print(" ");
logfile.print(" ");
logfile.print(count);
logfile.print(" ");
logfile.print(RPM);
logfile.print(" ");
logfile.print(KecepatanAngin);
#if ECHO_TO_SERIAL
Serial.print(" ");
Serial.print(count);
#endif // ECHO_TO_SERIAL
logfile.println();
#if ECHO_TO_SERIAL
Serial.println();
#endif //ECHO_TO_SERIAL
if ((millis() - syncTime) < SYNC_INTERVAL) return;
syncTime = millis();
digitalWrite(redLEDpin, HIGH);
logfile.flush();
digitalWrite(redLEDpin, LOW);
}
Penjelasan Program:
Awal program adalah melakukan inisialisasi konstanta, objek, serta variabel yang diperlukan pada proses eksekusi program serta pin I/O yang akan digunakan,
#include <FreqCount.h>
#include "LiquidCrystal.h";
#LiquidCrystal lcd(12, 11, 5, 4, 3,2 );
#include <SD.h>
#define LOG_INTERVAL 1000 // mills between entries (reduce to take more/faster data)
#define SYNC_INTERVAL 1000 // mills between calls to flush() - to write data to the card
uint32_t syncTime = 0; // time of last sync()
int Phi = 3.1428571428571428571428571428571;
int JariJari = 1.0;
float frekuensi;
const int chipSelect = 53;
File logfile;
Program akan mendeteksi apakah SD Card sudah dimasukkan pada Socket SD Apabila belum dimasukkan, program akan menampilkan tulisan "PASANG MEMORI...! LOG DATA GAGAL ", berikut ini merupakan listing programnya :
void error(char *str)
{
lcd.setCursor(0,0);
lcd.print("PASANG MEMORI...! ");
lcd.setCursor(1,1);
lcd.print("LOG DATA GAGAL");
Serial.println(str);
Apabila SD Card sudah dimasukkan, program akan melakukan inisialisasi awal SD Card. Jika proses inisialisasi gagal, maka proses program akan dihentikan. Jika proses inisialisasi berhasil, program akan berlanjut ke langkah 4. berikut ini merupakan listing programnya :
error("couldnt create file");
}
lcd.setCursor(0,0);
lcd.print("FILE SUKSES: ");
lcd.setCursor(1,1);
lcd.println(filename);
delay(5000);
lcd.clear();
Akan membuat file CSV baru pada SD Card untuk keperluan logging data.,berikut ini merupakan listing programnya :
char filename[] = "LOGGER00.CSV";
for (uint8_t i = 0; i < 100; i++) {
filename[6] = i/10 + '0';
filename[7] = i%10 + '0';
if (! SD.exists(filename)) {
// only open a new file if it doesn't exist
logfile = SD.open(filename, FILE_WRITE);
break; // leave the loop!
Proses penamaan file akan dilakukan mengikuti nomor file terakhir yang terdapat pada SD Card. Apabila nama file terakhir yang ada pada SD Card adalah “LOGGER00”, pada proses ini akan dibuat file baru dengan nama“LOGGER01” dan LCD akan menampilkan “FILE SUKSES LOGGER00.CSV
if (FreqCount.available())
{
unsigned long count = FreqCount.read();
lcd.setCursor(0, 1);
lcd.print(count);
lcd.print(" ");
float RPM;
lcd.setCursor(5,1);
RPM = (float)count * (60.0/32.0) ;
lcd.print(RPM);
lcd.print(" ");
float KecepatanAngin;
float RPM2Rad;
RPM2Rad = ((2.0 * Phi/60.0) * RPM );
lcd.setCursor(11,1);
KecepatanAngin = RPM2Rad * JariJari ;
lcd.print(KecepatanAngin);
lcd.print(" ");
logfile.print(" ");
logfile.print(count);
logfile.print(" ");
logfile.print(RPM);
logfile.print(" ");
logfile.print(KecepatanAngin);
Secara garis besar prinsip kerja Anemometer adalah sebagai Berikut. Pada saat baling-baling anemometer mulai terkena angin, maka poros Anemometer secara otomatis akan berputar. Dan Piringan encoder juga berputar.Maka Sensor optocoupler menghasilkan sinyal high low yang diakibatkan hasil perubahan lubang lubang pada encoder.dan mengirim sinyal ke rangkaian preamplifier.dan di kuatkan sehingga Mikrokontroler arduino dapat membaca secara jelas Nilai perubahan tegangan tersebut.
Selanjutnya pencacahan frekuensi tersebut diolah oleh program arduino dan di tampilkan ke LCD.hasil tampilan tersebut berupa 3 data, yaitu data frekuensi, RPM, dan Kecepatan angin,Selanjutnya data tersebut diolah kembali oleh perintah program arduino sehingga ketiga data tersebut bisa di simpan setiap detiknya ke SD card.
Semoga Bermanfaat
ALL IZ WELL
No comments:
Post a Comment