2024. április 25., csütörtök

Gyorskeresés

Útvonal

Cikkek » Modding rovat

Ponthegesztő készítése Arduinoval

Ez a ponthegesztő bárki által megépíthető, csak egy autó akkumulátorra lesz szükségünk és néhány alkatrészre.

[ ÚJ TESZT ]

Szükséges alkatrészek

Először az Arduino-ról.
Sokak számára ismerős lehet már ez a név. Sok mindent meg lehet vele alkotni egyszerűen és olcsón. A C nyelvnek egy kicsit módosított változatát használja, így aki azt ismeri, az valamennyire könnyedén bele tud jönni ebbe is.

Maga a hardverje mivel nyílt forráskódú, ezért elég sokan készíthetnek ilyeneket. Ebay-ről rendelve akár 7-800 Ft-ért is lehet ezeket kapni. Ahhoz, hogy programot írjunk rá, le kell szedni a honlapján található Arduino IDE programot. Ez teljesen ingyenes, így nem jelenthet gondot.

A teljesítmény elektronika része az alábbi ábrán található:

Szükségünk lesz először a Mosfetre. Itt a kapcsolási rajzon nem jelöltem, de célszerű több darabot használni párhuzamosan, legalább hárommal már biztos nem menne tönkre.

Kell hozzá egy Mosfet driver, amiből én egy TC4420-ast választottam, ez maximum 6A-t képes kapcsolni. Illetve érdemes közvetlenül a lábához bekötni majd egy legalább 100nF-os kerámia kondenzátort, mert kisebb a belső ellenállása, mint egy fólia kondenzátornak.

A lábak bekötése itt látható:

Kijelzőből pedig sok félét lehetne használni, léteznek grafikus kijelzők is, mint a NOKIA 5110 vagy akár OLED kijelzők is. Ha valaki nagyon kis méretekben gondolkodik, ezekkel meg lehetne valósítani, de én egy hagyományos 1602-es LCD kijelzőt használtam, ami sokkal nagyobb ezektől.

Amivel pedig tudjuk majd változtatni az adatokat az lehetne nyomógomb is, de én enkódert használtam.
Ezeket lehet kapni ebay-en pár száz Ft-okért.

Majd jöhet a megépítése, a kapcsolási rajz az így néz ki:

Ebben a tervező programban nem találtam meg ezt a TC4420-as drivert, így egy sima 8 pines OPA-t tettem bele, de egyébként úgy van bekötve, mint a drivert kellene majd. Bal oldalt látni a teljesítmény részt. Az egyszerűség kedvéért itt is csak egy Mosfet-et tettem be.

Utána következik az 5V-os feszültség stabilizátor. Erre azért van szükség, mert a Mosfet drivernek minimum 10V-a van szüksége, míg az áramkör többi részének pedig 5V-ra. Majd láthatjuk a NANO-t, mellette pedig először az enkóderhez tartozó nyomógombot, és magát az enkódert. Majd pedig a "ravaszt", amit benyomva lehet majd hegeszteni.

A kijelzőt én egy I2C LCD konverter segítségével működtetem. Ez annyit csinál, hogy egy I2C busz segítségével lehet működtetni az LCD kijelzőnket, tehát a 16 kivezetés lecsökken 4-re. Ez azért is jó, mert nem a digitális I/O portokat használja, hanem az analóg lábakon található SCL-t (A5) és SDA-t (A4).

A hozzá való könyvtárakat én innen töltöttem le:[link]
Mielőtt feltöltődik a végleges program, az EEPROM-ot ki kell előtte törölni, hogy ne csupa 255-öt írjon ki.

Az Arduinohoz tartozó programkód itt található:
#include<EEPROM.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

const int buttonPin1 = 2; //Enkóder nyomógomb
const int fetPin = 13; //Mosfet
int d = 0;
int dlast;
int a;
int b;
int c;
int m = 1;
int A = 3;
int B = 4;
int x = 0;
int buttonPin = 5;
int ALast = LOW;
int n = LOW;

void setup() {
pinMode (A, INPUT);
pinMode (B, INPUT);
pinMode (buttonPin, INPUT);
pinMode(fetPin, OUTPUT);
pinMode(buttonPin1, INPUT_PULLUP);
digitalWrite(fetPin, LOW);
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Hello!");
lcd.setCursor(0, 0);
delay(2000);
lcd.print(" ");
lcd.setCursor(1, 0);
lcd.print("Mem");
lcd.setCursor(5, 0);
lcd.print("P1");
lcd.setCursor(9, 0);
lcd.print("D");
lcd.setCursor(13, 0);
lcd.print("P2");
lcd.setCursor(1, 1);
m = EEPROM.read(1023);
lcd.print(m);
lcd.setCursor(5, 1);
a = EEPROM.read(m * 3);
b = EEPROM.read(m * 3 + 1);
c = EEPROM.read(m * 3 + 2);
lcd.print(a);
lcd.setCursor(9, 1);
lcd.print(b);
lcd.setCursor(13, 1);
lcd.print(c);
}

void loop() {
if (digitalRead(buttonPin1) == LOW) {
d++;
if (d > 4)
d = 0;
if (digitalRead(buttonPin1) == LOW)
while (digitalRead(buttonPin1) == LOW)
{
delay(10);
}
}

if (d != dlast) {
switch (d) {
case 0:
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(4, 1);
lcd.print(" ");
lcd.setCursor(8, 1);
lcd.print(" ");
lcd.setCursor(12, 1);
lcd.print(" ");
break;

case 1:
lcd.setCursor(0, 1);
lcd.print(">");
break;

case 2:
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(4, 1);
lcd.print(">");
break;

case 3:
lcd.setCursor(4, 1);
lcd.print(" ");
lcd.setCursor(8, 1);
lcd.print(">");
break;

case 4:
lcd.setCursor(8, 1);
lcd.print(" ");
lcd.setCursor(12, 1);
lcd.print(">");
break;

}
}
dlast = d;
n = digitalRead(A);
if ((ALast == HIGH) && (n == LOW)) {
if (digitalRead(B) == LOW) {
switch (d) {
case 1:
if (m > 1)
m--;
EEPROM.write(1023, m);
lcd.setCursor(1, 1);
lcd.print(" ");
lcd.setCursor(1, 1);
lcd.print(m);
a = EEPROM.read(m * 3);
b = EEPROM.read(m * 3 + 1);
c = EEPROM.read(m * 3 + 2);
lcd.setCursor(5, 1);
lcd.print(" ");
lcd.setCursor(5, 1);
lcd.print(a);
lcd.setCursor(9, 1);
lcd.print(" ");
lcd.setCursor(9, 1);
lcd.print(b);
lcd.setCursor(13, 1);
lcd.print(" ");
lcd.setCursor(13, 1);
lcd.print(c);
break;

case 2:
if (a > 0)
a--;
EEPROM.write(m * 3, a);
lcd.setCursor(5, 1);
lcd.print(" ");
lcd.setCursor(5, 1);
lcd.print(a);
break;

case 3:
if (b > 0)
b--;
EEPROM.write(m * 3 + 1, b);
lcd.setCursor(9, 1);
lcd.print(" ");
lcd.setCursor(9, 1);
lcd.print(b);
break;

case 4:
if (c > 0)
c--;
EEPROM.write(m * 3 + 2, c);
lcd.setCursor(13, 1);
lcd.print(" ");
lcd.setCursor(13, 1);
lcd.print(c);
break;
}
} else {
switch (d) {
case 1:
if (m < 255)
m++;
EEPROM.write(1023, m);
lcd.setCursor(1, 1);
lcd.print(m);
a = EEPROM.read(m * 3);
b = EEPROM.read(m * 3 + 1);
c = EEPROM.read(m * 3 + 2);
lcd.setCursor(5, 1);
lcd.print(" ");
lcd.setCursor(5, 1);
lcd.print(a);
lcd.setCursor(9, 1);
lcd.print(" ");
lcd.setCursor(9, 1);
lcd.print(b);
lcd.setCursor(13, 1);
lcd.print(" ");
lcd.setCursor(13, 1);
lcd.print(c);
break;

case 2:
if (a < 255)
a++;
EEPROM.write(m * 3, a);
lcd.setCursor(5, 1);
lcd.print(" ");
lcd.setCursor(5, 1);
lcd.print(a);
break;

case 3:
if (b < 255)
b++;
EEPROM.write(m * 3 + 1, b);
lcd.setCursor(9, 1);
lcd.print(" ");
lcd.setCursor(9, 1);
lcd.print(b);
break;

case 4:
if (c < 255)
c++;
EEPROM.write(m * 3 + 2, c);
lcd.setCursor(13, 1);
lcd.print(" ");
lcd.setCursor(13, 1);
lcd.print(c);
break;
}
}
}
ALast = n;


if (digitalRead(buttonPin) == HIGH) {
digitalWrite(fetPin, HIGH);
delay(a);
digitalWrite(fetPin, LOW);
delay (b);
digitalWrite(fetPin, HIGH);
delay(c);
digitalWrite(fetPin, LOW);
delay(200);
if (digitalRead(buttonPin) == HIGH)
while (digitalRead(buttonPin) == HIGH)
{
delay(10);
}
}
}

A kapcsolási rajzot igyekeztem úgy berajzolni, ha valaki úgy építi meg és ezt a programot tölti fel az Arduino-ra, akkor működjön úgy is, de ez egyébként már a végleges verzióhoz tartozik.

A cikk még nem ért véget, kérlek, lapozz!

Azóta történt

Előzmények

Hirdetés

Copyright © 2000-2024 PROHARDVER Informatikai Kft.