Pid huzatvezérlés nyomás függvényében (Nextion LCD)

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
Sploc
Újonc
Újonc
Hozzászólások: 6
Csatlakozott: 2016. április 14. csütörtök, 8:43

Pid huzatvezérlés nyomás függvényében (Nextion LCD)

Hozzászólás Szerző: Sploc »

Sziasztok,

Adott egy Arduino Mega 2560-as panel, egy 7 colos Nextion tapis LCD, három darab Max6675k hőmérő, illetve egy nyomásmérő 0,5-5V kimenettel ami 0-30 PSI között mér plusz egy Nema 17-es léptetőmotor.
A vezérlési feladat amit el kell látnia az mérni, és folyamatosan megjeleníteni a kijelzőn a hőmérséklet értékeket, a nyomásmérőtől kapott adatra pedig PID vezérléssel egy huzatajtót mozgat, illetve beállított értéken tart.
A program végleges változata még odébb van, jelenleg ott tartok, hogy kettő darab hőmérsékletet, és a nyomásértéket folyamatosan meg szeretném jeleníteni a kijelzőn.
Elkezdtem bíbelődni a "sisak" nevű hőmérővel, a többi érték beállítása még nem történt meg, mivel ez sem működik megfelelően.

A program működik, soros monitoron minden szépen látszik is, de a kijelzőre nem jut ki a mért érték, vagy ha igen, akkor is csak egyszer.( ha lehúzom az LCD tápját és visszaadom) A csatolt képen továbbá az is látszik, hogy ha a sisak értékre ugyanazt méri mint az előző, akkor nem küld újabbat.

Tudnátok ebben segíteni, hogy az LCD-re miért nem jut ki adat? ( az 50,22 érték azt jelenti, hogy nem kapott adatot írhattam volna error-t is )



A kód:



#include <max6675.h>
float sisak;
float sisakold;
float sisaknew;
float cefre; //Hőmérséklet változók

int pressureIn = A0;
int sensorValue = 0;
float barValue = 0;
int Pressure = 0; //Nyomásméréshez szükséges változók


int T0_gnd = 45;
int T0_vcc = 47;
int T0_so = 53;
int T0_cs = 51;
int T0_sck = 49; //Max6675 K-hőelemhez szükséges lábkiosztás

int T1_gnd = 33;
int T1_vcc = 35;
int T1_so = 41;
int T1_cs = 39;
int T1_sck = 37; //Max6675 K-hőelemhez szükséges lábkiosztás




MAX6675 thermocouple(T0_sck, T0_cs, T0_so);
MAX6675 thermocouple1(T1_sck, T1_cs, T1_so); //Max6675 K-hőelem könyvtárához kell


void setup() {
Serial.begin(9600); // Soros port nyitás
pinMode(T0_vcc, OUTPUT);
pinMode(T0_gnd, OUTPUT);
pinMode(T1_vcc, OUTPUT);
pinMode(T1_gnd, OUTPUT);
digitalWrite(T0_vcc, HIGH);
digitalWrite(T0_gnd, LOW);
digitalWrite(T1_vcc, HIGH);
digitalWrite(T1_gnd, LOW); // Kimenetek beállítása, hőelemek táp alá

}

void loop() {


sisaknew = (thermocouple.readCelsius()); // Hőmérséklet érték beolvasása

(Serial.available()>1); // bevallom nem tudom mi célt szolgál egy másik működő mérésemben benne volt

if (sisaknew==sisakold)
{;}

else
{ sisakold=sisaknew; // szintén nem tiszta a dolog, hogy miért kell az if, else kombó de a másik mérésem csak így működött.
sisak=sisaknew;


Serial.print("sisak.txt="); // a nextion sisak.txt=**** néven várja a kiírandó adatot
Serial.write(0x22);
Serial.print(sisak);
Serial.write(0x22);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff); // szintén a várt formátum miatt szükséges
}


cefre = (thermocouple1.readCelsius()); // mivel az első hőmérséklet sem tökéletes, ezért nem csináltam tovább, de a soros monitoron így is jön
sensorValue = analogRead(pressureIn);
Pressure = map(sensorValue, 0, 1023, -28, 272);
barValue = Pressure * 0.006895;


Serial.print("cefre.txt=");
Serial.print(cefre);
Serial.print("press.txt=");
Serial.println(barValue);


delay(1000);
Nincs meg a kellő jogosultságod a hozzászóláshoz csatolt állományok megtekintéséhez.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Pid huzatvezérlés nyomás függvényében (Nextion LCD)

Hozzászólás Szerző: kapu48 »

Elsőre kellene Nextion lib!
Én ezt találtam: https://github.com/bborncr/nextion
Telepíteni, megnézni a minta alkalmazásokat!
Aztán be kelene hivni:

Kód: Egész kijelölése

#include <Nextion.h>
//Hova kötötted??? Példányosítani kel:
Serial1 nextion(18, 19);// Nextion TX1 to pin 18 and RX1 to pin 19 of Arduino Mega
Nextion myNextion(nextion, 9600); //create a Nextion object named myNextion using the nextion serial port @ 9600bps

void setup() {
  Serial.begin(9600);
  myNextion.init();	// Üzembe helyezés!

}

void loop() {

// feliratot kirakni
  myNextion.setComponentText("t0", "Hello");
  delay(1000);
  int value = 1234;
  myNextion.setComponentText("t0", String(value));
  delay(1000);
  
}
Ezek mind hiányoznak a programodból!

Első Google találat: http://openhardware.gridshield.net/home ... or-arduino
Sploc
Újonc
Újonc
Hozzászólások: 6
Csatlakozott: 2016. április 14. csütörtök, 8:43

Re: Pid huzatvezérlés nyomás függvényében (Nextion LCD)

Hozzászólás Szerző: Sploc »

Köszi a választ, próbáltam az általad is említett megoldást, és a mintaalkalmazást is. Ellenőrzés közben hibára fut a

Nextion myNextion(nextion, 9600);

soron, hogy :

error: 'myNextion' was not declared in this scope

exit status 1
'Nextion' does not name a type
Sploc
Újonc
Újonc
Hozzászólások: 6
Csatlakozott: 2016. április 14. csütörtök, 8:43

Re: Pid huzatvezérlés nyomás függvényében (Nextion LCD)

Hozzászólás Szerző: Sploc »

Megvan! Köszönöm a választ, rossz volt a nextion lib amit használtam.... Nem tudom honnan szedtem... Félrevezetett egy olyan példaprogram amit a Nextion könyvtár nélkül is lehetett használni. De így lényegesen egyszerűbb. A kód, ha később szükségeltetik valakinek.

Kód: Egész kijelölése

#include <SoftwareSerial.h>
#include <Nextion.h>
#include <max6675.h>

SoftwareSerial nextion(18, 19);// Nextion TX to pin 2 and RX to pin 3 of Arduino
Nextion myNextion(nextion, 9600); //create a Nextion object named myNextion using the nextion serial port @ 9600bps

float sisak;
float cefre;           //Hőmérséklet változók

int pressureIn = A0;
int sensorValue = 0;
float barValue = 0;
int Pressure = 0;      //Nyomásméréshez szükséges változók


int T0_gnd = 45;
int T0_vcc = 47;
int T0_so = 53;
int T0_cs = 51;
int T0_sck = 49;        //Max6675 K-hőelemhez szükséges lábkiosztás

int T1_gnd = 33;
int T1_vcc = 35;
int T1_so = 41;
int T1_cs = 39;
int T1_sck = 37;       //Max6675 K-hőelemhez szükséges lábkiosztás




MAX6675 thermocouple(T0_sck, T0_cs, T0_so);
MAX6675 thermocouple1(T1_sck, T1_cs, T1_so);    //Max6675 K-hőelem könyvtárához kell


void setup() {
  Serial.begin(9600);         // Soros port nyitás
 myNextion.init();
 
  pinMode(T0_vcc, OUTPUT); 
  pinMode(T0_gnd, OUTPUT); 
  pinMode(T1_vcc, OUTPUT);
  pinMode(T1_gnd, OUTPUT);
  digitalWrite(T0_vcc, HIGH);
  digitalWrite(T0_gnd, LOW);
digitalWrite(T1_vcc, HIGH);
digitalWrite(T1_gnd, LOW);                // Kimenetek beállítása, hőelemek táp alá
  
}

void loop() {



  sisak = (thermocouple.readCelsius());  // Hőmérséklet érték beolvasása
  cefre = (thermocouple1.readCelsius());   
  
  sensorValue = analogRead(pressureIn);
  Pressure = map(sensorValue, 0, 1023, -28, 272);
  barValue = Pressure * 0.006895;                   //Nyomás érték átszámítása Bar-ba

myNextion.setComponentText("sisak", String(sisak));
myNextion.setComponentText("cefre", String(cefre));
myNextion.setComponentText("press", String(barValue));  // Adatok kiküldése a kijelzőre
  
  Serial.print("cefre.txt=");
  Serial.print(cefre);
  Serial.print("press.txt=");
  Serial.println(barValue);                // Soros portra küldés
  
   
  delay(1000);

}
Válasz küldése