7- cегментный дисплей для arduino

protone77
Offline
Зарегистрирован: 02.10.2016

ЕвгенийП пишет:

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

да, кнопкой хорошо, но если с большого расстояния смотреть, то нужно подходить и нажимать её. А так с большими дисплеями видно на метров 20-25 видеть буду. Я планирую их на дачу поставить. 

Как часто дисплеи сменять? Лучше всего так 20секунд показано время, 5 секунд температура, 5 влажность. Ну или сам уже настрою под себя.

p.s ещё раз проверил часы. Время не сбивается

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну тогда надо делать функцию переключения. Сейчас я немного занят, либо сегодня вечером, либо завтра, поговорим.

Как у Вас дела с окончательным формированием задумки, всё продумали? Можете общую структуру изделия описать? Если можете, так может пора задуматься о плате и о пайке, чтобы сопли по макеткам не таскать?

protone77
Offline
Зарегистрирован: 02.10.2016

ЕвгенийП пишет:

Ну тогда надо делать функцию переключения. Сейчас я немного занят, либо сегодня вечером, либо завтра, поговорим.

Как у Вас дела с окончательным формированием задумки, всё продумали? Можете общую структуру изделия описать? Если можете, так может пора задуматься о плате и о пайке, чтобы сопли по макеткам не таскать?

Структура такая. Сделать настройку кнопками и далее собирать часы уже. А после хочу доделать им будильник с mp3 плеером, но это после того как они уже будут работать

Да, пора задуматься мне как раз на днях дошла термотрансферная бумага из китая. Осталось купить химию для травления.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

protone77 пишет:

А после хочу доделать им будильник с mp3 плеером, но это после того как они уже будут работать

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

protone77 пишет:

Да, пора задуматься мне как раз на днях дошла термотрансферная бумага из китая. Осталось купить химию для травления.

Главное, всё же нарисовать плату.

А химия - рекомендую персульфат аммония. Есть много других химикатов, споры о том что лучше - классическая тема холиваров. Для нашего взаимодействия важно не то, что лучше, а то, что с этим я могу Вам точно рассказать что и как делать. С другими у меня опыта не густо.

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

 

protone77
Offline
Зарегистрирован: 02.10.2016

ЕвгенийП пишет:

protone77 пишет:

А после хочу доделать им будильник с mp3 плеером, но это после того как они уже будут работать

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

protone77 пишет:

Да, пора задуматься мне как раз на днях дошла термотрансферная бумага из китая. Осталось купить химию для травления.

Главное, всё же нарисовать плату.

А химия - рекомендую персульфат аммония. Есть много других химикатов, споры о том что лучше - классическая тема холиваров. Для нашего взаимодействия важно не то, что лучше, а то, что с этим я могу Вам точно рассказать что и как делать. С другими у меня опыта не густо.

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

 

плата у меня уже нарисована я скидывал её где-то в теме.

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

protone77
Offline
Зарегистрирован: 02.10.2016

вот я сделал подписи и корпус регистра вставил, подписал вывода сегментов.

https://drive.google.com/open?id=0Bw68TyJ34XNUQnhUZnpoeXd1U1k

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

По поводу травления и химии. У меня будет кусок текстолита 110*150 это как раз для 2 дисплеев я попробую вытравить. А потом ещё текстолита куплю, если всё нормально при травлении будет. И да, сколько грамм химии нужно? на сайте написано 500мл на 250грамм, на других сайтах про литр на 250 грамм. И насколько много воды нужно для травления платы? Понятно, что полностью закрывать водой должна, а сколько запас ещё нужен?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Да, нет, плата может быть отдельная. На этой плате нужно вывести соответсвующие контакты. Куда он там продключается (плеер)? К I2C, так выведите дорожки от A4 и F4 к пустым контактам и бросьте пока. Надо будет - припаяетесь. А не сделаете, Вам придётся соплями припаиваться. Понимаете?

Персульфата нужно 200-250 гр на 1000 мл. воды. Я обычно делаю 250 или чуть меньше. Но реально целый литр обычно не нужен, стакан-то много, хотя у Вас плата большая, смотрите сами. Там ещё от размера посуды зависит. Раствор дожен полностью покрывать плату с запасом миллиметров 5, можно больше. Просто прикиньте, Вам придется эту плату в процессе травление шевелить, дергать, чтобы осадок сбить и пузыри разогнать. Просто, чтобы удобно было. Я обычно если травлю горизонтально, то делаю 5-10. Для вертикального травления у меня посуда шириной 16 мм. В неё вертикально и опускаю.

bwn
Offline
Зарегистрирован: 25.08.2014

ЕвгенийП, извиняюсь, что влез. Обратил внимание на размер платы, для утюга очень большая. Чтобы у ТС не было разочарования на первом девайсе, рекомендую перенос рисунка как сам сейчас делаю ( у меня Brother, утюгом плохо переносит). Вместо утюга спирто-ацетонная смесь (хотя у меня лучше 646 пошел). Берутся два деревянных бруска (не фанера, прогнется), на нижний укладываем подготовленный текстолит, сверху  рисунок, заливаем смесью из шприца, выгоняем воздух. Дальше резина, второй брусок, под струбцины и минут на 40. Все остальное как обычно. Плюсы - не жарим лишний раз фольгу, можем переделать хоть 20 раз если не понравилось как отпечаталось. В канонической версии рекомендовали 1ч.ацетона на 4-5ч.спирта, у меня вышло ровно наоборот, здесь надо под свой тонер пробовать. Последний раз делал дороги 0,2х0,3, в целом доволен.
По травлению, у Евгения классная посудина имеется, если не найдете, то при горизонтальном - обычная кисточка и регулярно с платы образовавшуюся дрянь скидываем. Sorri, если не в тему.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

bwn, спасибо, я так ни разу не пробовал, буду знать.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

protone77,

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

Вы не хотите в самом начале, при включении питания, одноразово секунд на 10 включить все светодиоды? Так иногда в автомобилях делают. Суть в том, чтобы при включении питания убедиться, что все светодиоды живы. Надо?

protone77
Offline
Зарегистрирован: 02.10.2016

ЕвгенийП пишет:

protone77,

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

Вы не хотите в самом начале, при включении питания, одноразово секунд на 10 включить все светодиоды? Так иногда в автомобилях делают. Суть в том, чтобы при включении питания убедиться, что все светодиоды живы. Надо?

Надо, думаю будет полезно

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

не совсем по теме. может кто помнит название семисегментного индикатора со встроенным счетчиком дешифратором? что то вроде К155ИЛ3 или К176ИЛ3. насколько помню буква И точно была. я на нем еще диплом делал, но не могу вспомнить название

bwn
Offline
Зарегистрирован: 25.08.2014

В 176 были ИЕ3-ИЕ4 для семисегментников и ИЕ8 десятичный. В 561 вроде только ИЕ8 был. В TTL счетчика дешифратора что то не припоминаю.
P/S Жека, извини, вопрос невнимательно прочитал. Индикаторов в 155, 176, 561 не было. Крутится что то вроде 490, но сейчас не вспомню.
P/S/S не совсем склероз зажрал - К490ИП1

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

точно. спасибо только у меня был ип2

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Так, сорри, за долгое отсутствие, давайте займёмся переключением.

Как я понял, у Вас есть новая версия программы, но Вы её не публиковали, поэтому все мои замечания (с номерами строк) будут по тексту из поста №390.

Итак, изначально делаем две вещи.

1. В функции setup оставляем всё как есть, но где-нибудь после 135 строки вставляем включение всех светодиодов на экране. Вы умеете это делать, поэтому я на этом не останавливаюсь.

2. Изначально у нас ни один из экранов не является активным, поэтому в строке 50 заменяем clockScreen на NULL.

Теперь, если запустить программу, она должна сразу же засвечивать все светодиоды и больше не меняться. Проверьте, что так и есть, и, если всё в порядке, переходим дальше.

Здесь я долго боролся с искушением сделать без использования структур, но решил делать по уму. Ничего страшного в структурах нет, зато с ними проще вся логика. Итак, сначала создаём структуру: блок параметров показа экрана. Она состоит из трёх полей:

struct ShowScreenParameters {
	unsigned long timeToShow;	// Время показа данного экрана в мс
	void (*activationRoutine)(void);	// Процедура активации данного экрана
	ShowScreenParameters * pNextBlock;	// блок параметров следующего экрана
};

Читать это следует так: данный экран следует включить функцией activationRoutine, подержать timeToShow  миллисекунд и перейти к экрану, указанному в pNextBlock .

Чуть позже мы объявим массив таких структур allScreens, который будет содержать четыре элемента: наш фиктивный экран на котором всё светится и три экрана, которые у нас уже были.

В принципе, коль скоро у нас данные организованы списком, нам всё равно в каком порядке располагать экраны в массиве. Допустим, что нулевым элементом будет фиктивный экран, первым – часы, вторым – температура, третьим – влажность.

Для того, чтобы впредь не запутаться,введём константы:

#define	CLOCK_SCREEN	(allScreens + 1)
#define	HUMIDITY_SCREEN	(allScreens + 3)
#define	TEMPERATURE_SCREEN	(allScreens + 2)

Теперь можно определять массив allScreens, о котором говорили раньше. Выглядит он вот так:

static ShowScreenParameters allScreens[] = {
	{                //	Изначальный экран (всё светится). 
		5000ul,       // Время свечения (мс)
		NULL,         // Функция включения (он не включается во время работы, только при запуске)
		CLOCK_SCREEN  // Следующий экран - часы
	},
	{                       // Экран часов
		20000ul,             // Время свечения (мс)
		activateClockScreen, // Функция включения экрана часов
		TEMPERATURE_SCREEN   // Следующий экран - температура
	},
	{                             // Экран температуры
		5000ul,                    // Время свечения (мс)
		activateTemperatureScreen, // Функция включения экрана температуры
		HUMIDITY_SCREEN            // Следующий экран - влажность
	},
	{                           // Экран влажности
		5000ul,                  // Время свечения (мс)
		activateHumidityScreen,  // Функция включения экрана влажности
		CLOCK_SCREEN             // Следующий экран - часы
	}
};

Так, ну, как менять время экспозиции, для любого из экранов Вы понимаете. Если хотите поменять порядок, тоже ничего сложного. Ставите в строках 10 и 15 нужные константы и все дела.

И вообще, конструкция получилась очень гибкая. Например, Вы решили, что Вам нужно не: «часы-температура-влажность-часы» (как сейчас), а по-другому: «часы-температура-часы-влажность-часы». Нет проблем, просто объявляем тот же массив в несколько ином виде. Смотрите:

#define	CLOCK_SCREEN	(allScreens + 1)
#define	TEMPERATURE_SCREEN	(allScreens + 2)
#define	CLOCK_SCREEN_1	(allScreens + 3)
#define	HUMIDITY_SCREEN	(allScreens + 4)


static ShowScreenParameters allScreens[] = {
	{                //	Изначальный экран (всё светится). 
		5000ul,       // Время свечения (мс)
		NULL,         // Функция включения (он не включается во время работы, только при запуске)
		CLOCK_SCREEN  // Следующий экран - часы
	},
	{                       // Экран часов
		20000ul,             // Время свечения (мс)
		activateClockScreen, // Функция включения экрана часов
		TEMPERATURE_SCREEN   // Следующий экран - температура
	},
	{                             // Экран температуры
		5000ul,                    // Время свечения (мс)
		activateTemperatureScreen, // Функция включения экрана температуры
		CLOCK_SCREEN_1            // Следующий экран - часы-1
	},
	{                       // Экран часов (второй)
		20000ul,             // Время свечения (мс)
		activateClockScreen, // Функция включения экрана часов
		HUMIDITY_SCREEN   // Следующий экран - влажность
	},
	{                           // Экран влажности
		5000ul,                  // Время свечения (мс)
		activateHumidityScreen,  // Функция включения экрана влажности
		CLOCK_SCREEN             // Следующий экран - часы
	}
};

Ну, и, наконец, осталось написать функцию переключения экранов. Она простая как пять копеек.

static void switchScreen(void) {
	static ShowScreenParameters * pBlock = allScreens;
	static unsigned long startMillis = 0;
	const unsigned long currrentMillis = millis();
	if (currrentMillis - startMillis >= pBlock->timeToShow) {
		pBlock = pBlock->pNextBlock;
		pBlock->activationRoutine();
		startMillis = currrentMillis;
	}
}

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

Теперь нужно просто вызывать её постоянно из loop и все дела. Т.е. loop e Вас превратится в 

void loop(void) {  
	switchScreen();
	svetodiod();
}

Ну, вот, собственно всё.

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

protone77 пишет:

вот я сделал подписи и корпус регистра вставил, подписал вывода сегментов.

https://drive.google.com/open?id=0Bw68TyJ34XNUQnhUZnpoeXd1U1k

Посмотрел и ничего не понял. Где резисторы? Куда подводятся провода для питания и для SPI?

protone77
Offline
Зарегистрирован: 02.10.2016

ЕвгенийП пишет:

protone77 пишет:

вот я сделал подписи и корпус регистра вставил, подписал вывода сегментов.

https://drive.google.com/open?id=0Bw68TyJ34XNUQnhUZnpoeXd1U1k

Посмотрел и ничего не понял. Где резисторы? Куда подводятся провода для питания и для SPI?

я опять не ту ссылку скинул:) 

https://drive.google.com/open?id=0Bw68TyJ34XNUSWprcmRpcXRINnc вот, я постарался уменьшить количество проводов на одной плате. Если не понятно что-то будет я скину ту, где я красными линиями провода нарисовал, которые припаивать буду.

p.s завтра отпишусь, работает код или нет. Сейчас нету ардуины при себе

protone77
Offline
Зарегистрирован: 02.10.2016

код заработал. Вот весь код. Как куплю химию для травления отпишусь сюда. Кроме химии, текстолита, термотрансферной бумаги ничего же не нужно? Код я разбил на 2 файла через комбинацию   ctrl shift n в компиляторе.


#include <Wire.h> 
#include <SPI.h> 
#include "DHT.h" 
#include <DS3231.h>
#include <Adafruit_Sensor.h>

#define PIN_SQW 3
#define DHTPIN 2 
#define DHTTYPE DHT11 
           
static DS3231 Clock;
DHT dht(DHTPIN, DHTTYPE);

#define LATCH_PIN 10
#define  CLOCK_SCREEN  (allScreens + 1)
#define HUMIDITY_SCREEN (allScreens + 3)
#define TEMPERATURE_SCREEN  (allScreens + 2)
#define SEG_A 0b10111111 
#define SEG_B 0b11011111 
#define SEG_C 0b11101111 
#define SEG_D 0b11110111 
#define SEG_E 0b11111011 
#define SEG_F 0b11111101 
#define SEG_G 0b11111110 
#define SYMBOL_0 (SEG_A & SEG_B & SEG_C & SEG_D & SEG_E & SEG_F) 
#define SYMBOL_1 (SEG_B & SEG_C) 
#define SYMBOL_2 (SEG_A & SEG_B & SEG_D & SEG_E & SEG_G) 
#define SYMBOL_3 (SEG_A & SEG_B & SEG_C & SEG_D & SEG_G) 
#define SYMBOL_4 (SEG_B & SEG_C & SEG_F & SEG_G) 
#define SYMBOL_5 (SEG_A & SEG_C & SEG_D & SEG_F & SEG_G) 
#define SYMBOL_6 (SEG_A & SEG_C & SEG_D & SEG_E & SEG_F & SEG_G) 
#define SYMBOL_7 (SEG_A & SEG_B & SEG_C) 
#define SYMBOL_8 (SEG_A & SEG_B & SEG_C & SEG_D & SEG_E & SEG_F & SEG_G) 
#define SYMBOL_9 (SEG_A & SEG_B & SEG_C & SEG_D & SEG_F & SEG_G)  
#define SYMBOL_C (SEG_A & SEG_D & SEG_E & SEG_F) 
#define SYMBOL_H (SEG_F & SEG_G & SEG_E & SEG_B & SEG_C) 
#define SYMBOL_grad (SEG_A & SEG_F & SEG_G & SEG_B)
#define SYMBOL_EMPTY  0xFF

volatile static const uint8_t allDigits[] = { SYMBOL_0, SYMBOL_1,SYMBOL_2,SYMBOL_3,SYMBOL_4,SYMBOL_5,SYMBOL_6,SYMBOL_7,SYMBOL_8,SYMBOL_9};

volatile static uint8_t clockScreen[4];  
volatile static uint8_t temperatureScreen[4]; 
volatile static uint8_t humidityScreen[4]; 

static uint8_t * physicalScreen = NULL; 


void showOnScreen(const uint8_t *screen) {
  if (screen != physicalScreen) return;
  digitalWrite(LATCH_PIN, LOW);
  SPI.beginTransaction(SPISettings(F_CPU/2, LSBFIRST, SPI_MODE0)); 
  SPI.transfer(physicalScreen[0]); 
  SPI.transfer(physicalScreen[1]); 
  SPI.transfer(physicalScreen[2]); 
  SPI.transfer(physicalScreen[3]); 
  digitalWrite(LATCH_PIN, HIGH); 
  SPI.endTransaction();
}

static inline void fillUpScreen(volatile uint8_t * screen, 
      const uint8_t s0 = SYMBOL_EMPTY,  const uint8_t s1 = SYMBOL_EMPTY,  
      const uint8_t s2 = SYMBOL_EMPTY,  const uint8_t s3 = SYMBOL_EMPTY) {
  screen[0] = s0;
  screen[1] = s1;
  screen[2] = s2;
  screen[3] = s3;
  showOnScreen(screen);
}

void time2Screen(uint8_t h, uint8_t m) {
  fillUpScreen(clockScreen, allDigits[m % 10], allDigits[m / 10], allDigits[h % 10], allDigits[h / 10]);
}

void temperature2Screen(uint8_t t) {
  fillUpScreen(temperatureScreen,SYMBOL_C, SYMBOL_grad,  allDigits[t % 10], allDigits[t / 10]);
}

void humidity2Screen(uint8_t h) {
  fillUpScreen(humidityScreen, SYMBOL_H,SYMBOL_EMPTY, allDigits[h % 10], allDigits[h / 10]);
}
bool isClockScreenActive = true;
static inline void activateScreen(volatile uint8_t * screen) {
  isClockScreenActive = false;
  TCCR1A &= ~0xC0;
  physicalScreen = screen;
  showOnScreen(physicalScreen);
}

void activateClockScreen(void) { 
  activateScreen(clockScreen);
  isClockScreenActive = true;
}

void activateTemperatureScreen(void) { 
  activateScreen(temperatureScreen);
}

void activateHumidityScreen(void) { 
  activateScreen(humidityScreen);
}


static void everyMinuteAlarm(void) {
  const byte oldSReg = SREG;
  sei();
  time2Screen(Clock.getHour(), Clock.getMinute());
  temperature2Screen(dht.readTemperature());
  humidity2Screen(dht.readHumidity());
  Clock.clearAlarmSignal(2);
  SREG = oldSReg;
}

enum Prescalers {
  PRESCALER_1 = 1, PRESCALER_8 = 2, PRESCALER_64 = 3, PRESCALER_256 = 4, PRESCALER_1024 = 5
};

void svetodiod() {if (isClockScreenActive) {
   uint8_t prescaler = PRESCALER_256;
  uint16_t topValue = 65535; 
  TCCR1A = 0x40;      // Инвертирование пина 9 по сравнению
  TCCR1B = 0x08 | prescaler;  // Установить СТС режим и делитель частоты
  OCR1A = topValue;   // установить TOP равным topValue
}}

struct ShowScreenParameters {
  unsigned long timeToShow; // Время показа данного экрана в мс
  void (*activationRoutine)(void);  // Процедура активации данного экрана
  ShowScreenParameters * pNextBlock;  // блок параметров следующего экрана
};

static ShowScreenParameters allScreens[] = {
  {                // Изначальный экран (всё светится). 
    5000ul,       // Время свечения (мс)
    NULL,         // Функция включения (он не включается во время работы, только при запуске)
    CLOCK_SCREEN  // Следующий экран - часы
  },
  {                       // Экран часов
    20000ul,             // Время свечения (мс)
    activateClockScreen, // Функция включения экрана часов
    TEMPERATURE_SCREEN   // Следующий экран - температура
  },
  {                             // Экран температуры
    5000ul,                    // Время свечения (мс)
    activateTemperatureScreen, // Функция включения экрана температуры
    HUMIDITY_SCREEN            // Следующий экран - влажность
  },
  {                           // Экран влажности
    5000ul,                  // Время свечения (мс)
    activateHumidityScreen,  // Функция включения экрана влажности
    CLOCK_SCREEN             // Следующий экран - часы
  }
};

static void switchScreen(void) {
  static ShowScreenParameters * pBlock = allScreens;
  static unsigned long startMillis = 0;
  const unsigned long currrentMillis = millis();
  if (currrentMillis - startMillis >= pBlock->timeToShow) {
    pBlock = pBlock->pNextBlock;
    pBlock->activationRoutine();
    startMillis = currrentMillis;
  }
}

 
void setup(void) {
   pinMode(9, OUTPUT);
  pinMode(PIN_SQW, INPUT);
  Serial.begin(115200);
  SPI.begin();
  digitalWrite(LATCH_PIN, LOW);
  SPI.transfer(0b00000000); 
  SPI.transfer(0b00000000);
  SPI.transfer(0b00000000);
  SPI.transfer(0b00000000);
  digitalWrite(LATCH_PIN, HIGH);  
  dht.begin();
  Wire.begin();
  Clock.setClockMode(false);  
  Clock.turnOffAlarm(2); 
  Clock.EnableMinuteInterrupt();  
  attachInterrupt(PIN_SQW - 2, everyMinuteAlarm, FALLING);  
  delay(10);  
  everyMinuteAlarm();
  Clock.enableOscillator(true, true, 0);
 }

void loop(void) {  
  switchScreen();
  svetodiod();
}


ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, даже не знаю. Посуда для травления, перманентный маркер на всякий случай, что-нибудь типа ножа под ругой иметь, Фанерки иди кусочки доски, чтобы плату «прессом» прижать, я ещё и струбциной прихватываю иногда, но это перебор. Пластиковая ложка и пара вилок (такие одноразовые, знаете) чтобы мешать раствор и шевелить платы. Раствор там не страшный, но если хотите, можете резиновыми перчатками в аптеке обзавестись. Сам я не пользуюсь, но от ребёнка требую пользоваться. Ну, что ещё. Не знаю, будете ли лудить плату, и если будете, то как, может сплав Розе понадобится. Если не будете лудить или будете каким-нибудь «жидким оловом», то обязательно немного лака (практически любой подойдёт) им нужно готовую плату (уже пропаянную и проверенную) со стороны дорожек покрыть, чтобы прекратить доступ воздуха, тогда и незалуженная плата не портится. Ацетон понадобится (в строительном магазине). Спирт, если есть, тоже не помешает, но можно одним ацетоном обойтись. Спирт лучше изопропиловый. При пайке может потребоваться жидкость для отмывания флюса, но если спирт изопропиловый, то не надо - отлично отмывает. Ненужная старая зубная щётка приходится. Если есть маленькая кисточка (малярная) может пригодиться.

bwn
Offline
Зарегистрирован: 25.08.2014

ЕвгенийП пишет:

 Сам я не пользуюсь, но от ребёнка требую пользоваться.

И не стыдно, а как же личный пример и равнение на знаменосца? (((((

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

При нём я надеваю, это без него "на перчатках экономлю" :)))

bwn
Offline
Зарегистрирован: 25.08.2014

Жуткое коварство, ребенок спит, в полной уверенности, что дедушка по феншую травит плату. А тем временем, под покровом ночи, дедушка голыми руками мешает раствор. А дите потом не может понять, почему у дедушки лучше получается.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

:-)))))))))))