Bir deneme daha yapıyorum.
1- Ana Çıkışa 1v verdim. Multimetrede 1.004v okuyorum.
2- 1V'a karşı Piconun ADC sinde üretilen bit sayısı 0.027
3- 10V'a karşı Piconun ADC sinde üretilen bit sayısı 0.27
4- 20V'a karşı Piconun ADC sinde üretilen bit sayısı 0.54
5- 30V'a karşı Piconun ADC sinde üretilen bit sayısı 0.81
Şimdi benim bu bit'i öyle bir sayıyla çarpmam lazım ki bana her daim doğru sonucu versin.
O zaman işlemi tersten yapar sayıyı bulurum.
1V için, 1.000 / 0.027= 37.037
10V için, 10.000 / 0.27 = 37.037
20V için, 20.000 / 0.54 = 37.037
30V için 30.000 / 0.81 = 37.037
Demek ki benim ADC den okuduğum bit sayısını
37.037 ile çarparsam bana her daim doğru sonucu vermeli değil mi?
Hesap makinesinde çarpınca evet istediğimi tam olarak alıyorum ama koda uyguladığımda 30v için ekranda 29.88 yazıyor, 20v için 19.92 yazıyor. Buna hiç bir mantık uyduramıyorum.
Vdata: ADC den okunan voltaj değerini tutan değişken.
4096: Pico ADC si 12 Bit olduğu için kullanılan değer.
3.241: Ana çıkış 30V olduğunda ADC pinine düşen voltaj değeri.
vOUT: ADC den okunan voltaj değerinin bit olarak arşılığının hesaplanıp atıldığı diğişken.
Kod:
int voltageSensor = A1;
float vOUT = 0.0;
static float vIN = 0.0;
float Vdata = 0.0;
for (int i = 0; i < 350; i++) // daha kararlı ortalama bir sonuç almak için 350 kez okuma yapma
{
Vdata = Vdata + analogRead(voltageSensor);
delay(1);
}
Vdata = Vdata / 350;
vOUT = (Vdata / 4096.0) * 3.241;
vIN = vOUT * 37.037;