Poniżej schemat.
Dodałem zasilacz oraz tranzystory sterujące przekaźnikiem i buzzerkiem.
Pinologia została zmieniona na etapie projektowania PCB, tak by dało się
upchnąć wszystko na jak najmniejszej płytce.
Zmiany w software dotyczą tylko zmienionych połączeń wyświetlacza, przycisków,
wyjść sterujących.
Na PCB celowo umieściłem całe arduino (a nie tylko procek z niego) tak by każdy poradził sobie
z zaprogramowaniem układu - nie jest potrzebny żaden programator - moduł podłączmy do kompa i
wczytujemy kod z Arduino IDE.
W zasadzie największa praca była z PCB.
kod:
Kod:
#include <Button.h>
#include <LiquidCrystal.h>
#include <EEPROM.h>
const int rs = 13, en = 14, d4 = 15, d5 = 16, d6 = 17, d7 = 18;
/*EEPROM
ADRES (1) - pre
(5) - przerwa
(9) - impuls
(13)- pauza
*/
Button menu = Button(4, PULLUP);
Button plus= Button(2,PULLUP);
Button minus= Button(3,PULLUP);
Button start= Button(0,PULLUP);
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
long pre=0; //czas preimpulsu
long przerwa=0; //czas przerwy
long impuls=0; //czas impulsu zgrzewania
long pauza=0; //czas pomiedzy zgrzewami
int test;
void setup() {
pinMode(5, OUTPUT); //buzzer PIN<--- BUZ --->+5V
pinMode(6, OUTPUT); // sterowanie PIN<--- PK --->+5V
digitalWrite(6,LOW);
digitalWrite(5,LOW);
pinMode(0, INPUT_PULLUP); //przycisk menu
pinMode(2, INPUT_PULLUP); //przycisk plus
pinMode(3, INPUT_PULLUP); //przycisk minus
pinMode(4, INPUT_PULLUP); //przycisk start
lcd.begin(16, 2);
digitalWrite(13,HIGH);
digitalWrite(18,HIGH);
lcd.setCursor(0, 0);
lcd.print("ZGRZEWARKA V 1.0");
lcd.setCursor(1, 1);
lcd.print("www.rcclub.eu");
delay(2000);
lcd.setCursor(1, 1);
lcd.print(" >> GJERY << ");
delay(1000);
lcd.setCursor(1, 1);
lcd.print(">> ANDRZEJ_P << ");
delay(1000);
lcd.setCursor(1, 1);
lcd.print(" >> DAREK_OP << ");
delay(1000);
lcd.setCursor(1, 1);
lcd.print(" 23 MAJA 2017 ");
delay(3000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Zgrzewarka OK");
lcd.setCursor(0, 1);
lcd.print("Nacisnij START");
pre= EEPROModczyt(1);
przerwa= EEPROModczyt(5);
impuls= EEPROModczyt(9);
pauza= EEPROModczyt(13);
if((pre>200)||(przerwa>200) || (impuls>3000) || (pauza>3000))
{
pre=0;
przerwa=0;
impuls=0;
pauza=0;
}
if((pre<0)||(przerwa<0) || (impuls<0) || (pauza<0))
{
pre=0;
przerwa=0;
impuls=0;
pauza=0;
}
} // koniec setup
void loop() { // petla glowna
if(menu.uniquePress()){
zmiany();
}
if(minus.uniquePress()){
parametry();
}
if(start.uniquePress()){
praca();
}
} // koniec petli glownej
//******************************************
//------------------------------------------------------
void EEPROMzapis(int address, long value)
{
byte four = (value & 0xFF);
byte three = ((value >> 8) & 0xFF);
byte two = ((value >> 16) & 0xFF);
byte one = ((value >> 24) & 0xFF);
//Write the 4 bytes into the eeprom memory.
EEPROM.write(address, four);
EEPROM.write(address + 1, three);
EEPROM.write(address + 2, two);
EEPROM.write(address + 3, one);
}
//------------------------------------------------------
long EEPROModczyt(long address)
{
//Read the 4 bytes from the eeprom memory.
long four = EEPROM.read(address);
long three = EEPROM.read(address + 1);
long two = EEPROM.read(address + 2);
long one = EEPROM.read(address + 3);
return ((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF);
}
//------------------------------------------------------
void zmiany()
{
//*****************************************
delay(200);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("czas PREIMPULSU");
lcd.setCursor(11,1);
lcd.print("[200]");
lcd.setCursor(0, 1);
lcd.print(pre);
lcd.print("mS ");
test=0;
while(test==0)
{
if (menu.uniquePress()){test=1;}
//ustawianie czasu preimpulsu
if(plus.uniquePress())
{
pre+=10;
if (pre>=200){pre=200;}
lcd.setCursor(0, 1);
lcd.print(pre);
lcd.print("mS ");
}
if(minus.uniquePress())
{
pre-=10;
if (pre<=0){pre=0;}
lcd.setCursor(0, 1);
lcd.print(pre);
lcd.print("mS ");
}
}
//*****************************************
delay(200);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("czas PRZERWY");
lcd.setCursor(10,1);
lcd.print("[200]");
lcd.setCursor(0, 1);
lcd.print(przerwa);
lcd.print("mS ");
test=0;
while(test==0)
{
if (menu.uniquePress()){test=1;}
//ustawianie czasu przerwy
if(plus.uniquePress())
{
przerwa+=10;
if (przerwa>=200){przerwa=200;}
lcd.setCursor(0, 1);
lcd.print(przerwa);
lcd.print("mS ");
}
if(minus.uniquePress())
{
przerwa-=10;
if (przerwa<=0){przerwa=0;}
lcd.setCursor(0, 1);
lcd.print(przerwa);
lcd.print("mS ");
}
//zapis do epromu
}
//*****************************************
delay(200);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("czas ZGRZEWU");
lcd.setCursor(10,1);
lcd.print("[3000]");
lcd.setCursor(0, 1);
lcd.print(impuls);
lcd.print("mS ");
test=0;
while(test==0)
{
if (menu.uniquePress()){test=1;}
//ustawianie czasu zgrzewu
if(plus.uniquePress())
{
impuls+=10;
if (impuls>=3000){impuls=3000;}
lcd.setCursor(0, 1);
lcd.print(impuls);
lcd.print("mS ");
}
if(minus.uniquePress())
{
impuls-=10;
if (impuls<=0){impuls=0;}
lcd.setCursor(0, 1);
lcd.print(impuls);
lcd.print("mS ");
}
}
//*****************************************
delay(200);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("czas PAUZY");
lcd.setCursor(10,1);
lcd.print("[3000]");
lcd.setCursor(0, 1);
lcd.print(pauza);
lcd.print("mS ");
test=0;
while(test==0)
{
if (menu.uniquePress()){test=1;}
//ustawianie czasu pauzy
if(plus.uniquePress())
{
pauza+=10;
if (pauza>=3000){pauza=3000;}
lcd.setCursor(0, 1);
lcd.print(pauza);
lcd.print("mS ");
}
if(minus.uniquePress())
{
pauza-=10;
if (pauza<=0){pauza=0;}
lcd.setCursor(0, 1);
lcd.print(pauza);
lcd.print("mS ");
}
}
EEPROMzapis (1,pre);
EEPROMzapis (5,przerwa);
EEPROMzapis (9,impuls);
EEPROMzapis (13,pauza);
delay(200);
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("CZEKAJ!!");
lcd.setCursor(0,1);
lcd.print("zapis ustawien");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Zgrzewarka OK");
lcd.setCursor(0, 1);
lcd.print("Nacisnij START");
} // koniec podprogramu zmiany
//*****************************************
void parametry()
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Czas PREIMPULSU");
lcd.setCursor(0,1);
lcd.print(pre);
lcd.print("ms");
delay(1500);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Czas PRZERWY");
lcd.setCursor(0,1);
lcd.print(przerwa);
lcd.print("ms");
delay(1500);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Czas ZGRZEWU");
lcd.setCursor(0,1);
lcd.print(impuls);
lcd.print("ms");
delay(1500);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Czas PAUZY");
lcd.setCursor(0,1);
lcd.print(pauza);
lcd.print("ms");
delay(1500);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Zgrzewarka OK");
lcd.setCursor(0, 1);
lcd.print("Nacisnij START");
}
//*****************************************
void praca()
{
lcd.clear();
lcd.print("Zgrzewanie ....");
digitalWrite(6,HIGH);
delay(pre);
digitalWrite(6,LOW);
delay(przerwa);
digitalWrite(6,HIGH);
delay(impuls);
digitalWrite(6,LOW);
digitalWrite(5,HIGH);
delay(55);
digitalWrite(5,LOW);
lcd.clear();
lcd.print(" CZEKAJ!! ");
delay(pauza);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Zgrzewarka OK");
lcd.setCursor(0, 1);
lcd.print("Nacisnij START");
}
//*****************************************