Lakin bu sensör, doğrusal çıkış vermemekte ve bu yüzden de okunan adc değerlerinin cm cinsine çevrilmesinin mümkünatı zorlaşmakta.
Bu yüzden biz de adc değerlerinden örnekler alarak bu değerleri MATLAB programındaki "Eğri Uydurma" özelliğini kullanarak cm cinsine çevireceğiz.
Ben sensörün en dibinden itibaren 0,1,2,3,4. santimetrelerini işaretleyerek 5 örnek aldım.
0 cm yi ise sensörü birazcık suya batırarak aldım. Aldığım örnekler;
0 cm --> 350
1 cm --> 540
2 cm --> 650
3 cm --> 667
4 cm --> 688
Çıkış olmasını istediğimiz taraf cm cinsi olacağı için y dizinine, ADC değerleri x dizinine kaydettim.Sonra yukardan Curve Fitting özelliğine tıkladım ve X data için x, Y data için y değerlerini seçtim.
Noktaları göz kararı birleştirdiğimizde çıkan eğrinin exponansiyel olduğunu görüyoruz. O yüzden Exponential eğri uydurmayı seçtim ve derecesini de 1 yaptım. Sol tarafta a ve b değerleri çıktı, bizim işimiz bu değerleri, okunan adc değerine göre arduinoya adapte etmek.
Siz daha fazla örnek seçerek sonuca daha fazla yakınlaşabilirsiniz. Aşağıdaki resimde görüldüğü üzere 1.derece exponansiyel eğri uydurma da hata payım bende biraz fazla.
Bu verileri arduinoya adapte ettim. LCD kullananlar LCD fonksiyonunun başındaki slashları silebilirler. Kodlar LCD shield kullananlar içindir.
LCD shield kullanmıyorsanız "LiquidCrystal lcd(8,9,4,5,6,7);" satırına kendi değerlerinizi girmelisiniz.
Kodlar;
//#include <LiquidCrystal.h> // LCD İçin //LiquidCrystal lcd(8,9,4,5,6,7); // LCD İçin #include <math.h> // exp özelliği için bu kütüphane eklenmeli float seviye=0; float x; void setup() { Serial.begin(9600); // lcd.begin(16,2); // LCD İçin } void loop() { x = analogRead(A1); seviye= 0.0007624*exp(0.01239*x); Serial.println(seviye); // lcd.clear(); //LCD için // lcd.print(seviye); // LCD için delay(100); }
Konuyu anlatıp yaptığım videom ve LCD Shield kullanarak yaptığım deneme;
Hocam elinize sağlık takipteyiz.
YanıtlaSil