Biraz daha fazla olabilir mi? Çevre sensörlerinin bağlantısı

semaver

New member


  1. Biraz daha fazla olabilir mi? Çevre sensörlerinin bağlantısı

Yine de ve bu blog dizisinde hala sensörlerden bahsedildi. Düşüncelerin konusu sıcaklık, hava nemi, zamansal tanıma, ince toz, hava basıncı veya radyoaktivite içeriyordu. Bu bölüm sensörler ve diğer bir dizi benzer çevre sensörü ile ilgilidir.



Her seferinde tamamen yeni bir bileşen tasarlamak zorunda kalmamak için, bir ölçüm istasyonuna diğer sensörler eklenir eklenmez, modüler bir yaklaşım geliştirme fikri açıktır. Bu amaçla, hem donanım hem de yazılım buna göre yapılandırılmalıdır. Araç ölçüm istasyonu bu nedenle Web'e, örneğin ESP8266 ile entegre edilebilir.

Sensör kalkanları


Birçok sensörü bir Arduino'ya bağlamak istiyorsanız, sonuçta “tel gübre” nedeniyle genel görünümü kaybedeceksiniz. Her analog sensörün en az bir veri bağlantısının yanı sıra besleme voltajı ve Dünya'ya ihtiyacı vardır. Sensörlerin I ile bağlantısı hala biraz daha karmaşık2Daha önce tanıştığımız gibi C, SPI veya 1 telli veri yolu.

Her şeyi basitleştirmek için, elektronik üreticileri Arduino ekosistemi için bu kadar çok sensör sunar. Bu ismin arkasında teknik bir sofistike olduğundan şüphelenilebilir, ancak sonunda sadece R3 düzenli (Birleşmiş Milletler, Leonardo, Mega dahil) bir arduino pimlerini yönlendirmeyen, ancak talep edilen tüm hatlara sahip sensörler için adaptasyon noktalarını açıkça sunan kalkanlardır. Yani bu kompaktlık ve rahatlık ile ilgilidir. İşte bu kalkanın bir örneği:




Arduino Sensör Kalkanı 4.0



Arduino Sensör Kalkanı 4.0


(Resim: https://arduino-info.wikispaces.com/)



Örneğin, gösterilen kalkanda, analog ve dijital sensörleri bağlamak için çeşitli yuvalar ve 3 serileri ve i için iletişim bağlantılarını görebilirsiniz.2C veya seri bazlı iletişim, böylece geliştiriciler protokol seçimini jumper üzerinden ayarlayabilir.

Arduino için “Sensör Kalkanları”, esas olarak 4.0 veya 5.0 versiyonunda çok şey var, bu nedenle üretici, kendilerini Arduino Sensör Kalkanı V4.0 olarak tanımlayan bir dizi farklı kalkanla karşılaşıyor. Yani isim her zaman bir program değildir.



Bu arada, bu makale için birkaç Euro için bir Saininsmart kalkanı kullanılmıştır: Ürün sayfasına bakın.

Üreticinin kesinlikle bir sensör kalkanına ihtiyacı var mı? Hayır, ama “sahip olmak güzel” aksesuar.

UV ML8511 sensörü


Hepimiz deneyimlerden biliyoruz ki, UV radyasyonunun cilde ve dolayısıyla sağlığa zarar verebileceğini. Bu nedenle Birleşmiş Milletler DSÖ (Dünya Sağlık Örgütü) SO -UV endeksini standartlaştırmıştır. Bu doğrusal ölçümü ikiye katlayarak, potansiyel bir güneş yanığı boyunca yarıya kadar değişir. Geceleri, UV endeksi şaşırtıcı bir şekilde 0 değilken, değeri bir yaz gününde öğle yemeğinde net bir gökyüzü ile 10'dur.

280 ila 390 nm arasında bir frekans spektrumu ile ML8511 gibi UV sensörleri vardır, neredeyse tam UV-A aralığını (UV radyasyonu cildin tanına yol açar) ve UV-B (UV radyasyonu yanıklara yol açar).




ML8511 sensörü



ML8511 sensörü


(Resim: Sparkfun)



Fotoelektrik etki nedeniyle, UV sensörleri bir yarı iletken malzemenin radyasyonunda elektronların akışına ve dolayısıyla daha yüksek bir iletkenliğe kadar çalışır. Seçim, UV dalga boylarına duyarlı olduğunu kanıtlayan yarı iletkenlere düşer.

Arduino sensörünü bağlamak için aşağıdaki bağlantılar gereklidir:

Arduino ML8511
3.3V 3.3V
GND GND
A3 OUT
A4 3.3V
3.3V EN
Bir hassasiyet meselesi


Analog dijital dönüşümün doğruluğunu artırmak için ek bir önlem gereklidir. Doğruluk, mevcut güç kaynağı voltajının bilgisine bağlıdır.CC mesafe. USB bağlantı noktası gibi düzensiz bir voltaj kaynağından beslendiklerinde, yüzde 5'e kadar dalgalanmalar olabilir. Bu nedenle VCC, 5 V şüpheli voltaj değeri etrafında ± yüzde 5 olabilir, bu da ADC dönüşümlerinin sonuçlarını kullanılamaz ancak çok yanlış yapar.

Bu nedenle, aşağıdaki hile idealdir: ML8511'in 3.3 V çıkışına Arduino'ya analog A4'ü koyduk, bu da 3,3 V çıkışında Arduino'nun çok hassas (tolerans ± %1) sağlıyoruz.

A3 analog girişini ML8511'in çıkışına konumlandırıyoruz.

Bilindiği gibi, analog girişe analog bir dijital dönüşüm,CC Orada bulun. ML8511'in 3.3 V üzerinde bulunan A4 benzetmesinin girişinde 700 dijital değeri aldığımızı varsayalım.CC Aşağıdakilere uygulayın:

3.3V / 700 = Vcc / 1023

VCC Arduino'ya göre, gerçekte 5 V değil 4.8227 V.

UV ölçüm kodu artık kolayca oluşturulabilir. Ölçüm hatalarını veya dalgalanmaları telafi etmek için, taslak birkaç kez ölçülür (Tekrarlama) ve bu nedenle ortalama değerleri hesaplayın.

Kayan virgül sayıları için bir harita işlevi, MW/cm cinsinden ölçülen gerilimleri dönüştürmeye yardımcı olur2-Valori. Ölçülebilir gerginlikler 1 V (UV yoğunluğu = 0) 'dan 2.8 V'a (UV 15 yoğunluk) biraz hareket eder. Bu nedenle, haritanın işlevinin hatırlanması:

mapfloat(spannung, 0.99, 2.8, 0.0, 15.0)

Aşağıdaki kodun anlaşılması kolay olmalıdır, çünkü esasen sensör değerlerinin analog okumasına indirgenir.

////////////////////////////////////////////////////////
//
// Umweltmessstation
//
////////////////////////////////////////////////////////
// UV-Sensor *******************************************
// Anschluss an Arduino über Sensor Shield v4

int ML8511OUT = A3; // ML8511 Messwert
int Arduino3V3 = A4; // Anschluss an 3.3V des Arduino
const int WIEDERHOLUNGEN = 50;
// *****************************************************

////////////////////////////////////////////////////////
//
// setupUV
// Beide Eingänge als analoge Inputs.
// Deklaration eigentlich nicht nötig
//
////////////////////////////////////////////////////////

void setupUV()
{
pinMode(ML8511OUT, INPUT);
pinMode(Arduino3V3, INPUT);
}

////////////////////////////////////////////////////////
//
// Gesamt Setup
// der Messstation
// Aufruf der Setups einzelner Sensoren
//
////////////////////////////////////////////////////////

void setup()
{
Serial.begin(9600);
Serial.println("***************");
Serial.println("* Messstation *");
Serial.println("***************");
setupUV();
}

////////////////////////////////////////////////////////
//


// Map-Funktion für Gleitkommazahlen
// Quelle:
// http://forum.arduino.cc/index.php?topic=3922.0
//
////////////////////////////////////////////////////////
float mapfloat(float x, float in_min, float in_max, float out_min, float out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

////////////////////////////////////////////////////////
//
// UV-Messung
//
////////////////////////////////////////////////////////

void messenUV()
{
unsigned int summeMesswert = 0;
unsigned int summeDelta = 0;

// Mehrere Messungen durchführen:
for (int iteration = 0; iteration < WIEDERHOLUNGEN; iteration++) {
summeMesswert += analogRead(ML8511OUT);
summeDelta += analogRead(Arduino3V3);
}

// Aus statistischen Gründen => Mittelwertberechnung
int messwert = summeMesswert / WIEDERHOLUNGEN;
int delta = summeDelta / WIEDERHOLUNGEN;

// Nutzen des 3.3V Ausgangs, um eine genaue Referenz zu erhalten
float spannung = 3.3 / delta * messwert;

// Spannung nach UV-Intensitaet umwandeln:
float uvIntensitaet = mapfloat(spannung, 0.99, 2.8, 0.0, 15.0);
Serial.println("******************* UV Messung *******************");

Serial.print("Gemessenen am 3.3V Ausgang des ML8511 : ");
Serial.println(delta);

Serial.print("Gemessen als UV-Messwert : ");
Serial.println(messwert);

Serial.print("Tatsaechliche Spannung : ");
Serial.println(spannung);

Serial.print("UV-Intensitaet in mW/cm^2 : ");
Serial.println(uvIntensitaet);
Serial.println();
}

////////////////////////////////////////////////////////
//
// Alle Messungen werden hier in loop aufgerufen
//
////////////////////////////////////////////////////////

void loop()
{
messenUV(); // UV-Messung
delay(1000);
}

Yağmur sensörü


Her zaman güneş yoktur. Bunun yerine, bu ülkede genellikle bulutlu veya yağmurludur. Kimse yağmur sensörlerinin var olduğunu şaşırtmamalıdır. Bir sonraki adımda böyle bir sensörü ölçüm istasyonumuza entegre etmek istiyoruz.

Aşağıda gösterilen YL-83 veya FC-37 gibi bir yağmur sensörü, baskılı elektrotları su damlalarından iletkenliğini arttıran bir PCB kartıdır, böylece ölçülen voltaj düşüşü. Yağmur yoksa, yağmur sensörünün bağlandığı Arduino'nun analog kapısı, 1023'ten daha az aralıkta nispeten yüksek değerler sağlar. Aksine, kararlı yağmur durumunda değerlerin çıkışı 0'a yaklaşmaktadır.





Banggood.com



Yağmur Sensörü YL-83


(Resim: Banggood.com)




Ortaya çıkan bağlantının atanması:

Arduino Regensensor
A1 A0
GND GND
5V Vcc

Blackboard Blackboard'daki bir potansiyometre sayesinde, hassasiyet, yağmurlu miktarın, yani LED'in eşiğinden sonra düzenlenebilir. D0 Aydınlatmalı. Aynı zamanda, yağmur sensörünün dijital bir sonucu var D0,sensörün de bu durumda yüksek bir sinyal gönderdiği. Ancak, bir sonraki eskiz bu seçeneği kullanmaz.

Bağımsız olarak gerçekleştirilebilecek şekilde yapılandırılmıştır. Alternatif olarak, geliştiriciler yeni parçaları mevcut ölçüm istasyonuna ekleyebilir.

Analog dijital dönüştürücü tarafından sağlanan ölçülen değerler, çizimi birkaç yağmur kalınlığına sahip 4 alanda sınıflandırır. Tabii ki, bu bölümü zevklerinize göre de değiştirebilirsiniz.

// UV-Sensor Deklarationen
// ...
// Regen-Sensor ***************************************
// Anschluss an Arduino über Sensor Shield v4

int REGENPIN = A1; // Regensensor Anschlusspin
// *****************************************************


// Setup UV-Sensor
// ...

////////////////////////////////////////////////////////
//
// setupRegen
// A1 als analoger Input
// Deklaration eigentlich nicht nötig
//
////////////////////////////////////////////////////////

void setupRegen()
{
pinMode(REGENPIN, INPUT);
}

////////////////////////////////////////////////////////
//
// Gesamt Setup
// der Messstation
// Aufruf der Setups einzelner Sensoren
//
////////////////////////////////////////////////////////
void setup()
{
Serial.begin(9600);
Serial.println("***************");
Serial.println("* Messstation *");
Serial.println("***************");
// setupUV();
// ...
setupRegen(); // Regensensor initialisieren
}

// UV-Messung
// ...

////////////////////////////////////////////////////////
//
// Regen-Messung
//
////////////////////////////////////////////////////////

void messenRegen()
{
unsigned int messwert = analogRead(REGENPIN);
Serial.println("******************* Regen Messung *******************");
if(messwert < 256) {
Serial.println("Wolkenbruch");
}
else
if(messwert < 512) {
Serial.println("Starkregen");
}
else
if(messwert < 768) {
Serial.println("Leichtregen");
}
else { // messwert in [768, 1024[
Serial.println("Trocken => Kein Regen");
}
Serial.println();
}

////////////////////////////////////////////////////////
//
// Alle Messungen werden hier in loop aufgerufen
//
////////////////////////////////////////////////////////
void loop()
{
// messenUV();
// ...

messenRegen(); // Regensensor aufrufen
delay(1000);
}

Taban sensörü/higrometre YL-69


Güneşin ve yağmurun değişimi doğal olarak tarımda önemli bir rol oynamaktadır. Özellikle kuraklığın ölümcül etkileri vardır. Ancak hobi bahçıvanları, bitkilerinize boğulmadan ne zaman su sağlama zamanının geldiğini bilmek istiyorlar.

YL-69 zemin sensörü, floranızı kuru ölümden korumak için çok az paraya izin verir. Gerçek ölçüm birimi, bir koparma kartı ve bağlantı kablolarından oluşur:




Store.roboticsbd.com



Taban sensörü/higrometre yl-69


(Resim: Store.roboticsbd.com)



Sparkfun ayrıca ilgili zemin sensörleri sunar: Talimatlara bakın.

Bahsedilen sensörler, toprağın neminden kaynaklanan iletkenliği değiştirmek için yukarıda açıklanan yağmur sensörü dayanmaktadır. Toprak ne kadar nemli olursa, sensör ne kadar iletken olursa, analog dijital dönüşüme göre sensörde ölçülen gerilim veya ölçülen değer o kadar düşük olur.

Bağlantı aşağıdaki gibi oluşturulur:

Arduino YL-69 Bodensensor
A0 A0
GND GND
5V Vcc

Sensörün ortalaması ile ölçülen değerler henüz bağlamlarına aktarılmalı, yani kalibre edilmelidir. Bir pot tesisi ile denediğinizde, 967'den yaklaşık 630'a kadar ortalama sulama nedeniyle ölçülen değer. Açık hava, sensör maksimum 1023 değerini yaptı. Ancak, değerlerin değerleri sensör sensöründen yüzebilir. Ve elbette optimal toprağın nemi göründüğü için bitki tipine bağlıdır.

Bununla birlikte, YL-69 gibi toprak sensörleri sürekli elektrikle elektrik sağlamamalıdır, aksi takdirde hızla koroza başlarlar. Korozyonu önlemek için, ölçümler arasında daha uzun kesintilerin korunması ve ortadaki sensörü devre dışı bırakılması tavsiye edilir. Bu, örneğin röle gibi uzaktan kumanda anahtarları yoluyla yapılabilir. Veya sensör besleme bağlantısı, yüksek seviyeli ölçümler için taslak olduğu, ancak düşük sinyalin geri kalanı için Arduino'nun dijital çıkışından oluşur.

Bu arada, Sparkfun sensörü, korozyonu önlemek veya en azından önlemek için birçok ucuz sensörün aksine altın bir nikel oda tabakası ile donatılmıştır.

Yağmur ölçmek için kuzeni olarak, YL-69 zemin sensörü, sensör bir sinyale ulaşıldığında bir eşik değerini düzenlemek için dijital bir sonuca ve bir potansiyometreye sahiptir. Ve benzer şekilde, sensör kırılma kartı için tasarlanan LED daha sonra parlamaya başlar.

Aşağıdaki çizim bağımsız olarak kullanılabilir veya parçaları ölçüm istasyonunun genel koduna eklenebilir.

// Andere Sensordeklarationen ...
// Boden-Sensor ***************************************
// Anschluss an Arduino über Sensor Shield v4

int BODENPIN = A0; // Bodensensor Anschlusspin
// *****************************************************

////////////////////////////////////////////////////////
//
// setupBoden
// A0 als analoger Input
// Deklaration eigentlich nicht nötig
//
////////////////////////////////////////////////////////


void setupBoden()
{
pinMode(BODENPIN, INPUT);
}

////////////////////////////////////////////////////////
//
// Gesamt Setup
// der Messstation
// Aufruf der Setups einzelner Sensoren
//
////////////////////////////////////////////////////////

void setup()
{
// Aufruf anderer setupXXX()-Methoden ...
setupBoden();
}

// ... andere messenXXX() Methoden

////////////////////////////////////////////////////////
//
// Boden-Messung
//
////////////////////////////////////////////////////////

void messenBoden()
{
unsigned int messwert = analogRead(BODENPIN);
Serial.println("******************* Boden Messung *******************");
Serial.print("Gemessen als Messwert : ");
Serial.println(messwert);
Serial.println();
}

////////////////////////////////////////////////////////
//
// Alle Messungen werden hier in loop aufgerufen
//
////////////////////////////////////////////////////////
void loop()
{
// Aufrufe anderer Messungen ...

messenBoden(); // Bodenfeuchtigkeit ermitteln
delay(1000);
}


İsterseniz, bir su pompasını bir motor kalkan aracılığıyla bağlamak mümkündür, yeryüzünün nemine veya kuruluk'a bağlı olarak su ile birlikte verilen bitkiler. Bu proje daha önce bahsedilen Sparkfun rehberinde açıklanmaktadır.

Özet


Bu sonuç, UV radyasyonu (ML8511) için beton çevre sensörlerinin yanı sıra YL-69 zemin sensörü ve YL-83 yağmur sensörü ile karşı karşıya kaldı. Sensörler, çevresel ve meteorolojik bir ölçüm istasyonunun bileşenleri olarak işlev görür.

Ayrıca sensör kalkanları hakkında konuşuldu. Örneğin modüler bir ölçüm istasyonu oluşturmak için birden fazla sensör kullanmak istiyorsanız, bu tür bir uygulamaya uygun olduğundan bir sensör kalkanında bir avantajınız vardır. Özellikle, bir analog/dijital bağlantıya ek olarak gerginlik ve dünyaya ihtiyaç duyan ve fazla elektriği çekmeyen üç kutuplu sensör varsa geçerlidir.

Bununla birlikte, sensörü gerginlik, arazi ve veri girişine ve analog giriş yoluyla sonuçlanan ölçümde bağlamak kolaydır. Bunun yerine, bazı sensörler özel yöntemler ve ölçüm azaltma gerektirir, diğerleri I üzerinde çeşitli etkileşimler gerektirir2C, 1 iplik veya SPI. İyi bir nedenden ötürü, daha karmaşık sensörler için Arduino kitapçıları var.

Gelecekte sensörlerin başka örneklerini karşılayacağız. Son olarak, mikrodenetleme ve IoT esas olarak sensörler ve faaliyetlerle ilgilidir. Diğer şeylerin yanı sıra, SQM Alley sensörleri gibi biraz daha karmaşık bir kullanım gerektiren bu sensörleri de karşılıyoruz.


()
 
Üst