Паяльная станция из ардуино

Ganster41
Offline
Зарегистрирован: 03.11.2014

Не сочтите за рекламу, но раз уж вы тоже из этой страны, то тут подешевле будет, чем у вас. Хотя и подороже, чем у китайцев.

a5021
Offline
Зарегистрирован: 07.07.2013

ng0d пишет:

Ребята, я вроде бы скидывал ссылку на БП 24В 2А (48 Ватт) за 7 долларов, его куда хочешь хватает, помойму это не дорого, самому делать то же самое выйдит, чем не устраивает.

Так у всех разные реализации. Мне, например, внешний блок вообще не нужен, т.к. паялка собрана в корпусе от сидюка и запитана через SEPIC от моего настольного компьютера. Уж довольно долгое время это хозяйство работает в полной гармонии друг с другом. Все руки не доходят установить в пустой пятидюймовый отсек, чтобы на столе место не занималось, да и были идеи вообще переделать в корпусе от флопповода, благо размеры электронной начинки позволяют.

Я уже как-то распространялся здесь о том, что порой идея к каждому устройству городить свой БП не очень оправдана, если на расстоянии вытянутой руки уже находятся электронные приборы, имеющие собственные блоки питания. Именно поэтому и на основании проверенного опыта я бесплатно рекламирую дешевые преобразователи, которые можно прицепить к чему угодно и получить нужные напряжения с минимумом усилий.

ng0d
Offline
Зарегистрирован: 04.05.2013

У меня лично "паялка" это отдельное устройство, мне не нужны лишние помехи на цифровые устройства. потому что информация порой стоит в сотни раз дороже. Насчёт БП я уже писал, повторяться не буду.

a5021
Offline
Зарегистрирован: 07.07.2013

Импульсный БП компьютера это офигенной мощности источник помех, где на его фоне все остальные источники просто меркнут. Я вам, как практик практику говорю, что всякая более-менее критичная подсистема в современном ПК имеет собственный стабилизатор или преобразователь, а то и не один. Вам, как человеку искушенному в вопросах электромагнитной совместимости, советую внимательно посмотреть на материнскую плату близ процессорного сокета. Там вы без труда обнаружите несколько колец с намотаной на них толстой проволокой. Все вместе они представляют собой элементы довольно серьезного многофазного (с точки зрения помех вообще полный мрак) DC-DC, мощностью около двухсот ватт, на фоне которого упомянутая ранее платка повышайки выглядит, как детский пистолетик напротив автомата калашникова. И, понимаете, какое дело, никто отчего-то не заламывает руки и не вопит в иссуплении о том, что "информация порой стоит в сотни раз дороже". Как оказывается бывает хорошо, когда не знаешь, что такая страшная опасность притаилась у самого сердца столь нежной и важной системы.

Но преобразователь близ процессора это еще фигня по сравнению с тем, что устраивают в компьютере современные мощные видеокарты. Если смотреть с позиций стороннего наблюдателя, то игровая карта -- это некое устройство, которое может хаотически менять собственное энергопотребление с размахом в несколько сотен ватт (прмер на вскидку -- довольно древняя RADEON HD 4870 X2 с пиковым потреблением в 322 ватта). Там  броски тока под сотню ампер, но по неведомой причине это никого не приводит в священный трепет. И с какой стати теперь дОлжно усташиться паялки с ее токами не дотягивающими до двух ампер в рабочем режиме? Я бы с большим интересом выслушал подробное описание тех бед и ужасов, которые неумолимо настигнут любителей подключать небольшие нагрузки к БП ATX противоестественным, так сказать, образом.

Я теперь понимаю, как комфортно и удобно быть чистым практиком. Можно бесконечно лелеять собственный опыт, ничуть не считаясь с чужим. Я ж написал, что надежная работа этой связки проверена довольно длительной эксплуатацией. Отчего вы не хотите полагаться на результаты реального эксперимента, приводя в качестве контр-аргумента довольно отвлеченные коментарии о какой-то там информации, которая уж очень много стоит? У меня тоже на компе есть информация, потеря которой была бы для меня чувствительна, но я не испытываю ни малейших опасений вследствие угрозы для нее со стороны подключенной паялки. Одно дело богобоязненные страхи секретарш, которые пугают друг друга выдуманными историями про коварство компьютеров, а другое дело понимание того, что ты конкретно делаешь. Не стоит мешать одно с другим.

AnarchySaur
Offline
Зарегистрирован: 31.12.2014

a5021 пишет:

Двести пятьдесят рублей тоже, конечно, деньги, но мне кажется, что проще все же купить.

Спасибо, вчера еще купил за 3,8 бакса вместе с ардуинкой, 6-пиновый програматором, понижайкой для питания ардуино, дисплеем нокии, трансферной бумагой для лута и прочей мелочевкой.

Так взял паяльник типа хако 907 за 5,6 и фен за 12,87 + насадки универсальные 5 штук за 3,8. Уже все отправили.

renoshnik пишет:

У меня тут http://www.e-voron.dp.ua/catalog/023202  получается около 560 руб ...

Ну мне на ебее вышло дешевле - за 3,8 бакса (должно быть 63 грн), чем в вороне за 180 грн и на аукро за 95 грн.

a5021 пишет:

 Все руки не доходят установить в пустой пятидюймовый отсек, чтобы на столе место не занималось, да и были идеи вообще переделать в корпусе от флопповода, благо размеры электронной начинки позволяют.

Ото замахнулся, реально удобно..)) Из системника торчит фен и паяльник, 2 в 1..))

Сам думаю использовать itx-системник с его родным бп под это дело, у меня есть три тонких клиента с бп фсп на борту в 60 Вт или вот купил на дня пару компов на атоме за гроши, там фсп стоят 170 Вт.

a5021
Offline
Зарегистрирован: 07.07.2013

AnarchySaur пишет:

трансферной бумагой для лута

Не пробовали использовать пищевую фольгу для этих целей? Никому свои предпочтения не навязываю, но лично мне "ЛУТ по фольге" нравится больше.

Цитата:

Сам думаю использовать itx-системник с его родным бп под это дело, у меня есть три тонких клиента с бп фсп на борту в 60 Вт или вот купил на дня пару компов на атоме за гроши, там фсп стоят 170 Вт.

Я как-то отдельно не оговаривал, т.к. предполагал это само собой разумеющимся, но при использовании рабочего компа для питания внешних нагрузок стоит не забывать про суммарную потребляемую мощнось от компьютерного БП. В средней руки домашних компах обычно есть избыточная мощность, которую можно безболезненно отдать "на сторону", но во всяких "тонких" системах оптимизма на этот счет поменьше. Впрочем, это довольно просто выясняется экспериментальным путем. Сколько мне попадалось различных FSP, все они были весьма добротными блоками, которые уморить себя просто так не дадут.

renoshnik
Offline
Зарегистрирован: 11.04.2013
Небольшое дополнение для тех, кто решил собрать паяльную станцию. Вначале ссылка на теорию физики терморезисторов http://lib.qrz.ru/book/export/html/6112
Два вопроса, которые меня интересовали это гистерезис в показаниях и зависимость формы графика от дополнительного резистора (в делителе). В общем, пришлось мне вспоминать молодость и студенческие лабораторные. Вооружившись мультиметром с термопарой, я приступил к замерам.
 
 
Не буду мучать подробностями процесса просто предоставляю результат. Сделал замеры температуры и напряжения на выходе термодатчика паяльника. Замерял в два этапа, при повышении и при понижении температуры. Естественно получилась кривая гистерезиса, но изменять программу, что бы отслеживать эту кривую посчитал не целесообразным, поэтому выбрал средние значения и построил диаграмму.
 
 
Потом на диаграмму «кинул» трендовую линию и получил уравнение этой линии. С примененным у меня дополнительным резистором (200 Ом) график имел линейную зависимость.
На основании полученных данных сделал изменения в коде программы, чисто субъективно мне работа станции с новым кодом больше понравилась …
 
Ниже измененный код программы:
 
/*
********************************************************
********************** - B -  Pin **********************
Digispark B5A0 – ATtiny85 pin 1 – (reset)
Digispark B3A3 – ATtiny85 pin 2 – управление транзистором
Digispark B4A2 – ATtiny85 pin 3 – вход датчика температуры паяльника
Digispark B0   – ATtiny85 pin 5 – ЛСД  di(high)
Digispark B1   – ATtiny85 pin 6 – ЛСД  sk(low)
Digispark B2A1 – ATtiny85 pin 7 – вход резистор настройки температуры
********************************************************
********************************************************
PORTB |= (1<<2); установить в порт *B2* лог 1
PORTB &=~ (1<<2);  установить в порт *B2* лог 0
PORTB ^= (1<<2);  инвертировать состояние порта *B2*
********************************************************
*/

#include <util/delay.h>
const int potSensorPin = A1; // порт подключения регулятора
int tempSet = 0; // задаваемая температура
const int heaterSensorPin = A2; // порт подключения термистора паяльника
int tempRead = 0; // температура паяльника

byte tR1, tR2, tR3, tH1, tH2, tH3, z;

void setup() {   
DDRB = B001011; //  назначает порты * выходными, 2 входной
PORTB = B000001; //  устанавливает на портах 1,2 LOW на * HIGH
}

void loop(){

tempRead = getOversampled(heaterSensorPin); 
double NmHot = (tempRead-310)/5; 
double ztH = (6.7225*NmHot)+135.38;
int tH = int(ztH);
if (tempRead >= 315)  {
tH1 = tH/100;
if (tH1==0) tH1=10;
tH2 = (tH%100)/10;
if (tH2==0) tH2=10;
tH3 = tH%10;
if (tH3==0) tH3=10; }

if (tempRead < 315)  { tH1=15; tH2=15; tH3=15; }   

// ***************************************************************
// ***************************************************************

tempSet = map(getOversampled(potSensorPin), 0, 1023, 315, 450); 
double NmSet = (tempSet-310)/5;
double ztR = (6.7225*NmSet)+135.38;
int tR = int(ztR);
tR1 = tR/100;
if (tR1==0) tR1=10;
tR2 = (tR%100)/10;
if (tR2==0) tR2=10;
tR3 = tR%10;
if (tR3==0) tR3=10;

if (ztR > ztH) PORTB |= (1<<3); 
if (ztR <= ztH) PORTB &=~ (1<<3); 

if (++z >= 50) { 
    z = 0; 
writeDigit(0);
writeDigit(tH1);
writeDigit(tH2);
writeDigit(tH3);
writeDigit(0);
writeDigit(0);
writeDigit(tR1);
writeDigit(tR2);
writeDigit(tR3);
writeDigit(0); }
}

void writeDigit(byte d) {
for (byte i=0; i<4; i++) {
    PORTB |=(1<<1); 
_delay_us(20);     
    digitalWrite(0, d&(1<<(3-i))); 
_delay_us(10); 
    PORTB ^=(1<<1); 
_delay_us(30); } 
// _delay_us(70);   
}

int getOversampled(int sensorPin) {
    unsigned long int res = 0;
  for (byte j = 0; j < 64; j++) res += analogRead(sensorPin);
return res >> 6;
}

И немного фотографий:

Такая себе станция в панк стиле …
 
 
Это мне подарили блок питания для станции, работает все отлично …
 
 
a5021
Offline
Зарегистрирован: 07.07.2013

renoshnik пишет:

void loop(){

tempRead = getOversampled(heaterSensorPin); 
double NmHot = (tempRead-310)/5; 
double ztH = (6.7225*NmHot)+135.38;

Вот это место не очень удачное, на мой взгляд. Выражение "(tmpRead - 310) / 5" будет вычисляться в целочисленном виде, а потом преобразовываться к формату с плавающей точкой. Мне кажется, это не совсем то, чего вы хотели. Выражение "(6.7225*NmHot)+135.38" есть смысл писать без скобок, т.к. скобки здесь не меняют порядок действий. Эти же замечания можно отнести к аналогичному блоку кода для вычислений с использованием переменной tempSet.

Еще есть некоторые сомнения по поводу целесообразности использования вычислений с плавающей точкой в данном месте программы. Плавучка у ардуины медленная, а в блоке loop() есть смысл уделить повышенное внимание скорости выполнения кода.

renoshnik
Offline
Зарегистрирован: 11.04.2013

to a5021

по поводу плавающей точки - вы правы... а как такой вариант ?

tempRead = getOversampled(heaterSensorPin); 
double NmHot = (tempRead-310.0)/5.0; 
double ztH = 6.7225*NmHot+135.38;

по поводу скобок - попробую без них, просто однажды столкнулся с НЕ корректным вычислением без скобок вот и перестраховываюсь.

по поводу скорости - я думал, что объем программы не большой и это не скажется критично на её работу, и не думал, что для регулировки температуры паяльника (который обладает определенной инертностью) особое быстродействие не требуется.

 

a5021
Offline
Зарегистрирован: 07.07.2013

Если вы настаиваете на использовании плавучки, то есть смысл хотя бы уменьшить объем вычислений, путем упрощения выражения. Вторую строку сократить, а третью записать как-то так:

double ztH = 1.3445 * (tempRead - 310) + 135.38;

Убирается "тоскливое" деление с плавающей точкой и часть действий можно оставить в целых числах.

Насчет скорости и инертности: на сайте Hakko есть графики температур, снятые с жала паяльника паяльника в процесе пайки. Там можно видеть, как в момент пайки происходит падение температуры жала со скоростью в районе сотни градусов в секунду. Не готов ответить, можно ли это отражать максимально частым опросом датчика температуры (инертность все же будет препятствовать этому), но общий замысел, что чем чаще, тем лучше, имеет право на существование.

renoshnik
Offline
Зарегистрирован: 11.04.2013

если упрощать выражение, тогда думаю уже так сделать ...

double ztH = 1.3445 * tempRead - 281.415 ;

по инерции - к сожалению фирменой станции у меня нет, что бы сравнить работу, но пока работа моего хендмейда работает нормально (на мой взгляд) ...

 

a5021
Offline
Зарегистрирован: 07.07.2013

Нет, так скобки раскрывать нельзя. Вспоминайте математику. :)

renoshnik
Offline
Зарегистрирован: 11.04.2013

a5021 пишет:

Нет, так скобки раскрывать нельзя. Вспоминайте математику. :)

помоему все правильно ... (хотя школу закончил 33 года назад...) 

tempSet = map(getOversampled(potSensorPin), 0, 1023, 315, 450);	
// возьмем для примера  tempSet = 387 тогда получаем
	
//double NmSet = (tempSet-310.0)/5.0;  =  15.4
//	double ztR = (6.7225*NmSet)+135.38;  =  238.9065

	double ztR = 1.3445 * tempSet - 281.415 ;  =  238.9065

 

a5021
Offline
Зарегистрирован: 07.07.2013

Да, вы правы. Это я ошибся. Прошу пардону.

renoshnik
Offline
Зарегистрирован: 11.04.2013

a5021 пишет:

Да, вы правы. Это я ошибся. Прошу пардону.

да ничего, я сам долго с карандашом сидел вспоминал математику ... :))

еще про быстродействие, посмотрел код и мыслю, что не нужно данные с потенциометра обрабатывать в подпрограмме ...

tempSet = map(getOversampled(potSensorPin), 0, 1023, 315, 450);	
// заменить на
tempSet = map(analogRead(A1), 0, 1023, 315, 450);

тогда и саму подпрограмму можно перенести в тело функции, void loop() ...

как вам такой вариант ?

Ganster41
Offline
Зарегистрирован: 03.11.2014

Там среднее значение из 64 выборок берется не прикола ради, а из-за возможных помех на входе АЦП, которые могут сильно исказить реальное значение. Не стоит тут сильно упрощать, имхо. Разве что количество выборок можно попробовать уменьшить.

a5021
Offline
Зарегистрирован: 07.07.2013

По поводу 64-х выборок -- все верно. Уменьшить можно, но нужно смотреть, что там с питанием творится, т.к. может возникнуть "дрожание" младшего разряда, а это хоть и не смертельно, но придется принимать меры, чтобы цифры не прыгали.

Вообще изначально процедура getOversampled() была написана с возможностью "вытягивания" дполнительных разрядов аналогово-цифрового преобразования. В публикации я ее упростил, чтобы не возникало сложностей с пониманием, но цифра 64 тянется именно оттуда. Если кто не знает, то суть в том, что для софтового повышения разрядности АЦП, число семплов должно равняться 4 в степени Х. Т.е. количество семплов нужно брать из ряда 4, 16, 64, 256 и т.д. В getOversampled() усреднение выборок производится посредством операции сдвига, про которую известно, что сдвиг на один разряд вправо соответствует делению числа пополам. Если мы просуммировали 64 семлпа и сдвинули резултат вправо на шесть разрядов (2^6=64), то мы получим среднее всех выборок. Волшебство начинается, если результат "недосдвинуть". Так, если сдвинуть сумму 64 семплов только на пять разрядов вправо, то результатом будет представление аналого-цифрового преобразования не десятью битами, а одиннацдатью. Четыре сдвига дадут представление двенадцатью битами и т.д. Увлекаться, впрочем, особо не стоит, т.к. это очевидным образом влияет на стабильность, но при должном количестве взятых семплов, повышение разрядности на 1-2 бита обычно дает вполне приемлемый результат.

Здесь стоит сделать важную ремарку: при всей кажущейся простоте метода, в основе его лежит довольно срьезный математический аппарат и действие приводит не к банальному отображению одного и того же значения разным числом бит, а реальному увеличению точности аналогово-цифрового преобразования и увеличению диапазона.

Ganster41
Offline
Зарегистрирован: 03.11.2014

Эх, я как всегда победитель по жизни. Китайский нихромовый нагреватель приказал долго жить еще в момент первичной калибровки.

Нашел откуда заказать относительно недорого керамику, без ожиданий отправвки из Китая, но вот его холодное сопротивление меня пугает. К импульсникам никто их не пробовал подключать? А то мне еще ноутбучный блок осталось сжечь для полного счастья)

Интересно, насколько долго там держится сопротивление на таком уровне? Это ж ток выходит около 24^2/3/24=8 Ампер. Это практически двойная перегрузка для зарядки(

renoshnik
Offline
Зарегистрирован: 11.04.2013

В общем доупрощался ... :) ... но оно работает ... :))

/*
********************************************************
********************** - B -  Pin **********************
Digispark B5A0 – ATtiny85 pin 1 – (reset)
Digispark B3A3 – ATtiny85 pin 2 – управление транзистором
Digispark B4A2 – ATtiny85 pin 3 – вход датчика температуры паяльника
Digispark B0   – ATtiny85 pin 5 – ЛСД  di(high)
Digispark B1   – ATtiny85 pin 6 – ЛСД  sk(low)
Digispark B2A1 – ATtiny85 pin 7 – вход резистор настройки температуры
********************************************************
*/
#include <util/delay.h>
int tempSet = 0;	//	задаваемая температура
int tempRead = 0;	//	температура паяльника
byte z;
byte Lcd[10] = {0,0,0,0,0,0,0,0,0,0};

void setup() {   
DDRB = B001011;		// 	назначает порты 0,1,3 выходными, 2,4,5 входной
PORTB = B000001;	// 	устанавливает на портах 1,2,3,4,5 LOW на 0 HIGH
	}

void loop(){
unsigned long int reZ = 0;
for (byte j=0; j<64; j++) reZ += analogRead(A2);	//	A2 подключение термистора паяльника
tempRead = reZ >> 6;
	double ztH = (1.3445*tempRead)-281.415 ;
		int tH = int(ztH);
if (tempRead >= 315) {
Lcd[1] = tH/100;				if (Lcd[1]==0) Lcd[1]=10;
	Lcd[2] = (tH%100)/10;		if (Lcd[2]==0) Lcd[2]=10;
		Lcd[3] = tH%10;			if (Lcd[3]==0) Lcd[3]=10; }
else {Lcd[1]=15; Lcd[2]=15; Lcd[3]=15;}  	
//	***************************************************************
unsigned long int reS = 0;
for (byte q=0; q<32; q++) reS += analogRead(A1);	//	A1 подключение регулятора
tempSet = map(reS >> 5, 0, 1023, 315, 450);	
	double ztR = (1.3445*tempSet)-281.415 ;
		int tR = int(ztR);
Lcd[6] = tR/100;				if (Lcd[6]==0) Lcd[6]=10;
	Lcd[7] = (tR%100)/10;		if (Lcd[7]==0) Lcd[7]=10;
		Lcd[8] = tR%10;			if (Lcd[8]==0) Lcd[8]=10;
//	***************************************************************		
	if (ztR > ztH) PORTB |= (1<<3);					// 	греем	 
	if (ztR <= ztH) PORTB &=~ (1<<3); 				// 	отдыхаем
//	***************************************************************
if (++z >= 50) {	z = 0;	
	for (byte l=0; l<10; l++) {
		for (byte i=0; i<4; i++) {
PORTB |=(1<<1);						_delay_us(20);     
digitalWrite(0, Lcd[l]&(1<<(3-i)));	_delay_us(10);	
PORTB ^=(1<<1);						_delay_us(30); } 
}	}	}

 

a5021
Offline
Зарегистрирован: 07.07.2013

Ganster41 пишет:

Нашел откуда заказать относительно недорого керамику, без ожиданий отправвки из Китая, но вот его холодное сопротивление меня пугает. К импульсникам никто их не пробовал подключать? А то мне еще ноутбучный блок осталось сжечь для полного счастья)

Если зарядка не китайская подделка, то там защита стоит. Нормальную ноутбучную зарядку чтобы сжечь надо очень постараться.

Цитата:

Интересно, насколько долго там держится сопротивление на таком уровне? Это ж ток выходит около 24^2/3/24=8 Ампер. Это практически двойная перегрузка для зарядки(

Смотря как защита сделана. У меня универсальная зарядка при перегрузке тупо сбрасывает напряжение. Другая зарядка от древнего ноута вырубается полностью и пока из розетки не вытащишь и не вставишь вновь, не работает.

AnarchySaur
Offline
Зарегистрирован: 31.12.2014

Илья73 пишет:

Про лейку я писал выше.Если разберетесь в этом (я уже не могу разобраться :)). На третей картинке красным исправления что добавить и какие дорожки отрезать. (добавлены транзисторы для реле).   

А кто-то пробовал в схему и плату Илья 73 поставить мосфеты? И никто не переделывал эту лейку, я не могу понять, что там за новые детали красным, просто хотел сделать платы, пока паяльник, фен и остальные запчасти идут..

Илья73
Offline
Зарегистрирован: 06.09.2013

Красным - это мои исправления для себя - где отрезать, где добавить (думал питать реле с выходов ардуины  - не прокатило, добавил транзисторы).  В этой плате стоит мосфет IRLZ44 на паяльник, реле - для  аварийного отключения фена и паяльника.

Илья73
Offline
Зарегистрирован: 06.09.2013

a5021 пишет:

Вообще изначально процедура getOversampled() была написана с возможностью "вытягивания" дполнительных разрядов аналогово-цифрового преобразования.

Не так уж и просто для моего ума.

У меня новый проект наметился, делаю не сложный лабораторный блок  питания на 50 вольт. Хотелось бы измерять 50 вольт с более менее приемлемой точностью, кажется 12 бит как раз было бы очень неплохо!

Может вы бы смогли накидать участок кода как это будет выглядеть для выполнения данной задачи?

a5021
Offline
Зарегистрирован: 07.07.2013

На самом деле это очень просто. В процедуре getOversampled() либо измените число семплов на 256, либо сдвигайте сумму в последней строке только на 4. Весь остальной код остается без изменений. Чтобы небыло разночтений, привожу оба варианта:

а)

// Oversampling and averaging data from sensor.
int getOversampled(int sensorPin) {
  unsigned long int res = 0;
  for (int i = 0; i < 256; i++) res += analogRead(sensorPin);
  return res >> 6; // divide result by 64 and return 12-bit data.
}

б)

// Oversampling and averaging data from sensor.
int getOversampled(int sensorPin) {
    unsigned long int res = 0;
  for (int i = 0; i < 64; i++) res += analogRead(sensorPin);
  return res >> 4; // divide result by 16 and return 12-bit data.
}

 

Илья73
Offline
Зарегистрирован: 06.09.2013

Спасибо! Ценная информация для любителя. Вечером протестирую.

Кстати может кому пригодится, для переноса схем на плату пользую такую штуку

http://www.ebay.com/itm/100g-Photoresist-Anti-etching-Blue-Paint-for-DIY...

Мне нравится намного больше чем капризный позитив20, для любителя просто находка. Печатаю на пленке на струйнике, и не парюсь с просвечиваимастью рисунка, эта штука прощает.

Только один существенный  недостаток у нее - противный мерзкий запах.

Жаль только для крымчан ебау закрыт, но ни чего , наверно и на али такое должно быть.

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а пленку не пробовал? проще ведь

alpha-340 или alpha-350

Илья73
Offline
Зарегистрирован: 06.09.2013

Не, пока не пробовал. Закончится эта штука, попробую пленку. К тому же ламинатор только сейчас появился. У меня вытяжка хорошая на работе, но в момент покраски  - просто ужас.

a5021
Offline
Зарегистрирован: 07.07.2013

Не понимаю, чем резист лучше лута. :(

renoshnik
Offline
Зарегистрирован: 11.04.2013

a5021 пишет:

Не понимаю, чем резист лучше лута. :(

Возможно резист и лучше ЛУТа но вот ЛКипятильнаяТ реально даст фору и первому и вторму... :))

Илья73
Offline
Зарегистрирован: 06.09.2013

Протестировал. Для меня это конечно открытие!

Забил себе пример для дальнейшего использования.


#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int Sensor = A0;
float voltage = 0;  

void setup()
{
  lcd.begin(16, 2); 
}

void loop()
{
  voltage= getOversampled(Sensor);
  lcd.clear();
  lcd.setCursor (0, 0);
  voltage = voltage * (5.0 / 4096.0);
  lcd.print (voltage,3);
 
  delay(200);
  
}
int getOversampled(int sensorPin) // Oversampling and averaging data from sensor.
{
  unsigned long int res = 0;
  for (int i = 0; i < 256; i++) res += analogRead(sensorPin);
  return res >> 6; // divide result by 64 and return 12-bit data.
}

По поводу лута. У меня доступа нет к лазерному принтеру, поэтому пошел по другому пути.

a5021
Offline
Зарегистрирован: 07.07.2013

renoshnik пишет:
Возможно резист и лучше ЛУТа но вот ЛКипятильнаяТ реально даст фору и первому и вторму... :))

Испытываю определенный скепсис по поводу этого метода и вот почему: температура плавления тонера лежит в границах 110-200 градусов Цельсия для разных моделей принтеров. Лазерный принтер прикатывает тонер к бумаге при помощи термопленки, рабочая температура которой находится в диапазоне 190-240 градусов. Можно допустить, что длительное воздействие температуры 100 градусов приводит к слипанию и склеиванию "легоплавких" сортов тонера, но по поводу переноса тонера на плату и надежной фиксации на ее поверхности остаются вопросы. Для тонеров с высокой температурой плавления, кипятильная технология, как мне кажется, не пригодна вовсе.

Второй нюанс, который существенно снижает привлекательность кипятильного метода, это необходимость изготовления специальной оснастки. Возможно, что для разных размеров плат, таких оснасток придется делать несколько. Заниматься слесаркой в условиях современной квартиры может оказаться весьма затруднительно, да и какой-никакой навык требуется, плюс инструмент. Нет, я не утверждаю, что ситуация совершенно "непроходимая", но все это потребует дополнительных усилий, в то время, как ожидаемые выгоды не совсем очевидны.

Как по мне, так я даже пробовать этот метод не буду. Дорожки до 0.2мм включительно (что покрывает 99% всех потребностей любительской электроники)  при определенной сноровке получаются неплохо и традиционным ЛУТом, а ЛУТ в этом смысле дешевле, проще и быстрее. Выгод кипячения в этом случае я не вижу совсем.

renoshnik
Offline
Зарегистрирован: 11.04.2013

После своих мучений с ЛУТ (может руки кривые) с первого раза ни одна плата не получалась. Перешел полностью на ЛКТ теперь все переносится с первого раза и надписи и полигоны.
По поводу температуры знаю НО .... оно работает, проверено лично...
Это не с целью переубедить или что-то еще, просто комментарий личного опыта... :))

a5021
Offline
Зарегистрирован: 07.07.2013

У меня нет оснований не верить вам, просто не понятно, как же оно тогда работает.

renoshnik
Offline
Зарегистрирован: 11.04.2013

a5021 пишет:

У меня нет оснований не верить вам, просто не понятно, как же оно тогда работает.

прошу простить за оффтоп

не знаю как но это работает... и по поводу проблем в изготовлении приспособы это немного преувеличено ...

для первой платы я собрал все из "соплей и палок", какие-то пластины по 1мм толщиной (из хозмага), куски резины и болты, что валялись в ящике

 

при этом получил с первого раза такие платы (двухсторонняя)

 

теперь нашёл две пластины из нержавейки толщиной около 3 мм и пользуюсь ими ...

На сим все, больше не буду оффтопить ...  :))

 

a5021
Offline
Зарегистрирован: 07.07.2013

А что у вас за принтер и что за тонер в картридже? Я наблюдаю следы растекания тонера на ваших платах даже при кипячении.

renoshnik
Offline
Зарегистрирован: 11.04.2013

Принтер - какой свободный в конторе... тонер - какой то заправляли в сервисе...

renoshnik
Offline
Зарегистрирован: 11.04.2013

a5021 пишет:

На самом деле это очень просто. В процедуре getOversampled() либо измените число семплов на 256, либо сдвигайте сумму в последней строке только на 4. Весь остальной код остается без изменений. Чтобы небыло разночтений, привожу оба варианта:

а)

// Oversampling and averaging data from sensor.
int getOversampled(int sensorPin) {
  unsigned long int res = 0;
  for (int i = 0; i < 256; i++) res += analogRead(sensorPin);
  return res >> 6; // divide result by 64 and return 12-bit data.
}

б)

// Oversampling and averaging data from sensor.
int getOversampled(int sensorPin) {
    unsigned long int res = 0;
  for (int i = 0; i < 64; i++) res += analogRead(sensorPin);
  return res >> 4; // divide result by 16 and return 12-bit data.
}

 

А можно как-то подробней для чайников...   :)

Я сделал такой пример (для дигиспарка) 


#include <DigiUSB.h>

float Z6, Z5, Z4, Z3, Z2;

void setup(){
  DigiUSB.begin();
  DigiUSB.print("Start");
}

void loop(){

unsigned long reZ = 0;
for (byte j=0; j<64; j++) reZ += analogRead(A1);	
Z6 = reZ >> 6;
Z5 = reZ >> 5;
Z4 = reZ >> 4;
Z3 = reZ >> 3;
Z2 = reZ >> 2;


DigiUSB.print(" Z6 ");DigiUSB.print(Z6);
DigiUSB.print(" Z5 ");DigiUSB.print(Z5);
DigiUSB.print(" Z4 ");DigiUSB.print(Z4);
DigiUSB.print(" Z3 ");DigiUSB.print(Z3);
DigiUSB.print(" Z2 ");DigiUSB.println(Z2);
		
 DigiUSB.delay(5000);
}

на входе просто наводки...

получил такие данные (рассортировал по одинаковым Z6)

 Z6 648.00 Z5 1296.00 Z4 2593.00 Z3 5186.00 Z2 10372.00
 Z6 648.00 Z5 1297.00 Z4 2595.00 Z3 5190.00 Z2 10381.00
 
 Z6 620.00 Z5 1240.00 Z4 2480.00 Z3 4961.00 Z2 9923.00
 Z6 620.00 Z5 1240.00 Z4 2481.00 Z3 4963.00 Z2 9926.00
 
 Z6 614.00 Z5 1229.00 Z4 2459.00 Z3 4919.00 Z2 9838.00
 Z6 614.00 Z5 1228.00 Z4 2456.00 Z3 4913.00 Z2 9826.00
 
 Z6 615.00 Z5 1230.00 Z4 2460.00 Z3 4920.00 Z2 9841.00
 Z6 615.00 Z5 1230.00 Z4 2461.00 Z3 4923.00 Z2 9847.00
 
 Z6 618.00 Z5 1236.00 Z4 2472.00 Z3 4944.00 Z2 9889.00
 Z6 618.00 Z5 1237.00 Z4 2475.00 Z3 4951.00 Z2 9903.00
 
 Z6 650.00 Z5 1301.00 Z4 2602.00 Z3 5204.00 Z2 10408.00
 Z6 650.00 Z5 1301.00 Z4 2603.00 Z3 5207.00 Z2 10415.00
 Z6 650.00 Z5 1301.00 Z4 2602.00 Z3 5204.00 Z2 10408.00
 
 Z6 611.00 Z5 1223.00 Z4 2446.00 Z3 4892.00 Z2 9785.00
 Z6 611.00 Z5 1222.00 Z4 2444.00 Z3 4889.00 Z2 9779.00
 
 Z6 609.00 Z5 1218.00 Z4 2437.00 Z3 4875.00 Z2 9751.00
 Z6 609.00 Z5 1218.00 Z4 2437.00 Z3 4875.00 Z2 9751.00
 Z6 609.00 Z5 1218.00 Z4 2436.00 Z3 4873.00 Z2 9746.00
 
 Z6 646.00 Z5 1293.00 Z4 2587.00 Z3 5175.00 Z2 10351.00
 Z6 646.00 Z5 1292.00 Z4 2585.00 Z3 5170.00 Z2 10341.00
 
 Z6 640.00 Z5 1281.00 Z4 2563.00 Z3 5127.00 Z2 10254.00
 Z6 640.00 Z5 1280.00 Z4 2561.00 Z3 5122.00 Z2 10245.00
 
Z6 643.00 Z5 1286.00 Z4 2573.00 Z3 5146.00 Z2 10293.00
Z6 643.00 Z5 1287.00 Z4 2574.00 Z3 5148.00 Z2 10297.00
 

 

 

 

 

 

a5021
Offline
Зарегистрирован: 07.07.2013

renoshnik пишет:

А можно как-то подробней для чайников...   :)

Я сделал такой пример (для дигиспарка) 

на входе просто наводки...

Ну, значит, вы измерили наводки с разной точностью. :)

Я не очень понял, что нужно объяснить подробнее, но попробую сформулировать суть метода: АЦП ардуины имеет разрядность 10 бит, что позволяет представить измеряемое напряжение числом от 0 до 1023. Если у нас опорное равно, скажем, пяти вольтам, то АЦП ардуины сможет различать напряжения отличающиеся на 5в / 1024 = 0,004882813 вольта. Округлим для простоты до пяти милливольт. Получается, что при измерении напряжения, скажем, в шесть милливольт и девять милливольт ардуина будет выдавать одно и то же значение равное 1. А если есть нужда измерять с точностью до одного милливольта? Решение "в лоб" это использование внешнего АЦП с большей разрядностью. Одинндцатибитный АЦП даст точность 2.5мв, двенадцатибитынй 1.25мв, тринадцатибитный 0.625мв. Тринадцатибитный тут бы подошел, но внешний АЦП это сложно, дорого и хлопотно. К счастью, есть математический способ повышения разрядности за счет увеличения числа измерений с последующим усреднением результата.

Теория утверждает, что для увеличения разрядности на n бит нужно просуммировать "4 в степени n" измерений и полученный результат сдвинуть вправо на те же n разрядов. Если взять 64 семпла (4 в степени 3), просуммировать их и сдвинуть вправо на 3, то получится результат аналогово-цифрового преобразования в 10+3=13 битном представлении. Если семлпов будет 256 (4 в степени 4), то их сумма сдвинутая вправо на 4 будет 10+4=14 битным представлением преобразования.

Справедливость этой теории легко проверяется с помощью бумажки и ручки, калькулятора, эксела или любым другим способом, но за счет чего тут может повысится точность измерений, пока совершенно не понятно. Чтобы немного прояснить этот вопрос, есть смысл рассмотреть процесс аналогово-цифрового преобразования более детально.

Условимся, что производятся четыре замера напряжения на входе АЦП. Т.к. измеряемое напряжение всегда имеет некие шум и помехи в своем составе, плюс шумит сам АЦП, результат будет получен в виде набора значений, выглядящего примерно так: 99, 98, 98, 99.  Если шум в измеряемом сигнале имеет случайную форму (типа белого шума), то при большом числе замеров можно будет наблюдать определенную закономерность, как числа распределяются вблизи некоторого значения. Что же до вышеприведенного числового ряда, то сумма его равна 394, а среднее арифметическое 98.5. Последняя цифра и есть значение измеряемого напряжения, но отсчетами десятибитного АЦП ее не представить. Если же привести результат по ранее описанному методу к одиннадцати битам, то получится 197, что будет точно соответствовать тому самому среднеарифметическому значению 98.5. Вот оно и повышение точности.

 

renoshnik
Offline
Зарегистрирован: 11.04.2013

a5021 , спасибо !!!! 

образно говоря - расширяется шкала.

 Z6 0.00 Z5 0.00 Z4 0.00 Z3 0.00 Z2 0.00
 Z6 1023.00 Z5 2046.00 Z4 4092.00 Z3 8184.00 Z2 16368.00
 
только тогда функцию map() нет смысла использовать /Функция map() оперирует целыми числами./ нужно будет применять функцию пересчета ....
 
отличная информация !!! буду использовать для работы с датчиками ...
 

renoshnik
Offline
Зарегистрирован: 11.04.2013

Проэкспериментировал ....

(в формуле, что выше ошибка при опредилении "дельты")

ниже тестовый скетч

#include <DigiUSB.h>

// диапазон выводимых данных
double Y1 = 33.85;
double Y2 = 387.29;
// точность, целые числа 0 - 4
int dt; 
// максимальное значение шкалы
float Zn;
// текущее значение шкалы
float Zt;
// определяемое значение диапазона
float Yt;

void setup(){
  DigiUSB.begin();
}

void loop(){

unsigned long reZ = 0;
	for (byte j=0; j<64; j++) reZ += analogRead(A1);	

for (dt=0; dt<5; dt++) {

	Zn = 1023.0*(pow(2, dt));
	Zt = reZ >> (6-dt);
	
	float dz = Zn/(Y2-Y1);
	Yt = Y1+(Zt/dz);
	
DigiUSB.print(dt);DigiUSB.print(" __ Yt = ");DigiUSB.println(Yt);

}	

DigiUSB.delay(7000);

}

 

результат теста

 

a5021
Offline
Зарегистрирован: 07.07.2013

Теперь бы еще понять, что вы вычисляете. :)

renoshnik
Offline
Зарегистрирован: 11.04.2013

a5021 пишет:

Теперь бы еще понять, что вы вычисляете. :)

Это просто демонстрационный пример (там меряются наводки) ...

Еще раз большое спасибо за информацию !!!

byuram34rus
Offline
Зарегистрирован: 02.02.2015

Добрый день. Скажите пожалуйста, необходима ли модификация схемы и добавление элементов если вместо Ардуино будет использоваться Atmega8A-16PU прошитая под Ардуино? Можно ли напрямую к контактам Атмеги подключать те элементы что изображены в схеме в первом посте? Или необходимо что то добавить? Быстродействия 8МГц будет достаточно или добавлять кварц и прошивать Мегу на 16 МГц? Скетч что изображен в первом посте полностью рабочий?

 

offtopic: Подарили неплохой паяльник XYTRONIC 107ESD хотел собрать станцию с радиокота, но ее надо чем то собрать))) На  глаза попался этот чудный проект как раз то что нужно))) А тут еще и UNO должна была прийти)))) но к сожалению потерялася в недрах нашей почты, поэтому придеться использовать МЕГУ если возможно.

a5021
Offline
Зарегистрирован: 07.07.2013

Атмегу8 можно использовать. Алгоритм и схема не имеют противопоказаний для работы на 8мгц от внутреннего генератора. Однако, если планируется вывод в консоль поcредством Serial.print(), то могут возникнуть проблемы с передачей символов. Дело в том, что внутренний тактовый генератор атмеги не очень стабилен и это может вызывать существенные отклонения скорости последовательного порта МК от стандартных значений. Если скорость порта будет "плыть", то могут случиться выпадения или искажения передаваемых символов.

Напрямую к контактам атмеги подключать элементы схемы можно. В принципе, они и в ардуино так же подключаются.

Про скетч в том же первом посте написано, что его работа проверена и проблем быть не должно.

Про такой паяльник, как у вас я ничего сказать не могу, но вам стоит убедиться, что в нем используется керамический нагревательный элемент с резисторным датчиком.

AnarchySaur
Offline
Зарегистрирован: 31.12.2014

Вот и мне пришел весь набор, вроде как самое дешевое что нашел на ебее от трех продавцов.

Теперь просьба, так как в спринт-лайоте работаю очень редко и не могу разобратся в этих лейках Илья73 (особенно той, где транзисторы добавлены для реле), никто не правил для себя? И так как понижайку до 5 в я взял готовую, то если бы убрать с платы компоненты отвечающие за нее. С меня на пиво, платы мне вытравлят, хотя трансферную бумагу для ЛУТа тоже прикупил (но нету самому ваять времени сейчас).

И еще, что-то на керамику больно смахивает этот нагреватель, и кончик как у хако и внутри совсем как не нихром, как проверит это то что мне нужно было?

a5021
Offline
Зарегистрирован: 07.07.2013

Это керамический нагреватель.

vismut
Offline
Зарегистрирован: 18.10.2013

AnarchySaur, вопросик по поводу насадок для фена: а что они подходят?

AnarchySaur
Offline
Зарегистрирован: 31.12.2014

a5021

Ну я понял что это лучше, а оно мне подойдет к схеме Илья73? Блин, что же он тогда всег ов 5,7 бакса паяльник обошелся..) Керамика подороже ведь и покупал по ссылке что дали выше..

vismut

Не шибко подходят, по диаметру да (вообще позиционировались как универсальные), но держатся (у фена другой крепеж), хоть и будет воздух в бок дуть (но как-то залеплю).

Илья73
Offline
Зарегистрирован: 06.09.2013

Только бы теперь узнать какая там термопара, если pt100  то схемку усилителя термопары нужно другую.

AnarchySaur
Offline
Зарегистрирован: 31.12.2014

Илья73

А как это узнать? и в фене заодно тоже и схему сразу..

Блин, вроде ж покупал по ссылке что дали, а не то пришло..