Ponthegesztő időzítés
Ponthegesztő időzítés
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);}
}
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);}
}
Re: Ponthegesztő időzítés
Hello!
Kérlek, használd a kód beillesztés funkciót! Úgy el is lehet olvasni a kódot.
Ez:
Egyenértékű ezzel:
Vagyis a gomb akkor aktív, ha LOW. Te viszont HIGH-ra teszteled. Fizikailag hogyan van bekötve?
Javaslataim:
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);
Kód: Egész kijelölése
pinMode(buttonPin, INPUT_PULLUP);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.
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);
}
}Re: Ponthegesztő időzítés
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
https://gist.github.com/vargham/b3a4e5f ... b2f88544a5
Re: Ponthegesztő időzítés
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!
Re: Ponthegesztő időzítés
Kérdezz! 
Re: Ponthegesztő időzítés
Szia,vargham írta:Kérdezz!
ö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
Re: Ponthegesztő időzítés
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.
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.
Re: Ponthegesztő időzítés
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.
Re: Ponthegesztő időzítés
Tipp:
IC neve + library + arduino (Googleba)
És a lényeg: a library mintái közt (example) van olyan, hogy melyik karakterhelyre mit írjon.
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 
Re: Ponthegesztő időzítés
Most találtam egy videot. Kiprobalom azt.
Re: Ponthegesztő időzítés
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?
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.
Re: Ponthegesztő időzítés
Í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:
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
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.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.
Re: Ponthegesztő időzítés
Bocs, akkor lehet hogy rosszat küldtem. Átnézem.