Schildpaddenbak controller

IDE gerelateerde berichten
Berichten: 5
Geregistreerd: 09 Aug 2016, 23:23

Schildpaddenbak controller

Berichtdoor FrancoisvKerkhof » 09 Aug 2016, 23:45

Hallo mede arduino fans,

Het spijt me om meteen met de deur in huis te vallen, maar ik ben net nieuw en kon geen "stel je voor" sectie vinden.


Ik ben nieuw met het programmeren van een Arduino en kan wel wat hulp gebruiken.

Ik heb het volgende idee;

Ik wil aan een Nano het volgende koppelen:
- 2x DS18B20 temp sensor
- DHT11
- relais module met 2 relais
- 4x16 ic2 display
- Ethernet shield

Wat er moet gebeuren is het volgende.

- 1 DS18B20 meet de water temp en laat de "verwarming" door middel van 1 relais aan en uit gaan onder bepaalde voorwaarde.
- 1 DS18B20 meet de temp op het eiland, maar schakeld niets.
- DHT11 meet alleen de luchtvochtigheid op het eiland, maar schakeld niets.
- De ethernet shield wou ik gebruiken met een "tijd server" omdat dit nauwkeuriger is dat een RTC (denk ik, correct me if iam wrong),
met die tijd server wil ik het andere relais schakel om de lampen op bepaalde tijden aan en uit te schakelen.
- Op het display wil ik graag de realtime water en lucht temp zien, de luchtvochtigheid en of het relais van de verwarming aan is.



Het wordt een controller voor mijn nieuwe schildpadden bak die ik aan het maken ben. Ik wil hier dus verschillende dingen mee monitoren en schakelen.

Ik hoop dat er iemand is die mij een zetje in de rug wil geven.
Alvast heel veel dank.

Mvg
Francois

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Schildpaddenbak controller

Berichtdoor Koepel » 10 Aug 2016, 05:49

Dat wordt nog best een ingewikkeld project.

Kun je eenvoudig beginnen ?
Bijvoorbeeld door de temperatuur en luchtvochtigheid naar de seriële monitor te sturen.
Daarna het display erbij proberen te doen.
Vervolgens misschien Ethernet of wifi. Een NTP server geeft inderdaad altijd de juist tijd, maar een DS3231 RTC is ook heel nauwkeurig. Hoe het zit met zomertijd en wintertijd bij een NTP server ben ik vergeten.

Heb je alle onderdelen al ?
Welke Arduino Nano heb je ? Kijk op de onderkant, als daar een CH340G zit, dan is het goed. Heb je de Nano op Ebay gekocht en zit er een counterfeit FTDI chip op, dan is het niet goed. Een officiele Nano is natuurlijk wel okay.
Mijn voorkeur gaat uit naar een Arduino Uno board. Wil je meer doen met Ethernet, dan een Arduino Mega 2560. Wil je een kleine module, dan bijvoorbeeld een Cortex-M0+ processer met wifi van Adafruit : https://www.adafruit.com/product/3010

Welk Ethernet shield heb je ? De Arduino Nano kan misschien niet voldoende stroom leveren. De achtergrondverlichting van een LCD display vraagt ook nogal wat stroom.

De DHT11 is bagger (pardon my french). De DHT22 is iets beter, maar een capacitieve sensor is nog beter. Dit is de beste die Adafruit heeft : https://www.adafruit.com/products/2857
Ik heb een DHT11 die 30% aangeeft als het 80% moet zijn. De DHT22 kan er nog steeds tientallen procenten naast zitten.

Als je wat meer geheugen hebt, bijvoorbeeld met een Arduino Mega 2560, dan kun je een OLED display proberen. Een LCD display ziet er nogal hobby-achtig uit. De library U8glib voor een OLED display is wel opeens vele malen ingewikkelder.

Kun je nog een veiligheid inbouwen buiten de Arduino om, om te voorkomen dat door een foutje de verwarming altijd aan blijft staan.

Begin eenvoudig en maak kleine stapjes.

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Schildpaddenbak controller

Berichtdoor shooter » 10 Aug 2016, 11:31

koepel heeft gelijk, begin simpel met een temperatuur sensor, en een relais, en dan langzaam uitbreiden, met bijv een RTC (mist misschien 1 seconde /jaar)
vochtigheid is erg lastig als deze zo hoog is, die DHT gaan dan niet meer, maar een temperatuursensor met een sokje eromheen is dan beter.

En ja dat kan zeker op een NANO.
paul deelen
shooter@home.nl

Berichten: 5
Geregistreerd: 09 Aug 2016, 23:23

Re: Schildpaddenbak controller

Berichtdoor FrancoisvKerkhof » 10 Aug 2016, 18:31

Bedankt koepel en shooter.
De nano heb ik al.deze heb ik al een keer bestelt. Het is er een met
De CH340G. Ik zal dan wel eerst simpel beginnen met de temp sensoren en de relais. Ik hou ook zeker de mega en dan een oled in gedachten. Dan kan ik het wel mooi en gelikt maken. En dan met de
Rtc om het minder ingewikkeld te maken.

Ik las dat ik met 1 pin meerdere DS18B20's kan monitoren,
Dat moet ik nog ff gaan uitpuzzelen.

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Schildpaddenbak controller

Berichtdoor Koepel » 10 Aug 2016, 19:51

De DS18B20 gebruikt de 1-Wire bus, dat is een echte bus. De Arduino en de DS18B20 kunnen het signaal laag maken, daarom is een weerstand van 4k7 of 10k naar 5V nodig om het signaal naar hoog te laten gaan.

Het is mogelijk om meerdere sensoren uit elkaar te houden, omdat iedere sensor een unieke identifier heeft, die de fabrikant er in heeft gezet.

Dat zie in je libraries terug. Je kunt kiezen voor "de eerste gevonden sensor", "de tweede gevonden sensor", enzovoorts, maar je kunt ook die unieke identifier code gebruiken om gegevens van precies die sensor op te vragen.

Als je Arduino IDE van Arduino.cc gebruikt, zoek dan in het menu de Library Manager. Installeer de OneWire and DallasTemperature, en kies een voorbeeld van de DallasTemperature.
De OneWire doet de 1-Wire bus, en heeft ook al een voorbeeld voor de DS18B20. De DallasTemperature maakt het gebruik eenvoudiger.

Berichten: 5
Geregistreerd: 09 Aug 2016, 23:23

Re: Schildpaddenbak controller

Berichtdoor FrancoisvKerkhof » 11 Aug 2016, 07:23

Dank je koepel.
Als ik de spullen uit china binnen heb zal ik eens gaan stoeien.
De 1wire had ik al gevonden maar ik kwam er even niet uit. De dallas zal ik ook installeren.

Gebruikers-avatar
Berichten: 26
Geregistreerd: 22 Dec 2015, 13:40
Woonplaats: Zandvoort

Re: Schildpaddenbak controller

Berichtdoor marc verlooy » 11 Aug 2016, 15:17

Beste François,
De andere forumleden zullen wel denken 'Daar heb je Verlooy weer met z'n aquarium en GPS', maar hier een reactie van een forumvriend die dezelfde problemen heeft gehad en opgelost: Voor de tijdmeting maak ik gebruik van en GPS-module(zo gaat je licht op de nano-atoomseconde nauwkeurig aan en uit Ethernetshield om de ijd bij een time-server op te vragen heb ik ook gedaan, maar de angst dat ik voor DOS-aanstichter gezien zou worden vond ik te gevaarlijk.! Ik wens je succes met je project. leuk hè? Het automatiseren van mijn aquarium heeft me maar 14 maanden gekost; maar ik zit dan ook vast in een rolstoel

Berichten: 5
Geregistreerd: 09 Aug 2016, 23:23

Re: Schildpaddenbak controller

Berichtdoor FrancoisvKerkhof » 25 Aug 2016, 23:27

Nou hehe, eergisteren alles binnen gekregen van me "chineese vrienden".
Gelijk begonnen met knutselen.

-Eerst de 2 DS18B20 aan de gang krijgen op de seriële monitor, dat was vrij snel gefixed.
-Het 2004 I2C display erbij en de temp waardes erop krijgen (google is your friend). Mooi, ook gelukt.
-Dan maar de DHT11 erbij om de luchtvochtigheid uit te lezen en weer te geven op het display. Na enig knip en plak werk en de orginele temp meting te verwijderen was dat ook gelukt.
- Hmm, na een paar uurtjes was dat toch gelukt. En dat voor een beginner.
- ik heb nog 1 tekstregel over op het display. Daar wil ik de status van de verwarming hebben.

- Relais erbij om straks de heater te schakelen.
- Sketch zo kunnen maken dat op het display staat of de heater aan of uit is.

Nou, ik ben best tevreden over mijn resultaat.


Zou iemand een keer over de code kunnen kijken of het ook een beetje logisch en efficient is?

#include <dht.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>

dht DHT;
int relPin = 8;
#define DHT11_PIN 7
#define ONE_WIRE_BUS 2


LiquidCrystal_I2C lcd(0x27,20,4);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup() {
lcd.begin();
sensors.begin();
pinMode(relPin, OUTPUT);
}

void loop() {
sensors.requestTemperatures();
lcd.setCursor(0, 0);
lcd.print("Water Temp: ");
lcd.print(sensors.getTempCByIndex(0));
lcd.print(" C");

lcd.setCursor(0, 1);
lcd.print("Lucht Temp: ");
lcd.print(sensors.getTempCByIndex(1));
lcd.print(" C");

int chk = DHT.read11(DHT11_PIN);
lcd.setCursor(0, 2);
lcd.print("Humidity : ");
lcd.print(DHT.humidity, 1);
lcd.print(" %");


if(sensors.getTempCByIndex(0) <=23){
digitalWrite(8, HIGH);
lcd.setCursor(0, 3);
lcd.print("Heater is : AAN ");
}


if(sensors.getTempCByIndex(0) >=25){
digitalWrite(8, LOW);
lcd.setCursor(0, 3);
lcd.print("Heater is : UIT ");
}



}

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Schildpaddenbak controller

Berichtdoor Koepel » 26 Aug 2016, 01:06

FrancoisvKerkhof schreef:Nou, ik ben best tevreden over mijn resultaat.

Ik ook ! (Koepel steekt twee duimpjes omhoog)

Je kunt het verfraaien door het graden teken toe te voegen.
Bijvoorbeeld het graden teken op positie 1. Dan wordt karakter '1' het graden teken, en je kunt dan "\1" gebruiken.
Code: Alles selecteren
lcd.print(" \1C");

Ik heb het graden teken in een project, maar ik heb geen I2C display. Dus ik weet niet of het op dezelfde manier gaat.
Hier staan een paar karakters : https://developer.mbed.org/users/lnadal/code/Lcd_Custom_Char/docs/tip/main_8cpp_source.html.
Maar voor de graden gebruik ik : { 0x6, 0x9, 0x9, 0x6, 0x0, 0x0, 0x0, 0x0 }

"Water Temp" is een twijfelgeval, maar "Heater" en "Humidity" zijn engels, terwijl "Lucht", "AAN" en "UIT" nederlands zijn :? Ach ja, het valt onder artistieke vrijheid :lol:

Je loop() draait op onduidelijke snelheid.
Er is geen delay() en geen millis(), dus de code in de loop() draait op de hoogste snelheid. Dat geeft niet, maar het is onduidelijk. Met een delay van 50ms helemaal op het einde van de loop() zou er wat meer duidelijkheid zijn.

Je hebt een variabele "relPin" voor pin 8, maar toch gebruik je in je sketch soms '8' in plaats van 'relPin'.
Die 'relPin' mag je een 'const' maken.

Berichten: 5
Geregistreerd: 09 Aug 2016, 23:23

Re: Schildpaddenbak controller

Berichtdoor FrancoisvKerkhof » 27 Aug 2016, 22:28

Bedankt voor je feedback Koepel,

Na enig stoei werk heb ik het graden teken goed gekregen.
Voor een IC2 werkt bij de volgende manier;

lcd.print((char)223);
lcd.print("C");

gelijk een delay van 5 sec erin gezet.


1 ding valt mij wel op;
de 2 DS18B20 sensoren wijken 0,50 graad af als ik de sensoren langs elkaar leg. Is dit nog "bij te stellen"?

Volgende

Terug naar Arduino IDE

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 3 gasten