Nextion ijken?

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Nextion ijken?

Berichtdoor benvo » 03 Mrt 2017, 19:02

Hallo allemaal,

Mijn Nextion scherm is weliswaar besteld maar nog niet binnen. Het is nooit verkeerd, zo lijkt me, om alvast rond te neuzen hoe e.e.a. moet gaan functioneren wat het scherm zelf betreft en hoe de koppeling met Arduino moet gaan werken.
Daarbij ben ik ook bezig om een aantal ronde meters te maken die ik later graag op het scherm zou zien. Deze maak ik in Inktscape een tekenprogramma dat met lagen kan werken en zich hier uitstekend voor leent. Op deze meters komt een schaalverdeling. Op een Nextion is het mogelijk om, later, in de gemaakte meters een wijzer te zetten. Maar; hoe ijk je deze meters dan passend op de te gebruiken schaalverdeling?

Groet,
Ben.

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Nextion ijken?

Berichtdoor nicoverduin » 03 Mrt 2017, 19:43

Alles is in pix. Zoals Koepel al eerder zei is het het handigst om een scherm volledig te maken met alles uit.
Overigens kun je alles op de editor zetten. Die schermen zijn op maat. Dus je kunt daar een volledig scherm maken met de juiste afmetingen ed.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: Nextion ijken?

Berichtdoor benvo » 04 Mrt 2017, 18:10

Dank je voor je reactie, Nico.

Alles is in pix. Zoals Koepel al eerder zei is het het handigst om een scherm volledig te maken met alles uit.
Overigens kun je alles op de editor zetten. Die schermen zijn op maat. Dus je kunt daar een volledig scherm maken met de juiste afmetingen ed.



Dat had ik begrepen, Nico. Ook mijn meters heb ik gemaakt in Pix. Het zijn eigenlijk ronde achtergronden waar ik, later, middels de Nextion wijzers opzet. Maar ik bedoelde eigenlijk iets anders. Zo maakte ik een ronde temperatuurmeter met een schaalverdeling van 0 graden Celsius tot 50 graden Celsius. Nu zou het dus leuk zijn als ik straks een temperatuur van, laten we zeggen, 25 graden meet dat de wijzer dan ook op 25 staat en niet op een andere plek. Hoe vertel ik dat aan de Nextion of m.a.w. hoe ijk je zoiets?


Groet,
Ben.

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

Re: Nextion ijken?

Berichtdoor Koepel » 04 Mrt 2017, 19:28

Misschien is "ijken" niet het juiste woord, het woord is "wiskunde" ;)

Een Nextion Gauge heeft een integer getal voor de graden, van 0 tot 359. Nul graden is 9 uur, 90 graden is 12 uur enzovoorts.
Je kunt daarom het beste een gauge achtergrond nemen waarbij er op 9 uur en op 3 uur een geheel getal staat.

Stel dat je een onmogelijke gauge achtergrond hebt gevonden.
Dan leg je in de Nextion Editor de Gauge er bovenop, en je bepaalt het middelpunt van de meter, de nul stand en de maximale stand. Aan de rechterkant kun je de waarde van de graden invullen, en dan wordt de wijzer aangepast.
In mijn voorbeeld bleek 47 graden de nul stand te zijn, en 135 graden is de maximale stand van 750.

Ik neem even aan dat het een drukmeter is (geen idee).
Gelukkig is het plaatje van de drukmeter lineair, anders kwam er ook nog curve fitting bij :shock:
Dus de waarde op de drukmeter varieert van 0 tot 750, en de Nextion Gauge waarde varieert van 47 tot 135.

Als je even niet naar de offset kijkt, dan is de range van de druk 750, en dat komt overeen met de range voor de graden van (135-47).

Ik werk eerst de eenheid druk weg (delen door druk range) en dan maak ik er graden van (vermenigvuldigen door graden range).
Dan nog de offset er bij.
Code: Alles selecteren
float druk;  // geen offset, van 0 ... 750
float graden = (druk / 750.0 * (135.0 - 47.0)) + 47.0;
int degrees = int( graden);
De integer waarde 'degrees' wordt dan naar de Gauge gestuurd.

Afbeelding: http://www.loc.gov/pictures/item/ca1520.color.570088c/
Bijlagen
TestGauge_Editor.png
TestGauge_Editor.png (80.66 KiB) 7383 keer bekeken
TestGauge_detail.jpg
TestGauge_detail.jpg (20.99 KiB) 7383 keer bekeken

Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: Nextion ijken?

Berichtdoor benvo » 05 Mrt 2017, 17:44

Afbeelding
Afbeelding

Dank je wel, Koepel. Een paar plaatjes van de achtergronden zoals ik ze maakte in een tekenprogramma.
Je ziet dat mijn meters inderdaad lineair worden, de licht meters van 0 t/m 100%. De temperatuurmeter van 0 t/m 50 graden Celsius. De hoek, graden, zal anders worden dan in jouw voorbeeld aangezien mijn naalden/wijzers vanuit het middelpunt van de meters zullen draaien. Maar ik begrijp de werking nu. Mijn eerste gedachte was dat ik dit in mijn Arduino sketch zou moeten zetten waarbij ik het gelijke idee had. De nulstand bepalen en de maximale stand en van daaruit elke plek op de schaalverdeling te verkrijgen. Maar het is heel fijn dat dit vanuit de Nextion kan. Ook al omdat er nog veel te doen zal zijn met mijn uiteindelijke bedoelingen en besparingen in mijn Arduino geheugen welkom zijn. Mijn Nextion zal ik overigens laten samenwerken met een Arduino Mega.

Groet,
Ben.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Nextion ijken?

Berichtdoor nicoverduin » 05 Mrt 2017, 18:37

Mooie schalen!!!!!
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: Nextion ijken?

Berichtdoor benvo » 05 Mrt 2017, 19:46

Dank je wel!

Groet,
Ben.

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

Re: Nextion ijken?

Berichtdoor Koepel » 05 Mrt 2017, 20:12

Even mijn geodriehoek tegen het scherm houden... het zal toch geen toeval zijn dat je schaal van -45 tot +225 graden loopt ? (die graden is wanneer 9 uur nul graden is). Heb je dat ingevuld in het tegenprogramma ?

De Nextion Gauge heeft hele integers voor de graden, dus dat zijn 270 graden = 270 stappen op jouw schaal. Je temperatuur schaal heeft 50 stapjes, dus tussen de streepjes kan de Nextion Gauge nog 5.4 stapjes maken, oftewel 0.185 °C per stapje. Daar lijkt me niets mis mee.

De Nextion Editor pakt geen negatieve graden, dus misschien is dit nodig:
Code: Alles selecteren
if ( degrees < 0)
{
  degrees += 360;
}


Bij de graden zou je de echte temperatuur kunnen begrenzen van -2 tot +52 °C. Op die manier komt dan de wijzer als het ware klem in de hoek te staan, voorbij de schaal. Voor de omrekening maakt dat niet uit, de schaalverhouding en de offset blijven hetzelfde.
Stel dat je temperatuur sensor het niet meer doet, dan kun je de wijzer op de schaal laten zakken tot -2 °C, dat zie meteen dat hij klem in de hoek staat en er misschien iets mis mee is.

Verwijder de eenheid temperatuur door te delen met de range van de temperatuur. Maak er graden van (de graden van een hoek) door te vermenigvuldigen met de range van de graden. Corrigeer voor de offset.
Toevallig begint ook hier de schaal bij nul, dus de temperatuur heeft geen offset.
Code: Alles selecteren
// Temperature (linear)
// temperature = 0, angle = -45 degrees
// temperature = 50, angle = +225 degrees.
// range of temperature is 50
// range of angle is 270 (225 + 45)
float temperature;
float angle = ( temperature / 50.0 * 270.0 ) - 45.0;
int degrees = int( angle);

Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: Nextion ijken?

Berichtdoor benvo » 05 Mrt 2017, 20:52

Dank je wel, Koepel.

Dit is erg interessant om alvast te lezen. Als er iets mis gaat met de meting geeft mijn sensor -127 graden aan. (DS 18b20 sensor) Nu weet ik nog niet precies hoe maar ik denk erover om dan een "Error" melding te geven. Dit zou ook op mijn getekende schaal kunnen als ik midden onder nog een blokje maak waar de tekst dan rood oplicht. De schalen zijn bewust zo gemaakt omdat ik dacht de 0 stand en de 50 graden staan vast te leggen in mijn Arduino sketch zijnde op -45 en 225 graden. Dat leek me het makkelijks te programmeren. (Eerst ging ik uit van 0 en 360 graden maar dan kan natuurlijk niet, zelfde plek.) Maar nu heb je me vertelt dat dit, eenvoudiger zoals ik het zie, via de Nextion kan. Ik wist niet dat de Nextion geen negatieve graden pakt dus je tip is handig! Omdat deze meters gebruikt zullen worden voor een Aquarium zal de temperatuur altijd zo rond de 26 graden liggen. Daarom ook deze schaalverdeling. Nog even, voor een goed begrip, jij geeft aan om de te gebruiken temperatuur af te bakenen op -2 graden beneden mijn 0 stand en +2 graden boven mijn maximale gradenstand. Maar je zei ook dat de Nexion geen negatieve metingen kan verwerken daarom je omzetting naar een plus getal die je ook aangaf. Waar zet hij dan de naald, in het geval van -2? Dat zou 360 graden kunnen zijn recht naar onderen?

Fijn dat je me al zo helpt. Zelf lees ik veel over de Nextion, omdat hij nog niet binnen is kan ik nog weinig proberen. Met veel interesse heb ik ook het programma gelezen waar Nico mee bezig is. Hopelijk wordt me snel helemaal duidelijk wat precies de verbeteringen zijn waar hij zo hard aan werkt.

Groet,
Ben.

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

Re: Nextion ijken?

Berichtdoor Koepel » 05 Mrt 2017, 21:34

Het wordt duidelijk :D als je maar eerst eenvoudig begint met slechts één ding op het scherm.

Ik vind zelf een wijzer die klem in de hoek zit mooier, dus zo'n -2 °C.
Als jij een (bungelende) wijzer recht naar onder mooier vind, dan kun je ofwel de temperatuur bepalen die daar bij hoort, ofwel een uitzondering maken voor een temperatuur error. De Nextion Gauge heeft 270 voor de wijzer op 6 uur.
Wat dacht je van een wild ronddraaiende wijzer ? Of helemaal geen wijzer ? Je kunt een sendCommand() doen met commando 'vis' om de wijzer onzichtbaar te maken.
Je kunt ook een touch event toevoegen, dus dat je de hele tijd op de wijzer moet tikken om de wijzer los te maken. Maar misschien draaf ik nu een beetje door :mrgreen:

Die -127 °C zit in de bibliotheek. Als de sensor niet gevonden wordt, dan wordt -127 ingevuld.

Het zou zo iets kunnen worden.
Code: Alles selecteren
int degrees;

if( temperature < -100.0)   // is it -127.0  (DS18B20 error)
{
  degrees = 270;   // Nextion Gauge straight down
}
else
{
  // ---------------------------------------------
  // begrens de temperatuur
  // ---------------------------------------------
  if( temperature > 52.0)
  {
    temperature = 52.0;
  }

  if( temperature < -2.0)
  {
    temperature = -2.0;
  }

  // ---------------------------------------------
  // Zet om naar graden voor Nextion Gauge
  // ---------------------------------------------
  // Temperature (linear)
  // temperature = 0, angle = -45 degrees
  // temperature = 50, angle = +225 degrees.
  // range of temperature is 50
  // range of angle is 270 (225 + 45)
  float angle = ( temperature / 50.0 * 270.0 ) - 45.0;
  degrees = int( angle);
  if( degrees < 0)
  {
    degrees += 360;
  }
}


Meerdere componenten over elkaar heen is geen probleem. Maar bij een update van het ene component wordt het andere component overschreven. Er wordt dus geen rekening mee gehouden dat ze over elkaar heen liggen. Je kunt dus een rode error tekst op de wijzer zetten. Die kun je onzichtbaar maken, of geen tekst of spaties invullen. De wijzer werkt dan gewoon. Bij een temperatuurfout kun je de wijzer onzichtbaar maken en de rode error tekst invullen. De achtergrond van tekst overschrijft dan ook wat er onder stond. Een tekst heeft namelijk een rechthoekig veld met de tekst in voorgrond kleur, en de achtergrond is meestal het achtergrond plaatje van het display. Maar dat is voor later, zorg eerst maar dat het normaal werkt 8-)

Volgende

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 16 gasten