-
Notifications
You must be signed in to change notification settings - Fork 0
Home
De humidity module is de module om de luchtvochtigheid te geven van de omgeving.
De Humidity module is verantwoordelijk voor het meten van de lucht vochtigheid in de omgeving, mogelijke toepassingen zijn om te zien als er waterplassen in de omgeving zijn of om ademhaling te detecteren. Naar humidity sensoren wordt dit nu geen onderzoek gedaan, de reden hiervoor is dat tijdens het voor onderzoek men achter kwam dat het te veel implementatie is en er te weinig onderzoek mogelijkheden zijn voor het vak R&A.
Input Als input is een i2c bus nodig, of een pin_in_out
Output Met de module kan met de readHumidity functie aanroepen en de luchtigheid van de omgeving in percentages word terug geven.
Voor de humidity sensor word alleen een arduino due gebruikt
De module heeft ondersteuning voor de BME280 en DTH22 luchtvochtigheid sensor.. Voor de software moet de i2clbirary gebruikt worden die in de R2D2 build standaard inzit begrepen (en niet de hwlib i2c library. daarnaast is de rest te vinden in de repo . Als De code draait op de Arduino Due dan word de I2c bus gebruikt (met addres 0xFDvoor de BME280). De DTH22 heeft een pin_in_out nodig op de arduino due
De hardware kan als volgt aangesloten worden
De dth22 en bme280 kunnen als volg worden aangesloten. waarbij de rode draden de 5v voeding zijn. de zwarte draden zijn de grounds. de dth22 heeft een data pin die via een 10k ohm weerstandje met de voeding moet aangesloten worden. de bme280 moet op de scl en sda aangesloten worden van de arduino voor de i2c.

De aansluit tabel voor dth22
| Pin | pin aansluiting op dth22 |
|---|---|
| 1 | voending 5 volt |
| 2 | data, word tijdens de voorbeeld op pin 12 aangesloten |
| 3 | nc, word niet gebruikt |
| 4 | ground |
De aansluit tabel voor bme280
| Pin | pin aansluiting op due |
|---|---|
| vin | voending 5 volt |
| gnd | data, word tijdens de voorbeeld op pin 12 aangesloten |
| scl | pin 21 /scl |
| sda | pin 20 /sda |
Om de dth22 te gebruiken moet er een in_out pin gebruikt worden. De dth22 kan tussen 3,3 v en 6 volt aan. De constructor heeft eerst een pin_in_out nodig, deze dient eerst aangemaakt te worden. daarna kan men de pin_in_out aan de dth22 meegeven. De readHumidity kan dan aangeroepen worden om de relative lucht vochtigheid in percentage te weergeven. als de readHumidity binnen 2 seconde word aangeroepen geeft het de zelfde waardes terug.
auto dataPin = hwlib::target::pin_in_out( hwlib::target::pins::d12 );
auto humidity= r2d2::humidity::DTH22(dataPin) ;
hwlib::cout << humidity.readHumidity() << '\n';
Om de bme280 te gebruiken moet er gebruikt worden gemaakt van de I2c bus. in de volgende stuk code word de i2c bus en bme280 gedeclareerd en uitgelzen. na het delcareren moet de init functie worden aangeroepen om de sensor werken te krijgen.
auto bus = r2d2::i2c::i2c_bus_c(
r2d2::i2c::i2c_bus_c::interface::interface_1, 100'000);
auto humidity = r2d2::humidity::bme280(bus);
humidity.init();
hwlib::cout << humidity.readHumidity() << " "
<< humidity.readTempature() << '\n';
Als men niet de hardware heeft kan er ook een dummy sensor gemaakt worden. het volgende stuk code declareerd een dummy en zet het op 50% luchtvochtigheid.
auto humidity = r2d2::humidity::dummyTest();
humidity.setHumidity(50);
In het volgende stuk code word een detector in combinatie met een dumy gebruikt om data the simuleren. bij de update word de waarde van de setHumidity uitgelezen door in de achtergrond readHumidity() aan te roepen.
auto humidity = r2d2::humidity::dummyTest();
auto detector = r2d2::humidity::humidityDetector(humidity);
int testDatas[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for (int i = 0; i <= 9; i++) {
humidity.setHumidity(testData[i]);
detector.update();
}
Om de detector met een echte sensor te laten werken, kan het volgende stuk code worden gebruikt
auto bus = r2d2::i2c::i2c_bus_c(
r2d2::i2c::i2c_bus_c::interface::interface_1, 100'000);
auto humidity = r2d2::humidity::bme280(bus);
humidity.init();
auto detector = r2d2::humidity::humidityDetector(humidity);
Er is gekozen om een interface class te maken zodat de verschillende sensoren toch op een standaard manier is te gebruiken zijn. De Detector klasse is een klasse die een inheritance van humidityInterface bij reference gebruikt. De detector klasse heeft een update functie. Als men geen hardware heeft, dan kan de dummy klasse gebruikt worden om de hardware te simuleren..

De state transition diagram is voor de functie readsensor() om een byte uit te lesen. De datasheet was erg lastig om te begrijpen. Om toch duidelijkheid te scheppen is er gekozen voor om states te gebruiken

In het voor onderzoek is er gekeken naar verschillende sensoren waar uit eindelijk 2 sensoren zijn gekozen voor de module.
De keuze voor de bme280 is onder andere dat het gebruikt maakt van de i2c protocol. Het i2c protocl is een veel gebruikte protocol waar goed me te werken is. De bme280 kan ook tempratuur en luchtdruk meten wat er handig kan zijn als men de module wilt gaan uitbreiden naar een weerstation bijvoorbeeld. de bme280 kost minder dan 5 euro wat goed binnen budget valt. De nauwkeurigheid van de sensor met 5% is wel vergeleken met de rest van de markt aan de hoge kant.
Er is ook voor een 2e sensor gekozen om niet aan 1 sensor vast te zitten. Hiervoor is voor de dth22 gekozen. De de dth22 is een goed online verkrijgbare sensor wat ook in de keuze heeft meegespeeld. een andere reden is dat de dth22 nauwkeuriger is dan de bme280. De dth22 is wel wat langzamer kwa respone tijd met 2 seconde (inplaats van 1 seconde bij de bme280).
| naam | nauwkeurigheid | Resulution | protocol | snelheid |
|---|---|---|---|---|
| DHT22 | ± 2 RH | 0.1% RH | data pin | 2 s |
| Bme 280 | ± 3 RH | 0.008% RH | i2c | 1 s |
Rh staat voor relatieve lucht vochtigheid
Voor de module heb ik 2 soorten test uitgevoerd. 1 test is te kijken welke waardes uit de sensoren komen. De sensoren zijn lastig om logisch te testen en daarom is er gekozen om naar de uit eindelijke waardes te kijken. Mijn code had ook een logisch gedeelte om te kijken als er een menselijke adem is.
De humidity detector is een klasse om menselijke adem te detecteren. Voor om humidity detector te testen heb ik een dummy test klasse ontwikkeld. De dummy sensor is een overerving van de algemene interface. Deze dummy sensor is daarom ook simpel gehouden. De dummy kan op een gewenste waarde wordt gezet en dan dat die het weer teruggeeft bij het uitlezen. Met behulp van catch2 zijn logische testen ontworpen. De dummy sensor heeft erg geholpen bij het ontwikkelen om fouten er uit te halen.
Om de sensoren te testen zijn de 2 van r2d2 gebruikte sensoren getest. Naast de 2 gebruikte sensoren is er ook een externe sensor gebruikt. De externe sensor is toevallig een sensor die ik nog had liggen. De kwaliteit van de sensor is dus onbekend. De externe sensor is een losstaande module met een schermpje wat de temperature en lucht vochtigheid weergeeft. De dth22 en de externe sensor geven dezelfde waardes weer maar de bme280 zit hier 6 procent onder. Het verschil tussen de bme280 en de externe sensor op temperatuur is rond de 0.10 kelvin (of Celsius). De 2 sensoren geven ook dezelfde temperatuur weer als wat er op een kwik thermostaat staat dat ernaast ligt. Men kan gemakkelijk ook deze test zelf uitvoeren door de tutorial op de wiki uit te voeren.
De De sensoren hebben ongeveer een nauwkeurigheid van 3 en 2 procent. Dus het kan best zijn dat de sensoren qua nauwkeurigheid alle 2 de uiterste kant van het spectrum zijn.