brandstofverbruik meten (simulatie)

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 85
Geregistreerd: 10 Jan 2013, 14:51
Woonplaats: Waddinxveen

brandstofverbruik meten (simulatie)

Berichtdoor Karel » 19 Jan 2013, 16:18

Na een zwaar autoongeluk zo'n 4 jaar geleden heb ik niets meer in mijn oude vak, database specialist, kunnen doen. Ik begin nu weer langzaamaan wat dingetjes te proberen. Zo heb ik me voorgenomen de nodige dingen te gaan maken om een schip te monitoren. Dat idee ontstond toen ik toevallig tegen Arduino aanliep doordat iemand op een scheepjesforum over tankinhoudmeting met Arduino begon. Ik kan maar een beperkte tijd de concentratie opbrengen om iets te doen, dus ik ga alles in kleine stapjes uitvoeren. Het uiteindelijke doel is om binnendringend water, toestand accu's/aanwezigheid walstroom, bewaking temperatuur en aansturing heteluchtkachel, verbruik etc. te bewaken, en bij alarm een SMS'je te versturen aan de scheepseigenaar.

Vorige week zaterdag heb ik mijn startset binnengekregen. Direct ben ik een aantal tutorial projectjes gaan uitvoeren, en na 1,5 uur had ik barstende koppijn die de rest van de dag niet meer wegging. Te hard van stapel gelopen dus.

Om voor mezelf een 'realistisch' project op te tuigen, zodat ik de Arduino omgeving kan leren, heb ik bedacht dat ik een brandstofverbruiksmeter voor een scheepsdieselmotor wil maken. Een dieselmotor pompt diesel uit de tank, en verstuift die diesel in de cilinders. Door de hoge drukken waarmee dat verstuiven gebeurt worden de verstuivers (te) heet. Om die te koelen wordt er een te grote hoeveelheid diesel naar de verstuiver gepompt. Het gedeelte dat niet verstoven wordt koelt de verstuiver en loopt terug naar de tank. Omdat ik zo'n motor niet direct bij de hand heb wil ik e.e.a. eerst bouwen met een simulator. Als het allemaal werkt ga ik de verbruiksmeter echt bouwen en installeren op het binnenschip van mijn zoon.

In deze thread wil ik mijn vorderingen bijhouden. Als ik dingen anders/beter kan doen, dan hoor ik dat graag. Als het niet interessant is ook ;)

De inventarisatie van benodigdheden is stap 1.

Bij Conrad hebben ze flow-meters, die bijv. 10.000 pulsen per liter geven. Er wordt maximaal zo'n 60-80 liter per uur verbruikt, maar ik heb nog geen idee hoe de verhouding toevoer/retour is. Als ik dat weet kan ik bepalen welk type er nodig is. Voor de brandstofmeter heb ik twee sensoren nodig, één voor de toevoerleiding en één voor de retourleiding. Het is het handigst als deze hetzelfde zijn, dan kunnen voor de berekening van het verbruik de aantallen pulsen van deze sensors van elkaar aftrekken.

Die sensors heb ik niet, en ook niet 1,2,3 een pomp, slangen en reservoirs om de flowmeters te calibreren en testen.
De pulsen van de sensoren moeten dus worden gesimuleerd.

Ik beschik over één Arduino Uno R3. Deze is onderdeel van de startset die ik bij Iprototype heb aangeschaft. Deze Arduino moet dus zowel de simulatie als de meting uitvoeren. Het idee is om twee interrupt-handlers te schrijven die de resp. pulsen tellen, en in de loop pulsen ter simulatie te genereren. Om dan een beetje invloed van buiten te hebben op het gesimuleerde verbruik gebruik ik een potmeter. Die functioneert als het ware als gashandle. De hoeveelheid pulsen voor de aanvoer- en retourleiding laat ik zien door voor ieder van die leidingen een led minder of meer te dimmen. Hoe hoger het verbruik, hoe sterker de led brandt.

Uiteindelijk moet het meetresultaat op een LCD display worden weergegeven. Ik heb bij mijn startset een 16x2 I2C LCD besteld. Daarop kan ik actueel verbruik per uur, totaal gemiddeld verbruik per uur, totaal verbruik, gemiddeld verbruik voor de trip en totaal verbruik voor de trip weergeven. Met twee schakelaars (>5 seconden in te drukken) kan het totaalverbruik en tripverbruik weer op 0 gezet worden.

Het idee voor de loop van de sketch wordt dan (in pseudo-code):

void loop()
{
// stel verlopen tijd sinds setup vast

// indien 1 seconde verder: (her)bereken verbruik, update LCD, leg 'oude tijd, toevoer- en retourpulswaarde vast

// meet de waarde van de potmeter

// bereken pulsen/seconde voor beide sensoren

// schrijf waarde naar PWM pinnen voor beide controle leds.

// Sta via een volatile boolean het afhandelen van code in de interrupt functie toe

// Indien toevoerpuls nodig: activeer toevoer pin voor n microseconden
// benodigde waarde van n proefondervindelijk vast te stellen.

// Indien retourpuls nodig: activeer retour pin voor n microseconden
// benodigde waarde van n proefondervindelijk vast te stellen.

// Sta via een volatile boolean het afhandelen van code in de interrupt functie niet langer toe


}

Als een digitale pin wordt geactiveerd, neemt de interrupt handler de controle even over. De code van de betreffende functie moet de pulsteller met 1 ophogen. Er moet ook debouncing code in de interrupt handler, want als er straks echter pulsgevers in de vorm van flow-sensoren komen kunnen die kunnen bouncen moet dat worden opgevangen (is dat zo? De beoogde flowmeters hebben een Hall-sensor. Dendert die?). De code in de loop activeert de pin voor n microseconden. Dat wordt gedaan met de delay functie. Echter, de interrupt onderbreekt de delay en telt een puls. Een eventueel restant van de delay-tijd mag niet nogmaals tot een interrupt voor die puls leiden. Daarom worden er volatile booleans gebruikt zodat er per doorloop van de loop maximaal 1 puls per pen geteld kan worden.

Voor de nulstel-schakelaars heb ik nog geen oplossing bedacht, dat bouw ik als laatste.

Als toegift overweeg ik dan nog om met de twee knoppen via een instelmenu het aantal pulsen/liter van de sensoren te kunnen instellen, zodat die niet meer hard gecodeerd hoeven te worden. Verder wil ik een bescherming voor spanningsonderbreking, zodat verzamelde totalen niet verloren gaan als bijv. de accu's worden gewisseld. Zijn er ergens 'verborgen' adressen op de Arduino beschikbaar waar een paar bytes met meet- en instelwaarden kunnen worden opgeslagen? Of kan je dan niet om een SD shield heen. Ik zag ook ergens een RTC shield met een paar vrije geheugenplaatsen aangeboden worden. Die RTC wil ik er misschien toch wel inzetten, dan kan ik meteen die waarden opslaan, en de effecten van de interrupt afhandeling op delays en andere tijdafhankelijke zaken minimaliseren.

Tot zover mijn vorderingen voor nu. Tijd voor een pauze, later weer verder. Ik houd me aanbevolen voor ideeen, aanvullingen en verbeteringen! (waarvoor bij voorbaat hartelijk dank!)

Groet, Karel
If you think education is expensive, try ignorance! (Derek Bok)

Advertisement

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: brandstofverbruik meten (simulatie)

Berichtdoor pjh » 20 Jan 2013, 12:25

Onder de indruk van de uitwerking van je plan, zeker voor iemand die zijn eerste arduino bijna nog ingepakt heeft staan.
Je overwegingen snijden allen hout, maar er zijn nog wel wat beren op de weg. Maar die maken de zaak juist interessant.

Eerst even wat punten voor de vuist weg.:
Jij schrijft:
De code in de loop activeert de pin voor n microseconden. Dat wordt gedaan met de delay functie. Echter, de interrupt onderbreekt de delay en telt een puls. Een eventueel restant van de delay-tijd mag niet nogmaals tot een interrupt voor die puls leiden.

==> 100% precies wordt het nooit met een interrupt. Sterker nog: wanneer de Arduino wordt ingezet voor precieze tijdsmetingen e/o bepaalde 'zuivere' frequenties, dan dienen de interrups gedisabled te worden. Maar heb jij die ultieme preciesie nodig? Hij zal niet twee keer een puls tellen, wanneer je de interrupt instelt op RISING of FALLING en niet op HIGH. De edge is korter in duur dan het plateau.
==> probeer geen delays te gebruiken. De arduino heeft een interne teller in miliseconden die je ook kunt gebruiken om te timen. Maar jij schrijft microseconden. Dus delayMicroseconds(getal). De Arduino heeft een klokje op 16.000.000 Hertz. Dus 1 microseconde = 16 klok-tikken. Ik denk dus dat je geen last zult hebben van dubbel tellen.

jij schrijft:
Zijn er ergens 'verborgen' adressen op de Arduino beschikbaar waar een paar bytes met meet- en instelwaarden kunnen worden opgeslagen?

Een reguliere Arduino heeft 3 soorten geheugen. Eé'n ervan is het zogenaamde elektisch overschrijfbare programmeerbare read only memory (EEPROM). Deze houdt de waarden 'vast' na stroomuitval. Er is een library voor en een tutorial op arduino.cc
Een extra 1024 kilobit EEPROM via I2C protocol (aansluiten op analoog A4 en A5), kost weinig. Een SD kaart lezer kost minder. Ik kan je adviseren een zogenaamde datalogging shield te gebruiken, danwel zelf te maken. Deze heeft een RTC aan boord, dus: real time clock, die met een separate batterij de tijd bijhoudt, ookal is de arduino uit of gereset. Maar... Je wilt je data ook laten triggeren. Je ontkomt er dan bijna niet aan, je data via internet beschikbaar te maken. DUS: data opslag in kleine EEPROM, dataopslag op SD kaart, dataopslag via internet. Dat zijn 3 routes. Een shield voor arduino die WIFI heeft (hoewel: op een boot is GSM misschien beter...), of een shield met een mooi TFT scherm hebben vaak al een SD-kaart socket erop. Een een rtc klokje kost los nog geen euro. Je plannen moeten nog concreter worden om goed in te kunnen schatten hoe de dataopslag het beste kan, zonder onnodige dubbele routes. (Ik denk maar wat in het wilde weg hoor).

==> Zelf dacht ik altijd dat internet op een arduino magie is. Dat is het ook, maar er zijn vele goed functionerende toverstafjes voorhanden in de opensource community. Het is eenvoudig deze moelijke dingen voor elkaar te krijgen.

==> Veder ben ik nu bezig met mijn zwager een Raspberry Pi geheel als eigen Webserver / MySql db te laten functioneren. Lukt al aardig...

Sorry voor hap-snap reactie. Ik zal er tzt nog wel wat bijschrijven. Ik houd je in ieder geval in de gaten op dit forum.

Berichten: 85
Geregistreerd: 10 Jan 2013, 14:51
Woonplaats: Waddinxveen

Re: brandstofverbruik meten (simulatie)

Berichtdoor Karel » 20 Jan 2013, 19:18

pjh, erg veel sterkte met de 'grote domper' in je familie. Dat wens je niemand toe.

Verder: dank je wel voor je reactie, je complimenten en suggesties. 30 jaar ervaring in de software engineering laat nu eenmaal zijn sporen na in de aanpak van een project. En ik heb de arduino dan wel pas 1 week (moest er eerst even voor sparen), ik zit al een aantal weken te lurken op dit en andere (engelstalige) fora. Dan gaat zo'n projectje zich toch langzaam uitkristalliseren in een achtergrondprocesje in m'n brein. Jouw reactie is precies waarom ik mijn project deel: leren van anderen. Dat idee om een interrupt RISING of FALLING te registreren was ik waarschijnlijk nooit of pas na heel lang ploeteren op gekomen. De delay heb ik dus niet meer nodig. Inmiddels heb ik een project om een waterstroom te meten gevonden op arduino.cc. Dat is voor mij iets te simpel, ik wil/kan het aantal pulsen doorlopend tellen, en niet steeds op nul zetten. Maar daar wordt ook de interrupt op RISING afgevangen, dus daar ga ik mooi mijn voordeel mee doen. De interrupts enablen/disablen zoals in het voorbeeldje op arduino.cc ga ik niet doen. Als er een puls komt wordt die geregistreerd, hoe dan ook. Dat is nodig voor het totaal verbruik. De interrupt mag best een paar clock-ticks stelen van het tonen van de resultaten op de display. Daar merk je waarschijnlijk helemaal niets van. (en zolang ik simuleer valt de puls ALTIJD buiten de code voor berekenen/tonen)

Vandaag en de komende dagen gaat mijn dagelijks portie concentratie naar de aangifte Omzetbelasting van de zaak van mijn vrouw. Daarna ga ik eens proberen om het eerste deelprogrammaatje (lezen van potmeter en weergeven in twee leds) te maken. Wordt vervolgd.

En datalogging/monitoring voor een heel schip komt later. Ik heb zelf een oud binnenscheepje van 24 meter dat ik wil bewaken, exact zoals jij het over het buitenhuis van een vriend beschrijft. Probleem op zo'n schip is al het staal. Door al die schotten heen verwacht ik weinig van draadloze communicatie. Ik zou eerder een tweedraads systeem willen opzetten, waarbij alle modules hun berichtgeving naar een centrale datalogger sturen. Maar dan krijg je weer te maken met collission detectie om te voorkomen dat er twee modules door elkaar heen gaan staan blèren. Dan is misschien een ethernet shield wel het beste, en dan voorop en achterop het schip een hubje, waarop alle lokale modules aansluiten. Datalogger met GSM alarmering achterop, en dan zou alles wat je wenst bewaakt moeten kunnen worden als je niet op het schip bent. Dan is het ook wel handig als de modules in een vastgelegd protocol met de datalogger praten, zodat er later modules kunnen worden toegevoegd. Zo wil ik op mijn eigen schip tzt een windmolen en zonnecellen leggen. Dan wil ik de monitoring daarvan zo kunnen integreren in wat er al aanwezig is.

Mijn zoon laat zijn schip nog wel eens een weekje willekeurig waar in het land liggen als er even geen werk is. Dan is controle van de kachel tijdens een vorstperiode best lastig. In deze periode lag zijn schip eerst in Amsterdam, en moest hij iedere dag vanaf Gouda even op het schip gaan kijken. Hij heeft het nu maar in Gouda neergelegd.


Groet, Karel
Laatst gewijzigd door Karel op 20 Jan 2013, 19:22, in totaal 2 keer gewijzigd.
If you think education is expensive, try ignorance! (Derek Bok)

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: brandstofverbruik meten (simulatie)

Berichtdoor pjh » 20 Jan 2013, 20:00

jij Schrijft:
Maar dan krijg je weer te maken met collission detectie om te voorkomen dat er twee modules door elkaar heen gaan staan blèren.

Juist om deze reden heb ik de modules van Dorji afgenomen. Deze 434Mhz modules hebben een eigen PIC-microcontroller aan boord. Deze zorgen ervoor dat de data op willekeurige momenten wordt verzonden, om collision tegen te gaan. Bij elke module kun je aangeven bij welke groep hij hoort, welke eigen ID hij heeft, en op welke Frequentie gewerkt wordt (ik meen 420-450 Mhz oid).

Maar, ik heb nog niet 10 modules tegelijkertijd geprobeerd. Dus het is nog allemaal theorie.

Over interrupts: de ATMEL ATMega328P chip op de Arduino heeft twee interrupts. nummer 0 zit op pin 2 en nummer 1 zit op pin 3. De Arduino mega heeft meer interrupts. Dus mocht je voor je project vooral aangewezen blijven op deze manier van triggeren, dan zou ik als ik jou was een supergoedkope MEGA-kloon van eBay trekken. Die zijn goedkoper dan een officiële arduino. Maar ik kan makkelijk praten. Ik kom om in de arduino's hier. Heb een keer wat van die ATMEL chips gekocht om de arduino's in hun projectje te laten. Met een 'echte' arduino van 23 euro oid is dat zonde. Misschien moet ik hier op het forum eens de 'goedkoopste arduino mogelijk' maken. Zeker wanneer je je realiseert dat een geprogrammeerde Arduino alleen nog maar 5 volt, een crystal en twee condensatortjes nodig heeft: dat is MINDER DAN 3 euro aan onderdelen.

Maar goed. Ben benieuwd naar je vorderingen. Goed dat je het deels-gewijs onderzoekt. Zo blijf je de bugs voor....

Berichten: 29
Geregistreerd: 01 Dec 2012, 18:34

Re: brandstofverbruik meten (simulatie)

Berichtdoor h.lith » 21 Jan 2013, 00:47

Hoi Karel, Dieselaar,, we hebben wat dat betreft wel wat gemeen, ik heb een w110 (staartvin) mercedes 200D van 1966.
Mijn trekschakelaar die defect is ga vervangen door iets anders technisch :D
Ik zet er zowiezo snelgloeiers in, maar een van de dingen die de arduino moet gaan doen, is de maximale gloeitijd controleren, en afschakelen bij overschijden.
Ik wil dus de timer (een van de drie ? twee? elke seconde, of wat minder, een interupt laten genereren, en deze wordt dan in een register gezet, en uitgelezen in het hoofdprogramma, kijken of de 20? 25? seconde (wat al veel is hoor!) al bereikt zijn zeg maar.
De arduino moet nog veel meer gaan doen in de toekomst, dus ik wil hem niet opzadelen met alleen maar loopjes te draaien.
Ik zou heel graag iets concreets hebben (in code / c) of zo om die interupt te creeren, ik kan in de documentatie nog niet direct iets vinden wat ik zoek.
NB: interessant kerel zo'n schip,, daar kan je heel wat creatiefs in kwijt!
Groet, Henk Lith

Berichten: 85
Geregistreerd: 10 Jan 2013, 14:51
Woonplaats: Waddinxveen

Re: brandstofverbruik meten (simulatie)

Berichtdoor Karel » 21 Jan 2013, 12:44

Hoi Henk,

Dat is leuk, nog een scheepseigenaar. Volgens mij moet ik voor het 'genereren' van een interrupt een digitale output pin (niet een interrupt-pin zijnde) HIGH zetten. Daarvoor bestaat de functie digitalWrite. Via mijn breadboard koppel ik deze pin dan aan een van de interrupt pinnen. Een dieselmotor starten is ook een van de projectjes op de rol. In mijn eigen schip hoef ik niet voor te gloeien (kan niet eens), daar staat een Kromhout 4TS117 in. (70 PK bij 1500 rpm). Het schip van mijn zoon is 60 meter lang. Hij heeft voor een van zijn generatoren al een startautomaat, maar zo'n printje kost standaard min. 125 euro. Dat kan voor minder ;-) , en dan komt er een start/stop/gloei automaat voor zijn hoofdmotor en een voor zijn tweede generator. Met zo'n automaat druk je eenvoudig ergens op het schip op een startknop (momentschakelaar) en dan doet deze een aantal startpogingen, incl. voorgloeien. Op een stopschakelaar drukken en de motor stopt. Tijden voor voorgloeien, bekrachtiging startmotor, stopsolenoid, en aantal startpogingen kunnen worden geprogrammeerd. Zo kan je een generator starten als je voorop in de boegschroefkamer bent, en weer uitzettten vanuit de stuurhut of zelfs de woning. Ik heb op mijn schip een heteluchtkachel. Net zoiets als een motor: voorgloeien, na plm. 1 minuut al gloeiend dieselklep open, opvoerpomp en ventilator starten en via een 'oog' controleren of er een vlam is. Als de vlam er is gloeiplug uitschakelen, en dan eventueel de kapaciteit regelen door het motortoerental te varieren. Bij uitschakelen lang genoeg naventileren om de laatste diesel te verbranden en de warmtewisselaar te koelen. Verder verbranding blijven monitoren (met het 'oog') en beveiligen tegen oververhitting (met een thermostaat of thermokoppel) die kan optreden als de luchtstroom voor verbrandingslucht of te verwarmen lucht onvoldoende is (verstopping luchtkanaal).

Waar lig jij met je schip? Mijn schip ligt in Gouda, wij wonen in Waddinxveen. Als je van scheepstechniek houdt moet je ook eens hier kijken. Scheepspraet is een erg gezellig forum van allerlei scheepseigenaren, en veel technische kennis. (sorry mod., OFF-TOPIC, maar misschien wordt dit wel een leuk draadje over (verbrandings-)motorbesturing en bewaking van (sta)caravans, boten en buitenhuisjes).

Groet, Karel
If you think education is expensive, try ignorance! (Derek Bok)

Berichten: 29
Geregistreerd: 01 Dec 2012, 18:34

Re: brandstofverbruik meten (simulatie)

Berichtdoor h.lith » 21 Jan 2013, 13:32

Hoi Karel zat net achter de PC, toen jouw melding binnen kwam, soort interrupt dus :lol:
Karel, ik ben geen scheeps eigenaar hoor, ik heb alleen een (paar :oops: ) MB old timers, oa, dus die 200D, maar die motor is ook heel bekend in de scheepvaart, ze werden vaak uit een krot gehaald, en begonnen dan een tweede leven in een schip.
Zo langzamerhand zal het wel wat afnemen met die dieselmotoren uit de 60e jaren, de onderdelen raken natuurlijk een beetje op.

Maar even bij de les blijvende, waar jij over praat, dus een interrupt op een interrupt gevoelige pin, (puls, flank of hoe je hem ook geprogrammeerd hebt) is eigelijk ook een interupt die van buitenaf komt, en volgens mij willen we beide niks van buitenaf hebben, als het in de chip al in princiepe aanboord is (om weer even een scheepvaart term te gebruiken).
Om buiten de arduino om bv. seconde pulsen te genereren is een (niet eens zo ingewikkelde mannier) zwakte bod, misschien dat ik me daar ooit mee zal moeten gaan verzoenen, maar liever op de echte eerlijke interne mannier natuurlijk.

Er zitten hier op dit forum een paar hele slimme en ervaren uC mannen, ook met veel ervaring in "C" wat ik al helemaal niet heb.
Dus ik hoop nog op iets te stuiten wat we beide kunnen inzetten!

NB: ik zal ik op mijn gemak naar die scheepvaar site kijken Karel.

Groet, Henk Lith
(NB: kijk voor de MB club even op volgende link! http://www.heckflosseregister.nl/

Berichten: 85
Geregistreerd: 10 Jan 2013, 14:51
Woonplaats: Waddinxveen

Re: brandstofverbruik meten (simulatie)

Berichtdoor Karel » 21 Jan 2013, 14:17

h.lith schreef:Maar even bij de les blijvende, waar jij over praat, dus een interrupt op een interrupt gevoelige pin, (puls, flank of hoe je hem ook geprogrammeerd hebt) is eigelijk ook een interupt die van buitenaf komt, en volgens mij willen we beide niks van buitenaf hebben, als het in de chip al in princiepe aanboord is (om weer even een scheepvaart term te gebruiken).
Om buiten de arduino om bv. seconde pulsen te genereren is een (niet eens zo ingewikkelde mannier) zwakte bod, misschien dat ik me daar ooit mee zal moeten gaan verzoenen, maar liever op de echte eerlijke interne mannier natuurlijk.


Ik dacht dat die staartvin een soort hekdrive was van je boot :oops:

Leuke site. Heb zelf jarenlang een Citroen ID Break uit 1960 gehad, plus nog wat andere Citroens. Heb ik na het autoongeluk (waarbij ik passagier was) allemaal weggedaan. Gelukkig heb ik de boot nog niet hoeven verkopen!

Als je echte seconden wilt meten is een RealTimeClock misschien niet overbodig. Daarvoor zijn goedkope oplossingen beschikbaar.
Ik wil juist wel pulsen van buiten, namelijk die van twee flow-meters die het dieselverbruik meten. Alleen voor de simulatie van e.e.a., noem het een proof-of-concept, wil ik het binnen de Arduino Uno houden. Paul gaf al aan dat een bare-bone Arduino maar weinig hoeft te kosten. Daarom ga ik voor ieder doel een aparte uC inzetten, en niet een meerdere taken in 1 Arduino bij elkaar plaatsen. Dat houdt het overzichtelijk, en voorkomt bijverschijnselen als de code voor de ene toepassing die de code van de andere in de weg zit. Ik wil proberen er een stoort gestandaardiseerd bouwsteen systeem van te maken, zodat iedereen er uit kan pikken wat hij nodig heeft. Als dat dan allemaal volgens een protocol met een datalogger/alarmeringsunit praat ben ik helemaal tevreden.

Wat ik niet begrijp is dat jij de voorgloeitijd wilt bewaken. Zou je de Arduino niet beter gewoon de controle over de voorgloeitijd willen geven? Of tast je dan te veel de originaliteit van je MB aan?

Zelf heb ik jarenlang 'c' geschreven, tot en met compilerbouw aan toe. Maar ik heb al weer 4,5 jaar niets met IT gedaan, anders dan een email programma en een webbrowser gebruiken. Ik moet het rustig aan doen, en ik wil eerst stap voor stap, al prototypend, de mogelijkheden, beperkingen eigenaardigheden van 'c' en bijbehorende libraries in de Arduino omgeving leren kennen.

Groet, Karel
If you think education is expensive, try ignorance! (Derek Bok)

Berichten: 29
Geregistreerd: 01 Dec 2012, 18:34

Re: brandstofverbruik meten (simulatie)

Berichtdoor h.lith » 21 Jan 2013, 15:47

Hoi Karel, eerst even nog over die auto (als het mag van de goe gemeente) :x
Die auto wordt een Heckflosse genoemd, duits voor staartvin, Heck is achter zoals je weet van uit de scheepsbouw.
Amerikanen noemen het een fintaill.

Het klopt, Jij wil juist van buiten af getriggerd worden om intern iets te verwerken!
Ik wil juist intern getriggerd worden (door een tijdgever) om uitwendig iets te regelen, in mijngeval dus "das sofortige abschalten des vorgluhverfahren", wat hebben die Duitsers toch een "aussage kraftige" uitdrukkingen he :lol:
Ik heb bij Siemens mijn pensioen gehaald, dus ik lust er zo nog wel een paar :D

Jouw idee om iets van een klokje, al dan niet gecontroleerd door "Millflingen", daar staat die zender toch?
Is op zich een aardig idee, misschien bestel ik zoiets nog wel, kost tegenwoordig allemaal geen drol meer he, (sorry moderator).

Je snapt dat ik als bestuurder normaal het voorgloeien manueel al heb gestopt, als dat na enkele seconde al verantwoord is, maar die nood afschakeling voorkomt dat ik het zou vergeten he dat voorgloeien gaat met behoorlijke stromen, 70/80 ampere is heel gewoon, wel met een relay die dat kan hebben, ik denk met 4 relay's.
Ik kan dan in elke leiding nog een .1 ohm weerstand opnemen om de stroom te controleren die door elke afzonderlijke voorgloei bougie loopt, en dus ook controleren of ae het alle vier nog doen!
PS: snel gloeiers staan allemaal parallel, en zijn geschikt voor 12V, de oudere serie gloeiers staan in serie, ja dat is logiesch moet je zeggen, die krijgen dus maar een gedeelte van de van de accuspanning, meestal iets rond de 1V. de rest gaat in gloeibewaker en wat serie weerstanden zitten, uit de tijd dat energie bijna gratis was he.

Verder wil ik de voorgloeitijd nog afhankelijk maken van de motor temperatuur,, bijvoorbeeld door een ledje aan of uit te laten gaan als de benodigde tijd is verstreken, dat kan al na ca 5 seconde (bij een warme motor) het geval zijn hoor!
Dus een warmte sencor komt er ook nog bij kijken, weer iets leuks natuurlijk voor die arduino.
Kan 1 Arduino op z'n sloffen allemaal af he.

Groet, Henk Lith

Berichten: 85
Geregistreerd: 10 Jan 2013, 14:51
Woonplaats: Waddinxveen

Re: brandstofverbruik meten (simulatie)

Berichtdoor Karel » 21 Jan 2013, 22:01

Henk,

Met die probleemstelling kan je het op de Arduino met 1 interrupt af. Je maakt twee interrupt handlers, 1 voor Rising en 1 voor Falling. Die sluit je met een paar weerstandjes aan op je voorgloeirelais. In de functions zet je een volatile boolean 'voorgloeien' op resp. TRUE en FALSE. Verder definieer in je loop een static long gloeiseconden. Als je de loop ingaat zet je deze op 0 als voorgloeien op FALSE staat. Staat voorgloeien op TRUE en is gloeiseconden gelijk aan 0 dan wordt gloeiseconden gelijk aan millis(). Is voorgloeien TRUE en gloeiseconden > 0, dan check je of millis()-voorgloeien > maxgloeitijd. Zo ja, voorgloeien stoppen en alarm laten klinken.

In 'c' :

Code: Alles selecteren

volatile boolean voorgloeien = FALSE
constant long max_gloeitijd = 25000; // Zet de maximale voorgloeitijd op 25 seconden.

// Hier de interrupt functies definieren
void voorgloeien_aan()
{
  voorgloeien = TRUE;
}

void voorgloeien_uit()
{
  voorgloeien = FALSE;
}

void setup()
{
  attachInterrupt(0, voorgloeien_aan, RISING);
  attachInterrupt(0, voorgloeien_uit, FALLING);
}

void loop()
{
  static long gloeitijd = 0; // een static variabele behoudt zijn waarde bij het meerdere keren aanroepen
                             // van een functie
                             // initialisatie van een static gebeurt alleen bij de eerste aanroep van de functie

  // Als er niet (meer) wordt voorgegloeid en de gloeitijd is > 0, zet dan de gloeitijd op 0;
  if ( ( voorgloeien == FALSE ) && ( gloeitijd > 0 ) )
  {
    gloeitijd = 0;
  }
  else if ( ( voorgloeien == TRUE ) && ( gloeitijd == 0 ) )
  {
    gloeitijd = millis();     // starttijd van de voorgloeitijd wordt vastgelegd
  }
  // Check of voorgloeien TRUE is  EN gloeitijd > 0 EN millis() - gloeitijd > max_gloeitijd
  else if (voorgloeien && gloeitijd && ( (millis() - gloeitijd ) > max_gloeitijd ))   
  {
      // stop voorgloeien, alarm activeren
  }
       
} // einde van loop()



DISCLAIMER ;)
Ik heb al lang geen 'c' meer geschreven. Bovenstaande code is in de browser ingetypt en niet gecontroleerd ;)

Groet, Karel
If you think education is expensive, try ignorance! (Derek Bok)

Volgende

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 47 gasten