Fórum témák

» Több friss téma
Fórum » Arduino
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Lapozás: OK   361 / 850
(#) jeges válasza berkesandor hozzászólására (») Júl 15, 2017 /
 
Annyit gondolok hogy 2 diagramnak szinte lineárisnak kell leni egymásal minél simább akor jo a pid értékeke kalkulácio ha jol gondolom?

pid.xls
    
(#) berkesandor válasza jeges hozzászólására (») Júl 15, 2017 /
 
Jól gondolod, ez működni is normál esetben.
De itt egy 50 mm magas, 40 mm külső átmérőjű (poharat) fűtök, egy 300W os fűtéssel. (ez nagyon túl van méretezve, de ennek ilyennek kell lenni).
Mivel a pohárnak is van hőtehetelensége, és annak is kell egy pici idő amíg a hőmérő szenzor átmelegszik, bekapcsolja hűtést pár másodpercre és túllő 10 fokot, hiába nem fűt már a hőfok még szalad felfelé.
Ezért a setpointhoz közel csak nagyon óvatosan lehet fűteni.
Ha első felfűtésnél óvatosan fűtök, kell 7-8 perc mire felfűt, azt meg sok.
(#) jeges válasza berkesandor hozzászólására (») Júl 15, 2017 /
 
Muternek szeretnnék már csinálni egy Csoki temperáló eszközt aminek 2 fázisa van csoki olvasztás ez idore anyi amenyi 50..60c de a temperálási idö ami fontos vissza hütés és 28..33c tarása pid jolene ehez nagyon!
Most sima ki be hisztézis van szabályzásra de tulszalad a beálitot érték pedik a tömeg nem nagy ugy 1..2dl csak!
A hozzászólás módosítva: Júl 15, 2017
(#) berkesandor válasza jeges hozzászólására (») Júl 15, 2017 /
 
De nincs túlméretezve a fűtés akkor sima ügy, felfűtesz sima ki-be módszerrel, majd pidre váltasz. Sima liba.
(#) jeges válasza berkesandor hozzászólására (») Júl 15, 2017 /
 
30W csak gyári de a vezérlése csak sima ntc nagyon kezdetleges a megoldása!
(#) berkesandor válasza jeges hozzászólására (») Júl 15, 2017 /
 
Akkor sima ügy.
(#) world-s válasza KoblogPerGyok hozzászólására (») Júl 15, 2017 /
 
Az arduino power bankról 5v-ról megy. Az arduinoról az föld és az 5v-os kimenet van szétosztva. Ezért a közös föld megvan. Nem tudom az arduino usb-n van meghajtva az mennyit befolyásol, de nekem így a legkényelmesebb az illesztés.
Valaki itt a con-on valami olyat mondott, hogy a 2 adatot a földel le kéne valahol elkenállásozni. De nem részletezte.
Örülnék ha a jelmez szalag kábelezését nem kéne lecserélni mert a felfogatól nem vastagabb kábelre készültek.
Minden segítséget, ötletet köszönök.
(#) jeges válasza berkesandor hozzászólására (») Júl 15, 2017 /
 
Ami neked van pid szabályzás aval van most gond vagy ujitanád bövitenéd?
(#) berkesandor válasza jeges hozzászólására (») Júl 15, 2017 /
 
Van működő típusom, ez újítás lenne.
(#) kapu48 válasza berkesandor hozzászólására (») Júl 15, 2017 /
 
Az if -ben igy használjuk az 'and' feltételt:
  1. if ( arany < valtfelso && StartTime < 300000 )

Bővebben: Link
(#) KoblogPerGyok válasza kapu48 hozzászólására (») Júl 15, 2017 /
 
Szia!

Miért futott le 'AND'-el egyáltalán? Nem kellene hibát dobnia fordításkor?

(Mondjuk a zárójeleket nem hagynám el, mert később hiba is lehet.)
(#) kapu48 válasza berkesandor hozzászólására (») Júl 15, 2017 /
 
A 2 csatornás PID szabályozáshoz.
Egyszerüen csak mindent megduplázol.
Például, Tuningolt 2 csatornás szabályozás:
  1. /********************************************************
  2.  * PID Adaptive Tuning Example
  3.  * One of the benefits of the PID library is that you can
  4.  * change the tuning parameters at any time.  this can be
  5.  * helpful if we want the controller to be agressive at some
  6.  * times, and conservative at others.   in the example below
  7.  * we set the controller to use Conservative Tuning Parameters
  8.  * when we're near setpoint and more agressive Tuning
  9.  * Parameters when we're farther away.
  10.  * HU.:
  11.  * * PID adaptív hangolási példa
  12.   * A PID könyvtár egyik előnye, hogy tudsz
  13.   * Módosítsa a hangolási paramétereket bármikor. Ez lehet
  14.   * Hasznos, ha azt akarjuk, hogy a vezérlő agresszív legyen
  15.   * Idő, és mások konzervatív. Az alábbi példában
  16.   * A vezérlőt a konzervatív hangolási paraméterek használatára állítottuk be
  17.   * Ha közel állunk az alapértékhez és az agresszívabb hangoláshoz
  18.   * Paraméterek, amikor távolabb vagyunk.
  19.  ********************************************************/
  20.  
  21. #include <PID_v1.h>
  22.  
  23. #define PIN_INPUT 0
  24. #define PIN_OUTPUT 3
  25.  
  26. #define PIN_INPUT2 1
  27. #define PIN_OUTPUT2 4
  28.  
  29. //Define Variables we'll be connecting to
  30. double Setpoint, Input, Output;
  31. double Setpoint2, Input2, Output2;
  32.  
  33. //Define the aggressive and conservative Tuning Parameters
  34. double aggKp=4, aggKi=0.2, aggKd=1;
  35. double consKp=1, consKi=0.05, consKd=0.25;
  36.  
  37. double aggKp2=4, aggKi2=0.2, aggKd2=1;
  38. double consKp2=1, consKi2=0.05, consKd2=0.25;
  39.  
  40. //Specify the links and initial tuning parameters
  41. PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, DIRECT);
  42. PID myPID2(&Input2, &Output2, &Setpoint2, consKp2, consKi2, consKd2, DIRECT);
  43.  
  44. void setup()
  45. {
  46.   //initialize the variables we're linked to
  47.   Input = analogRead(PIN_INPUT);
  48.   Setpoint = 100;
  49.   Setpoint2 = 200;
  50.  
  51.   //turn the PID on
  52.   myPID.SetMode(AUTOMATIC);
  53.   myPID2.SetMode(AUTOMATIC);  
  54. }
  55.  
  56. void loop()
  57. {
  58.   Input = analogRead(PIN_INPUT);
  59.  
  60.  
  61.   double gap = abs(Setpoint-Input); //distance away from setpoint
  62.   if (gap < 10)
  63.   {  //we're close to setpoint, use conservative tuning parameters
  64.     myPID.SetTunings(consKp, consKi, consKd);
  65.   }
  66.   else
  67.   {
  68.      //we're far from setpoint, use aggressive tuning parameters
  69.      myPID.SetTunings(aggKp, aggKi, aggKd);
  70.   }
  71.  
  72.   myPID.Compute();
  73.   analogWrite(PIN_OUTPUT, Output);
  74. // PID 2 ------------------------------------------------------
  75.    Input2 = analogRead(PIN_INPUT2);
  76.  
  77.  
  78.   double gap2 = abs(Setpoint2-Input2); //distance away from setpoint
  79.   if (gap2 < 10)
  80.   {  //we're close to setpoint, use conservative tuning parameters
  81.     myPID2.SetTunings(consKp2, consKi2, consKd2);
  82.   }
  83.   else
  84.   {
  85.      //we're far from setpoint, use aggressive tuning parameters
  86.      myPID2.SetTunings(aggKp2, aggKi2, aggKd2);
  87.   }
  88.  
  89.   myPID2.Compute();
  90.   analogWrite(PIN_OUTPUT2, Output2);
  91.  
  92. }
(#) jeges válasza berkesandor hozzászólására (») Júl 15, 2017 /
 
Mi lenne az amit szeretnél még meg lévön kivül?

Ha érdekel van egy minta példa vezérlés a képen lévö rendszerhez....(tanulmányozásra)
A hozzászólás módosítva: Júl 15, 2017
(#) berkesandor válasza kapu48 hozzászólására (») Júl 15, 2017 /
 
Pontosan erre van szükségem, holnap kipróbálom.

Nagyon szépen köszönöm a segítséget.
(#) kapu48 válasza berkesandor hozzászólására (») Júl 15, 2017 / 1
 
Én nem sörözök! De 1 kiérdemelt, felfelé mutató hüvelyk újnak örülni szoktam!
A hozzászólás módosítva: Júl 15, 2017
(#) berkesandor válasza kapu48 hozzászólására (») Júl 15, 2017 /
 

Mézet se szereted?
(#) KoblogPerGyok válasza kapu48 hozzászólására (») Júl 15, 2017 /
 
Sziasztok!

Ez tuti jó? Megold mindent a pid? Nem tudom, ezért kérdezem.

  1.   double gap = abs(Setpoint-Input); //distance away from setpoint
  2.   if (gap < 10)
  3.   {  //we're close to setpoint, use conservative tuning parameters
  4.     myPID.SetTunings(consKp, consKi, consKd);
  5.   }
  6.   else
  7.   {
  8.      //we're far from setpoint, use aggressive tuning parameters
  9.      myPID.SetTunings(aggKp, aggKi, aggKd);
  10.   }


Amennyiben csak fűt agresszívan és lágyan de nem hűt, akkor ez gond is lehet. Valamiért melegebb pl 11 fokkal mint kellene akkor kigyulladásig fűti ebben az esetben. Nem jól látom?
(#) kapu48 válasza KoblogPerGyok hozzászólására (») Júl 15, 2017 / 1
 
Ez csak az érzékenységet állítja!

Ha bövebben érdekel a téma?
Itt a magyarázat: Bővebben: Link
(#) kapu48 válasza berkesandor hozzászólására (») Júl 15, 2017 /
 
És még van ennél jobb is:
Arduino-PID-AutoTune-Library
(#) berkesandor válasza kapu48 hozzászólására (») Júl 15, 2017 /
 
Nézem régebben, de nem tudtam használni.
Nem működött, gondolom béna vagyok.
(#) Kovidivi válasza kapu48 hozzászólására (») Júl 15, 2017 /
 
Láttam egy videót, ahol a srác egy fa lécre rakott két propellert, középen feltámasztotta, és próbálgatással állapította meg a megfelelő értékét a változóknak. Ha nekem kellene PID-et állítani, én is valahogy így csinálnám, persze ha megoldható.
(#) kapu48 válasza Kovidivi hozzászólására (») Júl 15, 2017 /
 
Igen.
A megfelelő értékeket az adott HW-n, kel kikisérletezni! ???
  1. //Define the aggressive and conservative Tuning Parameters
  2. double aggKp=4, aggKi=0.2, aggKd=1;
  3. double consKp=1, consKi=0.05, consKd=0.25;
  4.  
  5. double aggKp2=4, aggKi2=0.2, aggKd2=1;
  6. double consKp2=1, consKi2=0.05, consKd2=0.25;


Ezt könnyíti az előző program. Mert menetközben, sorosporton beadhatod neki a változtatásokat.
(#) berkesandor válasza kapu48 hozzászólására (») Júl 16, 2017 /
 
Működik.
(#) jeges válasza kapu48 hozzászólására (») Júl 16, 2017 /
 
Mivel tud többet a PID_v1 könyvtártol?
Nem látom átt igazán!
(#) atus1981 hozzászólása Júl 16, 2017 /
 
Sziasztok!
Olyan dolgot szeretnék megvalósítani, hogy minden egyes gombnyomásra eggyel növekedjen a számláló. Sajnos a mellékelt program olyat csinál, hogyha nyomva tartom a gombot, akkor a következő gombnyomásra 2-t, 3-t ad hozzá a számlálóhoz. Az egy csavar a dologban, hogy minden 5. értéket iratom a serial-ra, szerintem nem az befolyásolja a dolgot.
Segítségeket köszönöm!
  1. int inPin = 2;         // the number of the input pin
  2. int nulla = 3;
  3. int outPin = 13;       // the number of the output pin
  4. int szam = 0;
  5. int state = HIGH;      // the current state of the output pin
  6. int reading;           // the current reading from the input pin
  7. int previous = LOW; // the previous reading from the input pin
  8. int nullazo;
  9.  
  10. int szam1 = 0;
  11.  
  12.  
  13. // the follow variables are long's because the time, measured in miliseconds,
  14. // will quickly become a bigger number than can be stored in an int.
  15. long time = 0;         // the last time the output pin was toggled
  16. long debounce = 500;   // the debounce time, increase if the output flickers
  17.  
  18. void setup()
  19. {
  20.   Serial.begin(9600);
  21.   pinMode(inPin, INPUT_PULLUP);
  22.   pinMode(nulla, INPUT_PULLUP);
  23.   pinMode(outPin, OUTPUT);
  24. }
  25.  
  26. void loop()
  27. {
  28.   reading = digitalRead(inPin);
  29.   nullazo = digitalRead(nulla);
  30.   
  31.  
  32.  
  33.   // if the input just went from LOW and HIGH and we've waited long enough
  34.   // to ignore any noise on the circuit, toggle the output pin and remember
  35.   // the time
  36.   if (reading == HIGH && previous == LOW && millis() - time > debounce) {
  37.     szam++;
  38.     szam1++;
  39.     if (state == HIGH)
  40.       state = LOW;
  41.     else
  42.       state = HIGH;
  43.  
  44.     time = millis();
  45.   }
  46.  
  47.   if (nullazo == LOW) {
  48.     szam = 0;
  49.     szam1 = 0;
  50.       Serial.println(szam);
  51.  Serial.println(szam1);
  52.   }
  53.  
  54.  
  55.  
  56.   if (szam1 == 5) {
  57.   Serial.println(szam);
  58.  Serial.println(szam1);
  59.   szam1 = 0;
  60.     }
  61.      
  62.  
  63.   digitalWrite(outPin, state);
  64.  
  65.   previous = reading;
  66.  
  67. }
(#) jeges válasza berkesandor hozzászólására (») Júl 16, 2017 /
 
még azt is lehetne hogy a értékeket meg adása sorosporton keresztül pl aggKp=4 ezt igy irod be soros porton K4
  1. double aggKp=4, aggKi=0.2, aggKd=1;
  2. double consKp=1, consKi=0.05, consKd=0.25;
  3.  
  4. double aggKp2=4, aggKi2=0.2, aggKd2=1;
  5. double consKp2=1, consKi2=0.05, consKd2=0.25;


valahogy igy ez még sajnos a tizeses érrtéket nem tudom hogy kell kezelni eeprom iráshoz ezt majd itt segitenek bene!

  1. #include <EEPROM.h>
  2. #define fre_EEPRCIM 10
  3.  
  4. double aggKp=0; ///pid egy ertek példa
  5.  
  6.  
  7.  
  8.  
  9. void setup() {
  10.    Serial.begin(9600);
  11.  
  12.    aggKp =  fre_EEPolvas(fre_EEPRCIM);
  13.    
  14.    Serial.println(aggKp);
  15. }
  16.  
  17. void loop() {
  18.  if (Serial.available()){
  19.  
  20.     int inByte = Serial.read();
  21.  
  22.      switch (inByte) {
  23.  
  24.   case 'K':
  25.  
  26.    
  27.    aggKp = Serial.parseInt();
  28.     fre_EEPiras(fre_EEPRCIM, aggKp);
  29.        Serial.print(aggKp);
  30.        Serial.flush();
  31.      
  32.      break;
  33.   }
  34. }
  35. }
  36. unsigned long fre_EEPolvas(int address){
  37.   long negy = EEPROM.read(address);
  38.   long harom = EEPROM.read(address + 1);
  39.   long ketto = EEPROM.read(address + 2);
  40.   long egy = EEPROM.read(address + 3);
  41.   return ((negy << 0) & 0xFF) + ((harom << 8) & 0xFFFF) + ((ketto << 16) & 0xFFFFFF) + ((egy << 24) & 0xFFFFFFFF);
  42.  
  43.  
  44. }
  45.  
  46. void fre_EEPiras(int address, long adat){
  47.    byte negy = (adat & 0xFF);
  48.    byte harom = ((adat >> 8) & 0xFF);
  49.    byte ketto = ((adat >> 16) & 0xFF);
  50.    byte egy = ((adat >> 24) & 0xFF);
  51.    EEPROM.write(address, negy);
  52.    EEPROM.write(address + 1, harom);
  53.    EEPROM.write(address + 2, ketto);
  54.    EEPROM.write(address + 3, egy);
  55. }
A hozzászólás módosítva: Júl 16, 2017
(#) berkesandor válasza atus1981 hozzászólására (») Júl 16, 2017 /
 
Lehet a prell okozza.
(#) berkesandor válasza jeges hozzászólására (») Júl 16, 2017 /
 
Nálam a PID értékek meg vannak szorozva 10-el, úgy vannak eltárolva az eepromban, kiolvassa aztán /10.
(#) jeges válasza berkesandor hozzászólására (») Júl 16, 2017 /
 
akkor már megoldotad ok!
(#) berkesandor válasza berkesandor hozzászólására (») Júl 16, 2017 /
 
Erre nincs ötlet?
Következő: »»   361 / 850
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem