вторник, 7 июня 2016 г.

Ардуино подключаем ЧРВ и SD карту


Постепенно приближаемся к реализации нашего нового проекта. Но пока приходиться все делать по шагам. Сегодня мы сделаем еще один шаг вперед: научимся подключать к ардуино часы реального времени и SD карту. И более того будем записывать данные на карту памяти. А начнем с подключения отдельных блоков.

Первый блок это ЧРВ (часы реального времени). На этот раз мы подключим пины следующим образом:  GND-GND, VCC-+5V, RST-5, CLK-7, DAT-6. При этом указанные пины (5,6,7) в скетче можно всегда заменить на другие.  Итак, модуль ЧРВ мы подключили…

Теперь давайте подключим SD карту. Для этого проще всего воспользоваться схемой, и тогда точно не запутаетесь в куче проводов идущего от модуля SDкарты. На всякий случай на схеме отобразим подключения обоих модулей.  Итак схему собрали, но перед тем как переходить к скетчу давайте установим библиотеки:   <SPI.h>, <SD.h>, и  <RTC.h>. Все эти библиотеки можно загрузить с Яндекс диска (по отдельности) или сразу общимархивом.

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

#include <SPI.h>
#include <SD.h>
#include <RTC.h>
RTC    time;
//Set by default for the SD card library
//MOSI = Pin 11
//MISO = Pin 12
//SCLK = PIN 13
//We always need to set the CS Pin
const int CS_PIN  =10;
long datet;
//We set this high to provide power
const int POW_PIN =8;

void setup()
{
   time.begin(RTC_DS1302,5,7,6);
  Serial.begin(9600);
  Serial.println("Initializing Card");
  //CS pin is an output
  pinMode(CS_PIN, OUTPUT);

  //Card will draw power from pin 8, so set it high
  pinMode(POW_PIN, OUTPUT);
  digitalWrite(POW_PIN, HIGH);

  if (!SD.begin(CS_PIN))
  {
    Serial.println("Card Failure");
    return;
  }
  Serial.println("Card Ready");
}

void loop()
{
    int dataString = random (1000);
    // datet
  // time.gettime("d-m-Y, H:i:s, D");
    //Open a file and write to it.
  File dataFile = SD.open("log.csv", FILE_WRITE);
  if (dataFile)
  {
    dataFile.print(time.gettime("H:i"));
    dataFile.print(",");
    dataFile.println(dataString);
    dataFile.close();
  }
       
 // отделный лог для случ чисел

 dataFile = SD.open("ran.csv", FILE_WRITE);
  if (dataFile)
  {
        dataFile.println(dataString);
    
   dataFile.close();
 
  }

 // отдельный лог для времени
 dataFile =SD.open("tame.csv", FILE_WRITE);
  if (dataFile)
  {
        dataFile.println(time.gettime("H:i"));
    
   // dataFile.flush();
    
  }
       dataFile.close();
  delay(5000);
}


воскресенье, 5 июня 2016 г.

Начинаем работать с часами реального времени


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

Начнем пожалуй с подключения ЧРВ (часы реального времени) к ардуино. Это как раз несложно. У меня оказался модуль DS1302 и вот как нужно будет подключить выводы:  GND-GND, VCC-+5V, RST-10, CLK-13, DAT-12. При этом указанные пины (10,12,13) в скетче можно всегда заменить на другие.  Итак, модуль ЧРВ мы подключили…

Теперь шаг второй – это скетч. Скетч простой, и первым делом нужно будет в нем вручную изменить (поставить или снять //) в зависимости от модуля чипа. Выбирайте тот модуль который у вас и закомментируйте строчку с ненужным модулем, и раскоментируйте с вашим. Для информации: я использую модуль DS1302.

А вот теперь нам нужно установить точное время. Для начала обратим внимание (это важно!) на следующие две строки в программном коде:
  time.settime(35,10,20);// 35 сек, 10 мин, 20 час, дату оставить без изменений
  time.settime(-1,-1,-1,31,12,15);    // 31, декабря, 2015 года, время и день недели оставить без изменений}

Вот здесь и нужно сначала установить точную дату и время. Причем сделать это нужно заранее перед самой компиляцией. Так же обратите что компиляция и запись скетча в МК тоже займет некоторое время что тоже желательно учесть. Скажем у меня это занимает порядка 20 секунд. Все что мне нужно сделать : синхронизировать время на компьютере, установить время и за 20 секунд  начать компиляцию. После компиляции обязательно (не забудьте это важно!) закомментируйте эти две строчки. Вот и все. Можете пользоваться. Да и еще чуть не забыл: библиотеку RTC.h можно загрузить с Яндекс диска. 

#include <RTC.h>
RTC    time;
void setup() {
    delay(300);
    Serial.begin(9600);
//    инициализация модуля RTC
    // time.begin(RTC_DS3231);// на базе чипа DS3231модуль подключается к аппаратным выводам I2C
  //  time.begin(RTC_DS1307);// на базе чипа DS1307модуль подключается к аппаратным выводам I2C
    time.begin(RTC_DS1302,10,13,12);    // на базе чипа DS1302, вывод RST, вывод CLK, вывод DATдоступны любые выводы
//    запись даты и времени
// time.settime(0,51,21,27,10,15,2);    // 0  сек, 17 мин, 15 час, 1, октября, 2015 года, четверг
  time.settime(35,10,20);// 35 сек, 10 мин, 20 час, дату оставить без изменений
  time.settime(-1,-1,-1,31,12,15);    // 31, декабря, 2015 года, время и день недели оставить без изменений
}
void loop(){
    if(millis()%1000==0){ // если прошла 1 секунда
      Serial.println(time.gettime("d-m-Y, H:i:s, D")); // выводим время
      delay(1); // приостанавливаем на 1 мс, чтоб не выводить время несколько раз за 1мс
    }

суббота, 28 мая 2016 г.

Метеостанция на 4 строчном ЖК дисплее…

Вот наконец получил и держу в руках четырех строчный LCD дисплей с I2C модулем. Дисплей выглядит впечатляющее: довольно больших размеров, и при этом на нем в каждой из четырех строк может поместиться 20 символов. Как раз более чем достаточно для нашего нового проекта. В новом проекте будем собирать многоцелевое устройство, которое может измерять атмосферное давление, температуру и влажность. Все это будет выводится на экран.

Первым делом просто подключаю дисплей к плате с нашего прошлого проекта «метео-1». Даже скетч не стал переписывать, для первого тестирования дисплея сойдет и старый. Вот подключаю четыре провода от I2C модуля, и можно приступать к тесту. Подключаю к ардуино повербанк и на экране появилась информация о температуре, давлении и влажности…

Теперь самое время заняться улучшениями. Первое что нужно сделать, так это давление выводить отдельной строкой. Добавляю в скетч пару строчек кода, тестирую… Работает! Следующим шагом нужно настроить правильный вывод размерности величин: после цифры дальше должно идти или проценты, или значок С, или мм РТ ст…


Снова работаем с программой. Скетч пришлось пару раз переделывать, так как пришлось «выловить» и исправить пару ошибок, и один недочет. Зато теперь все получилось как у настоящей метеостанции. Как говориться для начала хватит! Главное что все работает теперь как и планировалось. 
Скетч:

#include <Wire.h>
#include <Adafruit_BMP085.h>
float t;
float p;

Adafruit_BMP085 bmp;
#include <Wire.h> // Добавляем необходимые библиотеки
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#define DHTPIN A0 // к какому пину будет подключен сигнальный

//выход датчика
//выбор используемого датчика
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
//инициализация датчика
DHT dht(DHTPIN, DHTTYPE);
byte degree[8] = // кодируем символ градуса
{
   B00111,
   B00101,
   B00111,
   B00000,
   B00000,
   B00000,
   B00000,
};
LiquidCrystal_I2C lcd(0x27,16,2); // Задаем адрес и размерность


void setup()
{
lcd.init(); // Инициализация lcd
lcd.backlight(); // Включаем подсветку
lcd.createChar(1, degree); // Создаем символ под номером 1
Serial.begin(9600);
dht.begin();
Serial.begin(9600);
  if (!bmp.begin()) {
  Serial.println("Could not find a valid BMP085 sensor, check wiring!");
  while (1) {}
  }
}
void loop() {
// Добавляем паузы в несколько секунд между измерениями
delay(2000);
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
t=bmp.readTemperature();
p=bmp.readPressure();
p=p/133.33;
p=p+8.8; // поправка
// Выводим показания влажности и температуры
lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки
lcd.print("Hum = "); // Выводим текст
lcd.setCursor(7, 0); // Устанавливаем курсор на 7 символ
lcd.print(h, 0); // Выводим на экран значение влажности
lcd.setCursor(12,0);
lcd.print("%");

lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
lcd.print("Tem =  "); // Выводим текст, \1 - значок градуса
lcd.setCursor(7, 1); // Устанавливаем курсор на 7 символ
lcd.print(t,1); // Выводим значение температуры
lcd.setCursor(12,1);
lcd.print("C");
//delay(2500);
lcd.setCursor(0, 2); // Устанавливаем курсор в начало 1 строки
lcd.print("P = "); // Выводим текст
lcd.setCursor(4, 2); // Устанавливаем курсор на 7 символ
lcd.print(p, 1); // Выводим на экран значение давления
lcd.setCursor(10,2);
lcd.print("mm Hg ");


}

пятница, 20 мая 2016 г.

Телеграфный ключ – радиомаяк

Всем читателям привет! По-прежнему пишу в блоге, как только выпадает свободное время. А тут как говориться середина мая, дел должно быть невпроворот, но погода как всегда внесла свои коррективы. Одним словом благодаря тому, что у нас зарядили частые дожди, на даче дел не так много. Вот и время появилось. Ну и конечно же приступил к работе с ардуино.  В эфире просто пока не рискую работать: погода меняется так, что в течении дня то пасмурно, то дожди, то грозы. Но вот с ардуино можно и поработать…

Решил продолжить работу над  новым проектом:  автоматический телеграфный ключ – радиомаяк. Как раз для такого расширенного проекта не жаль будет использовать микроконтроллер ардуино. А то как то два МК  один для ключа, другой для нового маяка использовать – это будет нерационально. А вот два проекта в одном – это самое то! Так что с задачами определился и приступил к работе. Первым делом нужно  начертить схему. В проекте будут задействованы: два переменных резистора, несколько кнопок (которые работают как тумблеры), LCD дисплей. Так что первым делом разрабатываю схему. За основу взял прошлые схемы, и объединил их в одну. Так же не забыл добавить кнопку переключения режимов…

Со схемой все просто. Следующий шаг это написать скетч. Здесь конечно ушло гораздо больше времени. Хотя дело несложное: объединить коды из двух предыдущих проектов. Но не все так просто оказалось. Сначала пришлось искать ошибки компиляции. Но с этим справился. И в первой тестовой версии  решил пока что остановиться на отладке электронного ключа. То есть провести полное тестирование, и если нужно будет настройку параметров самого ключа. Вот наконец все сделал, объединенный код  (от двух прошлых проектов: ключ и маяк) скомпилировался без ошибок…Скетч можно загрузить с Яндекс диска по ссылке...

Собираю  схему на большой макетной плате. На средней было бы сложно и даже очень разместить большое количество проводов. А так благодаря начерченной в программе «Эсплан» схеме процесс сборки прототипа идет быстро и без ошибок. Да не зря тратим время на чертеж схемы. Собираю и проверяю на всякий случай правильность установленных компонентов: кнопки управления, кнопок имитирующих работу манипулятора, переменный резистор и ЖК дисплей.  На дисплей  решил пока выводить  режимы работы: «CW KEY MODE» или  «Радиомаяк».  Но сейчас важно проверить как работает первый режим:  электронный телеграфный ключ.

Все схема готова! Подключаю ардуино к ноутбуку, и записываю скетч в МК (микроконтроллер).  Все готово. ЖК экран приветливо написал соответствующий режим работы : «CW KEY MODE». Пробую переключить режим кнопкой выбора режима. Все работает: дисплей послушно отображает надписи каждого режима. В режиме маяка пока только тестовый писк. Зато ключ работает. Но пришлось немного поиграться с настройкой «отбивания» скорости и в итоге добился изменения скорости от минимума к максимуму.


На этом настройку первого режима работы  «CW KEY MODE» можно считать завершенной. Далее остается немного изменить скетч, добавив в него блок радиомаяка.  Опять выловить ошибки компиляции и можно будет сделать первую оценку всей большой работы. И если все будет работать как планировалось, то можно приступать к разработке шилда для этого проекта. Шилд  поможет правильно подключить  (благодаря шлефам) все нужные компоненты:  кнопки, ЖКИ, переменные резисторы. А еще параллельно буду решать еще задачу: поиском подходящего корпуса.

воскресенье, 15 мая 2016 г.

Управление кнопкой…

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

Как это будет выглядеть? Давайте пофантазируем.  Представим коробочку с ЖК экраном, двумя регуляторами (ручки переменных резисторов), тремя кнопками (включение,  переключение режимов работы и включение-отключения звукового контроля передачи), а так же разъемами к которому можно будет подключить джек 3.5 мм (один выход на трансивер, другой вход для телеграфного манипулятора). При этом на ЖК экране в верхней строчке будет отображаться режим работы: «Beacon Mode» или «CW KEY Mode». В нижней строчке будет отображаться скорость передачи, обратный отчет времени паузы… Да идея хорошая, но теперь пожалуй пора приступить к ее реализации…

А начинать будем с банальной простой задачи: управлением кнопкой. То есть нам мало подключить кнопку к ардуино, нужно еще научить понимать МК в каком состоянии находиться кнопка (или тумблер). Таких состояний только два: включено (логическая единица) или выключено (логический ноль). А для определений этих состояний идеально подойдут цифровые входы. Они работают таким образом, что если на входе напряжение меньше 2,5 В то считается что вход имеет состояния 0 (отключено), соответственно если больше 2,5В то состояние 1 (включено).

Итак, начнем. Сначала соберем схему. Здесь все как раз просто. Обратите внимание на один важный момент: мы подключили выключатель (тумблер) не просто к пину и к земле, а через нагрузочный резистор сопротивлением 10 кОм. Это нужно чтобы избежать наводок на пине, когда он отключен от земли. Только с нагрузочным резистором у нас будет только два состояния: ноль или единица. А теперь давайте познакомимся с скетчем…
int ledPin=9;
int inputPin=5;
void setup() {
 pinMode (inputPin, INPUT); // задаем пин как вход
 pinMode (ledPin, OUTPUT); // задаем пин как выход
}

void loop() {
  int reading=digitalRead(inputPin); // считываем состояние выключателя

if (reading==0)
{
  analogWrite(9, random(255)); // если 0 то запускаем режим1 мерцания
  delay (random(100));
}
else
{
digitalWrite(9, 1);// если 1 то запускаем режим2 свечения
}
}

Вот и все. Мы добились того, что при помощи одной кнопки мы можем задавать два разных режима работы. В будущем это будет режим радиомаяка, и режим телеграфного ключа. Первый шаг к решению задачи сделан. Осталось поработать с ЖК индикатором, но этим займемся уже в следующий раз. А пока всем передаю 73!

понедельник, 9 мая 2016 г.

Тестируем все датчики походной метеостанции…

Да уже май наступил, и даже не вериться! Вот буквально отметили 1 мая, а уже 9! Так что пользуясь случаем всех поздравляю с Днем Победы. Но даже в праздник нашел немного времени, чтобы провести очень интересный тест. Да как вы уже поняли из названия будем тестировать датчики нашей метеостанции построенной на базе Ардуино...

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

Проверка датчика давления. Здесь просто в течении нескольких дней наблюдал и сравнивал показания барометра-анероида, и нашей цифровой метеостанции. И оказалось, что показания очень хорошо сходиться. Далее первое значение это показания анероида, второе разность показаний обеих приборов: 760-0, 763-0,5, 765-1, 767-0,4. Как говориться точностью я остался очень доволен. Так же параллельно сравнивал и температуру – точность тоже оказалась на высоте… Итак, вывод датчик GY-68 выдержал тест, и по точности можно ему поставить пять баллов.

А вот теперь пора заняться и датчиком DHT-11. Его показания будем сравнивать с расчетными значениями влажности (по психометрическим таблицам, и специальной расчётной программы) взятыми с аспирационного психрометра. Понятно что это очень точный прибор (который еще раз подтвердил что температура полученная с датчика GY-68 поразительно сходиться с показаниями ртутного термометра), поэтому я очень доверяю его показаниям.  А вот разница составила в два раза!  Значит что-то не так, это уже даже не погрешность, а ошибка.
Гипотеза ошибки наводит на два соображения, каждое из которых нужно опять таки проверять (ну что поделать наука и научный метод требуют этого). А так вполне возможно, что проблема как раз состоит в…

1.       Первая гипотеза – неисправен, бракованный сам датчик DHT-11. К счастью это можно легко проверить: у меня есть еще один такой точно датчик. Заменил его, показания абсолютно точно такие же! Значит датчик похоже исправен. Первая гипотеза похоже неверна.
2.       Вторая гипотеза – возможно библиотека датчика писалась главным образом для другого датчика (хоть и родственник нашему но все же отличаются они): DHT-22. Однако проверить такую гипотезу пока не представляется возможным, из-за отсутствия такового датчика DHT-22. Как появиться – заменим и посмотрим….
3.       Третья гипотеза – возможно сама библиотека содержит ошибку в расчетах. В этом случае ставь хоть 11 хоть 22 датчик, показания будут их не сильно отличаться. Тогда это дело можно будет исправить в скетче: просто подкорректировать значения с учетом поправки. А чтоб понять какую поправку вводить, то нужно еще понаблюдать за влажностью и каждый раз отмечать на сколько раз все отличается…

В общем как видите в результате нашего теста, появился новый фронт для исследований. Будем снова измерять, проверять данные. А еще будем ждать DHT-22, как говориться нужно отработать все гипотезы. А пока что всем удачи, и до встречи в моем блоге…


среда, 4 мая 2016 г.

Походная станция на базе ардуино…

Процесс постижения микроконтроллера Arduino идет у нас полным ходом. Как говориться когда есть новые модули и датчики, то хочется их протестировать и тут же найти им применение в новом очередном проекте. Вот и на этот раз… Нет, конечно проект далеко не новый таких проектов оказывается много, и в интернете все найти можно. Но настолько полно там «воды» что разбираться начинающим просто невероятно. Но может быть единицы разобрались и сделали…

Ладно ближе к делу. В прошлый раз мы научились выводить на LCD экран информацию с датчика DHT-11. Провели тестирование датчика в общем получилось неплохо. Но с другой стороны если делать, так делать то что действительно будет нужно. А нужна мне небольшая метеостанция, которую можно было бы взять с собой в экологическую экспедицию. К тому же модуль датчик атмосферного давления GY-68 уже так и ждет когда я его подключу к МК. Так что за дело. С чего нужно начать? Правильно с исследования датчика: как его правильно подключить, и найти нужную библиотеку. Вот здесь поджидал первый сюрприз: датчик оказывается тоже нужно подключить к пинам А4 и А5, но они вроде как уже «заняты» LCD. Попробовал найти даже готовый проект где бы данный датчик подключался через I2C к LCD экрану. Искал долго, но не нашел. Но нашел зато полезную информацию: оказывается к I2C можно подключить одновременно несколько самых разных устройств. Это уже радует. Но опять таки в интернете только одна теория: что такое I2C, как это работает. А вот практики вроде того как же подключить GY-68 через I2C включая LCD экран к Arduino нет ни слова. Даже схемы и то нет. Ладно будем действовать старым проверенным способом: метод проб и ошибок.

Но сначала нужно было еще спаять кое что. В моем случае к датчику GY-68 нужно было припаять штырьковый разъем, а если еще точнее четыре «ножки». В общем это дело простое, и любой с этим справиться. А вот дальше нужно найти библиотеку для датчика. В интернете есть много источников, но почти все эти библиотеки оказались нерабочими. Как только дело доходит до компиляции примера скетча (в самой библиотеке) так тут же всплывает и ошибки. Но все же удалось в конце концов найти и работающую библиотеку. Эта библиотека называется Adafruit_BMP085. Так же не забудьте поставить (если вы еще не установили) библиотеки: LiquidCrystal_I2C1602V1 а так же DHT-sensor-library-master. И последнее очень важно компиляцию и запись скетча в МК осуществляйте старой версией arduino-1.6.4-windows.

Первый тест был связан с проверкой и ответом на вопрос: а вообще работает ли датчик? И случайно я его при пайке не перегрел? В общем в стандартной библиотеке нашелся пример, где можно будет проверить датчик и информацию вывести в монитор порта. Все получилось! Первый шаг сделан – ура. Теперь остается самое главное: переработать (дополнить) скетч который мы с успехом применили в первом проекте. Пришлось добавить библиотеку для датчика GY-68, и написать перерасчет давления из Паскалей в наши родные миллиметры ртутного столба. Еще немного изменить скетч пришлось и в месте, где информация выводиться на экран дисплея. Скетч новый проверил на ошибки, «выловил» две ошибки, и в итоге все. Но это только скетч (загружаем его по ссылке здесь), а еще нужно правильно подключить датчик давления…

Даже не просто подключить датчик давления, но и при этом еще начертить схему. Ведь в итоге на макетной плате появиться еще один модуль и еще четыре провода нужно будет подключить. Благодаря программе sPlan, черчение заняло всего то пару минут. Теперь нужно собрать и саму схему. Присоединяю датчик к макетке, тут же подключаю провода. Да не запутаться бы. Но все пару раз проверил – все точно. А теперь будем пробовать: подключаю ардуино к компьютеру, записываю скетч в МК. Проходит загрузка, экран засветился приветливо и. Ура! Все работает! Получилось точно так, как и планировалось.

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

А теперь подведем важнейшие итоги:
·         Перед компиляцией скетча не забудьте подключить три библиотеки: Adafruit_BMP085 (датчик давления), LiquidCrystal_I2C1602V1 (работа с LCD дисплеем с I2C модулем), DHT-sensor-library-master (сенсор с которого мы будем получать только влажность, температуру мы будем получать с датчика GY-68).
·         К I2C можно одновременно подключить несколько разных устройств. В моем случая я даже не заморачивался которое из них будет «мастер», а которое «слейв». Все работает и без этих указаний. Подключите все устройства согласно схеме и все обязательно получиться.
·         Для компиляции и записи скетча (скетч метеостанции здесь) в МК используйте старую версию ардуино: arduino-1.6.4-windows. Так как в новой возникает проблема с выводом информации на дисплей: будет выводиться только один символ. Со старой версией такой проблемы нет.

Алексей Тепцов

(RN6LLV)