本项目由大佬提供。
B站链接:ESP8266 点焊机 3.0 / 开源自制
OSHWHub:ESP8266 点焊机 3.0
因为佬提供 V3.0 和 V2.0 版本,本着追新不追旧的原则,或者研究 V3.0 如何实现项目!
点焊机原理
点焊机的两极点瞬间放置点。由于接触点的接触电阻相对较大,在电流通过的瞬间产生大量的能力,形成熔核,从而达到焊接的目的。
该项目由电容器提供瞬时大电流。
放电电路
通过控制 MOS 管道的通断达到瞬时导通、瞬时放电的效果。
控制电路
电平设置部分是一堆上拉和下拉电阻。设置端口为上拉/下拉。
2.54排针是与中板(放电板)连接控制的接口。
电压采集 30V 这是什么意思?电压输入受到限制 30V 。
照明电路为两个电极提供照明。
但是,这个保险选择不好!
ME3116采用降压稳压器PWM控制模式。
SX1308升压芯片:2V到24V宽输入电压范围。VIN通过 5V or BAT 提供电源。
板载CH340,没必要。自动下载电路。真的很方便。
采用 TC4427 驱动芯片对MOS驱动管道。
程序
#include <Arduino.h> #include <EEPROM.h> #include <U8g2lib.h> #ifdef U8X8_HAVE_HW_SPI #include <SPI.h> #endif #ifdef U8X8_HAVE_HW_I2C #include <Wire.h> #endif U8G2_SSD1306_72X40_ER_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); byte k1 = 0 ; // 按键,低调有效 byte k2 = 2 ; // -按钮,低电平有效 byte k3 = 13 ; // 模式按键,低电平有效 byte g1 = 14; // 焊件检测 byte ADC = A0; // 电池电压检测 byte mos = 12; // MOS 控制 float V = 0; // 电池电压v int hms; // 焊接延时 int yms; // 延时焊接 volatile byte ms = 0; // 模式,其实这里不用 volatile 吧,总共就0~4 /* 中断程序,切换执行模式 */ ICACHE_RAM_ATTR void zd1() { ms ; } /* 参数的上限 */ void key(int &a , int b) { if(digitalRead(k1) != digitalRead(k2)) // KEY1&KEY2 不在同一电平状态 { long int t = millis(); // 记录当前时间 if(digitalRead(k1) == LOW) // KEY1 按下 { a ; // 参数增加 while(digitalRead(k1) == LOW) // 长按情况 { if(millis() - t > 1200) // 长按大于 1200ms { a = a 10; // 增加步长为 10 } if(a > b) // 大于参数上限 a = b ; delay(10); oled(a); // 显示参数 a } } else // KEY2 按下 { a--; // KEY2 按下相同的分析过程 KEY1 按下 while(digitalRead(k2) == LOW) { if(millis() - t > 1200) { a = a - 10; } if(a < 0){ a = 0 ; } delay(10); oled(a); } } sjx(hms, yms); // EEPROM写入数据 } oled(a); } /* 写入Flash数据、焊接延迟、延迟焊接 */ void sjx(int a, int b){ EEPROM.begin(1024); EEPROM.put(0, a); delay(10); EEPROM.put(4, b); delay(10); EEPROM.commit(); //保存更改数据 } /* 读取Flash数据,焊接延迟,焊接延迟 */ void sjd(){ EEPROM.begin(64); EEPROM.get(0, hms); delay(10); EEPROM.get(4, yms); } /* 读取供电电压 */ void BAT(){ V = map(analogRead(A0),0,1023,0,1000); V = V*31.3/1000; } /* 0.420 LED 显示 */ void OLED(){ u8g2.clearBuffer(); ////清除内存中的数据缓冲区 u8g2.setFont(u8g2_font_ncenB12_tr); //设置字体 u8g2.setCursor( 0, 12); u8g2.print(V); u8g2.setCursor(48, 12); u8g2.print("V"); u8g2.setCursor(62, 12); u8g2.print(ms); u8g2.setCursor( 0, 26); u8g2.print(hms);
u8g2.setCursor(48, 26);
u8g2.print("ms");
u8g2.setCursor( 0, 40);
u8g2.print(yms);
u8g2.setCursor(48, 40);
u8g2.print("ms");
u8g2.sendBuffer(); //绘制缓冲区的内容
}
/* 调参界面显示 */
void oled(int a)
{
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB12_tr);
u8g2.clearBuffer();
u8g2.setCursor(0, 14);
if(ms == 3){ // 焊接等待时间调参
u8g2.print("weld ms"); // 焊接等待时间
}else{ // 等待焊接时间调参
u8g2.print("wait ms"); // 等待焊接时间
}
u8g2.setCursor(0, 40);
u8g2.print(a);
u8g2.sendBuffer();
}
/* 延时函数(ms) */
void sj(int a)
{
long int i = millis();
while((millis() - i) < a)
OLED();
}
/* 自动模式 */
void zdhj()
{
if(digitalRead(g1) == HIGH) // 检测是否有焊件
{
sj(yms); // 延时函数充电(ms)
digitalWrite(mos,HIGH); // 导通MOS放电
sj(hms); // 延时放电时间
digitalWrite(mos,LOW); // 关闭MOS
}
}
/* 手动模式 */
void sddh()
{
if(digitalRead(g1) == HIGH) // 检测是否有焊件
{
if(digitalRead(k1) == LOW || digitalRead(k2) == LOW ) // KEY1/KEY2按下
{
sj(yms); // 延时函数充电(ms)
digitalWrite(mos,HIGH); // 导通MOS放电
sj(hms); // 延时放电时间
digitalWrite(mos,LOW); // 关闭MOS
}
}
}
/* 调节焊接延时时间 */
void hjms()
{
key(hms, 1000);
}
/* 调节延时焊接时间 */
void ysms()
{
key(yms, 3000);
}
void setup()
{
u8g2.begin();
pinMode(k1 ,INPUT_PULLUP);
pinMode(k2 ,INPUT_PULLUP);
pinMode(k3 ,INPUT_PULLUP);
pinMode(g1 ,INPUT);
pinMode(mos ,OUTPUT);
digitalWrite(mos,LOW);
/* 中断函数 */
attachInterrupt(k3, zd1, RISING); // 上升沿触发,按键松开触发
sjd(); // 读取Flash数据
}
void loop()
{
BAT();
switch(ms)
{
case 0 : OLED();
break;
case 1 : zdhj(); // 自动模式
OLED();
break;
case 2 : sddh(); // 手动模式
OLED();
break;
case 3 : hjms(); // 焊接时间调参
break;
case 4 : ysms(); // 延时焊接调参
break;
default: ms = 0; // 超出置0
break;
}
}
U8g2库的详细使用
链接:https://pan.baidu.com/s/1cm7Nr6hIkZjasgeOpbPCCQ 提取码:k7d3
总结
给以后做点焊机提供了思路,是一个好项目!值得学习!