hulp gevraagd voor arduino regelunit voor distilleer apparaat

Ik heb m ook niet meer zo fris in het geheugen zitten.
Waar haal je de tijd vandaan ?
Is het niet gewoon zo dat je maar eens per 2 seconden langs het stukkie komt waar de tijd naar je LCD word geschreven ?

Ben op t moment weer eens druk met werk en dus nauwelijks in staat om eens even goed te gaan zitten en de sketch es goed te bekijken.

Er gaat iets fout bij de haakjes zowel () als de {}, ook al staat de IF op een regel dan nog {} gebruiken.
net zoals bij een voorwaarde ()

De compiler neemt nu dingen aan.
trouwens als de seconden op -1 staan dan zowel de seconden als de minuten aanpassen, nu krijg je dus van 11:01 eerst 10:00 en dan een seconde later pas 10:59 en dat klopt niet.

shooter:
Er gaat iets fout bij de haakjes zowel () als de {}, ook al staat de IF op een regel dan nog {} gebruiken.
net zoals bij een voorwaarde ()

Zou je dit wat uitgebreider kunnen uitleggen ?
Zie namelijk de fout niet als ik heel eerlijk ben :-[

shooter:
Er gaat iets fout bij de haakjes zowel () als de {}, ook al staat de IF op een regel dan nog {} gebruiken.
net zoals bij een voorwaarde ()

.....

De compiler neemt nu dingen aan.
trouwens als de seconden op -1 staan dan zowel de seconden als de minuten aanpassen, nu krijg je dus van 11:01 eerst 10:00 en dan een seconde later pas 10:59 en dat klopt niet.

Gaat dit over de hele code, of over het kleinere stukje dat als proof of concept voor de timer moet dienen ?

De haakjes moeten inderdaad wel kloppen en die zijn al vaker aan de orde geweest in deze thread.
Het is altijd een goed idee om die nog maar eens te controleren als er iets fout gaat.
Maar de {}, zijn die verplicht ?
Volgens mij alleen als je iets wil uitvoeren dat meer dan 1 regel beslaat, en een regel word pas afgesloten als er een ; puntkomma staat.
Maar ik kan ergens iets gemist hebben.
Ik heb zelf wel de voorkeur een { in dezelfde regel te zetten als de if, maar daar heb ik ook al verschillende meningen over gezien.

Dat van de minuten en de seconden aanpassen kan in de proof of concept zeer eenvoudig worden opgelost, heeft te maken met de volgorde waarin je de controles uitvoert, maar kan ook zoals jij het zegt.
In de andere sketch gebeurt het daar al zo bij MenuMode 100.

Maar bij mm 112 (helemaal aan het eind van de sketch) gaat het inderdaad fout.
Rolf moet nog maar eens een vergelijk maken tussen wat er gebeurt in mm 100 en mm 112.

Verder moet Rolf ook eens kijken of er wel goed naar de menu mode word gekeken.
Kan het niet zo zijn dat er twee keer per rondje een seconde afgeteld word ?
(maar dan moet dat eigenlijk ook in beide gevallen zichtbaar zijn).

Je kunt bijvoorbeeld heel snel een stuk als commentaar buitenspel zetten, waardoor dat niet meer mee doet in de code.
Dat doe je dus met /* en */.
Als het dan ineens weer goed gaat weet je dus dat je in het uitgesloten stuk moet zoeken.

In regel 177 trek je 1 af, maar hoe vaak doe je dit geintje want het staat wel in de loop.

Zet de menumode vraag (mm==xx) in de loop, maar de rest in functies, dus dan krijg je functie 110 functie 10 etc. dat leest een stuk beter, en je haakjes kloppen gewoon niet zoals (( na een IF
en geen {} bij een IF.
dat maakt het erg onzeker of de compiler wel op de goede regel stopt.
Je moet ook nog een timer gaan gebruiken die bijv met millis() werkt, of met een RTC
in regel 103 gaat het al erg fout met je {}.

@shooter:

Weet je wel zeker dat wat je roept, ook klopt ?

Het kan best zo zijn dat jij het niet lekker kan lezen en dat jouw voorkeur voor functies je parten speelt.
Het kan ook zo zijn dat dat geldt voor veel andere mensen.
Maar voorkeuren zijn iets heel anders als voorschriften en regels.
Jij ziet deze code schijnbaar nu voor het eerst, de vraag is of je de hele ontwikkeling hebt gevolgd.

Er gaat helemaal niets mis op regel 103:

if(currentMillis - previousMillis > interval)
PreviousMillis  = currentMillis;

Dat staat jou misschien niet aan,maar de compiler geeft er geen reet om en doet het gewoon goed (nou ja, de oudere dan in ieder geval want dat is gecontroleerd).
De regel is namelijk niet met een CR/LF (enter) beëindigd, maar met de ; puntkomma.

De code   key = (analogRead (0));  // lees analoge ingang op pin 0
Is dus niet afhankelijk van currentMillis, en word dus altijd uitgevoerd, niet 1 maal per seconde.
Das ook de bedoeling.

Homedistiller kwam een tijd geleden met zijn vraag, en ik hen daar toen op gereageerd met een stukje code dat ik zelf in elkaar gedraaid had en dat nog steeds goed werkt.
Homedistiller en ik hebben die code aangepast naar wat het nu is.
Ik had destijds nog geen idee van functies, ook al zijn die in deze code wel gebruikt.
Die functies komen gewoon uit een stukje code dat ik heb gebruikt als bron om met mijn LCD key shield te gaan werken.
En van daaruit heb ik iets met een menuutje gebrouwen, puur om te zien of ik dat kon maken.

De menu modes lopen vrij snel door "loop" heen, totdat er een match is met die menu mode.
Het is dus de bedoeling dat er telkens als loop doorlopen word, maar 1 van de menu modes word afgehandeld.
Aangezien de twee keer optellen in twee verschillende modes gebeurt (zou moeten), mag dat dus niet botsen.
Zoals je kunt zien had ik toen ook nog nooit van switch...case gehoord, anders had ik dat zeer zeker gebruikt hiervoor.
Wanneer er iets mis gaat met die menu modes, dan krijg je dus bijvoorbeeld het probleem dat homedistiller nu heeft.

Ik mis wel een stukje in de code, maar wie weet heb ik 'm nog niet vaak genoeg doorgelezen sinds de thread opnieuw leven is ingeblazen.
Het stukje is waar Millis word gekoppeld aan de counter, en de secondes die geteld worden, worden geüpdatet.

De code die we hier gemaakt hebben.
Is inderdaad door mij en MAS3 in elkaar gezet.
De bedoeling van deze code is dan ook,
Om beginnende arduino gebruikers.
Zoals ik en meerdere een kans te geven om een simpel menu te bouwen.
Zodat ze deze eventueel kunnen aanpassen voor hun eigen projecten.

Dat er fouten in kunnen staan,
en dat er dingen staan die anders hadden gekund klopt.
Daarvoor is dit forum ook bedoeld en dit "draadje"
Dus als er gevorderde lezers zijn.
Die een foutje zien en die dit zouden willen melden.
Dan kan dit.
Wel hoop ik dat ze dan ook een stukje uitleg willen geven.
Zodat het mij en andere lezers ook duidelijk word wat er gebeurd.

Nu weer ontopic

Ik heb de laatste code nog eens goed bekeken,
en er gaat inderdaad het een en ander fout.
Ik ben dan ook terug gaan kijken wanneer de problemen begonnen.
Ik ga dan ook nu veder vanaf waar er geen problemen waren.
het menu "reinigings programma" heb ik dus wel neergezet.
Maar het vervolg op deze keuze verwijderd.

Nu werkt de code weer zonder vast te lopen.
Wel moet ik nu in het hoofdvenster wat problemen oplossen.
En zou daar nu veder mee willen gaan.

Ik voeg even de aangepaste code toe als bijlage .
Zodat de geintreseerde onder ons deze ook kunnen gebruiken.

Distilleer_Menu_26_April_2015.ino (81.3 KB)

Ook heb ik het probleem bij de timer opgelost.
Een tijd geleden heeft MAS3
daar de oplossing voor gegeven zodat hij nu wel goed terug telt.
Ook met de minuten en seconden.
Ik heb deze oplossing ook toegepast in de code.
Die ik bij mijn vorige post heb bijgevoegd als bijlage.

Sec = Sec-1;
    if((Sec)== -1) {
    Sec=59;
    Rmin=Rmin-1;
    }

ook zag ik dat de vorige timer code nog niet was aangepast.
Dus ik zal de goede gelijk ook even opnieuw posten

Timer_Countdown_Rolf.ino (1.06 KB)

Ja ik zie het, in dat deel gaat inderdaad wat mis.
Dat komt vermoedelijk omdat je er een ander bestaand deel hebt gekopieerd, maar niet hebt aangepast.
Het verklaart niet direct waarom het tellen fout gaat.
Je bent daar in mm 21 bezig, en gaat dan bij verschillende toetsdrukken naar mm 16, maar er staat niet op het scherm wat er dan gebeurt.
Het commentaar dat er daar bijstaat klopt ook niet meer, pas dat eerst aan zodat je weer weet wat de bedoeling is.
Op die manier help je jezelf de code te controleren.
Het menu word in 2 stappen afgehandeld.
De eerste stap is het afbeelden van dat menu (20), de tweede stap is het navigeren door het menu, dat in 21 moet gebeuren.
Maar dat navigeren gebeurt dus niet, terwijl toetsdrukken wel consequenties hebben.
Je gaat dan namelijk naar andere menu modi (110, 16, 22 of nog een keer 16).
Als er niet op een toets gedrukt word, gebeurt er in mm 21 verder ook niets, dat kan ook niet echt de bedoeling zijn.
Maar daarmee zie ik niets wat daar echt dusdanig fout gaat dat je zou concluderen dat de sketch vast zou lopen.
Wel ga je ineens ergens heen waar je dan geen idee van krijgt hoe je daar nou weer terecht gekomen bent.

Dit gaat dus over de sketch genaamd programma_19_05_2015.

Dus, laat in menu mode 21 ook echt iets gebeuren en laat dat dan ook zien.
Bekijk nog eens hoe het ook alweer ging met die menu's.
Je bent er een tijdje niet meer mee bezig geweest en dus moet je er weer inkomen.
De commentaren moeten je daarbij helpen, daarom word er hier juist zoveel commentaar bijgezet (daar is ook al eens wat over gezegd).
Maar dan is wel van zeer groot belang dat die commentaren wel kloppen.

Hoi MAS3

inderdaad klopt het dat er in het menu "reinigings programma"
Niks gebeurd.
hoewel niks als je esc duwt ga je een menu item terug.
omhoog en omlaag loop je door het instellings menu heen.
Alleen ok heb ik even ingesteld dat hij niks doet.
Omdat ik hier nu veder mee moet stoeien.

Om het programma helemaal compleet te maken .
Moet ik nog wat dingen toevoegen die ik nog niet weet hoe.
dat zijn de volgende dingen.

een relay bordje aansturen met 4 relay's
de: 4 relay module HL-54s v1.0
Deze moet dadelijk in het programma het volgende gaan aansturen:

koelwaterpomp. 220 volt in en uitschakelen
en drie vloeistof ventielen 220 volt in en uit schakelen.
deze moeten dadelijk regelen bv dat het product wel of niet door een koolstoffilter gaat.
het afnemen van de voorloop deze moet in een aparte fles komen.
dus de ventielen ga ik gebruiken om de vloeistof stroom te sturen.
Dit is niet zo heel moeilijk software matig aan te sturen.
Wel moet ik hier nog een voeding voor gaan maken
Om het relay bord te voorzien van spanning moet ik een 5 volt voeding nog bouwen.
Ik wil namelijk niet de voeding van de arduino bord gebruiken.

en natuurlijk nog mijn naaldkraan met stappenmotor.
Hier ben ik druk mee bezig maar dit lukt van geen kanten haha.
deze hoeft eindelijk maar heel weinig te doen.
Maar software matig heb ik hier nog geen simple oplossing voor.
Ook hier moet ik een voeding voor bouwen van 5 volt.

zal even uitleggen wat ik hier mee wil.
Want dit is het volgende wat ik wil toevoegen.
zodat ik de rest van de menus kan afmaken.

als ik mijn programma opstart wil ik dat hij in de setup.
Mijn naaldkraan volledig dicht zet.
waarom ? als tijdens een run een probleem optreed,
en ik het programma/ distilleer apparaat moet onderbreken of bij een stroom uitval.
Wil ik na het inschakelen van de distilleer apparaat/programma.
Dat hij eerst weer de naaldkraan volledig afsluit.
ook denk ik dat ik de feetback van de potmeter eindelijk niet nodig heb.
Deze wil ik dus eindelijk ook niet gebruiken.

Wat moet ik kunnen doen met de naaldkraan/stappenmoter

het gaat om een stappenmotor:28BYJ-48 met driver ULN2003

Deze moet een naaldkraan aansturen die 3.5 slagen kan maken.
Vanuit volledig dicht naar volledig open.

Dit zou ik willen gaan doen in stappen van 30.
Dus 0 is dicht 15 is half open en 30 is volledig open.
in het programma hoef ik alleen te kunnen vertellen naar welke stap hij moet gaan.
Dit is afhankelijk van de temperatuur van een van de sensoren.
het distilleren gaat automatisch tijdens het programma.
alleen wil ik wanneer het hoofdscherm op het display staat en het programma loopt.
de naaldkraan veder of minder ver kunnen open zetten.
Met de omhoog en omlaag toetsen.
Dus staat de stappenmotor op een moment bv op 18 door het programma.
zou ik dit willen kunnen verlagen of verhogen per stap.
zonder dat het programma vast loopt.

Dus ik ben opzoek naar een code voor deze stappenmotor.
waar ik mee moet kunnen zeggen bv: ga naar opening 10 een van de 30 stappen.
en dat hij bij houd op welk punt hij staat.
en ik moet tijdens het programma door een toetsdruk kunnen verhogen of verlagen.

iemand een idee hoe ik dit zou kunnen oplossen?
Of een programma weet wat ik zou kunnen aanpassen ?
graag weer zo simpel mogelijk zodat we hier weer veel van kunnen leren.

groeten rolf

Distilleer_Menu_27_April_2015.ino (85.4 KB)

De feedback van je naaldkraan heb je juist omdat je ook als je een spontane reset of een spanningsuitval (is eigenlijk hetzelfde) hebt gehad, weet waar die kraan staat.
Wanneer je dat net weet, en je gaat de kraan dichtzetten, dan kun je in de problemen komen.
Want hoeveel stappen moet je zetten on 'm dicht te hebben ?
Wanneer je een stevige verbinding tussen motor en kraan hebt, wat gaat je motor dan doen als je m aanstuurt en de kraan niet verder kan ?
Dit hebben we trouwens eerder ook al besproken, maar ik weet nu niet meer precies wat er toen allemaal gezegd is.
Je kunt ook iets anders als een potmeter gebruiken, namelijk een eindschakelaar.
Die laat je dus schakelen op het moment dat je op de "dicht" stand staat waarna je de motor niet meer verder dicht hoeft aan te sturen.

Overigens kun je ook aan een noodstop knop denken.
In het geval die word ingedrukt, zet je alles in een veilige stand.
Dan hoef je in paniek toestanden niet de stekker eruit te trekken, waarna je geen controle meer hebt over waar welke vloeistof heenloopt enzovoorts.

Het aansturen van de stappenmotor is ook iets dat je het best eerst even "droog" oefent.
De stappen die die motor kan maken zijn heel klein, want er zit een vertraging op.
Je komt daarbij uit op een vreemd getal dat ergens in de buurt van 96 per omwenteling zit (het is dus geen 96).
Je hebt al laten zien dat je met mechaniek heel handig bent, dus het overbrengen van de platte as van die motor op je naaldkraan zal vast goed komen.

Bijgevoegde sketch is een voorbeeld sketch die ik meen ik voor zo'n motortje heb gebruikt.
Hij is gemaakt door een mede forum lid (en er staat iets in over 2048 stappen per omwenteling).
Kijk maar eens of je daar iets mee kunt.

SmallStep.zip (1.19 KB)

Op de naaldkraan zul je waarschijnlijk toch een vertraging moeten zetten want de stappenmotor is niet erg sterk hoor.
Een naaldventiel maakt overigens meestal veel meer slagen voor volledig open, maar ik geloof je gelijk.

Positiecontrole:
maak een microswitch die uitgaat als de klep bijna OPEN staat. Tel het aantal stappen om dicht te gaan, hiermee voorkom je dat het zaakje klem gaat lopen. Als het straks allemaal werkt zul je profijt hebben als er een encoder op zit om te zien of de klep wel beweegt.

Het is een regeling dus gebruik een sensor om dat ventiel te regelen, dan krijg je veel sneller een goed product.
Dat gaat natuurlijk prima met een arduino.

Je kunt wel een grote voeding gebruiken, maar zet de relais dan achter een aparte 7805 oid.

Ik heb de aansturing voor de naaldkraan al een tijd af.
Met vertraging .
De stappenmotor krijgt dit met gemak rond.
Als hij nu aan het eind is gaat hij door de koppeling heen
Die in de stappenmotor is gebouwd.

Ook zit er een meer turns potmeter op.
Kan ik die beter gebruiken als positie bepaling?
Of zeggen jullie ga voor een microswitsh ?

Hier een oude foto. zit nu ook de driver bij op
Het gedeelte op de gele messing blokjes is de naaldkraan.

graag jullie mening voor ik iets ga veranderen haha.

Die foto of een die er op lijkt heb je al eens laten zien, daardoor (ook andere foto's van je installatie) wist ik dat je handig in het mechanische bent.
De meerslagen potmeter geeft je altijd een positie door, een switch geeft je een signaaltje als je één bepaalde positie hebt bereikt.
Het is maar net wat je wil.
Waar we het volgens mij nog niet eerder over hebben gehad bedenk ik me net, en wat je dus even moet controleren, is dat de weerstand zeer waarschijnlijk wel temperatuurgevoelig is, en jij gaat juist met temperatuur variëren.
Is dat iets van 70 tot 100 graden ofzo ?
Want ik heb wel het zeer sterke vermoeden dat dat van invloed zal zijn.
Maar omdat je ook de temperatuur meet moet ook dat een hindernis zijn die te nemen is.

Maakt je naaldkraan / het grote wiel meer dan 1 hele slag ?
Als dat niet zo is, en de stappenmotor minder dan 10 slagen kan maken om het maximale bereik van het grote wiel te dekken, dan kun je beter de potmeter aan het kleine wiel monteren.
Je zult dan een heel stuk nauwkeuriger kunnen meten omdat je het bereik van de potmeter veel beter benut.
Maar ook dat is volgens mij al eens aan bod geweest, je hebt de verhouding tussen de wielen al eens genoemd.

Een schakelaar kun je zo maken dat die altijd op een vaste positie schakelt.
Nogmaals, wanneer de naaldkraan 1 slag of minder maakt, is het eenvoudig om met een schakelaar te werken.
Maakt ie meer dan 1 slag, is het wat lastiger maar nog steeds te doen.
Je kunt een arm aan het grote tandwiel maken (een hele lange bout in plaats van het verzonken imbusje waar ie mee aan de as vast zit bijvoorbeeld).
Hoe langer die arm, des te nauwkeuriger kun je het schakelpunt voor je schakelaar maken.

foto bekeken, alles prima laten zitten zo, positie komt direct van kraan, en kan zo naar een analoge ingang.
de potmeter niet op de motor zetten want de riem slipt een beetje en dus geen herhaalbare nauwkeurgheid.

Gaat dat grote wiel omlaag met de schroefdraad, of zit er inwendig schroefdraad waarmee de naald geduwd wordt?
ofwel gaat de potmeter op en neer met het grote wiel?
en hoe houd je de naald vast dat deze niet gaat draaien?

Haha dat heb je goed opgemerkt!
Dat was ook in het begin een hoofd breker
Om het te maken.
Het grote wiel gaat inderdaad op en neer!
De snaar kan hier gewoon mee mee bewegen.
Maar de potmeter niet inderdaad.
Als je goed kijkt zit er ren gleuf in het grote wiel.
En een pen door de as van de potmeter.
Deze blijft gewoon op zijn plek de pen kan
Bewegen in het gleuf gat

Als ik een micro svhakelaar moet toeviegen moet ik er nog een overbrenging bij maken.
Dus als het met alleen een potmeter kan
Doe ik dat het liefst

Iemand ideeen over de code voor dit ?