Friday, 29 May 2015

Anemometer Arduino dengan Datalogger SD Card

     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





Berikut adalah sketch Program Anemometer Digital dengan ARDUINO

#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 :

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();

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

Proses Menampilkan nilai frekuensi,  konversi ke Nilai RPM dan Kecepatan Angin

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