воскресенье, 13 марта 2016 г.

Проект «Телеграфный маяк» на  Arduino…

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

А почему бы и нет? Меня давно уже притягивала тема радиолюбительских маяков. Уже давно освоен WSPR, но хочется что-то более простого: не требующих больших затрат и самое главное включение компьютера. Идеально подойдет здесь радиомаяк, который будет работать независимо от компьютера, но тем не менее будет посылать сигналы CW. Конечно можно сделать простейший мультивибратор, который и будет «пищать». Но это не так интересно…
А почему не создать на базе  Arduino автоматическое устройство, которое будет отправлять в эфир морзянкой вполне осмысленный текст, например такой: «CQ RN6LLV/B CQ RN6LLV/B CQ pse K K K». То есть маяк дает общий вызов и сообщает что это маяк «/В». Хотя можно конечно передавать и прямым текстом: CQ RN6LLV CQ bacon. Ну с текстом можно еще поработать, главное как научить плату  Arduino передавать морзянку?


Что будет лежать в основе алгоритма? Делаю первое приближение: создаем сигналы на определенном пине разной длительности. Скажем точка будет иметь длительность 200 мс, а тире 600, паузы между буквами продолжительностью точки, между словами продолжительностью тире. Тут нам поможет команда delay.  Ну и конечно придётся программировать отдельными функциями (они будут работать как подпрограммы) на отдельные фразы: CQ, RN6LLV/B, PSE K K K.

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

Далее в проекте радиомаяка я заменю светодиод на оптрон, который и будет уже заставлять простейший телеграфный передатчик выдавать морзянку в эфир. Причем этот передатчик будет выдавать минимальную мощность, порядка 100-300 милливатт, что вполне будет соответствовать QRPP мощности. Так что пора переходить ко второму шагу: это спаять схему такого передатчика.
Большое спасибо дорогим коллегам клуба QRP (RV3MP es R2AJA) за помощь и консультацию по коммутации передатчика и платы ардуино. Впереди у меня еще много работы, так что еще будет о чем еще написать. 

суббота, 12 марта 2016 г.

Имитация горения свечи…

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

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

А теперь от идеи пора переходить к практической реализации, а точнее алгоритму работы светодиодов. Он оказался таким простым, благодаря оператору случайных чисел. Вот попробуйте сами разобраться как будет работать такая строчка кода: analogWrite (led_red, random(120) + 135); на самом деле все просто: с помощью команды analogWrite на вывод (который может генерировать ШИМ, это могут быть пины с номерами: 9, 10, 11) будет подаваться напряжение от 0 до 5 вольт благодаря генерации случайных чисел от 135 до 255). Полный скетч привожу ниже:
int led_gel1 = 9; // желтый светодиод
int led_red = 10; // красный светодиод
int led_gel2 = 11; //желтый светодиод
void setup()
{
  pinMode (led_gel1, OUTPUT);
  pinMode (led_red, OUTPUT);
  pinMode (led_gel2, OUTPUT);
}

void loop()
{
  analogWrite (led_gel1, random(120) + 135);
  analogWrite (led_red, random(120) + 135);
  analogWrite (led_gel2, random(120) + 135);
  delay (random(100));
}
Как видите все действительно просто. Собираю схему пока на макетной плате, и проверяю. В целом все работает, но чтобы действительно получить эффект горящей свечи, светодиоды я поместил в полупрозрачный пластиковый колпачок (от использованной жидкости для полоскания рта). Под полупрозрачным колпачком светодиоды действительно зажигаясь напоминали горение свечи. Но особо эффективно смотрится конечно же ночью.


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


четверг, 10 марта 2016 г.

Корпус для платы Arduino Uno...

Те кто серьезно занимается Arduino наверняка сталкивались с небольшой проблемой: как закрепить плату Arduino Uno, чтобы при создании прототипа схемы не повредить плату (или скажем случайно не замкнуть там контакты на плате)??? Конечно можно плату разместить на столе и не заморачиваться разными корпусами. Но раз есть корпуса, почему бы не попробовать их использовать на практике.


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

Корпус для  Arduino Uno основательно продуман (есть все необходимые отверстия под болты и крепеж, вырезы (для доступа к разъемам и пинам). Материал прозрачный акрил, довольно прочный. Все детали корпуса поставляются заклеенными с двух сторон защитной бумагой, которую снять что называется помощью ногтей практически невозможно. Есть более простой и быстрый способ: нужно иголкой проколоть защитный бумажный слой, слегка ввести ее внутрь и затем просто осторожно приподнять вверх и немного на себя. Защитная пленка легко отклеивается и дальше ее просто не спеша отклеиваем от акрилового корпуса. На все про все у меня ушло пять минут.  А вот на сборку ушло минут 15...

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

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



воскресенье, 6 марта 2016 г.

Ардуино: управляем ПДУ мощной нагрузкой

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

А теперь давайте перейдем к делу. На сом деле у меня не простой релейный модуль, он еще с оптроном. Это хорошо, так как получается что-то вроде дополнительной развязки. Но вот как все это дело теперь подключить, вот в чем и предстоит нам разобраться. Новый проект делать не стал, так как уже есть проект «Управление включением светодиодами с помощью ИКпульта». Так что можно теперь вместо одного из светодиодов подключить реле.

Оказывается, что подключить релейный модуль проще пареной репы: там три контакта (правда еще два замкнуты перемычкой –оставил их как есть – замкнутыми). Далее все просто: три контакта один из которых подключаем к земле (GND), другой на питание 5 вольт и один сигнальный можно подключить параллельно к плюсу любого светодиода. Включаю релейный блок приветливо зажег светодиод на плате – значит все работает.

Теперь наступает торжественный момент: жму кнопку на пульте и … Слышен характерный звук срабатывания реле – щелчок! Есть контакт! Тут же зажглась и 12 вольтная лампа, запитанная от свинцового аккумулятора. Так же светиться и светодиод, к которому я и подключил сигнальный провод ведущий к релейному модулю. Все работает прекрасно.  А теперь как всегда видео которое наглядно покажет все в работе.



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


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

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

Музыкальная «пыточная» шарманка или осваиваем пьезоизлучатель...

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

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

Оператор tone как раз и позволит получить звук определенной частоты и длительности. По сути все что нужно это просто прописать: tone (номер пина, частота Гц, длительность мс,); чтобы все наглядно показать, давайте сделаем чтобы на 7 пине генерировался сигнал с частотой 770 Гц продолжительностью в полсекунды. Да нет ничего проще: tone (7, 770, 500);
Думаю, что слушать тон одной и той же частоты да еще одинаковой продолжительности вряд ли заинтересует нашего любопытного читателя. А давайте сделаем так чтобы все параметры постоянно менялись. А вот тогда мы получим «музыкальную шкатулку» в которой будет издаваться самые разные звуки причем разной длительности. Для этого воспользуемся специальным оператором генерации случайных чисел: random (300, 800); С этим оператором еще проще: он просто будет генерировать случайным образом числа в указанном в скобках диапазоне. Таким образом будет меняться тональность (скажем от 300 до 800 Гц) и длительность (от 200 до 400 мс). Конечно вы можете потом сами поменять размах этих задаваемых значений тона и длительности и посмотреть, что из этого вышло.  А теперь сам скетч:

int spek=7;
long res=300;
long sef=300;
void setup()
 {
   pinMode (spek , OUTPUT);
}

void loop()
 {
  res=random (300, 800);
  sef=random (200, 400);
tone (spek, res, sef);
delay (400);
}



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

суббота, 27 февраля 2016 г.

Начинаем работать с ИК приемником, или будем управлять светодиодами с пульта.


Для реализации этого проекта нам понадобиться немного радиодеталей: ИК приемник (VS 1838B), пульт ДУ (подойдет любой, но я буду использовать пока пульт от набора ардуино), два резистора на 100-200 Ом, конденсатор 10 мкФ, три светодиода разных цветов, и макетные провода с макетной платой.


Теперь немного теории (без этого никуда). Инфракрасный пульт дистанционного управления — один из самых простых способов взаимодействия с электронными приборами. Наверняка в каждом доме найдётся немало таких устройств: телевизор, музыкальный центр, видеоплеер, кондиционер. А можно ли с помощью ПДУ (пульт дистанционного управления) управлять нашей Arduino Uno? Оказывается да! Для начала поставим скромную задачу: с помощью ПДУ зажигать и гасить светодиоды.

Для начала нам понадобиться любой ИК пульт (если у вас остались старые ИК ПДУ, то вот можно найти им применение).  Такие устройства ИК работают испуская на инфракрасном светодиоде импульсы ИК излучения определённой частоты (приблизительно от 38 до 40 кГц). Соответственно приемник (в нашем случае это VS1838B) может принимать любой ИК излучение, но «ненужное» излучение (несущая) должно быть отфильтровано (иначе будут ложные срабатывания), и в итоге остаётся только «нужный» сигнал данных (который передается при нажатии на кнопку ПДУ).


Но вернемся к нашему приемнику ИК VS1838B. Важно его грамотно подключить. А для этого давайте сначала познакомимся с его выводами. Он имеет три вывода: если посмотреть на датчик со стороны приёмника ИК сигнала, как показано на рисунке, то слева будет — выход на контроллер, по центру — отрицательный контакт питания (земля), и справа — положительный контакт питания (2.7 — 5.5В).

 Далее собираем схему и давайте подключим библиотеку IRremote (ее можно будет загрузить с Яндекс диска по этой ссылке). Если кто еще не знает как это сделать, то вот здесь можно будет все наглядно посмотреть (ссылка на видео). Следующим этапом нам нужно убедиться, что наш ПДУ действительно подает сигналы на ИК приемник и все отображается в мониторе порта. Вообще для этого есть отдельный скетч (который можно загрузить из примера в библиотеке IRremote), но давайте сразу убьём обоих зайцев: возьмём готовый скетч (который мы в дальнейшем будем настраивать).

/*
 Arduino, ИК(IR) приемник и пульт управления
*/

// Подключаем библиотеку для работы с IR приемником
#include <IRremote.h>

#define LED_PIN
int IRRECV_PIN = 2;

// Для управления цветом светодиода используем 3 ШИМ порта
int bluePin = 9;
int greenPin = 10;
int redPin = 11;

// Выставляем, на каком порту весит выход IR приемника
IRrecv irrecv(IRRECV_PIN);

decode_results res;

void setup() {
  // Включаем последовательное соединение с ПК
  Serial.begin(9600);
  // Включаем IR приемник
  irrecv.enableIRIn();
  // НАстраиваем выходы для нашего RGB светодиода
  pinMode(bluePin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(redPin, OUTPUT);

}

void loop() {
  // Принимаем и декодируем сигнал
  if (irrecv.decode(&res)) {
   
    // Сохраняем полученное значение в переменной
    int value = res.value;
   
    // Выводим на монитор последовательного порта значения.
    Serial.println(value);
   
    // В зависимости от кода полученного сигнала, выполняем действия.
    // Для используемого пульта кнопки 1,2,3 - RGB свечение, 9 - выключение
    if (value == 26775){
      setColor(255, 0, 0);
    } else if (value == 12495){
      setColor(0, 255, 0);
    } else if (value == 6375){
      setColor(0, 0, 255);
    } else if (value == 31365){
      setColor(0, 0, 0);
    }
    // Даем команду получать следующее значение
    irrecv.resume();
  }
}

// Функция включения необходимого цвета на нашем RGB светодиоде
void setColor(int red, int green, int blue) {
  analogWrite(redPin, red);
  analogWrite(greenPin, green);
  analogWrite(bluePin, blue);
}


В вашем варианте коды от пульта могут быть другими, так что замените мои значения (от китайского ПДУ в базовом наборе ардуино) на те, которые вы сможете увидеть в мониторе порта. И собственно все! После замены перезагрузите скетч и попробуйте теперь с ИК ПДУ зажигать и гасить светодиоды. У меня это получилось так (посмотрите видео, где я не только демонстрирую работу ИК ПДУ но так же делюсь и дальнейшими планами по реализации этого проекта). 

пятница, 26 февраля 2016 г.

Начинаем работать с модулем влажности DHT11

Всем нашим читателям привет. Как вы поняли из названия, сегодня мы не будем работать со светодиодами, хотя еще будем возвращаться к теме светодиодов в дальнейших уроках. Сегодня мы научимся многим важным моментам: устанавливать и работать с готовыми библиотеками, DHT11.
ну и конечно же постараемся подключить модуль температуры и влажности и проверить как это все работает. Разумеется мы научимся правильно подключать модуль влажности
Нам понадобиться: модуль влажности DHT11, резистор на 10 кОм.
Чем отличаются датчики DHT11 и DHT22?
Две версии сенсоров DHT похожи друг на друга и имеют одинаковую распиновку. Их отличия в характеристиках. Спецификации:

Сенсор DHT11:
определение влажности в диапозоне 20-80%
определение температуры от 0°C до +50°C
частота опроса 1 раз в секунду

Сенсор DHT22:
определение влажности в диапазоне 0-100%
определение температуры от -40°C до +125°C
частота опроса 1 раз в 2 секунды
Таким образом, характеристики датчика DHT22 лучше по сравнению с DHT11, и поэтому он чуть-чуть дороже. Снимать показания чаще, чем раз в 1-2 секунды не получится, но, возможно, для вашего проекта более высокое быстродействие и не требуется.



Подключение сенсоров DHT к Arduino
Датчики DHT имеют стандартные выводы и их просто установить на breadboard.
Датчики DHT имеют 4 вывода:
питание.
вывод данных
не используется.
GND (земля).
Между выводами питания и вывода данных нужно разместить резистор номиналом 10 кОм.
Датчик DHT часто продается в виде готового модуля. В этом случае он имеет три вывода и подключается без резистора, т.к. резистор уже есть на плате.


Что нужно сделать? А все просто: сначала правильно подключим датчик к плате ардуино. Далее нужно установить библиотеку. Об этом лучше не сто раз прочитать, а один раз увидеть, поэтому вам в помощь видео «Как подключить библиотеку…». Когда все вопросы с применением библиотеки (поверьте там ничего сложного нет) останутся позади то можно будет записать скетч на плату ардуино и протестировать наш датчик.

Выводы: несмотря на средние характеристики датчик температуры и влажности DHT11 вполне можно использовать (хотя бы для того чтобы просо попробовать поработать с ним, знания никогда лишними не бывают, да и пригодиться все это при освоении других аналоговых датчиков). А что получилось у меня, можно посмотреть в видео ниже: