hulp gevraagd voor arduino regelunit voor distilleer apparaat

Hoi Allemaal.

Ik ben Rolf en ben nieuw hier op het forum.
Ik ben 37 jaar oud en kom uit gelderland.
Een van mijn grote hobby's is het distilleren van drankjes.
Ik heb hiervoor een bokakob distilleer apparaat gebouwd.

Hier een linkje naar het forum van de bouw.

http://thuisdestilleren.messageboard.nl/forum/viewtopic.php?f=13&t=445

Ik ben nu bezig om wat verbeter punten toe te voegen aan de ketel.
Ik gebruik nu een losse temperatuurmeter in de ketel.
En een spannings regelaar voor het 2000 watt element in de ketel.

Ik wil dit eindelijk gaan vernieuwen met een regelunit met een 20x4 lcd en een arduino uno board.
Wat ik eindelijk wil maken en zou kunnen doen met de regelaar is het volgende

-temperatuur meten op 5 plekken.
-een alarm laten afgaan bij een ingestelde temperatuur per temp.sensor
-Een menu maken met bediening van 5 push buttons (up/down/right/left/enter) om door het menu te kunnen bladeren.
-het verwarmings element kunnen regelen.

Wat ik al aan hardware heb:

-arduino uno board.
-20x4 lcd display

Ik ga voor de bediening van het menu 5 push buttons gebruiken.
Daar wil ik een los printje voor maken met een spannings deler.
zoals van het arduino lcd shield via het shema.

Dan zit ik nog te twijfelen aan wat voor soort temperatuur sensors te gaan gebruiken.

pt100 deze kan ik krijgen van een kennis werken veel met deze sensoren in generatoren.
ds18b20 voordeel meer sensoren op een ingang one wire
of de tmp36 sensor.

De sensoren eventueel te voorzien van een behuizing is geen probleem.

hoe ik de regeling ga maken voor het element is nog niet bedacht.

Graag hoor ik jullie ideen opmerkingen en tips tegemoet.

Ik wil beginnen met het samen stellen van de code,
voor het lcd scherm de knoppen en het menu.
Dit ga ik eerst maken op een breadboard.

Dus als iemand al een code heeft voor een menu
waar ik veder mee kan borduren is dat zeker welkom!

mvg Rolf

Hoi Rolf.

Je hebt al een aardig idee van wat je wil, das mooi.
Als ik in jouw schoenen zou staan, zou ik kiezen voor de oplossing met de PT100.
Ik zag zojuist op wikipedia dat die er zijn met verschillende aantallen aansluitdraden, om de invloed van de kabel te kunnen wegwerken.
Maar ik ga er van uit dat de afstanden erg kort zullen zijn en dat er daarom niet meer dan 2 draden nodig zullen zijn.
Dat kun je heel erg eenvoudig aansluiten op je UNO en das een groot voordeel.
Dat je er eenvoudig en vermoedelijk goedkoop aan kunt komen is dus ook voordelig.
Je geeft aan dat je 5 temperaturen wil meten en dat je toetsen via een weerstandsnetwerk wil inlezen à la LCDkeypad shield.
Aangezien je dat zelf gaat nabouwen, kun je het aantal toetsen ook nog wel wat uitbreiden indien je daar behoefte aan zou hebben.
5 temperaturen en 1 analoog toetsen signaal levert je precies de 6 analoge ingangen op die je hebt met je UNO.

Enige wat je dan nog overhoudt, is een zoemertje, ledje en/of relais voor je alarm, en je kunt aan de programmeer-slag.
Ik heb eerder mensen aangeraden om een beetje te gaan spelen met de voorbeelden die met de IDE worden meegeleverd en zo te leren, maar ik werd er door iemand op gewezen dat dat alleen voor een beginnende programmeur die ook SM liefhebber geschikt is.
Daar zit wat in, want stiekem heb ik me de afgelopen 30 jaar nog wel eens in programmeren verdiept waardoor ik de voorbeeld sketches wel kon volgen en ik mag natuurlijk niet aannemen dat dat voor iemand anders ook geldt.
Wanneer je voor het eerst met programmeren te maken krijgt, kan het best zijn dat alles abracadabra lijkt en dan is het wel een goed idee eens te kijken naar wat lectuur over programmeren.
De programmeer taal is gebaseerd op C, en daar kun je dus naar uitkijken.

Ga er van uit dat je zelf het programmeer werk moet doen.
Natuurlijk is het mogelijk dat je code voor het aansturen van het scherm en uitlezen van de toetsen online wind (die kans is zeer groot zelfs).
Wat je nodig hebt voor de 20*4 display is hetzelfde als voor de 1602 displays, maar dan moet je m dus vertellen dat je 4 regels van 20 hebt (dûhh).
Als je verder kijkt op de site waar ik je voor het schema van het LCD keypad shield heb heen gestuurd, vind je ongetwijfeld ook voorbeeld code daarvoor.
En natuurlijk hier op het forum.
Op Deal Extreme staan ook tips over het gebruik van zo'n shield, dat weet ik omdat ik er zelf ook wat over heb geplaatst (onder een andere naam als ik hier en op de meeste sites heb).

zo ben weer een stukje veder.
Na het antwoord van mas3
Heb ik op een oefenbordje zelf een spanningsdeler gemaakt.
Ik heb hiervoor 6 knoppen gebruikt.
-up/down/left/right/ok/menu
ik heb andere waarden gebruikt voor de spanningsdeler
ik heb hiervoor weerstanden gebruikt van telkens 330 ohm deze had ik nog liggen.
Na veel gelezen te hebben en het berekenen van de uitgangen.
heb ik een code gepakt die ik heb veranderd.
Ik heb hier veel geprobeerd en begrijp nu ook wat de code doet.
hier de code tot nu toe

/* --------------------------------------------------------------------------------------------------------------|
 * |   The circuit: Arduino pins connected to LCD pin:                                                           |
 * |                Arduino pin 11 -> LCD RS = pin 4 van de LCD                                                  |
 * |                Arduino pin 8  -> LCD E = pin 6 van de LCD                                                    |
 * |                Arduino pin 7  -> LCD D4 = pin 11 van de LCD                                                 |
 * |                Arduino pin 4  -> LCD D5 = pin 12 van de LCD                                                 |
 * |                Arduino pin 3  -> LCD D6 = pin 13 van de LCD                                                 |
 * |                Arduino pin 2  -> LCD D7 = pin 14 van de LCD                                                 |
 * |                At LCD: RW pin to ground, it saves a digital port at the Arduino                             |
 * |                10K resistor: ends to +5V and ground and wiper to LCD VO pin (pin 3)                         |
 * |                initialize the library with the numbers of the interface pins                                |
 * |                LiquidCrystal lcd(RS, RW, E, D7, D6, D5, D4)                                                 |
 * |                LiquidCrystal lcd(RS, E, D7, D6, D5, D4) -> with RW to ground, no initializing needed for RW |
 * |                                                                                                             |
 * | De drukknoppen worden getecteerd via een analoge ingang en een weerstandsnetwerkje welke fungeert als       |
 * | spanningsdeler. De gemeten waarde komt dan overeen met een ingedrukte schakelaar.                           |
 * --------------------------------------------------------------------------------------------------------------|
*/




#include <LiquidCrystal.h> // Deze instructie gebruiken bij LCD via meerdere I/O pinnen!!
LiquidCrystal lcd(12, 11, 8, 5, 4, 3, 2); // Deze instructie gebruiken bij LCD via meerdere I/O pinnen!!

int MenuPin = 2;   // select the input pin for the analog reading = Analog 2
int MenuValue = 0; // variable to store the value coming from the sensor
int drukknop=0;      // controle op welke drukknop


void setup()
{
 Serial.begin(9600);
 pinMode(MenuPin,INPUT);
 lcd.begin(20, 4);           // set up the LCD's number of rows and columns: 
 lcd.print("Drukknop test"); // Print a message to the LCD.
}


void loop()
{
 lcd.setCursor(0, 1); // set the cursor to column 0, line 1 (note: line 1 is the second row, since counting begins with 0):
 lcd.print("                ");
 MenuValue = analogRead(MenuPin); // read the value from the analog sensor:
 lcd.setCursor(0, 1); // set the cursor to column 0, line 1 (note: line 1 is the second row, since counting begins with 0):
 lcd.print(MenuValue); // print the measured value for testing reasons
 processmenu(MenuValue);
}


void processmenu(int buttonvalue)
{
 lcd.setCursor(9, 1);       // set the cursor to column 9, line 1
 if (buttonvalue >=320 and buttonvalue <= 350)
  {
   lcd.print("Menu");
  }
 if (buttonvalue >= 280 and buttonvalue <= 300)
  {
   lcd.print("OK");
  }
 if (buttonvalue >= 220 and buttonvalue <= 250)
  {
   lcd.print("Left");
  }
 if (buttonvalue >= 70 and buttonvalue <= 110)
  {
   lcd.print("Up");
  }
 if (buttonvalue >= 150 and buttonvalue <= 200)
  {
   lcd.print("Down");
  }
 if (buttonvalue >= 0 and buttonvalue <= 10)
  {
   lcd.print("Right");
  }
}

Dit heb ik geupload naar mijn arduino uno
en aangesloten op mijn proefboardje met 20x4 lcd
en het werkt!!

nu moet ik echter nog een menu gaan samen stellen.
Echter heb ik geen idee hoe ik dit moet gaan uitwerken?
Daarom hoop ik dat er iemand is die een simple menu heeft wat ik zou kunnen invoegen en naar eigen zin
kan gaan veranderen.
Ook om zo de code te leren begrijpen en hoe het werkt.
of een oefening zodat ik bv met een zoemertje
die heb ik via een proefkit van arduino
zou kunnen laten zoemen als ik bv op knop up duw
zodat ik weet hoe ik een uitgang kan inschakelen.
wie kan en zou mij hierbij willen helpen?

mvg rolf

Rolf,
Woon jij in de ijmond? Dus bij mij om de hoek :slight_smile:
Groetjes
Nico

nee helaas uit omg. Nijmegen.
De code heb ik van het internet gehaald.

iemand workshop uitgangen aansturen bij bepaalde waarde?

haha

gr.rolf

Hoi Rolf.

Dan wonen wij niet erg ver uit elkaar.
Heel goed wat je al bereikt hebt, thumbs up !
Je hebt nu dus werkende knoppen en dat zie je aan de hand van een sketch die je hebt gedownload en aangepast naar jouw hardware (andere weerstanden).
Het is alleen niet te zien in de code die je nu hebt, wat daaraan jouw bijdrage is, en wat je van elders hebt.
Er is wel een berg commentaar te zien, maar ik vermoed dat dat er al in zat.
Ik raad je aan om elke aanpassing die je doet, te voorzien van commentaar.
Dat is handig voor jou in de toekomst, en vertelt ons wat meer over wat je allemaal aan het doen bent (hopelijk).

Stap 1 heb je nu zo te zien afgerond.
Ik denk dat stap 2 is om op het display een indeling te maken die je ook kan aanhouden als je menu actief is, en dat kan best ingewikkeld zijn.
Daarvoor kun je je display onderverdelen in denkbeeldige vakjes.
Bijvoorbeeld 4 regels met 2 kolommen van 8 tekens elk.
Je hebt in werkelijkheid natuurlijk 10 tekens, maar hier word al rekening gehouden met een menu dat je wil maken.
Op het moment dat je op de menu knop drukt, zou je dus deze indeling tevoorschijn halen.
Je hebt op deze manier dus 8 menu items.
Het laatste item in dit menu is dan "Terug" of "Exit" om weer uit het menu te komen, of "Volgende" of "Next" om naar een eventueel volgend menu scherm te gaan.
Je kunt een item markeren door er een > voor te zetten.
Ik weet niet of je zo'n item ook kunt markeren door het te inverteren, heb ik zelf nog nooit geprobeerd.
Het ligt er aan wat je met je menu wil, je kunt op enter drukken om iets te gaan bewerken (in een nieuw scherm), of de waarde met links/rechts aanpassen als de > voor de betreffende waarde staat.

Ik zou je nu aanraden om een test menu te maken, waarbij je waardes of teksten op vaste plaatsen van het scherm plaatst.
Je houdt daarbij dan rekening met de ruimte om de > ervoor te plaatsen zonder dat de indeling van je scherm overhoop raakt.
Trefwoord hiervoor is: setCursor
Je moet er dan dus ook rekening mee houden dat je niet meer ruimte gaat beschrijven op je scherm dan er beschikbaar is, want ook dan word het een zooitje.

Voor mezelf heb ik afgelopen weekend een vergelijkbare oefening gemaakt waardoor ik 3 variërende waardes op een vaste plaats op mijn 1602 schermpje zet (daar komt geen menu aan te pas).
Zoals je wellicht aan de tijd van deze posting ziet, ik ben nogal druk met mijn werk en ga zo direct dus slapen.
Morgen verwacht ik weer minimaal 12 uur aan het werk te zijn, en van t weekend is het ook beide dagen raak.
Maar er is hier genoeg kennis aanwezig om je te helpen met je vragen, mochten die rijzen.

Je kunt een zoemertje aansturen op dezelfde manier als het LEDje in de "blink" sketch, das nogal eenvoudig.
Je kunt het zoemertje ook laten gaan als er word geregistreerd dat er op een knop word gedrukt.
Het word al interessanter als je dan het zoemertje alleen maar even kort wil laten piepen en niet zolang het knopje word ingedrukt.

Omdat je al een heel project in het hoofd hebt, is het raadzaam om goed bij te houden wat je allemaal wil doen en/of al gedaan hebt.
Daarom zou ik zeggen: pak een stuk papier en zet daarin je project in stappen op.
Ik raad iedereen altijd aan om de stappen steeds kleiner te maken.
Dan zijn de problemen die je moet oplossen ook kleiner (over het algemeen klopt dit), waardoor je door deze problemen een voor een op te lossen, je je totale project realiseert.
Omdat papier geduldig schijnt te zijn, kan dat een heel handig hulpmiddel zijn.
Op dat papier houd je ook een overzichtje van hoeveel en welke variabelen je allemaal gebruikt.

Zo, nu ga ik slapen.
Mocht je nog iets missen, gewoon vragen.
Succes met je volgende stappen.

Hoi mas3

Bedankt voor je uitleg
ik ben hier vandaag veder mee gegaan.
Ik heb even op papier gezet wat je voorstelde met 4 lijnen 8 kollomen.
ik heb ook gelijk gelezen op google over setCursor.
en daarmee aan de gang gegaan.

nu heb ik hiermee een simple code gemaakt om een menu indeling te krijgen.
hier de code:

/* ------------------------------------------------------------------------------- */

// 20x4 lcd met menu indeling
// deze code set alleen het menu neer op de juiste plaats.
// hiervandaan veder werken.

#include <LiquidCrystal.h>

// aansluiting lcd op arduino:
// rs (LCD pin 4) naar Arduino pin 12
// rw (LCD pin 5) naar Arduino pin 11
// enable (LCD pin 6) naar Arduino pin 10
// LCD pin 15 naar Arduino pin 13
// LCD pinnen d4, d5, d6, d7 naar Arduino pinnen 5, 4, 3, 2
LiquidCrystal lcd(12, 11, 8, 5, 4, 3, 2);



void setup()
{
  
 
  lcd.begin(20,4);              // Hier geef je aan wat voor lcd er gebruikt word b.v: 20x4
  lcd.clear();                  // Start met een leeg scherm
  lcd.setCursor(2,0);           // zet cursor naar kollom 0, rij 2 (eerste rij vakje 3?
  lcd.print("MENU 1");          // zet tekst "MENU 1" Neer.
  lcd.setCursor(2,1);           // zet cursor naar kollom 1, rij 2 (tweede rij vakje 3?
  lcd.print("MENU 2");            
  lcd.setCursor(2,2);         
  lcd.print("MENU 3");          // voorbeeld van het menu 
  lcd.setCursor(2,3);           
  lcd.print("MENU 4");          //  MENU 1      MENU 5
  lcd.setCursor(12,0);          //  MENU 2      MENU 6 
  lcd.print("MENU 5");          //  MENU 3      MENU 7
  lcd.setCursor(12,1);          //  MENU 4      EXIT
  lcd.print("MENU 6");
  lcd.setCursor(12,2);          // het menu ziet er nu uit op het lcd zoals hierboven afgebeeld.
  lcd.print("MENU 7");
  lcd.setCursor(12,3);
  lcd.print("EXIT");
 
}

void loop()
{
} 

/* ------------------------------------------------------------------------------- */

Ik heb er voormij zelf comentaar bijgezet.
Dit heb ik gedaan om het zelf ook te begrijpen.
Wat ik wel raar vind is als ik zeg setCurser(2.0); dan set hij het eerste letter op vakje 3 van regel 1
weet dat nul regel 1 is maar als ik dan zeg 2 zet hij de eerste letter op het derde vakje van de 20?

ik ga nu proberen om de code die ik had gemaakt voor de knop herkenning in dit menu te zetten.
Hou jullie op de hoogte!!

homedistiller:
Ik heb even op papier gezet wat je voorstelde met 4 lijnen 8 kollomen.
ik heb ook gelijk gelezen op google over setCursor.

Nou, dat was dus 4 lijnen en 2 kolommen en dus 8 items.
Dat heb je zo ook in je code gezet als commentaar.

In die code heb je het over kolommen en dat knoop je aan de setCursor functie.
Maar setCursor kent geen kolommen, die moet je zelf creëren en vertalen naar wat setCursor wel kent.

  lcd.setCursor(2,0);           // zet cursor naar kollom 0, rij 2 (eerste rij vakje 3? <- correct !
  lcd.print("MENU 1");          // zet tekst "MENU 1" Neer.
  lcd.setCursor(2,1);           // zet cursor naar kollom 1, rij 2 (tweede rij vakje 3? <- correct !
  lcd.print("MENU 2");            
  lcd.setCursor(2,2);         
  lcd.print("MENU 3");          // voorbeeld van het menu 
  lcd.setCursor(2,3);           
  lcd.print("MENU 4");          //  MENU 1      MENU 5
  lcd.setCursor(12,0);          //  MENU 2      MENU 6 
  lcd.print("MENU 5");          //  MENU 3      MENU 7
  lcd.setCursor(12,1);          //  MENU 4      EXIT
  lcd.print("MENU 6");
  lcd.setCursor(12,2);          // het menu ziet er nu uit op het lcd zoals hierboven afgebeeld.
  lcd.print("MENU 7");
  lcd.setCursor(12,3);
  lcd.print("EXIT");

Wat ik wel raar vind is als ik zeg setCurser(2.0); dan set hij het eerste letter op vakje 3 van regel 1
weet dat nul regel 1 is maar als ik dan zeg 2 zet hij de eerste letter op het derde vakje van de 20?

Nul is het eerste getal.
Dat geldt voor de regels, maar ook voor de positie op die regel (en vanaf nu voor alles).
Dus je hebt dan niet een bereik van 1 tot en met 20, maar van 0 tot en met 19.
De code die je hier gemaakt hebt klopt dus precies.
Zet voor de gein eens alleen een teken op positie 20 van regel 1 op je scherm, en kijk eens waar die dan terecht komt..

Tipje voor het symbooltje dat je gebruikt om aan te wijzen welk menu item actueel is (ik had het over het symbooltje ">").
Probeer eens met je pijltjes omhoog en omlaag op en af te tellen.
Daarbij kun je nooit lager dan positie 0 en nooit hoger dan positie 7 komen.
Je kunt wel overwegen om van positie 7 naar 0 te gaan en van 0 naar 7.
Verder moet je niet vergeten dat als je pijltje omlaag drukt, je een regel hoger wil uitkomen vanuit het oogpunt van setCursor.
Als je dat tellen bijhoudt, dan weet je ook welk menu item er gekozen is als er op enter of op links of rechts gedrukt word.

Antwoord op mijn eigen recentste bijdrage.

Ben je al wat verder, of ben je nu aan het genieten van het lekkere weer (eindelijk de BBQ tevoorschijn halen) ?

Ik antwoord op vragen onder anderen op dit board, omdat die mij ook tot nadenken aanzetten.
En dat ervaar ik dan meestal als ontspanning.
Zo ben ik er gisteravond laat nog even voor gaan zitten en heb voor mezelf wat in elkaar gefrutseld dat wel ongeveer doet waar jij naar vroeg en wat ik in mijn eerdere antwoorden bedoelde.
Een paar weken geleden heb ik voor iemand hier op het board een sketchje in elkaar gedraaid dat alle mogelijke tekens van het LCD van mijn LCD keypad shield laat zien.
Dat gebeurt door op de pijltjes toetsen te drukken, waarna het volgende of vorige teken getoond word samen met zijn decimale waarde.
Zo kwam ik er achter dat waarde 126 een pijltje naar rechts is, en waarde 127 een pijltje naar links.
Je kunt dus een pijltje op je scherm zetten door de waarde 126 naar de LCD te sturen i.p.v. de tekst ">" (dat is een pijltje zonder steeltje, 126 heeft wel een steeltje.
Aan de hand van de sketch waarmee ik die tekens opzocht, heb ik een indeling van 2 x 2 gemaakt op het 1602 scherm.
Omdat dit dus minder regels met minder tekens zijn, kan bij mij de tekst niet groter zijn dan 6 tekens (7 als het moet), en heb ik dus maar 2 regels.
Daarom zijn er 4 menu items.
Dat zijn Item1, Item2, Item3 en Exit.
Het kostte me ongeveer een uur om het navigeren onder controle te krijgen.
Daarbij kwam het pijltje op de juiste plaats terecht, en werd het oude pijltje verwijderd.
Met de toetsen pijltje op/neer navigeer ik nu naar de menu items.
Item2 staat onder Item1 en Item3 staat naast Item1.
Als ik voorbij Item4 (Exit) kom, kom ik terug bij Item1.
Het heeft me ongeveer anderhalf uur gekost om dat te maken.
Ik ben erg gecharmeerd van switch...case en dat kwam mooi van pas bij dat navigeren.

Vandaag heb ik een functie bedacht die ik met dat menu moest kunnen bedienen.
Item3 is nu gepromoveerd naar Dim.
Wanneer ik naar Dim ben gegaan (en alleen dan), kan ik met de pijltjes links / rechts het nivo van de LCD verlichting regelen in stapjes van 8.
Dat laatste omdat anders het verschil tussen de stappen veel te klein is.
De waarde van het Dim signaal kan niet lager worden dan 0 en niet hoger dan 255, want anders raakt het een en ander in de war.
Vanwege de beperkte ruimte is niet te zien welke Dim waarde er geldig is.
Het koste me iets meer moeite en de hulp van serial.print en de serial monitor om dat goed te krijgen, omdat er meerdere zaken gecontroleerd moeten worden voor je de dimmer gaat bedienen en een if... statement met 2 voorwaarden heb ik ook niet eerder in de praktijk gebracht.

Aangezien ik zelf ook een beginner ben (iets meer dan een half jaar bezig met Arduino en met "echt" programmeren), zijn dit ook leuke en leerzame oefeningen voor mij.
En dit ga ik zeker ook eens in een projectje gebruiken.
Volgende dat ik ga proberen is de Exit functie, waarbij ik dan op Exit moet gaan staan om dan op Select te drukken.
Na dat Select dient er iets anders op mijn scherm te verschijnen en pas als ik weer op Select druk zou dan het menu weer tevoorschijn moeten komen.
Er zijn nog wel wat dingen die ik hier kan uitproberen, zoals het gaan naar een tweede menu en zo.
En het menu dat ik nu gemaakt heb, moet eigenlijk in void.Menu dat dan op zijn beurt weer aangeroepen moet worden enzovoorts.
Maar eerst moet ik deze sketch een beetje opruimen omdat er nu al allerlei zaken uit vorige experimenten door mekaar staan.

Zo zie je maar dat jouw vragen ook anderen helpen, zelfs terwijl zij jou helpen.

Hoi mas3

Ik ben deze week weer begonnen met werken bij een nieuwe baas.
En heb het hierdoor erg druk gekregen.
Maar ik ben er wel nog mee bezig dit gaat alleen wat trager.
Morgen kan ik vier pt100 halen bij mijn kamaraat.
Dan kan ik kijken of ik deze kan uitlezen en de waarde op mijn lcd kan krijgen.
Ik bencerg benieuwd naar je code van je menu.

Ik kan op internet wel een paar codes vinden.
Alleen als ik deze dan wil controleren of uploaden.
Geeft het programma erg veel fouten aan.
Ik weet niet waar dit aan ligt?
Heb ik eindelijk erg vaak bij voorbeeld codes
Iemand hier een oplossing voir?
Ik gebruik software die ik gratis heb gedownload bij arduino sitete
Sorry voor de vele schrijf fouten.
Komt dat ik nu op mijn tablet zit.

Dus als iemand al eens gestoetd heeft met pt100 hoor ik het graag.
Ook moet ik ze nog in de distilleer ketel kunnen maken.
Hiervoor heb ik ook warpt tijd nodig.

Mvg rokf d

Hoi Rolf.

Gefeliciteerd met je nieuwe baan in deze lastige tijd om werk te vinden.
Dat typen op die virtuele toetsenborden pakt vaak anders uit dan bedoeld.

Houd er rekening mee dat je een waarde uit je pt100 krijgt die omgerekend moet worden naar een temperatuur.
Lang geleden heb ik op school tijdens de natuurkunde les geleerd hoe je een thermometer kunt kalibreren, en dat kun je ook bij deze oplossing doen.

De fouten die je tegenkomt bij voorbeelden, komen vaak doordat de sketches zijn geschreven voor een (veel) oudere versie van de IDE, en daarom niet meer kloppen.
Die fouten kun je wel oplossen, maar dat is vaak veel werk.
De IDE geeft je namelijk best wel goed aan wat er aan de hand is, en waar die fout ergens staat.
Maar dan moet je wel snappen wat er fout is en hoe dat dan veranderd moet worden.

Ik weet nog niet of ik de code van het menu hier zal neerzetten, want ik ben er eigenlijk wel voor dat je zelf (met wat aanwijzingen) uitvindt hoe dat gedaan kan worden en er zo serieus van leert.
Maar sowieso moet de code eerst nog opgeschoond worden (tussen de andere experimenten door, heb hier nu drie verschillende versies van Arduino op m'n buro liggen met verschillende experimentjes).

Leuk dat je me elke keer opweg helpt.

De eerste week zit er weer op.
Bevalt goed en ben weer een beetje gewent met mijn tijd in te delen.
Vandaag ben ik begonnen naar een eenvoudige code voor mijn pt100.
het is een exemplaar met drie draden 1 wit en twee roode draden.
Helaas is hier weinig over te vinden.
Waarom een eenvoudige code?
Dan kan ik er mee gaan stoeien en wat aan veranderen om de code te leren te begrijpen.
Ook ben ik nog naar tips opzoek om mijn menu af te maken.
Ook hier kan ik eindelijk haast niks over vinden.
Dus als iemand weet waar ik het een en ander kan vinden over deze onderwerpen.
Hou ik me aanbevolen.

tot zo ver nu
Nu veel zoeken op google.

mvg Rolf

Hoi weer.

Nou, ik heb in de tussentijd lekker gespeeld.
Voordeel van ergens de tijd voor nemen, is dat je (bijvoorbeeld onderweg met de auto naar een klus) lekker kunt brainstormen over struikelblokken die je bent tegen gekomen.
Zojuist heb ik mijn menuutje afgemaakt en doet het ding nu wat ik zo ongeveer in gedachten had.
In eerste instantie wilde ik iets maken dat een menu functie aanroept, en was ik dus druk in de weer met het bedenken hoe je waardes kunt overhevelen (heen en weer) tussen een functie en void loop().
Maar voor jouw toepassing wil je natuurlijk helemaal de loop niet verlaten.
Want dan controleer je niet meer de verschillende temperaturen, tijden en pompen.
Dus zit nu alles in void loop() en worden er wat variabelen ingezet om te kijken of een stukkie code uitgevoerd of overgeslagen moet worden.
Zoals de code nu is, lopen de processen dus gewoon door, word het display en toetsenbord voor het proces gebruikt.
Word op het select knopje gedrukt, dan verschijnt er een menu.
In dat menu kan men een andere taal kiezen (Engels, Duits, Frans, Spaans en Nederlands).
Men kan kiezen of er wel of niet de achtergrond verlichting moet knipperen als er op een knopje word gedrukt.
Men kan de helderheid van de achtergrondverlichting instellen (en dan blijft de al dan niet ingeschakelde knipper functie op dezelfde wijze functioneren).
En men kan het menu verlaten om vervolgens weer terug te komen waar men was.
Dat alles kan doordat er voldoende waardes worden bijgehouden.

Omdat ik hierbij niets anders dan een Uno en een LCD keypad shield heb gebruikt, kan ik ook niet aantonen dat de processen naast het actieve menu door blijven lopen.
Daarvoor zou er nog iets gedaan moeten worden met bijvoorbeeld potmetertjes en ledjes ofzo.

Voor mij was dit weer een leerzame oefening, iemand anders mag beoordelen of het niet wat beter en of netter kan.

Eens kijken of ik de code hier kan invoegen.

Hmm nee dat lukt niet.
Volgende poging, anders moet ik er aan plakken.

Plakken dus...

LcdKeyShieldDX_Menu_Dim_Lang_Flash.ino (11.3 KB)

sorry voor de late reactie.

Ben gelijk aan de gang gegaan met je menu.
Heb een dag of twee gestoeid en heb het een en ander veranderd.
weet nu ook aardig hoe het menu opgebouwd word en gelezen.
Heb de vier menu items onder elkaar gezet.
Omdat het bij mijn 20x4 lcd mooier is.
Nadat ik dit had gedaan klopte het aanwijzen met de arrow niet meer.
na een tijd te hebben gezocht dit ook kunnen aanpassen.

wat ik niet helemaal snap is de dim functie.
als ik deze kies en druk op piiltje rechts gaat het lcd verlichting uit.
en als ik naar links duw word hij weer steeds lichter.
Wat ik graag zou zien is pijltje naar links in stappen van 8 donkerder
en pijltje naar rechts in stappen van 8 lichter.
heb al een hoop veranderd maar krijg dit niet voor elkaar?
iemand hier een idee voor?

Wat ik nu graag zou willen doen is flash veranderen voor beeper on/off
zodat er kan gekozen worden om een geluidje te horen bij het indrukken van een toets of niet.
iemand hier een idee voor?

ook ga ik nu proberen of ik het menu kan veranderen zodat ik nog een keuze optie er tussen kan zetten.
met als mogelijkheid een relay aan of uit te zetten.
Als ik dit voorelkaar kan krijgen ben ik weer een stapje veder met leren.
Hierdoor gaan er nog meer mogelijkheden voor me open.
Heb namelijk een relay bord met 4 uitgangen.
Deze zou ik dus kunnen gebruiken om de koelwaterpomp aan en uit te zetten.

hier de code hoe ik hem nu heb.
let op dit is een probeer menu geworden.
Waar ik in het een en ander kan bij of weghalen.

bedankt alvast weer mas3

heb hem bijgevoegd als bestand
te groot aan karakters als code :wink:

LcdKeyShieldDX_Menu_Dim_Lang_Flash.ino (11.2 KB)

Ik heb m nog niet bekeken, maar het is raadzaam om de code na aanpassen naar jouw wensen, een andere naam te geven bij het opslaan.

De dimmer werkt bij mij precies zoals jij beschrijft het te willen laten werken, dus bij mij maakt ie wel stapjes.
Dat gaat wel eens fout, en dat heeft te maken met hoe toets "rechts" werkt (die zit namelijk direct aan GND, en niet met nog een weerstand ertussen), en hoe er gecontroleerd word op toetsdrukken.
Niet alle LCD's laten de dim functie besturen via PWM, waardoor de verlichting aan of uit gaat, maar niet mooi dimt.
Maar omdat omhoog wel goed schijnt te gaan, moet omlaag ook kunnen.

De flash functie is bijna klaar om te dienen als beep, ik heb die namelijk met die mogelijkheid in het achterhoofd erin gemaakt.
Daarvoor hoef je maar heel weinig te veranderen, namelijk het aansturen van een andere pin dan de Dim pin.
De rest daarvan kan zo ongeveer hetzelfde blijven (je kunt ook de lengte van de piep aanpassen).
O ja, je hoeft voor de piep natuurlijk geen huidige waarde te nemen en die te delen door 8, want het piepje is aan of uit.
Je kunt wel experimenteren met een lager volume voor een menu piepje als bij een alarm event.
Ik ga er van uit dat je de pieper ook wil gebruiken om een alarm weer te geven, dus zou je die pin al gedefinieerd moeten/kunnen hebben.

Het is niet erg moeilijk om menu opties toe te voegen, maar wel een beetje werk.
Daarvoor moet je wel wat extra zaken aanpassen, en je bent er inmiddels achter dat weergave van de items en het pijltje twee verschillende zaken zijn.

ja ben er erg blij mee.
Ook dat het zelf lukt.
ben nu met de buzzer bezig.
ook wil ik nu een relay bord toevoegen en kijken hoe ik die kan aansturen.
Het moeilijkste word de pt100 uitlezen en gebruiken.
Ben nu al twee weken aan het zoeken voor een simple code maar niks bruikbaars gevonden.
Wel veel draadjes er over maar niet met een werkend resultaat.
meschien dat ik toch met de dallas sensors aan de gang ga (digitaal)
hou jullie op de hoogte

mvg Rolf

De PT100 is veel simpeler aan te sluiten als een digitale variant, want je kunt m aansluiten als een weerstand.
Maar hij is wel gevoelig voor de juiste polariteit, dus je moet "plus en min" wel goed aansluiten.
De twee rode draadjes hebben hetzelfde signaal.
Het zijn er twee zodat je kunt vaststellen wat het verschil tussen de twee draden is om de nauwkeurigheid te vergroten (doordat je een afwijking veroorzaakt door het draadje kunt meten), maar dat hoeft niet per se.
Als je die compensatie niet wil doen mag je de twee draadjes samen aansluiten, zo heb ik begrepen.

Los daarvan is die ook nog eens veel eenvoudiger in jouw distilleerapparaat in te bouwen.
Dat past er zo in, je hoeft er "alleen maar" een extra invoer voor te maken en die na het insteken van de sensor weer gasdicht te maken.
De sensor zelf is normalerwijze voorzien van een RVS behuizing, je moet zelf nog nagaan of deze ook "food grade" is.

De PT100 is er in veel varianten, en daarom kun je er niet veel eenduidends over vinden.
Je zal van je bron de fabrikant moeten proberen te achterhalen om er zeker van te zijn dat je met passende gegevens gaat werken.
Wat ik gezien heb, is dat er vaak een LM235Z inzit.
Dat ding geeft 10 mV per graad Kelvin.
Kelvin is lineair met Celsius, maar nul celsius is 273,15 Kelvin.
Dat betekent dat je bij kamertemperatuur een waarde van ((273.15 + 20)*0.01) = 2.93 volt hebt, en bij kokend water heb je 3.73 volt.
Dat zijn kleine stapjes per graad.
Je wil waarschijnlijk meten in een ander bereik waarbij de laagste temperatuur hoger ligt dan kamertemperatuur, en de hoogste die een stuk hoger ligt dan 100 graden.
In dat geval zou je wat extra elektronica moeten toepassen zodat de daarbij behorende waardes worden omgezet naar een bruikbaar bereik voor de Arduino.
Je kunt wel tot zo'n 220 graden meten in een bereik van 5 volt, maar dan heb je dus 22000 stappen van je A/D omzetter nodig, en die heb je niet.
Je hebt 1024 stappen, en das inclusief nul.
Het probleem hierbij is dat je elektronica die deze versterking zou gaan doen, waarschijnlijk een grotere afwijking zal hebben dan de sensor.
Maar goed, dan lopen we wel al ver vooruit op de zaken.
Eerst maar eens met zekerheid zien uit te vinden wat je in huis hebt.

Welk temperatuurbereik wil je eigenlijk meten ?

Hoi het is een heel eind gelukt nu.
Ik heb een buzzer kunnen toevoegen in het menu inplaats van flash.
Deze piept nu bij het induwen van een toets deze kan ik ook aan en uitzetten in het menu.
nu is het me ook gelukt om de menu items onder elkaar te zetten (4 regels)
en er een item aan toe te voegen.
zoals hieronder

Ned Pomp
Buzzer
Dim
Exit

nu is het ook gelukt om de cursor netjes over het menu te laten lopen dus ook voor pomp.
Alleen krijg ik het niet voor elkaar om hier een digitale uitgang bij te voegen.
Die ik op hoog of laag kan zetten.
Zodat ik hiermee een relay kan aansturen voor de koelpomp.
Iemand een idee dit op te lossen?

Het temperatuur bereik van de sensors hoeven niet zo hoog te liggen.
Van 5 graden tot max 105 graden.
Het liefst in stappen van 98.1 98.2 98.3 dus met een cijfer achetr de komma.

ik heb de code tot nu toe bijgevoegd als bestand nieuw menu

mvg Rolf

nieuw menu.ino (13.1 KB)

Hoi.

Ik heb je bestand gedownload.
Het bestand kan niet geopend worden omdat je spaties in de naam hebt staan en dat is niet toegestaan.
Daarom heb ik de spatie voor mijn eigen gebruik vervangen door een _ , en nu kan het wel geopend worden.
Je definieert pin 11 voor de buzzer op een voor mij wat vreemde plaats.
Niet zozeer omdat je dat in de loop doet en dus elk rondje opnieuw, maar wel omdat je dat achter een voorwaarde doet.
Die voorwaarde is dat mm (staat voor menu mode) op 1 staat en dat betekent dat het menu niet actief is, en het scherm wel al helemaal in de normale stand staat).
In mm 0 is het menu ook niet actief, maar moet het normale scherm nog gebouwd worden na het verlaten van het menu.
In mm 3 is het menu wel actief maar moet dat menu nog gebouwd worden op je scherm.
En in mm 4 is het menu actief en je scherm opgebouwd.

Ik zou de buzzer pin niet telkens opnieuw definiëren, maar dat globaal doen daar waar de andere zaken ook gedefinieerd zijn.
Dan heb je een Item 6 aangemaakt, maar je hebt 5 menu items en je laat het pijltje ook correct van item 5 naar item 1 gaan.
Dat gaat niet werken, want je gaat op die manier nooit menu item 6 bereiken.
Bovendien heb je daarvoor de dim functie gekopieerd.
Wanneer je hier de pomp mee wil bedienen, zou ik de functie van flash daarvoor kopiëren, of eigenlijk je functie voor de buzzer.
De pomp is namelijk voor je menu niets anders dan je buzzer, maar dan wel op een andere pin en zonder de korte tijd dat je die wil laten gaan, en die korte tijd stel je dus niet in het menu in, maar in het hoofdprogramma.
Dus zou ik naast de pin voor de buzzer, ook nog pinnen voor de pomp(en) en voor je temperatuursensoren reserveren, en ik zou dat net onder de andere reserveringen doen.
Dan nog voor je pomp een waarde om bij te houden of die al ingeschakeld is of niet, zodat je die bij een volgende ronde kunt aanpassen, maar ook wanneer je hoofdprogramma besluit de pomp in of uit te schakelen.
Dan kun je het menu stukje voor de buzzer kopiëren naar item 5 en daar aanpassen zodat het je duidelijk is dat het daar om de pomp gaat.
Het echte in- of uitschakelen van de pomp zou ik dan weer in het hoofdprogramma doen, en dus verder onafhankelijk van het menu, maar wel beïnvloedbaar door dat menu.
De uitdaging daar ligt er dus in dat je dat stapje altijd doet, en dus onafhankelijk van de waarde van mm (dat is ook hetzelfde als de buzzer).

Houd er verder rekening mee dat je de commentaren ook bijhoud.
Haal niet (meer) kloppend commentaar ook weg, anders is dat alleen maar verwarrend.

Weer een stukkie om aan te werken, succes.

heb het menu nog even opgeruimd.
Ik krijg alles voor elkaar alleen niet als ik in het menu pijl naar rechts of links gebruik.
Zodat pin 7 hoog of laag word.
Ik heb de laatste keer geprobeerd als in de code die ik toevoeg als bijlage.
Ik heb op digital uit 7 een ledje zitten en naar de massa dit moet toch kunnen de led is heel :wink:
Wie kan mij helpen?

mvg rolf

LcdKeyShieldDX_Menu_Dim_Lang_Flash.ino (12.1 KB)