O zgrzewarkach...

Czyli wszystko co potrzebne prawdziwemu DIY'owi;) Porady, pytania i opisy używanego przez nas sprzętu.
Robert_76_pl
Posty: 100
Rejestracja: wtorek 17 lis 2015, 08:25
Lokalizacja: morze

Post autor: Robert_76_pl »

pietros pisze:
Manekinen pisze:Też nie wiem jak to działa, 28A w zwarciu na bezpieczniku 10A. Może ma charakterystykę C że chwilę wytrzymuje. Ale powinno tam być standardowo B16A albo C16A skoro reszta instalacji też na 16A.
Przy tak krótkich impulsach B10 spokojnie wytrzyma 30-50A.
Panowie napisałem że test robiony bez sterownika a na sterowniku mam ten 10A bezpiecznik.
A w rozdzielce mam 16A

Cytat "Wszystkie testy robione bez sterownika ponieważ na czasie ponad 1s na sterowniku zrywa bezpiecznik 10A."

Jak mocno powinny być naostrzone elektrody ja mam niecały 1mm2
joon
Posty: 621
Rejestracja: niedziela 04 mar 2012, 15:31
Lokalizacja: Przemyśl

Post autor: joon »

Na sterowniku 10A może dlatego że triak jest na 13-16? :D Wsadź większy bezpiecznik w sterownik, triak to groszowe sprawy, a i tak powinien być z zapasem.
ProLight
Posty: 1142
Rejestracja: wtorek 06 gru 2011, 01:16
Lokalizacja: Śląsk

Post autor: ProLight »

Panowie kupiłem sterownik gotowca na arduino, poskładałem sobie zaprogramowałem i zgrzewarka śmiga aż miło, ale niestety skok zgrzewu mam co 10ms i jest to trochę problematyczne bo czasem te 10ms to dużo za dużo, a czasem 10ms to za mało a 20ms to tragiczne za dużo.

Czy jak wstawię program to pomoże mi Ktoś w modyfikacji tego kroku?
Pisałem do producenta, obiecał pomóc w wolnym czasie ale trwa to już parę tygodni i od z tego nie wychodzi.
Główny spammer tego Forum ;)
Awatar użytkownika
marmez
Posty: 2878
Rejestracja: sobota 08 sty 2011, 19:19
Lokalizacja: Szczecin
Kontakt:

Post autor: marmez »

Wstawiaj. Chętnie zobaczę, choć nie obiecuję, że będę umiał pomóc. Tylko nie wiem, czy w tym wątku, czy w nowym, a tutaj tylko link. Ale w sumie tutaj jest na temat, a najwyżej moderator wydzieli.
Tekst podpisu:
Podpis - dozwolona ilość znaków: 255
ProLight
Posty: 1142
Rejestracja: wtorek 06 gru 2011, 01:16
Lokalizacja: Śląsk

Post autor: ProLight »

Kod: Zaznacz cały

#include <Wire.h>
// Get the LCD I2C Library here&#58;
// https&#58;//bitbucket.org/fmalpartida/new-liquidcrystal/downloads
#include <LiquidCrystal_I2C.h>
#include<EEPROM.h>


/*-----&#40; Declare Constants &#41;-----*/
/*-----&#40; Declare objects &#41;-----*/
//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol//////0x20
LiquidCrystal_I2C lcd&#40;0x38, 4, 5, 6, 0, 1, 2, 3, 7, NEGATIVE&#41;;  // Set the LCD I2C address

/*-----&#40; Declare Variables &#41;-----*/
// this constant won't change&#58;
//const int  zeroCrossPin = 2;
const int ledPin = 13;       // the pin that t      3-he LED is attached to
const int  zeroCrossPin = 2;    // the pin that the pushbutton is attached to


// Variables will change&#58;
int buttonPushCounter = 0;   // counter for the number of button presses
int zeroCrossState = 0;         // current state of the button
int lastZeroCrossState = 0;     // previous state of the button
boolean startButtonState = 0;
boolean lastStartButtonState = 0;
int czasZgrzewaniaTriak = 4;
int czasZgrzewaniaTriak2 = 1;//wartość razy 10ms
//int mocTriak = 100;       //moc w procentach
int mocAktualna = 50;
int timeMidWeld = 100;
int buttonValue1 = 0;
int buttonValue2 = 0;
int timeValue1 = 20;
int pozwoleniePracy = 0;
int pozwoleniePracy2 = 0;
int krokCyklu = 1;
int menu1 = 0;
int menu2 = 0;
int bufor1 = 0;
int bufor2 =0; //bool 
int opoznienieZalaczenia = 0;
boolean podwojnyZgrzew = 0;

/*adresy zmiennych eeprom
  0 - podwojny zgrzew
  1 - czas 1 zg
  2 - czas 2 zg
  3 - czas przerwy
  4- opoznienie zalaczenia
*/

void setup&#40;&#41;   /*----&#40; SETUP&#58; RUNS ONCE &#41;----*/
&#123;
  //attachInterrupt&#40;0, zero_crosss_int, RISING&#41;;
  pinMode&#40;3, OUTPUT&#41;;
   
  pinMode&#40;zeroCrossPin, INPUT&#41;;
  digitalWrite&#40;3, LOW&#41;;
  pinMode&#40;A7, INPUT_PULLUP&#41;;
  pinMode&#40;A6, INPUT_PULLUP&#41;;
  lcd.begin&#40;16, 2&#41;;  // initialize the lcd for 16 chars 2 lines, turn on backlight
  lcd.clear&#40;&#41;;
  lcd.setCursor&#40;0, 0&#41;; //Start at character 0 on line 0
  lcd.print&#40;"EMSI-Tech v.0.82a"&#41;;
  lcd.setCursor&#40;0, 1&#41;;
  lcd.print&#40;"#KREATOR"&#41;;
  delay&#40;2000&#41;;
  lcd.clear&#40;&#41;;
  podwojnyZgrzew = EEPROM.read&#40;0&#41;;
  if &#40;podwojnyZgrzew >1&#41;&#123;
        EEPROM.write&#40;0, 0&#41;;
        podwojnyZgrzew = EEPROM.read&#40;0&#41;;
  &#125;
  czasZgrzewaniaTriak = EEPROM.read&#40;1&#41;;
  czasZgrzewaniaTriak2 = EEPROM.read&#40;2&#41;;


&#125;/*--&#40;end setup &#41;---*/

//977 - start

//977 - esc
//935 - lewy
//896 - gora
//860 - dol
//827 - prawo
//779- ok    797???


void loop&#40;&#41;
&#123;
  buttonValue1 = analogRead&#40;A6&#41;;
  buttonValue2 = analogRead&#40;A7&#41;;
  //wyswietlanie menu
  lcd.setCursor&#40;0, 0&#41;;
  lcd.print&#40;"Zgrzew1&#58; "&#41;;
  lcd.print&#40;&#40;czasZgrzewaniaTriak * 10&#41;&#41;;
  lcd.print&#40;"ms"&#41;;

  lcd.setCursor&#40;0, 1&#41;;
  lcd.print&#40;"Zgrzew2&#58; "&#41;;
  if &#40;podwojnyZgrzew == 1&#41; &#123;
    //lcd.print&#40;"ON  "&#41;;
    lcd.print&#40;&#40;czasZgrzewaniaTriak2 * 10&#41;&#41;;
    lcd.print&#40;"ms"&#41;;

  &#125;
  else &#123;
    lcd.print&#40;"OFF "&#41;;
  &#125;

  //menu jakies ustalające parametry
  if &#40;analogRead&#40;A7&#41; >= 780 && analogRead&#40;A7&#41; <= 810&#41; &#123;
    lcd.clear&#40;&#41;;

    //ustawienie czasu bo tak sobie wymyśliłem jedząc ciastko i kawe pijąc
    menu1 = 1;
    bufor1 = czasZgrzewaniaTriak;
    while &#40;menu1 == 1&#41; &#123;
      lcd.setCursor&#40;0, 0&#41;;
      lcd.print&#40;"Zgrzew1&#58; "&#41;;
      lcd.print&#40;&#40;bufor1 * 10&#41;&#41;;
      lcd.print&#40;"ms"&#41;;
      lcd.setCursor&#40;0, 1&#41;;
      lcd.print&#40;"Ustawianie czasu"&#41;;
      //if &#40;analogRead&#40;A7&#41; >= 890 && analogRead&#40;A7&#41; <= 910&#41;
      if &#40;analogRead&#40;A7&#41; >= 850 && analogRead&#40;A7&#41; <= 870&#41; &#123;
        bufor1++;
      &#125;
      else if &#40;analogRead&#40;A7&#41; >= 890 && analogRead&#40;A7&#41; <= 910&#41; &#123;
        if &#40;bufor1 > 1&#41; &#123;
          bufor1--;
        &#125;
      &#125;
      if &#40;analogRead&#40;A7&#41; >= 820 && analogRead&#40;A7&#41; <= 840&#41; &#123;
        bufor1 = bufor1 + 10;
      &#125;
      else if &#40;analogRead&#40;A7&#41; >= 920 && analogRead&#40;A7&#41; <= 950&#41; &#123;
        if &#40;bufor1 >= 11&#41; &#123;
          bufor1 = bufor1 - 10;
        &#125;
        else &#123;
          bufor1 = 1;
        &#125;
      &#125;
      delay&#40;150&#41;;
      //wyjscie bez zapisu
      if &#40;analogRead&#40;A7&#41; >= 960&#41; &#123;
        menu1 = 0;
      &#125;
      else if &#40;analogRead&#40;A7&#41; >= 780 && analogRead&#40;A7&#41; <= 810&#41; &#123;
        czasZgrzewaniaTriak = bufor1;
        menu1 = 0;
        lcd.setCursor&#40;0, 1&#41;;
        lcd.print&#40;"Zapisuje"&#41;;
        EEPROM.write&#40;1, czasZgrzewaniaTriak&#41;;
        delay&#40;100&#41;;
        lcd.print&#40;"."&#41;;
        delay&#40;100&#41;;
        lcd.print&#40;"."&#41;;
        delay&#40;100&#41;;
        lcd.print&#40;"."&#41;;
        delay&#40;200&#41;;

      &#125;

      lcd.clear&#40;&#41;;
    &#125;

    //ustawienie podwojnego zgrzewu  tralalalala
    menu1 = 1;
    bufor2 = podwojnyZgrzew;
    while &#40;menu1 == 1&#41; &#123;
      lcd.setCursor&#40;0, 0&#41;;
      lcd.print&#40;"Zgrzew2&#58;"&#41;;
      lcd.setCursor&#40;0, 1&#41;;
      if &#40;bufor2 == true&#41; &#123;
        lcd.print&#40;"ON"&#41;;
      &#125;
      else &#123;
        lcd.print&#40;"OFF"&#41;;
      &#125;
      if &#40;analogRead&#40;A7&#41; >= 890 && analogRead&#40;A7&#41; <= 910&#41; &#123;
        if &#40;bufor2 == true&#41; &#123;
          bufor2--;
        &#125;
      &#125;
      else if &#40;analogRead&#40;A7&#41; >= 850 && analogRead&#40;A7&#41; <= 870&#41; &#123;
        if &#40;bufor2 == false&#41; &#123;
          bufor2++;
        &#125;
      &#125;

      delay&#40;150&#41;;
      //wyjscie bez zapisu
      if &#40;analogRead&#40;A7&#41; >= 960&#41; &#123;
        menu1 = 0;
      &#125;
      else if &#40;analogRead&#40;A7&#41; >= 780 && analogRead&#40;A7&#41; <= 810&#41; &#123;
        podwojnyZgrzew = bufor2;
        menu1 = 0;
        lcd.setCursor&#40;0, 1&#41;;
        lcd.print&#40;"Zapisuje"&#41;;
        EEPROM.write&#40;0, podwojnyZgrzew&#41;;
        delay&#40;50&#41;;
        lcd.print&#40;"."&#41;;
        delay&#40;50&#41;;
        lcd.print&#40;"."&#41;;
        delay&#40;50&#41;;
        lcd.print&#40;"."&#41;;
        delay&#40;100&#41;;

      &#125;

      lcd.clear&#40;&#41;;
    &#125;
    //koniec ustawienia włączenia zgrzewu2
    //ustawienie   czesci zgrzewu zgrzewu albo coś jakoś czymś gdzieś po coś
    //bredzisz...
    if &#40;podwojnyZgrzew == 1&#41; &#123;
      menu1 = 1;
      bufor1 = czasZgrzewaniaTriak2;
      while &#40;menu1 == 1&#41; &#123;
        lcd.setCursor&#40;0, 0&#41;;
        lcd.print&#40;"Zgrzew2&#58; "&#41;;
        lcd.print&#40;&#40;bufor1 * 10&#41;&#41;;
        lcd.print&#40;"ms"&#41;;
        lcd.setCursor&#40;0, 1&#41;;
        lcd.print&#40;"Ustawianie czasu"&#41;;
        if &#40;analogRead&#40;A7&#41; >= 850 && analogRead&#40;A7&#41; <= 870&#41; &#123;
          bufor1++;
        &#125;
        else if &#40;analogRead&#40;A7&#41; >= 890 && analogRead&#40;A7&#41; <= 910&#41; &#123;
          if &#40;bufor1 > 1&#41; &#123;
            bufor1--;
          &#125;
        &#125;
        if &#40;analogRead&#40;A7&#41; >= 820 && analogRead&#40;A7&#41; <= 840&#41; &#123;
          bufor1 = bufor1 + 10;
        &#125;
        else if &#40;analogRead&#40;A7&#41; >= 920 && analogRead&#40;A7&#41; <= 950&#41; &#123;
          if &#40;bufor1 >= 11&#41; &#123;
            bufor1 = bufor1 - 10;
          &#125;
          else &#123;
            bufor1 = 1;
          &#125;
        &#125;
        delay&#40;150&#41;;
        //wyjscie bez zapisu
        if &#40;analogRead&#40;A7&#41; >= 960&#41; &#123;
          menu1 = 0;
        &#125;
        else if &#40;analogRead&#40;A7&#41; >= 780 && analogRead&#40;A7&#41; <= 810&#41; &#123;
          czasZgrzewaniaTriak2 = bufor1;
          menu1 = 0;
          lcd.setCursor&#40;0, 1&#41;;
          lcd.print&#40;"Zapisuje"&#41;;
          EEPROM.write&#40;2, czasZgrzewaniaTriak2&#41;;
          delay&#40;100&#41;;
          lcd.print&#40;"."&#41;;
          delay&#40;100&#41;;
          lcd.print&#40;"."&#41;;
          delay&#40;100&#41;;
          lcd.print&#40;"."&#41;;
          delay&#40;200&#41;;

        &#125;

        lcd.clear&#40;&#41;;
      &#125;
    &#125;//chyba koniec ifa
  &#125;



   if &#40;analogRead&#40;A6&#41; > 500&#41; &#123;
   startButtonState = 1;&#125;
   else &#123;
   startButtonState = 0;
   
   &#125;
   
  //startButtonState = digitalRead&#40;3&#41;;
  if &#40;startButtonState != lastStartButtonState&#41; &#123;
    if &#40;startButtonState == HIGH&#41; &#123;
      lcd.setCursor&#40;0, 0&#41;;
      lcd.print&#40;"----------------"&#41;;

      lcd.setCursor&#40;0, 1&#41;;
      lcd.print&#40;"--**--------**--"&#41;;
      pozwoleniePracy = 1;
      if &#40;podwojnyZgrzew == 1&#41; &#123;
        pozwoleniePracy2 = 1;
      &#125;
    &#125;
  &#125;
  lastStartButtonState = startButtonState;



  krokCyklu = 1;
  //zgrzew właściwy
  while &#40;pozwoleniePracy == 1&#41; &#123;
    zeroCrossState = digitalRead&#40;zeroCrossPin&#41;;
    if &#40;zeroCrossState != lastZeroCrossState&#41; &#123;
      if &#40;zeroCrossState == HIGH&#41; &#123;
        delayMicroseconds&#40;6000&#41;;
        digitalWrite&#40;3, HIGH&#41;;
        delayMicroseconds&#40;100&#41;;
        krokCyklu++;
        lcd.setCursor&#40;0, 1&#41;;
        //lcd.print&#40;krokCyklu&#41;;
      &#125;
    &#125;
    lastZeroCrossState = zeroCrossState;
    if &#40;krokCyklu > czasZgrzewaniaTriak&#41; &#123;
      pozwoleniePracy = 0;
      digitalWrite&#40;3, LOW&#41;;
      delay&#40;timeMidWeld&#41;;
      lcd.clear&#40;&#41;;
    &#125;
  &#125;
  krokCyklu = 1;
  //zgrzew2
  while &#40;pozwoleniePracy2 == 1&#41; &#123;
    zeroCrossState = digitalRead&#40;zeroCrossPin&#41;;
    if &#40;zeroCrossState != lastZeroCrossState&#41; &#123;
      if &#40;zeroCrossState == HIGH&#41; &#123;
        delayMicroseconds&#40;6000&#41;;
        digitalWrite&#40;3, HIGH&#41;;
        delayMicroseconds&#40;100&#41;;
        krokCyklu++;
        lcd.setCursor&#40;0, 1&#41;;
        //lcd.print&#40;krokCyklu&#41;;
      &#125;
    &#125;
    lastZeroCrossState = zeroCrossState;
    if &#40;krokCyklu > czasZgrzewaniaTriak2&#41; &#123;
      pozwoleniePracy2 = 0;
      digitalWrite&#40;3, LOW&#41;;
      delay&#40;timeMidWeld&#41;;
      lcd.clear&#40;&#41;;
    &#125;
  &#125;



&#125;/* --&#40;end main loop &#41;-- */


/* &#40; THE END &#41; */
Główny spammer tego Forum ;)
ProLight
Posty: 1142
Rejestracja: wtorek 06 gru 2011, 01:16
Lokalizacja: Śląsk

Post autor: ProLight »

Jeszcze chciałem zapytać, bo widzę jak by 4 opcje w menu,
czas zgrzewu 1
Czas zgrzewu 2
Czas przerwy
Czas zwłoki

U mnie działa tylko
Czas zgrzewu 1
Czas zgrzewu 2

Pozostałych nie ma

Jak Ktoś ma jeszcze jakieś pomysły dodatki na udoskonalenie to chętnie.

Kod: Zaznacz cały

//int mocTriak = 100;       //moc w procentach 
int mocAktualna = 50; 
int timeMidWeld = 100; 
Przeglądam ten kod żeby coś samemu podziałać ale narazie jedyne co mi się udało to że na wyświetlaczu pokazuje mi się 1/2/3/4... ale czas zgrzewu dalej jest x10ms

Czy to co zaznaczyłem znaczy że zgrzewarka teraz działa na 50%?
Główny spammer tego Forum ;)
ProLight
Posty: 1142
Rejestracja: wtorek 06 gru 2011, 01:16
Lokalizacja: Śląsk

Post autor: ProLight »

Możecie Panowie polecić jakiś gotowiec sterownik który będzie miał czas impulsu z krokiem co 1ms?
Bo ten sterownik co mam nie nadaje się chyba.

10ms jest okej ale jak Chce zgrać już dwie taśmy to za mało, a 20ms pali już wszystko, tak się męczyłem żeby mieć mocne trafo A teraz nie mogę wykorzystać potencjału.
Główny spammer tego Forum ;)
Awatar użytkownika
Pyra
Site Admin
Posty: 8522
Rejestracja: niedziela 02 sie 2009, 20:35
Lokalizacja: Gądki

Post autor: Pyra »

Witam

Z tego co zrozumiałem czytając kod, widzę taką metodę zmniejszenia czasu zgrzewu.

W sekcji:

Kod: Zaznacz cały

 krokCyklu = 1;
  //zgrzew właściwy
  while &#40;pozwoleniePracy == 1&#41; &#123;

Mamy taki fragment:

Kod: Zaznacz cały

       delayMicroseconds&#40;6000&#41;; 
To jest 6ms, dodając inne opóźnienia zawarte w pętli, powinno wyjść 10ms na jeden "obrót" cyklu. Zmniejszając do:

Kod: Zaznacz cały

       delayMicroseconds&#40;1000&#41;; 
Krok powinien zejść do 5ms, niżej może być trudno.

Pętla jest wykonywana, dopóki zmienna "krokcyklu" jest mniejsza od "czasZgrzewaniaTriak"

Przy drugim zgrzewie jest identycznie.

Pozdrawiam

PS: Oczywiście po tej zmianie, powinieneś zmienić w sekcji wyświetlania:

Kod: Zaznacz cały

 lcd.print&#40;&#40;czasZgrzewaniaTriak * 10&#41;&#41;; 
na:

Kod: Zaznacz cały

 lcd.print&#40;&#40;czasZgrzewaniaTriak * 5&#41;&#41;; 
Izali miecz godniejszy niżli topór w boju?
Piszmy po polsku, wszak jesteśmy Polakami.
ProLight
Posty: 1142
Rejestracja: wtorek 06 gru 2011, 01:16
Lokalizacja: Śląsk

Post autor: ProLight »

Dziękuję,
Przetestuje zaraz po pracy.
Walczyłem z tym trochę z Kolegą który ogarnia arduino, ale nie ogarnia elektroniki i nie był stanie do końca mi pomóc w ulepszeniu tego sterownika. Przetestowałem kilka rozwiązań ale w końcu wywiesił białą flagę.
Główny spammer tego Forum ;)
ProLight
Posty: 1142
Rejestracja: wtorek 06 gru 2011, 01:16
Lokalizacja: Śląsk

Post autor: ProLight »

Dziękuję za chęci, ale przy ustawieniu 5ms nic się nie dzieje, trafo totalnie nie ma mocy, dopiero po ustawieniu krok wyżej 10ms zaczyna zgrzewach.

Nie mam chwilowo możliwości zmierzyć prądu ani napięcia na wyjściu z trafa.
Główny spammer tego Forum ;)
Awatar użytkownika
Pyra
Site Admin
Posty: 8522
Rejestracja: niedziela 02 sie 2009, 20:35
Lokalizacja: Gądki

Post autor: Pyra »

Witam
ProLight pisze:Dziękuję za chęci, ale przy ustawieniu 5ms nic się nie dzieje, trafo totalnie nie ma mocy, dopiero po ustawieniu krok wyżej 10ms zaczyna zgrzewach.
Bo ta zmiana dotyczy kroku, a nie czasu. Po prostu dostajesz krok 5ms i z taką dokładnością możesz ustawić czas.
Pisałeś, że 10 to za mało, a 20 za dużo, więc teraz możesz ustawić 15.
Sądzę, że można by nawet ustawić krok 2ms, ale trzeba by głębiej pogrzebać w sofcie. Tam jest pętla, która m.in. wysyła dane na wyświetlacz, a to zajmuje relatywnie sporo czasu.

Niestety, teraz mam inne zajęcie i nie za bardzo mogę się w tym dogłębnie grzebać.

Pozdrawiam
Izali miecz godniejszy niżli topór w boju?
Piszmy po polsku, wszak jesteśmy Polakami.
Awatar użytkownika
maciex93
Posty: 2886
Rejestracja: sobota 14 sty 2012, 18:59
Lokalizacja: Śląsk

Post autor: maciex93 »

Pod pinem 3 masz element wykonawczy?
Nie wyrażam zgody na wykorzystywanie moich zdjęć w jakiejkolwiek formie bez mojej wiedzy, szczególnie nie życzę sobie czerpania za ich pomocą korzyści finansowych przez osoby trzecie.
Awatar użytkownika
maciex93
Posty: 2886
Rejestracja: sobota 14 sty 2012, 18:59
Lokalizacja: Śląsk

Post autor: maciex93 »

Kod: Zaznacz cały

#include <Wire.h> 
// Get the LCD I2C Library here&#58; 
// https&#58;//bitbucket.org/fmalpartida/new-liquidcrystal/downloads 
#include <LiquidCrystal_I2C.h> 
#include<EEPROM.h> 


/*-----&#40; Declare Constants &#41;-----*/ 
/*-----&#40; Declare objects &#41;-----*/ 
//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol//////0x20 
LiquidCrystal_I2C lcd&#40;0x38, 4, 5, 6, 0, 1, 2, 3, 7, NEGATIVE&#41;;  // Set the LCD I2C address 

/*-----&#40; Declare Variables &#41;-----*/ 
// this constant won't change&#58; 
//const int  zeroCrossPin = 2; 
const int ledPin = 13;       // the pin that t      3-he LED is attached to 
const int  zeroCrossPin = 2;    // the pin that the pushbutton is attached to 


// Variables will change&#58; 
int buttonPushCounter = 0;   // counter for the number of button presses 
int zeroCrossState = 0;         // current state of the button 
int lastZeroCrossState = 0;     // previous state of the button 
boolean startButtonState = 0; 
boolean lastStartButtonState = 0; 
int czasZgrzewaniaTriak = 4; 
int czasZgrzewaniaTriak2 = 1;//wartość razy 10ms 
//int mocTriak = 100;       //moc w procentach 
int mocAktualna = 50; 
int timeMidWeld = 100; 
int buttonValue1 = 0; 
int buttonValue2 = 0; 
int timeValue1 = 20; 
int pozwoleniePracy = 0; 
int pozwoleniePracy2 = 0; 
int krokCyklu = 1; 
int menu1 = 0; 
int menu2 = 0; 
int bufor1 = 0; 
int bufor2 =0; //bool 
int opoznienieZalaczenia = 0; 
boolean podwojnyZgrzew = 0; 

/*adresy zmiennych eeprom 
  0 - podwojny zgrzew 
  1 - czas 1 zg 
  2 - czas 2 zg 
  3 - czas przerwy 
  4- opoznienie zalaczenia 
*/ 

void setup&#40;&#41;   /*----&#40; SETUP&#58; RUNS ONCE &#41;----*/ 
&#123; 
  //attachInterrupt&#40;0, zero_crosss_int, RISING&#41;; 
  pinMode&#40;3, OUTPUT&#41;; 
    
  pinMode&#40;zeroCrossPin, INPUT&#41;; 
  digitalWrite&#40;3, LOW&#41;; 
  pinMode&#40;A7, INPUT_PULLUP&#41;; 
  pinMode&#40;A6, INPUT_PULLUP&#41;; 
  lcd.begin&#40;16, 2&#41;;  // initialize the lcd for 16 chars 2 lines, turn on backlight 
  lcd.clear&#40;&#41;; 
  lcd.setCursor&#40;0, 0&#41;; //Start at character 0 on line 0 
  lcd.print&#40;"EMSI-Tech v.0.82a"&#41;; 
  lcd.setCursor&#40;0, 1&#41;; 
  lcd.print&#40;"#KREATOR"&#41;; 
  delay&#40;2000&#41;; 
  lcd.clear&#40;&#41;; 
  podwojnyZgrzew = EEPROM.read&#40;0&#41;; 
  if &#40;podwojnyZgrzew >1&#41;&#123; 
        EEPROM.write&#40;0, 0&#41;; 
        podwojnyZgrzew = EEPROM.read&#40;0&#41;; 
  &#125; 
  czasZgrzewaniaTriak = EEPROM.read&#40;1&#41;; 
  czasZgrzewaniaTriak2 = EEPROM.read&#40;2&#41;; 


&#125;/*--&#40;end setup &#41;---*/ 

//977 - start 

//977 - esc 
//935 - lewy 
//896 - gora 
//860 - dol 
//827 - prawo 
//779- ok    797??? 


void loop&#40;&#41; 
&#123; 
  buttonValue1 = analogRead&#40;A6&#41;; 
  buttonValue2 = analogRead&#40;A7&#41;; 
  //wyswietlanie menu 
  lcd.setCursor&#40;0, 0&#41;; 
  lcd.print&#40;"Zgrzew1&#58; "&#41;; 
  lcd.print&#40;&#40;czasZgrzewaniaTriak&#41;&#41;; 
  lcd.print&#40;"ms"&#41;; 

  lcd.setCursor&#40;0, 1&#41;; 
  lcd.print&#40;"Zgrzew2&#58; "&#41;; 
  if &#40;podwojnyZgrzew == 1&#41; &#123; 
    //lcd.print&#40;"ON  "&#41;; 
    lcd.print&#40;&#40;czasZgrzewaniaTriak2&#41;&#41;; 
    lcd.print&#40;"ms"&#41;; 

  &#125; 
  else &#123; 
    lcd.print&#40;"OFF "&#41;; 
  &#125; 

  //menu jakies ustalające parametry 
  if &#40;analogRead&#40;A7&#41; >= 780 && analogRead&#40;A7&#41; <= 810&#41; &#123; 
    lcd.clear&#40;&#41;; 

    //ustawienie czasu bo tak sobie wymyśliłem jedząc ciastko i kawe pijąc 
    menu1 = 1; 
    bufor1 = czasZgrzewaniaTriak; 
    while &#40;menu1 == 1&#41; &#123; 
      lcd.setCursor&#40;0, 0&#41;; 
      lcd.print&#40;"Zgrzew1&#58; "&#41;; 
      lcd.print&#40;&#40;bufor1&#41;&#41;; 
      lcd.print&#40;"ms"&#41;; 
      lcd.setCursor&#40;0, 1&#41;; 
      lcd.print&#40;"Ustawianie czasu"&#41;; 
      //if &#40;analogRead&#40;A7&#41; >= 890 && analogRead&#40;A7&#41; <= 910&#41; 
      if &#40;analogRead&#40;A7&#41; >= 850 && analogRead&#40;A7&#41; <= 870&#41; &#123; 
        bufor1++; 
      &#125; 
      else if &#40;analogRead&#40;A7&#41; >= 890 && analogRead&#40;A7&#41; <= 910&#41; &#123; 
        if &#40;bufor1 > 1&#41; &#123; 
          bufor1--; 
        &#125; 
      &#125; 
      if &#40;analogRead&#40;A7&#41; >= 820 && analogRead&#40;A7&#41; <= 840&#41; &#123; 
        bufor1 = bufor1 + 10; 
      &#125; 
      else if &#40;analogRead&#40;A7&#41; >= 920 && analogRead&#40;A7&#41; <= 950&#41; &#123; 
        if &#40;bufor1 >= 11&#41; &#123; 
          bufor1 = bufor1 - 10; 
        &#125; 
        else &#123; 
          bufor1 = 1; 
        &#125; 
      &#125; 
      delay&#40;150&#41;; 
      //wyjscie bez zapisu 
      if &#40;analogRead&#40;A7&#41; >= 960&#41; &#123; 
        menu1 = 0; 
      &#125; 
      else if &#40;analogRead&#40;A7&#41; >= 780 && analogRead&#40;A7&#41; <= 810&#41; &#123; 
        czasZgrzewaniaTriak = bufor1; 
        menu1 = 0; 
        lcd.setCursor&#40;0, 1&#41;; 
        lcd.print&#40;"Zapisuje"&#41;; 
        EEPROM.write&#40;1, czasZgrzewaniaTriak&#41;; 
        delay&#40;100&#41;; 
        lcd.print&#40;"."&#41;; 
        delay&#40;100&#41;; 
        lcd.print&#40;"."&#41;; 
        delay&#40;100&#41;; 
        lcd.print&#40;"."&#41;; 
        delay&#40;200&#41;; 

      &#125; 

      lcd.clear&#40;&#41;; 
    &#125; 

    //ustawienie podwojnego zgrzewu  tralalalala 
    menu1 = 1; 
    bufor2 = podwojnyZgrzew; 
    while &#40;menu1 == 1&#41; &#123; 
      lcd.setCursor&#40;0, 0&#41;; 
      lcd.print&#40;"Zgrzew2&#58;"&#41;; 
      lcd.setCursor&#40;0, 1&#41;; 
      if &#40;bufor2 == true&#41; &#123; 
        lcd.print&#40;"ON"&#41;; 
      &#125; 
      else &#123; 
        lcd.print&#40;"OFF"&#41;; 
      &#125; 
      if &#40;analogRead&#40;A7&#41; >= 890 && analogRead&#40;A7&#41; <= 910&#41; &#123; 
        if &#40;bufor2 == true&#41; &#123; 
          bufor2--; 
        &#125; 
      &#125; 
      else if &#40;analogRead&#40;A7&#41; >= 850 && analogRead&#40;A7&#41; <= 870&#41; &#123; 
        if &#40;bufor2 == false&#41; &#123; 
          bufor2++; 
        &#125; 
      &#125; 

      delay&#40;150&#41;; 
      //wyjscie bez zapisu 
      if &#40;analogRead&#40;A7&#41; >= 960&#41; &#123; 
        menu1 = 0; 
      &#125; 
      else if &#40;analogRead&#40;A7&#41; >= 780 && analogRead&#40;A7&#41; <= 810&#41; &#123; 
        podwojnyZgrzew = bufor2; 
        menu1 = 0; 
        lcd.setCursor&#40;0, 1&#41;; 
        lcd.print&#40;"Zapisuje"&#41;; 
        EEPROM.write&#40;0, podwojnyZgrzew&#41;; 
        delay&#40;50&#41;; 
        lcd.print&#40;"."&#41;; 
        delay&#40;50&#41;; 
        lcd.print&#40;"."&#41;; 
        delay&#40;50&#41;; 
        lcd.print&#40;"."&#41;; 
        delay&#40;100&#41;; 

      &#125; 

      lcd.clear&#40;&#41;; 
    &#125; 
    //koniec ustawienia włączenia zgrzewu2 
    //ustawienie   czesci zgrzewu zgrzewu albo coś jakoś czymś gdzieś po coś 
    //bredzisz... 
    if &#40;podwojnyZgrzew == 1&#41; &#123; 
      menu1 = 1; 
      bufor1 = czasZgrzewaniaTriak2; 
      while &#40;menu1 == 1&#41; &#123; 
        lcd.setCursor&#40;0, 0&#41;; 
        lcd.print&#40;"Zgrzew2&#58; "&#41;; 
        lcd.print&#40;&#40;bufor1&#41;&#41;; 
        lcd.print&#40;"ms"&#41;; 
        lcd.setCursor&#40;0, 1&#41;; 
        lcd.print&#40;"Ustawianie czasu"&#41;; 
        if &#40;analogRead&#40;A7&#41; >= 850 && analogRead&#40;A7&#41; <= 870&#41; &#123; 
          bufor1++; 
        &#125; 
        else if &#40;analogRead&#40;A7&#41; >= 890 && analogRead&#40;A7&#41; <= 910&#41; &#123; 
          if &#40;bufor1 > 1&#41; &#123; 
            bufor1--; 
          &#125; 
        &#125; 
        if &#40;analogRead&#40;A7&#41; >= 820 && analogRead&#40;A7&#41; <= 840&#41; &#123; 
          bufor1 = bufor1 + 10; 
        &#125; 
        else if &#40;analogRead&#40;A7&#41; >= 920 && analogRead&#40;A7&#41; <= 950&#41; &#123; 
          if &#40;bufor1 >= 11&#41; &#123; 
            bufor1 = bufor1 - 10; 
          &#125; 
          else &#123; 
            bufor1 = 1; 
          &#125; 
        &#125; 
        delay&#40;150&#41;; 
        //wyjscie bez zapisu 
        if &#40;analogRead&#40;A7&#41; >= 960&#41; &#123; 
          menu1 = 0; 
        &#125; 
        else if &#40;analogRead&#40;A7&#41; >= 780 && analogRead&#40;A7&#41; <= 810&#41; &#123; 
          czasZgrzewaniaTriak2 = bufor1; 
          menu1 = 0; 
          lcd.setCursor&#40;0, 1&#41;; 
          lcd.print&#40;"Zapisuje"&#41;; 
          EEPROM.write&#40;2, czasZgrzewaniaTriak2&#41;; 
          delay&#40;100&#41;; 
          lcd.print&#40;"."&#41;; 
          delay&#40;100&#41;; 
          lcd.print&#40;"."&#41;; 
          delay&#40;100&#41;; 
          lcd.print&#40;"."&#41;; 
          delay&#40;200&#41;; 

        &#125; 

        lcd.clear&#40;&#41;; 
      &#125; 
    &#125;//chyba koniec ifa 
  &#125; 



   if &#40;analogRead&#40;A6&#41; > 500&#41; &#123; 
   startButtonState = 1;&#125; 
   else &#123; 
   startButtonState = 0; 
    
   &#125; 
    
  //startButtonState = digitalRead&#40;3&#41;; 
  if &#40;startButtonState != lastStartButtonState&#41; &#123; 
    if &#40;startButtonState == HIGH&#41; &#123; 
      lcd.setCursor&#40;0, 0&#41;; 
      lcd.print&#40;"----------------"&#41;; 

      lcd.setCursor&#40;0, 1&#41;; 
      lcd.print&#40;"--**--------**--"&#41;; 
      pozwoleniePracy = 1; 
      if &#40;podwojnyZgrzew == 1&#41; &#123; 
        pozwoleniePracy2 = 1; 
      &#125; 
    &#125; 
  &#125; 
  lastStartButtonState = startButtonState; 



  krokCyklu = 1; 
  //zgrzew właściwy 
  while &#40;pozwoleniePracy == 1&#41; &#123; 
    zeroCrossState = digitalRead&#40;zeroCrossPin&#41;; 
    if &#40;zeroCrossState != lastZeroCrossState&#41; &#123; 
      if &#40;zeroCrossState == HIGH&#41; &#123; 
        delay&#40;100&#41;; 
        digitalWrite&#40;3, HIGH&#41;;
        delay&#40;czasZgrzewaniaTriak&#41;;
        digitalWrite&#40;3, LOW&#41;;
        krokCyklu++; 
        lastZeroCrossState = zeroCrossState;
        pozwoleniePracy = 0;
        delay&#40;timeMidWeld&#41;;
        lcd.clear&#40;&#41;; 
      &#125;
  &#125; 
  &#125;
  krokCyklu = 1; 
  //zgrzew2 
  while &#40;pozwoleniePracy2 == 1&#41; &#123; 
    zeroCrossState = digitalRead&#40;zeroCrossPin&#41;; 
    if &#40;zeroCrossState != lastZeroCrossState&#41; &#123; 
      if &#40;zeroCrossState == HIGH&#41; &#123; 
        delay&#40;100&#41;; 
        digitalWrite&#40;3, HIGH&#41;;
        delay&#40;czasZgrzewaniaTriak2&#41;;
        digitalWrite&#40;3, LOW&#41;;
        krokCyklu++; 
        lastZeroCrossState = zeroCrossState;
        pozwoleniePracy = 0;
        delay&#40;timeMidWeld&#41;;
        lcd.clear&#40;&#41;; 
      &#125;
  &#125; 
  &#125;



&#125;/* --&#40;end main loop &#41;-- */ 


/* &#40; THE END &#41; */
Zamiast czekać na całą pętlę, zrobiłem regulowane opóźnienie wyłączenie triaka, możesz teraz co 1ms ustawiać czas zgrzewu.
Nie wyrażam zgody na wykorzystywanie moich zdjęć w jakiejkolwiek formie bez mojej wiedzy, szczególnie nie życzę sobie czerpania za ich pomocą korzyści finansowych przez osoby trzecie.
ProLight
Posty: 1142
Rejestracja: wtorek 06 gru 2011, 01:16
Lokalizacja: Śląsk

Post autor: ProLight »

Uwaliłem triaka przez przypadkowe zwarcie, zaraz poszukam coś i będę próbował.

Niezmiernie dziękuję za zaangażowanie Panowie, lecę lutować
Główny spammer tego Forum ;)
ProLight
Posty: 1142
Rejestracja: wtorek 06 gru 2011, 01:16
Lokalizacja: Śląsk

Post autor: ProLight »

Pierwszy strzał wychodzi, przy drugim zgrzewarka się zawiesza.
Trzeba włączyć i wyłączyć, później można zrobić jeden zgrzew.

Wgrywałem 3x kod.
Główny spammer tego Forum ;)
ODPOWIEDZ