display.begin(SSD1306_SWITCHCAPVCC, 0x3D);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
#include <U8glib.h>
// display
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Show current display
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void drawScreen() {
u8g.firstPage();
do {
u8g.setFont(u8g_font_unifont);
u8g.drawStr( 10, 20, "spot welding");
u8g.drawStr( 30, 40, " control");
u8g.drawStr( 35, 60, " from yurok");
} while( u8g.nextPage() );
}
const byte thermistorPin = A1; // thermistor
// current temperature
double currentTemp = 0;
void setup() {
Serial.begin(9600);
Serial.println(F("Start init"));
}
void loop() {
get_temp();
Serial.print("Temp:");
Serial.println(currentTemp);
delay(1000);
}
////////////////////////////////////
// get temperature from thermister
////////////////////////////////////
void get_temp(){
int RawADC = analogRead(thermistorPin);
long Resistance;
// Assuming a 100k Thermistor. Calculation is actually: Resistance = (1024/ADC)
Resistance=((102400000/RawADC) - 100000);
/******************************************************************/
/* Utilizes the Steinhart-Hart Thermistor Equation: */
/* Temperature in Kelvin = 1 / {A + B[ln®] + C[ln®]^3} */
/* where: */
/* A = 0,008968616293, B = -0,001212423355 and C = 0,000005416095 */
/******************************************************************/
currentTemp = log(Resistance);
currentTemp = 1 / (0.008968616293 + (-0.001212423355 * currentTemp) + (0.000005416095 * currentTemp * currentTemp * currentTemp));
// convert Kelvin to Celsius
currentTemp = currentTemp - 273.15;
}
// encoder pin and interrupt
const byte encoder_A_Pin = 3;
const byte encoder_B_Pin = 2;
const byte encoderButtonPin = 4;
const byte interruptA = 1;
const byte interruptB = 0;
boolean encoder_rotate = false;
// last state encoder A pin
boolean currentA = false;
// last state encoder B pin
boolean currentB = false;
// Timeout for different long and short button on
const unsigned long timoutHoldButton = 9000; // 9 sec
// Timeout for bounce protect encoder button
const unsigned long debounceEncButton = 20; // 20 ms
// Time on encoder button
unsigned long timeOnEncButton = 0;
// Time off encoder button
unsigned long timeOffEncButton = 0;
unsigned int buttonEncCurrentVal = HIGH;
unsigned int buttonEncLastVal = HIGH;
boolean ignoreEncOff = false;
void setup() {
// encoder init
pinMode(encoder_A_Pin, INPUT);
digitalWrite(encoder_A_Pin, HIGH);
pinMode(encoder_B_Pin, INPUT);
digitalWrite(encoder_B_Pin, HIGH);
pinMode(encoderButtonPin, INPUT);
digitalWrite(encoderButtonPin, HIGH);
// enable encoder change interrupt
attachInterrupt(interruptA, onA, CHANGE);
attachInterrupt(interruptB, onB, CHANGE);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// increment rotate
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void onA(){
if (encoder_rotate) delay (1);
if (digitalRead(encoder_A_Pin) != currentA ) {
currentA = !currentA;
if ( currentA && !currentB ) {
Serial.println("+ encoder");
}
encoder_rotate = false;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// decrement rotate
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void onB(){
if ( encoder_rotate ) delay (1);
if( digitalRead(encoder_B_Pin) != currentB ) {
currentB = !currentB;
if( currentB && !currentA ){
Serial.println("- encoder");
}
encoder_rotate = false;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// main loop
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void loop() {
CurrentTime = millis();
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// ENCODER BUTTON
encoder_rotate = true;
buttonEncCurrentVal = digitalRead(encoderButtonPin);
// Test for button pressed and store the down time
if (buttonEncCurrentVal == LOW && buttonEncLastVal == HIGH && (CurrentTime - timeOffEncButton) > long(debounceEncButton)){
timeOnEncButton = CurrentTime;
}
// Test for button release and store the up time
if (buttonEncCurrentVal == HIGH && buttonEncLastVal == LOW && (CurrentTime - timeOnEncButton) > long(debounceEncButton)){
if (ignoreEncOff == false){
Serial.println(F("short enc"));
}else{
ignoreEncOff = false;
}
timeOffEncButton = CurrentTime;
}
// Test for button held down for longer than the hold time
if (buttonEncCurrentVal == LOW && (CurrentTime - timeOnEncButton) > long(timoutHoldButton)){
Serial.println(F("long enc"));
ignoreEncOff = true;
timeOnEncButton = CurrentTime;
}
buttonEncLastVal = buttonEncCurrentVal;
}
+18 |
1147
26
|
+116 |
2531
32
|
+42 |
2250
78
|
с 7 метров я там только увижу синевато желтое пятно
этот мне нравится гораздо больше
вот только цена указана 'из прошлого'? сейчас типично ~~$1.5
Сравниваю финальную схему и типовое включение 3022 приведенное вами в прошлом обзоре
невооруженным глазом заметно различие :)
там разные варианты возможны
Это в давние времена материалов не было
и корпуса пилили из того, что удавалось найти.
Полагаю, что устраивает «и так», но весь вид портит))
ЗЫ а еще с сайта продавана можно стырить
габаритные размеры дисплея)
И добавить к обзору, лишним не будет ;-)
там в обзоре, где я писал как делал — народ более дикие варианты приводил :)
ну я вроде с линейкой сфотал — и так ясно
Не, я вот это имел ввиду:
А так делается два шаблона из березовой фанеры, и по кольцу получается ровно и аккуратно
впрочем как и питание на дисплей, ну там и так всё понятно
Он немного поменьше… но и цена в два раза ниже, а для настольного варианта и такой достаточно.
реально наверно он больше подойдет — у меня просто был на 1.3" его и воткнул
Свой вариант хотел собрать на промышленных реле времени типа ВЛ-68, но всё руки не доходили.
После вашей статьи появилось вдохновение :), буду собирать ваш вариант однозначно, осталось детали с Али дождаться…
В наличии есть термисторы NTC 10k. Я так понимаю его подключать аналогично, заменив резистор делителя на 10k, или у вас выводится ещё и температура и есть смысл подобрать резистор делителя?
Вопрос тем кто пользовался точечной сваркой: никто не пробовал в центр медного электрода вставлять тугоплавкий (вольфрамовый) электрод от аргонной сварки чтобы уменьшить износ медных электродов?
Не будет ли он залипать и есть ли смысл в такой доработке?
— вольфрам дороже
— имеет высокое сопротивление
— имеет теплопроводность ниже, чем у меди
Альтернатива меди — только серебро :)
2) да 3мм вольфрам будет на несколько мОм иметь большее сопротивление, с учётом что прижат внутри медного электрода по всей длине и торчит только коньчик 1-2мм.
3) тепло отдаст меди НО он не боится нагрева и не становится мягким в отличие от меди.
4) серебро это здорово но я думаю что серебро будет ещё мягче меди.
единственное меня беспокоит не будет ли залипать ( привариваться)
Почему возникла такая идея:
когда-то настраивал на заводе станок точечной сварки с пневмо прижимом и водяным охлаждением электродов и тиристоров, была постоянная болезнь — передержал, слабое усилие прижима, малый проток воды, большой ток — электроды перегревались, медь «отпускалась» становилась как пластилин и в итоге быстро расклёпывался конус электрода.
Конечно там токи были на порядок побольше, но и электроды были по 3см
В любом случае поэкспериментирую с твёрдой вставкой в электрод.
Не будет, вольфрам не склонен к привариванию — из него частенько делают силовые контакты
Собственно не о цвете был мееседж ))
смысла нет — выше ответили
Для чего выведены контактные площадки от выводов контроллера 15, 16, 17, 22, 23, 24, 25, 26, в схеме они вроде не участвуют… можно ли их не разводить?
Насколько разобрался выводы энкодера нужно подключать к контроллеру так: DT -32, CLK -1, SW -2, верно??
Контакты дисплея SDA на 27 и SCL на 28 ноги контроллера подключаются?
30 и 31 (Rx, Tx) в схеме тоже же не применяются ??
На общей схеме не вижу как подключен термистор, на печатке тоже нет ориентира в виде резистора 100К, так как же?
схема есть и печатная плата и код — уж куда подробнее???
— исправить ошибку подключения оптрона PC817
— поправить номиналы некоторых элементов (резисторы 32Ом и 45кОм можно искать очень долго)
— оптрон вроде верно нарисован, что не так?
— резисторы — понятно что близкие надо брать — у меня там составные, поэтому как есть написал :)
Это нам понятно, а остальным?
а тот который 45 кОм — чем он меньше тем раньше будет распознавание начала полуволны, но он будет сильнее греться — следует ставить в пределах 30-80 кОм — потом сдвиг подобрать оптимальный, в моем случае при 45 кОм оптимально 3 мс, думаю при 47 к Ом будет также.
Пологаю, что внешним программатором нужно залить какой-то из HEX файлов, какой?
Еще же и фьюзы нужно задать…?
первый без загрузчика, только через spi потом можно заливать программы
второй с загрузчиком — заливать новое можно будет через tx и rx обновления
фьюзы задайте как у ардуино uno
Arduino Nano w/ ATmega328 Default Fuse Settings:
Low Fuse 0xFF
High Fuse 0xDE
Extended Fuse 0x05
(SPI разрешен, бутлоадер на 256 байт)
Зачем нужен VD1, если оптопару от тока пробоя защищает последовательно включенный VD2.
Конденсаторы C3 и C4 это дополнительные сглаживающие конденсаторы по питанию 5V?
по диодам не так:
VD2 — снимает тепловую нагрузку с резистора, а VD1 защищает оптопару от обратки на емкости диода VD2
Не поленитесь, пожалуйста, объясните. Спасибо!
Всё что приходит на ум, это просто двойное назначение — и защитить оптопару от обратного тока и снять нагрузку с R10. Т.е. можно поставить и резистор вместо диода, но тогда оптопара под угрозой, а раз есть диод, на котором тоже падает напряжение, то R10 можно использовать меньшей мощности. Поправьте, если неверно.
Ещё кстати вопрос — на диоде такое сильное падение напряжения, что забирает пол ватта? Вроде у него не такое уж и большое сопротивление должно быть, нет?
Т.е. получается так:
Можно убрать диод и поставить резистор помощнее — в аспекте ограничения тока через оптрон ничего не изменится, но начнутся проблемы с прикладываемым обратным напряжением к оптрону — возможен пробой, а раз уж всё равно отрезана полуволна, можно бонусом поставить резистор в половину мощности.
Кажется разобрался? Надеюсь ^_^'
— подключить его можно?
R1-7 — мощность?
С1-5 — вольтаж, тип?
Можно ли использовать (завалялись такие дома):
— MOC3062 вместо MOC3021?
— SFH617A-4 вместо РС817 ??
Непонятно по схеме, как подключен термистор?
палочки — мощность в ваттах — одна — 1 Вт, две — 2 Вт, там где не указано 1/4 Вт
конденсаторы тоже обозначены С5 — 400-600 Вольт, остальные — минимум 10 Вольт
Мок — нужен без контроля нуля — и резисторами входными ограничить ток до указанного в даташите
Оптопара нужна быстрая — если скорость вашей не хуже — то можно
— а тип конденсаторов, кроме С4 (электролит, судя по полярности)?
С МОС разобрался, — не подойдёт, она с контролем нуля.
А с SFH617A-4 не совсем понятно, у неё время включения по даташиту — 6мкс, время выключения 2.5мкс, а у вашей РС817 вкл. — 4мкс, выкл. — 3мкс. Как тут быть? Пройдёт?
Что с
После оеисания термистора есть схема его подключения, смотрите внимательней
Если все так как вы говорите, то подойдет
какие характеристики диода MUR?
С А1 и А2 разобрался, — это выводы симистора… ;))
Прочитал 3 части и нигде не указано какой именно должен быть диод :(
Вы софт не апдэйтили пока?
Здравствуйте! спасибо за интерес.
базовым вариантом является полностью готовая плата со всеми
элементами, протестированная. Остается добавить экранчик по вкусу
(0.96" или 1.3"), кнопку или педаль кому как удобнее, светодиод — если
нужен и трансформатор. Стоимость такого варианта 3000 руб. Могу
положить светодиод экранчик и проводки — тогда будет 3500 руб
Возможны еще варианты — голая плата без деталей — 500 руб, плата с
припаянным и прошитым контроллером 700 руб.
Комплекты не высылаю — так как детали проверить не могу.
Доставка примерно 200 руб, независимо от варианта или даже нескольких
плат (условия почты россии).
схема такая: перечисляете, я высылаю и фотаю чек почты, оплачиваете
доставку, либо можете сразу перечислить +200 руб.
все платы я тестирую перед отправкой, но если что-то вдруг не
заработает — готов исправить, либо подскажу советом
mysku.club/blog/russia-stores/48049.html
mysku.club/blog/aliexpress/44073.html
mysku.club/blog/aliexpress/44445.html
mysku.club/blog/aliexpress/45329.html
тут обзоры и описания
Удобнее всего получить на карту сбербанка
63900244 9080470604 — номер карты сбербанка
paypal: maidanov@gmail.com
webmany:
Z780119974580
R832189855189
/home/gas/Arduino/libraries/U8glib/utility/u8g_rot.c:48:1: warning: initialization from incompatible pointer type
u8g_dev_t u8g_dev_rot = { u8g_dev_rot_dummy_fn, NULL, NULL };
^
/home/gas/Arduino/libraries/U8glib/utility/u8g_rot.c:48:1: warning: (near initialization for 'u8g_dev_rot.dev_fn')
Впрочем, все прошилось потом и работает нормально.
Сам с ардуиной просто никогда не сталкивался, очень буду признателен за науку…
Ну и от автора порядок настройки или сразу всё заработает?
Вот прошивка в HEX которой спасибо ему поделился gassag
cloud.mail.ru/public/B9EB/KgFqZq5cW
cloud.mail.ru/public/9gZN/TbXEkAXaq флеш память.
cloud.mail.ru/public/zRjp/Dt8D4cHh7 еепром
насколько я понял потом можно обновить прошивку через ТХ И RX
прошивка с загрузчиком ( клон с ардуино)
извиняюсь что долго(первый раз пользуюсь файлобменником)
Р7- индикаиор рабты?
Р11-?
Прошивку править не надо? в оригинале слежение за 0 приходит на ADC6 у Вас на ADC1,
включение симистра оригинал PB2 у Вас ADC2,
кнопка заруска сварки PB0, у Вас PD6
или где-то не путаю холдное с зеленым
По поводу кнопки сварки — их две. Одна будет на панели, а другая будет выведена для педали.
а именно какой дисплей Nokia
оптрон 1 и 2 ногу поменяй местами.
только не пойму вобще зачем он у тебя стоит?
Зачем стоит что?
я про оптрон. зачем стоит если ты его не подключил к контроллеру. в общем я не понял его подключение ( на вход подаёшь 220 вольт ( кстати 1 и 2 ногу оптрона нужно поменять.) а выход кидаешь на +5 вольт и минус)) в общем ты оптроном ничего не измеряешь.
ошибся не менять 1 и 2 ногу на оптроне а развернуть диод Д2
Да, я понял — во втором варианте я его уже развернул.
микросекунды там не критичны — есть корректировка — задача нарастание фронта определить и подобрать сдвиг
Собрал себе на tiny2313 методом ЛУТ, писал на ассемблере, кода получилось на 630Байт, вывожу на 7-сегментный в два знака от 01 до 99 (количество полупериодов по 10мс), кручу энкодером. Не вижу смысла в серии импульсов, но можно запрограммить и заложить в настройки. Не пищит. Осциллограммы в нагрузке красивые. Тестовый образец (нет корпуса ещё) варит стабильно.
2) Зачем нужен R3 10 кОм?
3) В вашей заводской ПП исподьзуется RGB, тут 2 светодиода (или двухцветный), в чем различие подключения? На какие пины вешать RGB?
4) Где можно скачать последнюю версию прошивки?
2 — чтобы случайно не включился транс, лучше предусмотреть на случай нештатных ситуаций
3 — в заводской также используется 2 цвета — больше не нужно — подключение аналогично
4 — приведенная здесь рабочая — дальнейшие улучшения (а их немало) в готовых платах
'u8g' was not declared in this scope
Что я делаю не так?
Думаю реализовать подобное на ESP32 devkit. Походу можно отказаться (или оставить как опцию) и от энкодера, и от экрана — все параметры, как по мне, проще смотреть/менять в телефоне по bluetooth.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.