Ponthegesztő időzítés

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
JTamas
DrótVégénSzéndarab
Hozzászólások: 17
Csatlakozott: 2015. június 25. csütörtök, 20:08

Ponthegesztő időzítés

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

Sziasztok, szia Robi,
van egy ponthegesztőm aminek éppen leégett a monostabil multivibrátoros időzítője.
Gondoltam megcsinálom Nano-val. Egy ssr-t kapcsol direktben digitális lábról. Még nem építettem be, de eddig jónak tűnik. Tápellátást egy kiberhelt Samsung telefontöltő fogja biztosítani. Úgy működik eredetileg, hogy egy mechanikus karral összenyomod a két anyagot, majd a végén, egy mikrokapcsoló indítja az időzítést, beránt egy kontaktort, hegeszt, kikapcsol. Ez akkor sem indul újra ha továbbra is összenyomva tartom a karokat (mikrokapcsoló zárva marad az időzítés lejártával). Amivel nem boldogulok az az, hogy az alábbi kóddal ha buttonPin (mikrokapcsoló) zárva marad, újraindul az áramkör és újra hegeszt. Ezt mondjuk tudom késleltetni hogy legyen időd felengedni a kart, de az lenne a legjobb ha a mikrokapcsoló zárásával csak egyszer futna le az időzítés. Tudna valaki tanácsot adni ? Ja, a serialprintln csak a hibakeresés miatt van benn, a véglegesből kikerül.

/*
Ponthegeszto ssr rele idoszabalyozasa
*/

const int buttonPin = 3;
int buttonState = 0;
int ssr = 2;
int pot = A0;
int readpot;
int kapcsido;
int idomin = 10;
int idomax = 4000;


void setup() {
pinMode(buttonPin, INPUT);
digitalWrite(buttonPin, HIGH);
pinMode(ssr, OUTPUT);
pinMode(pot, INPUT);

Serial.begin(9600);
}


void loop() {

readpot = analogRead(pot);
kapcsido = map(readpot, 0, 1023, idomin, idomax);
buttonState = digitalRead(buttonPin);


Serial.println(readpot,DEC);
Serial.println(kapcsido, DEC);

if (buttonState == HIGH)
{delay (20);
digitalWrite(ssr, HIGH);
delay(kapcsido*buttonState);
digitalWrite(ssr, LOW);
delay (700);}

else
{delay (200);}


}
vargham
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2014. január 8. szerda, 8:32

Re: Ponthegesztő időzítés

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

Hello!

Kérlek, használd a kód beillesztés funkciót! Úgy el is lehet olvasni a kódot.

Ez:

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

pinMode(buttonPin, INPUT);
digitalWrite(buttonPin, HIGH);
Egyenértékű ezzel:

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

pinMode(buttonPin, INPUT_PULLUP);
Vagyis a gomb akkor aktív, ha LOW. Te viszont HIGH-ra teszteled. Fizikailag hogyan van bekötve?

Javaslataim:
  • Kerüld a delay() használatát.
  • Használj timestampet és mérd az eltelt időt.
  • A konstansokhoz #define-t használj, nem foglalnak RAM-ot.
  • A konstansok neve legyen csupa nagybetűs, jobban elválnak.
  • Ne keverd a magyar és az angol változó neveket.
Én így csinálnám:

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

#define BUTTON_PIN   3
#define SSR_PIN      2
#define POT_PIN      A0

#define DURATION_MIN   10
#define DURATION_MAX   4000
#define DEBOUNCE      50

int buttonPrevState = LOW;
bool buttonReady = false;
unsigned long buttonChangedTimestamp = 0;
unsigned long weldingStartedTimestamp = 0;

void setup()
{
   pinMode(BUTTON_PIN, INPUT);
   pinMode(SSR_PIN, OUTPUT);
   Serial.begin(9600);
}


void loop()
{
   int readpot = analogRead(POT_PIN);
   int duration = map(readpot, 0, 1023, DURATION_MIN, DURATION_MAX);
   int buttonState = digitalRead(BUTTON_PIN);

   Serial.println(readpot, DEC);
   Serial.println(duration, DEC);

   if (buttonPrevState != buttonState) //Button changed
   {
      buttonChangedTimestamp = millis();
      buttonReady = true;
   }
   if (buttonChangedTimestamp + DEBOUNCE < millis()) //Debounce
   {
      if (buttonState == HIGH && buttonReady)
      {
         weldingStartedTimestamp = millis();
         digitalWrite(SSR_PIN, HIGH);
         buttonReady = false;
      }
   }
   buttonPrevState = buttonState;
   if (weldingStartedTimestamp + duration < millis()) //Check welding timeout
   {
      digitalWrite(SSR_PIN, LOW);
   }
}
vargham
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2014. január 8. szerda, 8:32

Re: Ponthegesztő időzítés

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

Beleraktam azt is, hogy hegesztés közben ne olvassa újra az időtartamot állító potmétert.
https://gist.github.com/vargham/b3a4e5f ... b2f88544a5
JTamas
DrótVégénSzéndarab
Hozzászólások: 17
Csatlakozott: 2015. június 25. csütörtök, 20:08

Re: Ponthegesztő időzítés

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

Huh. Ez nagyon ott van. Kipróbáltam mindkettőt. Szuperül működik. Azért kell nekem egy kis idő hogy teljesen megértsem a kódodat, de nagyon örülök hogy tanulhatok általa!
vargham
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2014. január 8. szerda, 8:32

Re: Ponthegesztő időzítés

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

Kérdezz! ;-)
JTamas
DrótVégénSzéndarab
Hozzászólások: 17
Csatlakozott: 2015. június 25. csütörtök, 20:08

Re: Ponthegesztő időzítés

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

vargham írta:Kérdezz! ;-)
Szia,
összeraktam a cuccot, jobb mint az eredeti.
Viszont megpróbáltam Max7219 SPI kommunikációval kiiratni az időzítést, de nem vágom ezt a chipet.
Hogyan tudnám megjeleníteni négy szegmensben a beállított másodperceket? pl.: 0.123
vargham
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2014. január 8. szerda, 8:32

Re: Ponthegesztő időzítés

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

Gondolom, az adatlapot megtaláltad.
https://datasheets.maximintegrated.com/ ... AX7221.pdf

Aztán az Arduino linkgyűjteményt is.
http://playground.arduino.cc/Main/LEDMatrix

Amiközött aztán van egy 7 szegmenses LED vezérlő könyvtár is, így nem kell megírnod az SPI kommunikációt.
http://playground.arduino.cc/Main/LedControl

Nem használtam még ezt az IC-t, de így kezdenék neki. ;-)
JTamas
DrótVégénSzéndarab
Hozzászólások: 17
Csatlakozott: 2015. június 25. csütörtök, 20:08

Re: Ponthegesztő időzítés

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

Persze. Már átnéztem, de nem áll rá az agyam. Sok kódot átnéztem, alapvetően két félét találtam. Az egyik használja a ledcontrol.h könyvtárat, a másik meg nem. Meg tudom szólaltatni, csak azt nem tudom hogy hogyan írathatok ki változókat.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Ponthegesztő időzítés

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

Tipp:
IC neve + library + arduino (Googleba)
És a lényeg: a library mintái közt (example) van olyan, hogy melyik karakterhelyre mit írjon.
http://www.tavir.hu - a gazda :)
JTamas
DrótVégénSzéndarab
Hozzászólások: 17
Csatlakozott: 2015. június 25. csütörtök, 20:08

Re: Ponthegesztő időzítés

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

Most találtam egy videot. Kiprobalom azt.
JTamas
DrótVégénSzéndarab
Hozzászólások: 17
Csatlakozott: 2015. június 25. csütörtök, 20:08

Re: Ponthegesztő időzítés

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

Na, most volt egy kis időm foglalkozni a kóddal.
Most már működik, kiír 4 digitet, az első után ponttal. 0.010 és kb 3.920 (? miért nem négyet?) másodpercet mutat.
Ez így nem rossz már, viszont lassú. Eltekerem a potmétert és eltelhet akár két három másodperc mire kiírja a megfelelő értéket. Az összes delay-t kivettem belőle, a soros porti kiírást is felfüggesztettem, de nem sokat segített. Mi lassítja így le?
Nincs meg a kellő jogosultságod a hozzászóláshoz csatolt állományok megtekintéséhez.
vargham
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2014. január 8. szerda, 8:32

Re: Ponthegesztő időzítés

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

Írtam neked delay nélküli kódot, azt válaszoltad, hogy működik, és meg is értetted. Szuper.

Most viszont megint a régi kódodat küldted, ami egy katyvasz, és delay is van benne. Pont annyit vár, amennyire eltekered a potmétert...

Ezért katyvasz:
  • Nincs szépen formázva a kód. Ez rögtön el is fed egy hibát. Szépen formázott kódból általában üvölt, ha elrontod valaminek a logikáját
  • buttonPint-t beolvasod egy buttonState nevű változóba, majd feltétel vizsgálatkor beolvasod megint, ahelyett, hogy használnád a változót.
  • delay van benne timestamp helyett.
  • boolean típust szorzol előjeles egésszel, ami nem túl egészséges
Ezt írtam korábban:
Javaslataim:
  • Kerüld a delay() használatát.
  • Használj timestampet és mérd az eltelt időt.
  • A konstansokhoz #define-t használj, nem foglalnak RAM-ot.
  • A konstansok neve legyen csupa nagybetűs, jobban elválnak.
  • Ne keverd a magyar és az angol változó neveket.
Ha megfogadtad volna, amiket írtam, akkor a kijelzés sem lenne lassú. Ha nem érted, nem gond, azért írtam, hogy kérdezz, ha nem értesz valami. Szívesen rávezetlek a megoldásra, de el nem árulom magamtól. ;-)
JTamas
DrótVégénSzéndarab
Hozzászólások: 17
Csatlakozott: 2015. június 25. csütörtök, 20:08

Re: Ponthegesztő időzítés

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

Bocs, akkor lehet hogy rosszat küldtem. Átnézem.
Válasz küldése