0,0
рейтинг
16 февраля 2014 в 17:39

Радиоуправляемый выключатель своими руками. Часть 2 — Тестирование и подготовка tutorial

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

В первой части была описана «железячная» составляющая: особенности ее проектирования и производства.

Сегодняшний пост описывает шаги по подготовке среды разработки Arduino и полное тестирование изготовленного модуля.

Для работы с изготовленным модулем потребуется любой ISP-программатор. Я буду использовать имеющийся USBtinyISP, вы можете использовать такой же или любой другой (например, сделать ArduinoISP из имеющейся платы ардуино).

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

Теперь необходимо проверить ее работоспособность.

Проверка МК


Проще всего это сделать следующим образом: подключить программатор и считать значения фьюзов.

Поскольку пост ориентирован на новичков, то буду использовать наглядные инструменты и покажу, как это сделать максимально просто: будем использовать графическую оболочку Avrdude-GUI.

  1. Скачиваем пакет Avrdude-GUI по ссылке.
  2. Распаковываем полученный архив в какую-нибудь папку.
  3. Запускаем avrdude-GUI.

После этих нехитрых действий появится окно типа:



Теперь необходимо сделать минимальные настройки: выбрать используемый программатор (поле Programmer), используемый порт (Port), указать используемый МК (Device).

Теперь подключаем программатор к компьютеру, а сам программатор — к нашей плате.

В секции «Fuse» нажимаем кнопку «Read». Если все сделано правильно — в соответствующих полях появятся значения фьюзов:

Если что-то пошло не так
Наиболее вероятны следующие ошибки:

1. Где-то непропай (или наоборот, «сопля»). Тогда в результате попытки считать фьюзы появится сообщение о такой ошибке:


Для исправления ситуации отключайте плату от программатора и очень придирчиво проверяйте качество пайки:
  • тонкой иглой проверяйте, насколько хорошо припаяны все ноги МК,
  • через увеличительное стекло отсматривайте подозрительные места,
  • прозванивайте тестером цепи от разъема ISP до МК,
  • проверяйте цепи питания.


2. Неверно выбран тип МК. Сообщение об ошибке будет выглядеть примерно так:


В моем случае как раз такая ошибка и возникла. Произошло это из-за того, что я использовал ATmega168p, а в программе выбрал ATmega168.
Чипы эти максимально близки, но у них разная сигнатура, о чем система заботливо сообщила. При этом программа подсказывает и решение проблемы — проверить правильно выбранный чип или отключить проверку сигнатуры (добавив ключ "-F" в поле «Command Line Option»).

Я воспользовался именно вторым решением (в данном случае это абсолютно нормально).

Правильнее было бы, конечно, открыть файл avdude.conf и добавить там информацию о ATmega168p, но оставим это на моей совести.

С помощью этой же оболочки можно и записать необходимые фьюзы.

В нашем случае требуется обеспечить работу МК от внутреннего осциллятора на частоте 8МГц. Для этого можете использовать для ATmega168p те значения, что приведены выше на скриншоте.

Фьюзы «объясняют» МК, в каком режиме он должен работать. О том, какие значения необходимо прописывать (или понять значения приведенных выше) можно с помощью «калькулятора фьюзов AVR», который доступен, например, по этой ссылке.

Теперь можно приступать к следующему этапу: проверка возможности программирования МК и тестирование остальной «периферии» на плате.

Подготовка среды разработки


Для этого следует сделать еще один подготовительный шаг: необходимо для среды Arduino создать соответствующую «плату». Делается это следующим образом: нужно открыть текстовым редактором файл boards.txt, который находится внутри папки \ARDUINO\hardware\arduino, где «ARDUINO» — корневая папка, в которой находится среда разработки.

В этот файл необходимо добавить следующие строчки:

##############################################################

s168po8.name=Sensor168p (int8MHz, 1.8V)

s168po8.upload.protocol=arduino
s168po8.upload.maximum_size=14336
s168po8.upload.speed=19200

s168po8.bootloader.low_fuses=0xe2
s168po8.bootloader.high_fuses=0xde
s168po8.bootloader.extended_fuses=0x00
s168po8.bootloader.path=atmega
s168po8.bootloader.file=ATmegaBOOT_168_pro_8MHz.hex
s168po8.bootloader.unlock_bits=0x3F
s168po8.bootloader.lock_bits=0x0F

s168po8.build.mcu=atmega168p
s168po8.build.f_cpu=8000000L
s168po8.build.core=arduino
s168po8.build.variant=standard

##############################################################

В первой строке указывается «имя платы», которое вы потом будете выбирать в среде программирования (можете указать любое, какое вам нравится).
Особенное внимание обратите на параметры, которые описывают фьюзы, тип МК и частоту, на которой будет работать устройство.

После этих несложных манипуляций можно запускать среду Arduino и убедиться в том, что «новая плата» появилась в списке доступных (в меню «Сервис — Плата» надо выбрать нашу: Sensor168p (int8MHz, 1.8V)).

Тест кнопок и реле


Напомню, что по схемотехнике ключи для управления реле подключены к цифровым пинам D3 и D4, а кнопки — к аналоговым A1 и A0.

Сделаем простейший тест для проверки нормального функционирования кнопок и реле:

// реле
int r1 = 3;  // D3
int r2 = 4;  // D4

// кнопки 
int b1 = 15;  // A1
int b2 = 14;  // A0

void setup() { 
  // реле
  pinMode(r1, OUTPUT);     
  pinMode(r2, OUTPUT);
  // кнопки
  pinMode(b1, INPUT);     
  pinMode(b2, INPUT);  
  // включим подтягивающие резисторы для кнопок
  digitalWrite(b1, HIGH);  
  digitalWrite(b2, HIGH);    
}

void loop() {
  // если нажали кнопку b1 - включим реле r1
  if (digitalRead(b1) == LOW) {
    digitalWrite(r1, HIGH);
  }
  else {
    digitalWrite(r1, LOW);
  }
  
  // если нажали кнопку b2 - включим реле r2
  if (digitalRead(b2) == LOW) {
    digitalWrite(r2, HIGH);
  }
  else {
    digitalWrite(r2, LOW);
  }
}

Загружаем этот тест в наше устройство.

Перед загрузкой не забываем выбрать используемый программатор в меню «Сервис» — «Программатор».

Поскольку используется программатор, то процедура чуть иная — надо в меню «Файл» выбирать пункт «Загрузить с помощью программатора» (или просто нажать комбинацию клавиш Ctrl+Shift+U).

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

Вышеприведенный тестовый скетч не отрабатывает «дребезг» и нужен исключительно для быстрой проверки функционирования платы.

Если что-то пошло не так
Типичных проблем две:
  1. Что-то неправильно сделано в среде Arduino (тогда появляются сообщения о проблемах с загрузкой в МК).
  2. Проблемы в аппаратной части (при этом загрузка проходит успешно, но реле не щелкает).

В первом случае нужно проверить все шаги, что описаны раньше (работа с файлом boards.txt, правильно выбранная результирующая плата и программатор).

Во втором случае лучшими помощниками снова станут принципиальная схема, лупа, острая иголка и тестер.


После этого остается только проверить все ли в порядке с разъемом для подключения nRF24L01+.

Тест интерфейса для nRF24L01+


На этом этапе мы не будем писать код, а просто проверим электрические цепи: при подключенном программаторе (или источнике питания 5В) измеряем напряжение между 1 и 2 контактом разъема RF24 — должно быть 3.3В.

Теперь отключаем программатор (или источник питания) и прозваниваем все цепи разъема на предмет отсутствия замыкания между соседними и наличие соединения с соответствующими пинами МК (см.схему из предыдущего поста).

Проверка высоковольтной части


Поскольку наше устройство в последующем будет коммутировать высоковольтную нагрузку, следует очень придирчиво проверить эту часть:
  1. Очень внимательно осмотрите плату (ту часть, где расположены реле и клеммники для подключения нагрузки), устраните все подозрительные места, пайка должна быть очень надежной. Не должно быть никаких «лишних» соединений.
  2. Прозвоните тестером все цепи, заодно определите, на каких контактах клеммника у вас нормально замкнутые (НЗ) и нормально разомкнутые (НР) контакты.


Результат


После всех проверок у вас на руках — полнофункциональный и полностью готовый к последующему программированию модуль. Ваша среда программирования так же подготовлена для дальнейших шагов.

Продолжение следует...

Полезные ссылки:
Алексей Степанов @avstepanov
карма
63,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (19)

  • 0
    Давно хотел узнать, но все никак руки не доходили посмотреть. Вопрос автору.
    Вот есть куча устройств, которые сейчас продаются. У всех один и тот же радиоинтерфейс. Протокол тоже наверняка кое как стандартизирован. А как реализуется исключителность устройств? Т.е. где гарантия что я не куплю себе умную розетку, нажму на кнопку на пульте и у соседа свет не выключится? )))

    Деление-то наверняка есть же. Кодовое? Какая-нибудь преамбула в протоколе? А каковы тогда принципы ее создания? Ведь мы же должны гарантировать уникальность упралвения устройством.
    • +1
      Про это spc хорошо расписал.
      • 0
        12 бит на кодовое слово — малова-то однако… Даже если учесть что они туда ввели Z-состояние (чисто мое предположение — это F состояние), то получается все равно не уникально.
        • 0
          Тут не стоит забыть о мощности приемника/передатчика. Я не думаю, что получится выключить соседу розетку, даже попав в с кодом.
          • 0
            Тут вопрос в безопасности. Я не хочу что бы кто-то за стенкой случайно или неслучайно управлял моим «умным домом». Это надо делать самому получается. Сделать нехитрый протокол, несложное ПСП (типа скремблер) и в канал засовывать сигнал — сначала ПСП, а потом данные умноженные на это ПСП (типа кадр). А в приемнике реализовать нечто самосинхронизирующегося кореллятора и как только синхронизация получится, выполнить команду. Для надежности передавать 8 раз один и тот же кадр по нажатию кнопки. На ПЛИСе это удобно было бы сделать, кстати)

            Ндя, только мое решение явно за 100р. перевалит )
            Зато сколько творчества можно проявить)))
    • 0
      В моем случае это «handmade», поэтому о «стандартизации» речи не идет. По поводу же основных принципов я уже немного говорил, в следующей части разовью эту тему.
  • +1
    Господи, да вы лучший! Я даже не читал статью, а уже добавил её в избранное, последнее время никак не покидает голову эта мысля, спасибо вам!!!
    • +3
      «Не читать — добавить в избранное», в общем-то, распространенный кейс на Хабре.
      • 0
        Как понять «распространенный»?
        Я, например, добавляю в избранное только после хотя бы беглого изучения. Ценность статьи причем оценивается если она несет именно знания, а не просто информирование.
        • +1
          «О, интересная статья, вроде, добавлю в избранное, потом почитаю». И вот это потом не наступает. Бывает и за собой такое замечал, и в комментариях многие о таком отписываются.

          Я же не спорю, что в избранное попадают, хотя бы и на первый взгляд интересные статьи. Просто не всегда к ним возвращаются, вот о чем речь.
  • 0
    Почему бы не использовать bluetooth модули hc-05 (hc-06 и тп)? В них сразу есть «мозги», работы было бы в разы меньше. Нужно было бы только сделать свой программатор из трех резисторов и прошить через lpt. Плюс доступ со всех девайсов, у которых есть блютуз. И стоит один такой модуль меньше 5$ на ебае, В заводской sdk нсть набор исходников с реализацией различных типов устройств (в том числе последовательный порт). На борту есть цифровые gpio, шим выходы и аналоговые входы.
    • 0
      Во первых эти модули дороже(вроде раза в 4 при беглом обзоре цен), во вторых могут работать только точка-точка между собой, а nRF24L01 (и nRF24LE1) может быть несколько…
      • 0
        5$ за модуль. Сами nrf24 дешевле, но ведь к ним еще нужно покупать МК. По поводу hc-05 на хабре есть интересная статья. Да и возможность подключения типа только точка-точка разве так критична?
        Плюс сами модули hc-05 помимо всего умеют общаться с периферией по i2c, spi, uart. Имеет стерео выход и пр.
        • 0
          nRF24L01+atmega8 =где-то пару долларов будет. Ну или другой любой дешевенький м/к на любителя… И да, точка-точка критично, если необходима сеть из устройств в системе умного дома. Хотя тут тоже на любителя и смотря для какой цели.
  • 0
    Есть несколько вопросов по предыдущей статье от новичка в схемотехнике (прочел ее достаточно поздно, чтобы задавать там вопросы):
    1. Схема имеет регулятор 3.3В для nRF24L01, но не имеет регулятора 5В для МК, причем nRF24L01, судя по гуглу, принимает 3.3-7В. В общем, зачем нужен дополнительный регулятор и/или почему нет регулятора для МК?
    2. Как будет работать 3.3В nRF24L01 по SPI с 5В МК?
    3. Какой смысл в двух разных (по типу) параллельных конденсаторах для развязки по питанию?
    • +2
      1. Вроде как схема питается от внешнего источника питания уже выдающий такое напряжение.
      2. Радиомодулю особо без разницы что 3.3, что 5в и не сгорит. Выводы толерантны к +5в
      3. Для защиты от низкочастотных и высокочастотных помех.
      • +1
        Да, все именно так, спасибо.
        По второму пункту чуть расширю ответ — модулю для питания надо 3.3В, а вот его входы — толерантны к 5В, поэтому стабилизатор для его питания есть, а схемы согласования уровней — нет.
        • 0
          А в случае передачи данных с модуля — МК, МК считает HIGH начиная с 0.6VCC (2.4-5.5В, глянул в даташите) — это 3В при максимальных с пина 3.3 — не будет ли это проблемой, я имею ввиду маленькая разница между тем что макс может отдать модуль и мин, что может быть распознано как HIGH на МК?

          За ответы спасибо!
          • +1
            Нет, таких проблем не возникает.

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