суббота, 23 апреля 2016 г.

Телеграфный ключ на базе ардуино...


Привет всем читателям! Продолжаю рассказывать об интересных проектах. Сегодня не просто проект ардуино, а ардуино для радиолюбителей. Возможно в этом посте кто-то найдет для себя что-то полезное. И если это так то будем считать, что все не зря. А теперь начнем, но начнем с небольшой предыстории…
Начал изучать ардуино не просто так. А с целью сделать множество проектов, в том числе и радиолюбительских. Один проект уже завершен (то есть уже есть рабочая конструкция) это уже наверняка знакомый моим читателям «Радиомаяк-1». Так же будем совершенствовать и далее ардуино-маяк, и со временем расскажем о проекте «Радиомаяк-2». Но сегодня проект для любителей телеграфа: мы будем делать телеграфный ключ, причем автоматический. Для тех кто не знает, что это такое вкратце поясню: есть ручной (или вертикальный) где нужно самому отстукивать точки и тире, и есть автоматический. В автоматическом есть рычажок, у которого два положения: в одном положении генерируются точки, в другом тире. Это значительно упрощает работу, да и руки не так устают…

В общем дело нужное и можно начать разрабатывать алгоритм. Но тут решил еще немного поискать в интернете не делал ли кто-то уже нечто подобное? И оказалось, что да делали. Так что решил на этот раз мне изобретать велосипед, а просто взять уже готовый скетч и попробовать как все будет работать. Во основе простой CW ключ от UA1CBM. Сразу скажу скетч от UA1CBM заслуживает самых высоких похвал: эффективный и очень грамотный алгоритм работы. Единственное это нельзя управлять скоростью передачи…

А управлять скоростью как раз не так и сложно. Тем более что в проекте «Радиомаяк-2» это задача решена. Правда там используется другой алгоритм формирования точек и тире, но это не такая уж и проблема. Здесь управлять скоростью оказалось делом простым, так что дополнил скетч буквально несколькими строчками и все готово…
Теперь наступает самое интересное. Нужно собрать прототип схемы, а так же добавить еще переменный резистор. Прототип собираю на макетной плате (или как еще иначе ее называют «бредборд»). И хотя схема несложная, но прототип ее на макетке выглядит сложно. Поэтому обязательно привожу схему (кстати схему чертил в программе rusplan, в которой самостоятельно начертил и плату ардуино). Вот наконец схема собрана, и пора приступать к тестам…

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

Для тех кто желает повторить проект, скетч приведу ниже. Если скорость покажется вам «не очень» то ее можно подрегулировать изменив данные в скетче. Обратите внимание на сточку cw_delay= map(val, 0, 1024, 60, 130). Теперь смотрите: изменять нужно только два последних числа (в моем примере: 60 и 130). Далее чем числа больше – тем будет меньше скорость. В моем первоначальном скетче было 40 и 140: скорость очень большая в одном из крайних положений переменного резистора, и очень маленькая в другом. Так что подобрал экспериментально 60 и 130. Но там сами смотрите… А теперь обещенный скетч:



/*
Simple CW key by UA1CBM
Speed control CW by RN6LLV
*/

const int dashPin = 3; // тире
const int ditPin = 2; // точки
const int ledPin = 13; // the number of the LED pin
const int pot=0; // потенциометр на порт А0
int val;
int cw_delay;

void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(dashPin, INPUT);
pinMode(ditPin, INPUT);
}

void loop(){
val=analogRead(pot); // чтение данных с потенциометра
cw_delay= map(val, 0, 1024, 60, 130);
//cw_delay= (val/7);

if (digitalRead(dashPin) == HIGH) //Тире
{
// turn LED on:
digitalWrite(ledPin, HIGH);
delay(3*cw_delay);
// turn LED off:
digitalWrite(ledPin, LOW);
delay(cw_delay);
}

if (digitalRead(ditPin) == HIGH) //Тире
{
// turn LED on:
digitalWrite(ledPin, HIGH);
delay(cw_delay);
// turn LED off:
digitalWrite(ledPin, LOW);
delay(cw_delay);
}
}


8 комментариев:

  1. Замечательно! Я как раз доделываю манипулятор и искал (ищу) схему автомата для манипулятора, а тут такой подарок на ардуино! Спасибо, буду пробовать.
    Замечание - на Вашей схеме не указаны наминалы сопротивлений. Я так понял что постоянные резисторы (R1 и R2) в районе 10 кОм? а вот переменный какого номинала?

    ОтветитьУдалить
  2. переменный 10 кОм постоянные по 1 кОм

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

    ОтветитьУдалить
    Ответы
    1. Можно и через транзистор, можно и через оптрон. однако у меня здесь не получилось, я как раз в этих вопросах не силен, спрашивал ребят но так и не получилось... сделал хитрее: силовой ключ ардуино (на полевом транзисторе) который подавал ток на катушку внутри которой был геркон. Так что в итоге самодельное герконовое реле... можно конечно и обычный релейный модуль, но долго он не проживет)))) в смысле реле не предназначено там на огромное количество срабатываний...

      Удалить
  4. Вы прямо на герконе намотали катушку (соленоид)? Как производили расчет соленоида? А то у меня есть пара советских (большие стеклянные герконы).
    UN7FGN.
    73.

    ОтветитьУдалить
    Ответы
    1. нет. катушку я взял от старого телевизора (там довольно толстый обмоточный провод), но сопротилвение ее было в районе 0,5 Ом. Пришлось еще добавить сопротилвение постоянный резистор 12-15 Ом (подбирал экспериментально) в итоге добился идеального срабатывания геркона при небольшой силе тока (питание геркон получает от аккумулятора 1,2 В) 0,1А. Геркон поместил в корпус катушки....

      Удалить
  5. /*
    Simple CW key by UA1CBM
    Speed control CW by RN6LLV
    */

    const int dashPin = 3; // тире
    const int ditPin = 2; // точки
    const int ledPin = 13; // the number of the LED pin
    const int pot=0; // потенциометр на порт А0
    int val;
    int cw_delay;

    void setup() {
    // initialize the LED pin as an output:
    pinMode(ledPin, OUTPUT);
    // initialize the pushbutton pin as an input:
    pinMode(dashPin, INPUT);
    pinMode(ditPin, INPUT);
    pinMode(11, OUTPUT); // объявляем пин 11 как выход
    }

    void loop(){
    val=analogRead(pot); // чтение данных с потенциометра
    cw_delay= map(val, 0, 1024, 30, 120);
    //cw_delay= (val/7);

    if (digitalRead(dashPin) == HIGH) //Тире
    {
    // turn LED on:
    tone (11, 700); // включаем на пьезодинамик 700 Гц
    digitalWrite(ledPin, HIGH);
    delay(3*cw_delay);
    // turn LED off:
    noTone(11); // отключаем пьезодинамик на пин 11
    digitalWrite(ledPin, LOW);
    delay(cw_delay);
    }

    if (digitalRead(ditPin) == HIGH) //точка

    {
    // turn LED on:
    tone (11, 700); // включаем на пьезодинамик 700 Гц
    digitalWrite(ledPin, HIGH);
    delay(cw_delay);
    // turn LED off:
    noTone(11); // отключаем пьезодинамик на пин 11
    digitalWrite(ledPin, LOW);
    delay(cw_delay);
    }

    }
    С подключенным бузером на 11 пин и GND
    https://www.youtube.com/watch?v=gfcZqILiwA8

    ОтветитьУдалить