Ben bezig met een projectje om de verwarming te sturen / uitlezen op Arduino. Als hardware heb ik gekozen Arduino Uno, Arduin relais print ( 8relais ),ds18b20 temperatuursensors, lcd 4x20.
op een proef opstelling werkt alles perfect. Dan ben ik de sensoren gaan plaatsen; buiten temperatuur, binnen temperatuur, boiler temperatuur, pellet ketel temperatuur, mazout ketel temperatuur. de totale kabel lengte is 30 meter. Als ik deze in de stookruimte aansluit ( enkel sensoren) blijken er maar 4 te werken en als ik de 5de aanhang slaat de uitlezing op de lcd tilt. Terug met 4 dan werkt het weer. Dan maar verder met 4. Na een paar proeven ondervind ik dat plots het scherm nog oplicht maar geen waarden meer weergeeft. Dan reset ik en alles werkt normaal voor een tijdje. (2a3 minuten). Waar ligt de oorzaak
1 Te lange draden; Heb enkele sensoren terug ingekort maar zonder resultaat blijf hetzelfde.
2 Lcd defect?``
3 Arduino defect; terwijl de lcd blank is wordt er toch nog uitgangen gestuurd (pompen cv en pomp boiler. Led aan de uitgang gehangen. relaiskaart is nog niet aangesloten.
PS Ik weet dat er nog veel voor verbetering vatbaar is, ik ben met deze passie nog maar 9 maanden bezig zonder enige voorkennis.
Wat je volgens mij nu meemaakt is het verschil tussen een proefopstelling en een echt werkend geheel. Je zit dus op een nieuwe groeistap. Proficiat.
De lengte van de kabels speelt zeker een rol (bv spanningsval,iterferentie met andere kabels,....) maar of dat je probleem is ...?
Het is ook zo dat je perceptie helemaal veranderd eens iets moet weken. Als je 5 minuten naar een scherm zit te kijken op je werktafel is dat heeeeeeeeeel lang.
Maar om de 5 minuten je lcd controleren is heeeeeeeeeeeeeeeeeel vaak.
Als ik naar je code kijk zie ik 2 dingen waarvan ik zeg hmmmmmmmmmmmmm
Ik ben niet gekend met de DallasTemperature bibliotheek maar ik zie de code nergens plaats maken voor de probes.
Er wordt op verschillende plaatsen naar je lcd geschreven. Ik ben voorstander om je status te bepalen en dan alles in 1 keer naar de lcd (in dit geval) te schrijven. Dit heeft het grote voordeel dat je bij elke lcd schrijf actie niet alles hoeft te weten over de andere lcd schrijf acties (en ook dat je alles ook nog eens naar een andere output -zoals serial, web ..- kan schrijven.)
Ik denk dat 30m wat te lang is; ik heb eens 'n testje gedaan met de voorloper van de ds18b20, de ds18s20 en die ging 'al' mis bij minder dan 10m kabellengte; werd dat dingetje 'parasitair' gevoed (over z'n datalijn), dan was de maximale lengte nog minder. Ik denk ook dat het aantal ds18x20 sensoren dat je aan 'n enkele pin hangt kan uitmaken wat betreft de lengte van de kabel.
hoe zit je voeding in elkaar, en dan vooral de reliasprint en de display.
de UNO, en MEGA kunnen maar zeer beperkt stroom leveren en is dus een externe voeding zeer aan te bevelen.
arduino was in proef gevoed door pc. Nu 7,5 volt ,9volt en uiteindelijk 12 volt externe voeding geprobeerd. Telkens zie ik nergens geen spanningsval ( gemeten op de vozding van de LCD en sensors. In de proefopstelling bleef het dagenlang draaien. De langste sensor staat een 7 meter verwijderd van de opstelling, de rest zijn maar enkele meters. Aangezien het programma de uitgang van de boiler nog stuurt, betekend toch dat de waarden van de sensoren perfect binnen komen. Ik heb nu ook eens de voeding voor de arduino (12 volt )afgetapt naar een LM7805. De nul gekoppeld en de 5 volt naar de voeding van de sensoren gebracht, geen resultaat. Dan de voeding van de lcd op de LM7805 gehangen, geen resultaat. volgende test is zonder LCD de relais kaart aansluiten en zien of al de uitgangen reageren tot nu toe nog maar twee uitgangen getest. Ook is een nieuwe LCD besteld en ga deze dan eens aanhangen. allemaal bedankt om helpen mee te denken.
Lees de datasheet van de 780x nog wel even door, en let daarbij op de toepassing van condensatoren.
Let hier vooral ook op als je "een paar 7805 naast elkaar" doet, en zorg er voor dat alleen de ingangen aan elkaar hangen, niet de uitgangen.
Als je uitgangen aan elkaar gaat hangen en er kleine verschillen optreden (om welke reden dan ook), gaan de regelaars elkaar tegenwerken, met mogelijk grote gevolgen.
Ik bouw een gelijkaardig project maar ik plaats optocouplers tussen de sensoren en de Arduino. Verder zorg ik dat alle schakekelingen laagohmig zijn.
De ingangen van de Arduino zijn immers heel hoogohmig, en dus extra fragiel voor spikes en zo.
Uit de reacties ben ik enkele pistes aan het onderzoeken. Ik heb 2 verschillen in mijn netwerk van sensoren. 2 met lange bedrading tss de 4 en 7 meter, en 3 tss de 2 en 4 meter. Door het verschil in tijd zou het kunnen dat de signalen reflecties geen en het data signaal om zeep helpen, zoals jos AH aanhaalt. Als ik nu een tweede bus opstel. In de eerste steek ik de korte kabellengtes, in de tweede de lange.Is het dan voldoende dat ik de bus in de setup opzet en doet arduino de rest of hoe moet ik dit dan opvatten. Heeft hier iemand ervaring mee.
Als ik elke sensor aan en ingang hang zijn de twee problemen opgelost ( waarschijnlijk zoals ik heb kunnen lezen in ster gehangen en ik beter een kabel van sensor naar sensor getrokken) enkel nog een LCD l2c kopen zodat ik i/o genoeg heb. Ik ga ook eens experimenteren met die optocouplers. @ Evarist welke gebruik jij daarvoor en gebruik je ook ds18b20 sensoren;
als je ds op 1 pin hebt hangen dan loopt de voedingsstroom te hoog op voor een enkele poort (40mA), want al die dingen moeten gevoed worden danwel omlaaggetrokken.
of apart voeden dat helpt.
Heel vaak heb ik in kleine projectjes dat een poort gaat zweven. Zweven wil niet anders zeggen dat een lijn niet hoog of laag (genoeg) is.
Ik maak er "misbruik" van bij het genereren van een random number omdat ik anders na een reset altijd dezelfde random reeks krijg.
int noise = analogRead(2);
randomSeed(noise);
Wat je dus zou kunnen doen is om een poort geheel of iets te beinvloeden. Geheel wil zeggen omlaag trekken naar GND of omhoog trekken naar +5Volt of +3,3Volt.
Geheel omlaag trekken kan het probleem veroorzaken dat als iets op de input een High moet zijn en je biedt een High aan op een poort die te laag wordt getrokken, deze niet meer werkt. Met de bijlage de exacte levels aan spanningen. Gebruik daarom weerstanden om in het "Veilige gebied" te zitten.
Het woord 'random' is gevallen.
Dat garandeert hevige discussies.
Om daar maar eens een flinke zwengel aan te geven:
Doe maar eens heel vaak
int noise = analogRead(2);
randomSeed(noise);
Achter elkaar.
En kijk maar eens hoe willekeurig dat zal aflopen, met name als je ook met analoge waardes werkt die je binnen moet halen.
Dat zal toch wel een domper gaan worden hoor.
Ehmm.
Eigenlijk wel een eigen NL thread waard, want deze kan hierdoor nogal vervuild raken..
2e Ehmmm.
Ik zie dat je ook een eigen thread gestart bent met nagenoeg dezelfde inhoud.
Das een beter plaats om verder op die discussie in te gaan, indien daar behoefte aan is.