Site Loader

Содержание

Автоматическое включение нагрузки по времени

2016-02-08

Всі статті →

Назарчик Дядюн

Каждый день мы делаем что-то очень много раз. Например включаем свет на улице, или включаем ночник возле кровати. Но конечно же это очень надоедает. Я решил эту проблему с помощью своего нового проекта который назвал «ArduAuto», не знаю почему именно так, но это пришло в голову сразу же. Ardu-это от слова Ардуино Auto-от слова Автоматика.

Вот так вот, ну что перейдем к рассмотрению моего устройства?

Все на платформе Arduino MEGA2560. Также я использовал самодельный дисплей шилд, но проще купить, тем более не дорого! Еще нам понадобится модуль реальных часов и реле. Я сделал на 1 канал, то есть можно подключить только 1 реле, но немного дополнив программу можно сделать и более чем на 1 канал! Для соединений использовал макетную плату и провода для макетирования

Теперь перейдем к фотографиям)

Тут вы можете видеть думаю многим уже знакомую анимацию загрузки, которая была взята с моего проекта «Lcd Menu»

Здесь отображается текущая версия программы, если увидите баги, то пожалуйста напишите мне о них в мой Вк: https://vk. com/nazar_diadiun.

После всех ожиданий мы попадаем в главное меню, где можем видеть текущее время, и время до включения\выключения. То есть если реле выключено, то отображается время сколько осталось ждать до его включения, а если включено, то сколько ждать до выключения. Это очень сложно объяснить на словах, поэтому лучше посмотрите сами))

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

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

А также надеюсь что мой проект кому то поможет =) Скетч конечно же прилагаю!

Всем спасибо за внимание, а магазину Arduino.ua за все то, благодаря чему появился этот проект.

До скорой встречи!

Дякуємо Вам за звернення! Ваш відгук з’явиться після модерації адміністратором.

Поки немає відгуків на цю статтю.

Немного о скорости выполнения программ на Arduino-совместимых платах. Часть 2: Пишем программу оптимально: пора сниматься с ручника

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

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

Рассмотрим это на примере одних из самых часто выполняемых операций – на примере цифрового вывода в линию порта функцией digitalWrite. Вы когда-либо задавали себе вопрос «Сколько времени занимает запись единицы или нуля в линию порта?». Вряд ли. На это редко обращают внимание. А зря…

Давайте измерим время выполнения функции digitalWrite. Для этого возьмём стандартный скетч «Blink» и просто уберём из него задержки (рис. 1) – будем как можно быстрее записывать в линию порта ноль и единицу. Загрузим получившийся скетч в плату и логическим анализатором измерим продолжительность единицы и нуля на линии порта (рис. 2).

Результаты удивляют — примерно по 7.5 мкс (микросекунд) на запись единицы и нуля. Удивляют тем, что такая простая функция может съедать так много времени.

Одна операция выполняется микроконтроллером семейства AVR за один такт. При стандартной тактовой частоте 16 МГц на выполнение одной элементарной операции уходит 0,0625 мкс. Следовательно, функция digitalWrite состоит из примерно 120 элементарных операций. Много это или мало? Это ужасно много. Забегая наперёд, скажем, что для этого достаточно всего двух элементарных операций. Так почему же функция digitalWrite содержит аж 120?

Всё кроется в самой концепции Arduino. Платформа Arduino предназначена для новичков, поэтому в ней реализовано максимальное удобство для пользователя, местами в ущерб другим характеристикам. Например, пользователь при использовании функции digitalWrite оперирует лишь условным номером линии порта (№15 в нашем примере). Ему, в частности, не нужно знать внутреннюю структуру аппаратных портов микроконтроллера, допустимые режимы работы каждой линии порта, их привязку к выводам самого микроконтроллера. Этим всем, как раз, и занимается функция digitalWrite. Она ищет соответствующие условному номеру регистры аппаратного порта, проверяет, в каком состоянии нужная линия порта, в каком режиме она работает (не используется ли эта линия порта при работе цифровых интерфейсов, ШИМ и т. д.). К тому же, эта функция написана не оптимально.

Забота о пользователях – это, несомненно, хорошо. Но что, если вы уже стали опытным ардуинщиком и в вашем новом устройстве важна скорость работы программы? Решение есть. Реализуем цифровой вывод в линию порта стандартным способом языка С – просто запишем значение «1» и «0» в нужный разряд нужного регистра микроконтроллера по схеме платы. Для этого найдём соответствующие наименование регистра и номер разряда. В нашей плате условной линии №15 соответствует линия PB7 — разряд 7 порта В, значит нам нужны регистр PORTB, 7-й разряд. Исправляем скетч, как показано на рис. 3, загружаем скетч в плату и повторяем измерения.

Смотрим на результаты (рис. 4). Ну это же совсем другое дело! Всё, как мы говорили (ну почти): 0,125 мкс (2 операции) на запись нуля и 1 мкс (16 операций) на запись единицы (из них 2 – собственно запись и ещё 14 безжалостно съедаются функцией loop, которая тоже не оптимизирована). То есть, на один цикл работы у нас теперь уходит 1.125 мкс (18 тактов) вместо 15 мкс (240 тактов) – мы ускорили работу программы более чем в 13 раз. Но это – не предел оптимизации. Продолжение — в следующей части.

Выводы:

  1. Структура программы сильно влияет на скорость её выполнения, поэтому критичные к скорости участки программы обязательно нужно оптимизировать.
  2. Стандартные функции Arduino написаны неоптимально, но зато имеют защиту от неопытности пользователей.

Часы реального времени — модуль для Arduino

Для корректной работы многих электронных устройств необходимо знать точное время и дату. К таким устройствам можно отнести не только всем известные «часы на микроконтроллере», которые существуют в бесчисленном множестве вариантов, но и различные схемы автоматизации от простой системы автоматического цветополива, до полноценного умного дома. Разумеется, в продаже имеется достаточное количество различных специализированных микросхем реального времени [1]. Данный модуль был приобретен на Aliexpress.

Модуль поставляется в запаянном антистатическом пакете, габариты 45 х 23 х 15 мм, масса 8,8 г вместе с элементом питания CR2032.

На печатной плате устройства имеется три крепежных отверстия диаметром 2 мм. Для автономной работы часов на плате имеется колодка для установки элемента питания типоразмера CR2032. На плате модуля имеется светодиод для индикации внешнего питания.


Всего модуль имеет шесть основных выводов. VCC и GND питание +5 В (допустимо +3,3 В) и общий провод соответственно. SCL и SDA – контакты интерфейса I2C. Этот последовательный интерфейс позволяет организовать обмен информацией между 128 устройствами по двухпроводной линии [2-4]. Для платы Arduino UNO следует подключать SCL к А5, а SDA к А4.

SQW – программированный выход который можно использовать для генерации прерываний или генерации меандра с частотой 1 Гц, 1024 Гц, 4096 Гц или 8192 Гц. 32K – меандр с фиксированной частотой импульсов 32768 Гц [5-6]

Ток, потребляемый модулем от платы Arduino UNO, составляет 5,3 мА при напряжении 5В и 2 мА при 3.3 В.

Для работы с данным модулем можно использовать стандартные библиотеки «DS1307RTC» и «TimeLib» [7]. При первом включении необходимо установить текущее время и дату. Это можно сделать, например, с помощью программы time_set [8-9]. Визуализировать информацию о дате и времени, можно с помощью, к примеру, TimeRTCSet — стандартного примера из библиотеки «TimeLib».

В целом сравнительно простой в программировании модуль, с помощью которого можно заставить ваше устройство ориентироваться во времени. Приятным бонусом является возможность осуществлять измерение температуры с помощью данного модуля [10].

Полезные ссылки

  1. https://arduinomaster.ru/datchiki-arduino/arduino-chasy-rtc-ds1307-ds1302-ds3231/
  2. Д. Изучаем Arduino: инструменты и методы технического волшебства: Пер. с англ. — СПб.: БХВ-Петербург, 2015. — 336 с.
  3. http://robocraft.ru/blog/communication/780.html
  4. http://cxem.net/mc/mc316.php
  5. http://radiolaba.ru/microcotrollers/ds3231-podklyuchenie-chasov-realnogo-vremeni.html
  6. http://www.avrki.ru/articles/content/ds3231/
  7. http://blog.rchip.ru/podklyuchenie-chasov-realnogo-vremeni-rtc-ds3231-k-arduino/
  8. https://voltiq.ru/connecting-ds3231-to-arduino/
  9. http://radiolis.pp.ua/arduino/24-chasy-realnogo-vremeni-ds3231sn-zs-042-podkljuchenie-k-arduino
  10. http://blog.rchip.ru/oled-chasy-termometr-na-arduino-i-ds3231/

Все файлы в архиве. Обзор подготовлен для 2Схемы.ру — Denev


МЕЖДУНАРОДНАЯ СЕТЬ ШКОЛ РОБОТОТЕХНИКИ, ПРОГРАММИРОВАНИЯ И 3D-ПЕЧАТИ ДЛЯ ДЕТЕЙ И ВЗРОСЛЫХ

[[[[«field3″,»equal_to»,»spb»]],[[«show_fields»,»field11″,»anisimov»]],»and»],[[[«field3″,»equal_to»,»fin»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»bishk»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»rum»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field67″,»equal_to»,»tokia»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field67″,»equal_to»,»fuk»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»tai»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»khab»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»ussur»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»temryk»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»stav»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»snk»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»simf»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»rej»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»pk»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»pskov»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»oren»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»nn»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»novom»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»magadan»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»lisva»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»kurgan»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»kursk»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»kali»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»krymsk»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»kaluga»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»vor»]],[[«email_to»,null,»[email protected]»],[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»bir»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»barn»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»anapa»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»astr»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»aldan»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»volgogr»]],[[«email_to»,»field68″,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»jap»]],[[«show_fields»,»field67″]],»and»],[[[«field68″,»equal_to»,»50″]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field68″,»equal_to»,»nevs»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»ufa»]],[[«show_fields»,»field69″]],»and»],[[[«field69″,»equal_to»,»nag»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field69″,»equal_to»,»bak»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field69″,»equal_to»,»entuz»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»murmansk»]],[[«email_to»,»field70″,»[email protected]»]],»and»],[[[«field71″,»equal_to»,»voro»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field71″,»equal_to»,»len»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»kras»]],[[«show_fields»,»field72″]],»and»],[[[«field72″,»equal_to»,»prig»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field72″,»equal_to»,»mont»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field72″,»equal_to»,»mosk»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field72″,»equal_to»,»ger»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field72″,»equal_to»,»gener»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»mo»]],[[«show_fields»,»field73″]],»and»],[[[«field73″,»equal_to»,»serp»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field73″,»equal_to»,»sol»]],[[«email_to»,null,»[email protected]»]],»or»],[[[«field73″,»equal_to»,»odin»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field73″,»equal_to»,»zel»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»msk»]],[[«show_fields»,»field74″]],»and»],[[[«field74″,»equal_to»,»mitino»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field74″,»equal_to»,»lub»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field74″,»equal_to»,»bibirevo»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field74″,»equal_to»,»butovos»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field74″,»equal_to»,»butovon»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field74″,»equal_to»,»polej»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field74″,»equal_to»,»ramenki»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field74″,»equal_to»,»izm»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field11″,»equal_to»,»vas»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field11″,»equal_to»,»msk»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field11″,»equal_to»,»kon»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field11″,»equal_to»,»kor»]],[[«email_to»,null,»[email protected]»],[«email_to»,null,»[email protected]»]],»and»],[[[«field11″,»equal_to»,»kos»]],[[«email_to»,null,»Kosygina33@@robboclub.ru»]],»and»],[[[«field11″,»equal_to»,»pp»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field11″,»equal_to»,»beg»]],[[«show_fields»,»field75″]],»and»],[[[«field75″,»equal_to»,»lij»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field75″,»equal_to»,»prim»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field11″,»equal_to»,»pp»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»vor»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»vor»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field72″,»equal_to»,»posadsk»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field74″,»equal_to»,»pervomaj»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field72″,»equal_to»,»kr_prigorod»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»krym»]],[[«show_fields»,»field77″]],»and»],[[[«field77″,»equal_to»,»belog»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field77″,»equal_to»,»kerch_l»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field73″,»equal_to»,»noginsk»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field11″,»equal_to»,»lesn»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»nalchik»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»bel_borisov»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field74″,»equal_to»,»anohina»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field73″,»equal_to»,»april»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»petrop»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»lening»]],[[«show_fields»,»field78″]],»and»],[[[«field78″,»equal_to»,»sosn»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field73″,»equal_to»,»kolomna»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»sochi»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»omsk»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field74″,»equal_to»,»scandinav»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field74″,»equal_to»,»green»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field11″,»equal_to»,»stah»]],[[«email_to»,null,»[email protected]»]],»and»],[[[«field3″,»equal_to»,»perm»]],[[«email_to»,null,»[email protected]»]],»and»]]

Страна–Город

Выберите Ваш городРоссия – Санкт-ПетербургРоссия – Ленинградская областьРоссия – МоскваРоссия – Московская областьРоссия — АлданРоссия – АстраханьРоссия — БиробиджанРоссия – ВоронежРоссия — ВолгоградРоссия – КалининградРоссия — КалугаРоссия – КрымРоссия – КраснодарРоссия – КрымскРоссия – КурскРоссия – КурганРоссия – МагаданРоссия – МурманскРоссия – НальчикРоссия – Нижний НовгородРоссия – НовомосковскРоссия – ОмскРоссия – ОренбургРоссия – ПермьРоссия – Петропавловск-КамчатскийРоссия – ПсковРоссия – РежРоссия — СочиРоссия – СтавропольРоссия – ТемрюкРоссия – УссурийскРоссия – УфаБеларусь – БорисовТайланд — БангкокРумыния — БухарестФинляндия – ХельсинкиЯпония

spb

Выберите Ваш клубБеговаяВасильевский островКомендантский проспектКондратьевскийКоролёваЛеснаяПетроградскаяПроспект ПросвещенияСтахановская

len_oblpick one!

Выберите Ваш клубПушкинСосновый Бор

japanpick one!

Выберите Ваш клубТокиоФукуока

moscowpick one!

Выберите Ваш клубРаменкиМитиноПервомайскаяАнохинаСкандинавскийЖК Грин Парк

volgogradpick one!

Выберите Ваш клуб50 лет ОктябряНевская

murmanskpick one!

Выберите Ваш клубСофьи ПеровскойЩербакова

mopick one!

Выберите Ваш клубАпрелевкаКоломнаНогинскСерпуховСолнечногорск

krasnodarpick one!

Выберите Ваш клубМонтажниковМосковскаяпр. Генерала ШифринаГероя Владислава ПосадскогоПригородная

ufapick one!

Выберите Ваш клубНагаеваБакалинскаяЭнтузиастов

kerchpick one!

Выберите Ваш клубВорошиловаЛенина

begpick one!

Выберите Ваш клубЛыжный

resp_krympick one!

Выберите Ваш клубБелогорскКерчь

границ | Синхронизация времени для беспроводных датчиков с использованием недорогого модуля GPS и Arduino

1. Введение

Беспроводные датчики крайне необходимы для полевых измерений в гражданской инфраструктуре, чтобы избежать дорогостоящей, трудоемкой и трудоемкой установки проводных датчиков. Можно найти обширный обзор истории развития беспроводных датчиков (Lynch and Loh, 2006). Хотя беспроводные датчики имеют свои преимущества, они создают техническую проблему при переходе от проводного к беспроводному, т.е.е., временная синхронизация между датчиками. Синхронизация времени для беспроводных датчиков важна, особенно при использовании датчиков с высокой частотой дискретизации, таких как датчики ускорения или датчики динамической деформации, для правильного получения форм колебаний или форм колебаний (Krishnamurthy et al., 2008; Abdaoui et al., 2017).

Возможные методы временной синхронизации, о которых известно, что доступны (не ограничиваясь ими): (1) методы на основе пакетов временной синхронизации, (2) метод на основе радиовещания наземного времени и (3) метод на основе модулей GPS.

Первый подход был одной из важных тем исследований в сообществе исследователей информатики (Sundararaman et al., 2005; Sadler and Swami, 2006; Lasassmeh and Conrad, 2010). Известными алгоритмами синхронизации времени являются эталонная синхронизация широковещательной передачи (RBS) (Elson et al., 2002; Sim et al., 2010), протокол синхронизации времени для сенсорных сетей (TPSN) (Kumar and Srivastava, 2003) и протокол синхронизации времени наводнения. (FTSP) (Maróti et al., 2004).

Сообщалось, что ошибки синхронизации времени RBS, FTSP и TPSN находятся в пределах 20 мкс.Однако при топологии на основе корня или дерева их совокупные ошибки могут составлять до 5 мс за период 6 с (Krishnamurthy et al., 2008). Чтобы преодолеть такое накопление, были введены протоколы синхронизации времени на основе консенсуса (Olfati-Saber et al., 2007; Maggs et al., 2012). По сравнению с синхронизацией времени на основе корня или дерева, синхронизация времени на основе консенсуса не требует единой временной привязки.

В сообществе исследователей гражданского строительства заметной разработкой с проверенной способностью синхронизации времени является система HW / SW на основе imote2, разработанная в рамках проекта SHM в штате Иллинойс (http: // www.shm.cs.illinois.edu), который реализовал FTSP для синхронизации часов с точностью 80 мкс и разработал метод передискретизации для синхронизации данных (Nagayama and Spencer, 2007; Nagayama et al., 2007). В результате их исследования были сформированы Embedor Technologies (http://embedortech.com) и разработаны интеллектуальные датчики Xnode с операционной системой реального времени (FreeRTOS) на микроконтроллере NXP LPC4357 (Spencer et al., 2017). Спецификация производительности синхронизации времени пока недоступна, но разумно ожидать такой же точности 80 мкс или выше, поскольку ОС реального времени снижает неопределенность таймингов выполнения задач.

Второй подход использует радиосигналы, посылаемые радиостанциями временного вещания, разбросанными по всему миру (Ikram et al., 2010). Этот подход потребляет меньше энергии, чем модули GPS, и не ограничивается диапазоном прямой видимости, но точность составляет около нескольких десятков миллисекунд, что может быть недостаточно для узлов датчиков ускорения.

Третий подход заключается в использовании источника точного времени модуля GPS, который является побочным продуктом технологии GPS. Известно, что модули GPS могут выполнять синхронизацию времени с разрешением 100 нс и менее (Сазонов и др., 2010). Модули GPS обычно используются для синхронизации времени в проводных сетях Ethernet с использованием протокола сетевого времени (NTP) или протокола точного времени (PTP) (Volgyesi et al., 2017). В проекте SHM в штате Иллинойс модуль GPS использовался на узле шлюза для синхронизации времени листовых узлов в подсети (Kim et al., 2016). Это исследование аналогично содержанию этого документа с точки зрения использования модуля GPS и его сигналов PPS, но только на узлах шлюза, а не на каждом узле. В этой статье используется кварцевый осциллятор, управляемый печью (OCXO), чтобы избежать проблем, связанных с колебаниями тактовой частоты, и достичь исключительной точности отметки времени.Прямое использование модуля GPS на каждом листовом узле в значительной степени игнорировалось исследовательскими сообществами из-за относительно высокого энергопотребления и стоимости. Однако для краткосрочной кампании по измерению вибрации в гражданской инфраструктуре этот подход может быть разумным вариантом, поскольку с энергопотреблением можно справиться с помощью аккумуляторной батареи большой емкости и недорогого модуля GPS, розничная цена которого составляет около 40 долларов США. (по состоянию на 2018 год), в который стоит инвестировать, а не в дорогие и трудоемкие проводные сенсорные системы.Однако метод, основанный на модуле GPS, имеет явное ограничение, заключающееся в том, что для приема сигналов GPS требуется беспрепятственный обзор неба. Однако это требование часто выполняется для многих полевых измерений гражданской инфраструктуры.

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

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

2. Теория

2.1. GPS: источник точного времени

Приемник GPS, по-видимому, оценивает текущее положение приемника по широте, долготе и высоте на Земле. Однако на заднем плане приемник GPS фактически пытается оценить не только три переменных положения, но также переменную для временного сдвига между внутренним источником часов приемника и атомными часами спутников GPS.После успешной оценки приемник GPS имеет чрезвычайно точные внутренние часы, синхронизированные с атомными часами спутников GPS. Этот источник точного времени можно использовать для синхронизации времени беспроводных датчиков, установленных в любом месте с хорошим обзором неба.

Каждый спутник GPS имеет атомные часы, и все атомные часы в спутниках GPS периодически синхронизируются контрольным сегментом GPS, который отслеживает ошибки часов и обновляет их для поддержания точности системы GPS.Каждый спутник GPS передает свое собственное уникальное PRN (псевдослучайное число), которое идентифицирует сам спутник в точном начале каждой миллисекунды. Приемнику GPS на поверхности Земли требуется не менее четырех PRN для определения своего местоположения. Более подробную информацию о теории и работе GPS можно найти (Guochang, 2003; Kaplan and Hegarty, 2005).

На рисунке 1 показаны контакты ввода / вывода модуля Adafruit Ultimate GPS v3. Вывод RX — это то место, где модуль получает команды конфигурации от микропроцессорного блока (MPU): Arduino Mega 2560 в этом исследовании.Вывод TX предназначен для вывода предложений NMEA (Национальная ассоциация морской электроники) из модуля в MPU. Предложения NMEA являются стандартным форматом для GPS для вывода результатов о местоположении приемника и точном времени, как показано на рисунке 2. Вывод PPS (Pulse Per Second) — это квадратная волна, выходящая в точном начале каждой секунды, как показано на рисунке 3. Прямоугольная волна имеет высокий сигнал в течение первых 100 мсек после точного начала каждой секунды и повторяется каждую секунду. Предложения NMEA принимаются примерно в середине двух соседних сигналов PPS, которые предоставляют информацию об абсолютном времени, показывающую год, месяц, день, час, минуту и ​​секунду текущего времени.Комбинируя информацию об абсолютном времени из предложений NMEA и точную относительную синхронизацию сигналов PPS, можно получить очень точный источник времени для отметок времени.

Рисунок 1 . Недорогой модуль GPS: Adafruit Ultimate GPS v3.

Рисунок 2 . Примеры предложений NMEA.

Рисунок 3 . Форма сигнала импульса в секунду (PPS).

2.2. Arduino: платформа электронного прототипирования с открытым исходным кодом

Arduino (http: // www.arduino.cc) — это платформа для прототипирования электроники с открытым исходным кодом, предоставляющая несколько вариантов плат от простейшей Arduino UNO до улучшенной Arduino Mega 2560 и Интернета вещей YUN. Arduino Mega 2560 показана на рисунке 4. Arduino имеет преимущества перед другими платформами с точки зрения простоты использования для новичков. Arduino не требует специального оборудования для программирования, а просто USB-порт на ПК. Arduino стоит дешево (плата Arduino Mega 2560 на 2018 год стоит около 43 долларов США). Arduino доступен с простыми в использовании инструкциями, похожими на рецепты, о том, что покупать, что подключать к Arduino и как программировать Arduino для огромных деталей и устройств, включая датчики и исполнительные механизмы, а также компьютерные устройства ввода-вывода, такие как Ethernet, Wi-Fi, и SD-память.Arduino имеет большое сообщество пользователей, в котором люди свободно делятся своими собственными разработками, что способствует широкому использованию и быстрому росту Arduino. Недорогой модуль GPS, используемый в этом исследовании (40 долларов США по состоянию на 2018 год), также имеет инструкцию, похожую на рецепт. Arudino позволяет инженерам, не занимающимся электроникой, создавать собственные сенсорные системы путем сборки сенсоров, сбора данных и беспроводной связи для удовлетворения своих особых потребностей.

Рисунок 4 . Arduino Mega2560: макетная плата для электроники в семействе продуктов Arduino.

В основе

Arduino Mega 2560 лежит микропроцессорный блок (MPU) Atmel ATmega2560. MPU концептуально представляет собой небольшой компьютер на одной микросхеме с небольшим пространством для программирования, объемом памяти и специальными аппаратными компонентами, позволяющими подключаться к другим микросхемам интегральных схем (IC) для решения различных задач. ATmega2560 имеет 256 КБ флэш-памяти для программирования, 8 КБ SRAM для ОЗУ, 16 аналоговых входных контактов, 54 цифровых входа / выхода с тактовой частотой 16 МГц. Микропроцессор ATmega2560 имеет ограниченные вычислительные возможности по сравнению с современными ПК, но достаточно эффективен во многих электронных приложениях, таких как синхронизированные по времени датчики ускорения, используемые в этом исследовании.

Три полезных аппаратных компонента в ATmega2560 для этого исследования: выводы RX / TX UART (универсальный асинхронный приемник-передатчик), четыре 16-битных таймера / счетчика и их входные блоки захвата. Контакты UART RX / TX используются для связи с модулем GPS. MPU ATmega2560 отправляет команды управления модулю GPS через вывод TX и принимает предложения NMEA через вывод RX.

16-битный таймер / счетчик — это внутренняя память ATmega2560 для хранения значения, которое начинается с нуля и увеличивается на единицу за одно колебание кварцевого генератора (XO), подключенного к ATmega2560.Поскольку Arduino Mega 2560 имеет кварцевый генератор с частотой 16 МГц, теоретически значение увеличивается на 16 × 10 6 в секунду. Однако существует максимальное значение, которое нужно сохранить для таймера / счетчика 2 16 — 1, что является типичным значением для 16-битного таймера. Когда он достигает максимума, он сбрасывается и снова начинается с нуля. При считывании значения таймера / счетчика в разное время становится доступной относительная временная информация.

Каждый 16-битный таймер / счетчик имеет блок ввода ввода, который имеет собственную внутреннюю память для хранения значения таймера / счетчика, когда импульсный сигнал поступает на вывод ввода ввода.При подключении выходного контакта PPS модуля GPS к входному контакту захвата таймера / счетчика становится доступным измерение относительной синхронизации сигнала PPS.

3. Предлагаемый метод временной отметки

На рис. 5 в упрощенном виде показан предлагаемый метод установки временных меток. t P I ( k ) и t P I ( k + l ) обозначают времена двух идеальных сигналов PPS достигая k -й и ( k + l ) -й секунды соответственно.Здесь t P I ( k + l ) — t P I ( k ) = l (сек). Как обсуждалось в предыдущем разделе, t P I ( k ) и t P I ( k + l ) могут быть идентифицированы из предложений NMEA, которые поступили непосредственно перед прибытием сигналов PPS.Кроме того, значения таймера / счетчика C P A ( k ) и C P A ( k + l ). захвачены по прибытии двух сигналов PPS через входной блок захвата, подключенный к выходному контакту PPS модуля GPS. C D A ( м ) обозначает значение таймера / счетчика, считываемое во время м -го измерения.(м) оценивается линейной интерполяцией по двум точкам ( t P I ( k ), C P A ( k ) )) и ( т P I ( k + л ), C P A ( k + l )) для C D A ( м ), как показано в уравнении (1).(m) = tPI (k) + CDA (m) −CPA (k) CPA (k + l) −CPA (k) × l (с) (1)

Рисунок 5 . Предлагаемый метод отметки времени.

Процедура предлагаемого метода отметки времени резюмируется следующим образом.

1. Считайте значение таймера / счетчика входного блока захвата, захваченное при поступлении k -го сигнала PPS, и сохраните его в C P A ( k ).

2. Определите время t P I ( k ) через 1 секунду от времени, указанного в предложении NMEA, полученном непосредственно перед k -м PPS.(м) линейной интерполяцией по двум точкам ( t P I ( k ), C P A ( k )) и ( т P I (k + l), C P A (k + l)) для C D A ( м ), как показано в уравнении (1).

4. Анализ ошибок предлагаемого метода отметки времени

Ошибка предложенного метода временной отметки по уравнению (1) исследована аналитически. Идеальный GPS-приемник выдает сигнал PPS точно в начале каждой секунды. Однако фактическое время сигнала PPS на k -й секунде t P A ( k ) может отличаться от идеального времени t P I ( k ) по временной ошибке ε t P ( k ), как показано на рисунке 6 и в уравнении (2).ε t P ( k ) предполагается случайной величиной, имеющей среднее значение μ t P = 0 и стандартное отклонение σ t П . Согласно таблице данных модуля GPS, использованного в исследовании, известно, что σ t P обычно составляет 10 нс (GlobalTop Technology Inc, 2012).

tPA (k) = tPI (k) + εtP (k) (2)

Значение таймера / счетчика Arduino — это целое число и прерывистая ступенчатая функция времени, как показано на рисунке 6.Точное значение таймера / счетчика, соответствующее t P A ( k ), должно быть представлено в реальном значении C P I ( k ) в идеале, но в виде целого числа C P A ( k ), что приведет к ошибке таймера / счетчика ε C P ( k ) как показано на Рисунке 6 и в уравнении (3).

CPA (k) = CPI (k) + εCP (k) (3)

, где ε C P ( k ) предполагается случайной величиной, имеющей равномерное распределение на [0, 1).

Рисунок 6 . Анализ ошибок по предлагаемому методу временных меток.

Для ( k + l ) -го временного шага идеальное и фактическое время PPS, а также значения таймера / счетчика имеют следующие отношения.

tPA (k + l) = tPI (k + l) + εtP (k + l) (4) CPA (k + l) = CPI (k + l) + εCP (k + l) (5)

где т P I ( k + л ) — т P A ( k ) = л C P ( k ) и ε C P ( k + l ) считаются независимыми и одинаково распределенными ( iid . ) случайные величины, и поэтому ε t P ( k ) и ε t P ( k + l ).

Значение таймера / счетчика м -го сбора данных в идеале должно быть представлено в реальном значении C D I ( м ), но в виде целого числа C D A ( м ), что приводит к ошибке таймера / счетчика ε C D ( м ) следующим образом.(m) = εtP (k) (1 − A) + εtP (k + l) A + εCP (k) (1 − A) + εCP (k + l) A − εCD (m) Fclk

, где A — постоянная в диапазоне (0, 1), как определено в Приложении.

Одно из предположений анализа состоит в том, что тактовая частота F clk MPU является постоянной. Хорошо известно, что тактовая частота колеблется при изменении температуры окружающей среды, что требует постобработки для уменьшения ошибки синхронизации времени (Li et al., 2016). Однако в этом исследовании эта проблема была решена с помощью кварцевого генератора, управляемого духовкой (OCXO), который представляет собой XO в миниатюрной духовке с регулируемой температурой.в сочетании с двумя неопределенностями прогнозировалось 42,0 нс. Это значение сравнивалось с экспериментальной оценкой в ​​разделе 6.3.

5. Методика и реализация повторной выборки

В беспроводных сенсорных узлах сложно запускать и повторять выборку данных в точное время одновременно между всеми сенсорными узлами из-за отклонений тактовых частот XO при изменении температуры окружающей среды. В качестве альтернативы, может быть проще разрешить узлам беспроводных датчиков иметь разное время запуска с отклонениями в интервалах выборки, но повторно дискретизировать данные в регулярные моменты времени из данных с точной меткой времени.Техника повторной выборки была предложена Нагаямой и Спенсером (2007), а на рисунке 7 показан иллюстративный пример до и после повторной выборки. На рисунке 7A выборка данных начинается в разное время среди узлов датчиков, и интервалы выборки данных могут иметь отклонения из-за интервалов XO. Но повторная выборка может быть выполнена, чтобы иметь точки данных в обычные моменты времени, начиная с точного начала секунды, повторяющиеся с точным исходным интервалом времени выборки. Более подробную информацию о технике передискретизации можно найти в Nagayama and Spencer (2007).

Рисунок 7 . Повторная выборка для данных с отметкой времени: (A) перед повторной выборкой с нерегулярным временем начала и (B) после повторной выборки.

Реализация предложенного метода временной отметки связана с проблемами ограниченного ресурса MPU ATmega2560, а также с высокой сложностью программирования. Первой проблемой была многозадачность для синтаксического анализа предложений NMEA вместе с считыванием данных с акселерометра MEMS. Если ATmega2560 не считывает измеренное значение ускорения с датчика вовремя, оно будет перезаписано следующим измеренным значением на датчике.Однако оказалось, что синтаксический анализ предложений NMEA занимает много времени, вызывая такую ​​перезапись данных. Эта проблема была преодолена путем синтаксического анализа предложений NMEA только один раз во время загрузки ATmega2560 и увеличения T P I ( k ) на 1 секунду при каждом поступлении PPS. Вторая проблема заключалась в том, что считывание данных с акселерометра вместе с измерениями с метками времени выполнялось в режиме многозадачности по уравнению (1). В предлагаемом методе временной отметки отметка времени t ^ (m) может быть выполнена только после поступления t P I ( k + l ).Это означает, что все измерения между t P I ( k ) и t P I ( k + l ) должны быть сохраняется и имеет отметку времени после поступления t P I ( k + l ) в виде блока данных за последние l секунд. Это предполагает относительно сложные операции по управлению данными, а также длительное время работы.Чтобы упростить это, термин l / ( C P A ( k + l ) — C P A ( k )) в уравнении (1), которое имеет значение, обратное тактовой частоте, эквивалентно оценивается как p / ( C P A ( k ) — C ). P A ( k p )), где C P A ( k p ) — записанное значение таймера / счетчика при поступлении ППС на т р I ( к р ).(м) для м = 0, 1, 2, · · ·, и на выходе были повторно дискретизированные данные y sync ( q ) на обычных временных метках t sync ( q ) для q = 0, 1, 2, · · ·. Эффективная стратегия повторной выборки использовалась путем линейной интерполяции только для двух последних измерений.

Алгоритм 1 : Псевдокод реализованной передискретизации.

В этом исследовании ATmega2560 был запрограммирован на передачу t P I (0), C P A ( k ), C D A ( м ) и y ( м ) для k, m = 0, 1, 2, · · ·, через порт UART TX, подключенный к Raspberry Pi и код Python в Raspberry Pi, получающем данные UART, использовались для выполнения меток времени и повторной выборки.

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

6. Эксперименты

Было проведено четыре эксперимента.Первые два эксперимента должны были подтвердить два фундаментальных предположения предлагаемого метода, что (1) модули GPS успешно работают стабильно для вывода предложений NMEA и сигналов PPS во время работы беспроводных датчиков, и (2) сигналы PPS имеют высокую точность. Третий эксперимент проводился как попытка измерить ошибку отметки времени. Последний эксперимент проводился для модального анализа только для вывода с четырьмя датчиками ускорения, в котором предложенный метод временной отметки и их модальные параметры сравнивались с таковым из проводного аналога.

6.1. Эксперимент №1: Долговременная стабильность GPS-модуля

За работой модуля GPS наблюдали в течение недели с использованием Arduino Mega 2560, подключенного к модулю GPS, как показано на рисунке 8. Контакты UART TX / RX модулей GPS были подключены к контактам RX / TX Arduino. Mega 2560, а выходной контакт PPS был подключен к входному блоку захвата Arduino. Антенна модуля GPS была установлена ​​таким образом, что он видел только южную половину неба, чтобы создать ограниченную видимость, которая может возникнуть при полевых измерениях.Arduino был подключен к ПК через USB-кабель, и предложения NMEA от модуля GPS были записаны на ПК.

Рисунок 8 . Экспериментальная установка для долгосрочной стабильности работы модуля GPS.

На рис. 9 показаны различные выходные данные, содержащиеся в предложениях NMEA. Количество спутников, видимых модулю GPS, варьировалось в основном от 4 до 13. Было пять случаев, когда количество спутников упало до 0, что могло произойти из-за ограниченной видимости.Снижение точности по горизонтали (HDOP) указывает на величину неопределенности в отношении фиксации положения и времени. Большой HDOP указывает на большие ошибки в оценках местоположения и времени, когда количество видимых в данный момент спутников уменьшается или спутники плотно расположены в определенной области неба, а не рассредоточены по всему небу. Было ясно показано, что измеренное HDOP обратно пропорционально количеству спутников. В случаях, когда не было видимых спутников, GPS не мог определить местоположение и время, что приводило к перезагрузке модуля.Затем модуль GPS возобновил правильную работу примерно через 40–60 с, как показано на Δ T и ΔCPA1,1. Это наблюдение указывает на важность обеспечения прямой видимости неба для успешной работы с отметкой времени с помощью GPS. Однако с данной половинной видимостью в небе модуль GPS работал успешно всю неделю, либо работал, либо возобновлял работу после нескольких простоев. Таким образом, модуль GPS показал относительно устойчивую и надежную работу в течение периода испытаний даже в условиях ограниченной видимости.

Рисунок 9 . Долговременная эксплуатационная надежность GPS-модуля.

6.2. Эксперимент № 2: Точность сигналов PPS

На рисунке 10 показаны определения временных ошибок в сигналах PPS, поступающих от нескольких модулей GPS. εtPi (k) обозначает временную ошибку сигнала PPS от i -го модуля GPS на k -й секунде. Для прямого измерения εtPi (k) требуется точный источник часов, например атомные часы. Однако в этом исследовании косвенный способ измерения его точности был выполнен путем измерения относительной разницы таймер / счетчик сигналов PPS, поступающих от одного модуля GPS или нескольких модулей GPS, как показано в уравнениях (8) — (9).

ΔCPAi, i (k) = CPAi (k + 1) −CPAi (k) (8) ΔCPAi, j (k) = CPAi (k) −CPAj (k), i ≠ j (9)

, где CPAi (k + 1) и CPAi (k) — значения таймера / счетчика i -го модуля GPS на временном шаге ( k + 1) и k , соответственно. . CPAj (k) — значение таймера / счетчика j -го модуля GPS на временном шаге k . Для идеальных безошибочных модулей GPS ΔCPAi, i (k) и ΔCPAi, j (k), i j , близки к F clk и нулю соответственно.

Рисунок 10 . Ошибки сигналов PPS в нескольких модулях GPS.

На рисунке 11 показана экспериментальная установка. Четыре модуля GPS были подключены к модифицированному Arduino Mega 2560, где кварцевый генератор был заменен на 10 МГц OCXO, стоимость которого по состоянию на 2018 год составляла 37 долларов США. Это было сделано для минимизации неточности измерений из-за колебаний тактовой частоты XO при температуре окружающей среды. изменять.

Рисунок 11 . Экспериментальная установка для измерения точности сигналов PPS.

Четыре сигнальных контакта PPS были подключены к четырем 16-битным таймерам / счетчикам Arduino для захвата значения таймера / счетчика всякий раз, когда приходит сигнал PPS. На рисунке 12 показаны ΔCPA1,1 (k), ΔCPA2,2 (k) и их распределения. Среднее значение было 9 999 927. Это было очень близко к номинальной частоте OCXO 10 МГц. Как показано на рисунке 12, максимальное отклонение составило 2 тактовых отсчета, что соответствует 200 нс (1 тактовый отсчет соответствует 100 нс = 1/10 МГц). На рисунке 13 показаны ΔCPA1,2 (k), ΔCPA1,3 (k) и их распределения.Было обнаружено, что максимальные различия варьировались от -4 до 2 тактов, что соответствует от -400 до +200 нс. Эти наблюдения показали многообещающую точность сигналов PPS.

Рисунок 12 . Точность сигналов PPS от одного модуля GPS: (вверху) ΔCPA1,1, (посередине) ΔCPA2,2 и (внизу) распределение ΔCPAi, i отклонение для i = 1, 2, 3 , 4.

Рисунок 13 . Точность сигналов PPS между двумя модулями GPS: (вверху) ΔCPA1,2, (посередине) ΔCPA1,3 и (внизу) распределение ΔCPA1, отклонение j для j = 2, 3, 4.

6.3. Эксперимент № 3: Точность предлагаемого метода для триггерных сигналов

Этот эксперимент был попыткой косвенным образом измерить точность предложенного метода временной отметки. Были построены два идентичных Arduino с временными метками, каждый из которых использовал модуль GPS и OCXO, и общие сигналы запуска, генерируемые генератором функций, подавались на два Arduinos, как показано на рисунке 14. Генератор функций генерировал сигнал запуска каждую секунду в течение 30 часов. Отметки времени, сделанные для общего сигнала запуска, сравнивались, чтобы оценить ошибку предложенного метода отметок времени.оказалось равным 40,8 нс. Стоит отметить, что это значение хорошо согласуется с прогнозируемым максимумом 42,0 нс по уравнению (7) с ошибкой 3%.

Рисунок 15 . Распределение разницы отметок времени для общих сигналов запуска.

6.4. Эксперимент №4: модальный анализ только для вывода

Модальный анализ только для выходных данных был проведен на конструкции пола лаборатории (рис. 16) с использованием четырех беспроводных датчиков ускорения, построенных с использованием предложенного метода временной отметки и метода повторной выборки.

Рисунок 16 . Конструкция пола лаборатории.

В каждом беспроводном датчике ускорения используется акселерометр ADXL362 MEMS, как показано на рисунке 17. Плата, совместимая с Arduino Mega 2560, была разработана для интеграции датчика ADXL362, модуля GPS и MPU ATmega2560 на одной печатной плате. Датчик ADXL362 был подключен к MPU Atmel ATmega2560 через SPI (последовательный периферийный интерфейс). Плата, совместимая с Arduino Mega 2560, находилась на вершине Raspberry Pi 3 Model B (RPI), питаемой и передаваемой через контакты GPIO (General Purpose Input / Output) RPI.Антенна GPS была подключена к модулю GPS, а аккумуляторная батарея USB была подключена для питания RPI. Аккумуляторная батарея на 20 Ач с напряжением 3,85 В была способна поддерживать более 10 часов работы системы, потребляя примерно 700 мА. Для проводного аналога использовались четыре акселерометра серво-типа QA700 с системой сбора данных Data-Physics Signal Mobilizer.

Рисунок 17 . Беспроводной и проводной датчик: (вверху справа) проводной акселерометр QA700 и (внизу посередине) беспроводной датчик ADXL362 MEMS.

Реакция ускорения при вибрации окружающей среды при ходьбе человека измерялась в течение 10 минут с использованием частоты дискретизации 100 Гц как для беспроводных, так и для проводных датчиков, как показано на рисунке 18. Управляемая ковариацией SSI (стохастическая подпространственная идентификация) (Peeters and De Roeck, 2001) использовался для модального анализа только для вывода. Результаты показаны в Таблице 1 и на Рисунке 19. Таблица 1 показывает, что обе частоты очень близки друг к другу. Максимальная погрешность по частоте составила -0,09%. На рисунке 19 показано, что первые четыре формы колебаний хорошо согласуются друг с другом, подтверждая успешную работу предложенного метода временной отметки и методики повторной дискретизации.

Рисунок 18 . Положения датчиков.

Таблица 1 . Собственные частоты беспроводных и проводных систем.

Рисунок 19 . Формы колебаний от беспроводных датчиков и проводных датчиков: (A), , режим B11, (B), , режим B12, (C), , режим B21 и (D), , режим B22.

Фазовый угол перекрестной спектральной плотности двух сигналов ускорения может использоваться для оценки ошибки временной синхронизации сигналов.Наклон фазового угла пропорционален ошибке временной синхронизации и может быть преобразован в оценку ошибки временной синхронизации в секундах (Nagayama and Spencer, 2007). Этот подход требует, чтобы два сигнала измерялись от общих опорных часов. Однако в этом исследовании проводная и беспроводная системы были полностью независимыми измерительными системами без общих опорных часов. Вместо этого на рисунке 20 была показана кросс-спектральная плотность двух беспроводных ускорений из позиции №2 и №3.Как показано на рисунке 20, линейного тренда не наблюдалось, что указывает на отсутствие явной ошибки синхронизации времени между узлами. Датчики в положениях №2 и №3 были выбраны, поскольку они имели умеренные амплитуды формы колебаний, отличные от нуля. Колебания фазового угла ниже 3 Гц и выше 18 Гц могут быть связаны с небольшой величиной сигналов, вызывающей низкое отношение сигнал / шум.

Рисунок 20 . Перекрестная спектральная плотность с использованием датчиков №2 и №3.

7. Заключение

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

• Было обнаружено, что модуль GPS работает надежно или возобновляет работу в течение всех семи дней периода испытаний, хотя видимость в небе была только наполовину. Однако, чтобы свести к минимуму время простоя, рекомендуется обеспечить как можно более четкую видимость неба.

• Сигналы PPS оказались точными с максимальными относительными временными ошибками 300 нс для двух соседних сигналов PPS от одного модуля и 400 нс для двух сигналов PPS от двух разных модулей GPS.

• Аналитическое исследование предложенного метода отметки времени позволило получить выражение стандартного отклонения ошибки отметки времени. Выражение выявило два источника неопределенностей: один связан с ошибками сигнала PPS, а другой связан с величиной тактового сигнала. Выражение предсказало максимальное стандартное отклонение ошибки отметки времени равным 42,0 нс.

• Ошибка отметки времени была измерена путем сравнения двух отметок времени, сделанных двумя одинаковыми отметками времени Arduinos для общих сигналов запуска.Стандартное отклонение предложенного метода временной отметки было оценено в 40,2 нс, что хорошо согласуется с аналитическим прогнозом 42,0 нс с ошибкой 3%.

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

• Фазовый угол двух беспроводных ускорений показал, что явной ошибки синхронизации времени не наблюдалось, что указывает на успешную синхронизацию времени с помощью предложенного метода.

Заявление о доступе к данным

Данные исследования, подтверждающие эту публикацию, находятся в открытом доступе в институциональном репозитории Университета Эксетера по адресу https://dio.org/10.24378/exe.1063

Авторские взносы

KK: разработка алгоритмов, разработка HW, экспериментальная проверка; DH: разработка алгоритма; С.К .: Разработка HW.

Финансирование

Эта работа была поддержана грантом Национального исследовательского фонда Кореи, финансируемым правительством Кореи NRF-2009-352-D00291.

Заявление о конфликте интересов

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

Список литературы

Абдауи А., Эль Фули Т. М. и Ахмед М. Х. (2017). Влияние ошибки синхронизации времени на определение формы колебаний и обнаружение / локализацию повреждений в WSN для мониторинга состояния конструкций. J. Netw. Comput. Прил. 83, 181–189. DOI: 10.1016 / j.jnca.2017.01.004

CrossRef Полный текст | Google Scholar

Элсон, Дж., Гирод, Л., и Эстрин, Д. (2002). «Детализированная сетевая синхронизация времени с использованием эталонных широковещательных рассылок», в Пятый симпозиум по проектированию и внедрению операционных систем (OSDI) (Нью-Йорк, Нью-Йорк), 147–163.

Google Scholar

GlobalTop Technology Inc (2012 г.). FGPMMOPA6H Лист данных автономного модуля GPS .

Guochang, X.(2003). Теория, алгоритмы и приложения GPS . Берлин; Гейдельберг: Springer.

Google Scholar

Икрам, В., Стоянов, И., Торнхилл, Н. Ф. (2010). «На пути к радиоуправляемой беспроводной сети Ensor с синхронизацией по времени: работа в стадии разработки», в материалах Труды 15-й Международной конференции IEEE по новым технологиям и автоматизации производства, ETFA 2010 (Бильбао).

Google Scholar

Каплан Э. и Хегарти К.(2005). Понимание GPS: принципы и применение . Артек Хаус.

Ким Р. Э., Ли Дж., Спенсер Б. Ф. Дж., Нагаяма Т. и Мечитов К. А. (2016). Синхронизированное зондирование для беспроводного мониторинга больших конструкций. Smart Struct. Syst. 18, 885–909. DOI: 10.12989 / sss.2016.18.5.88

CrossRef Полный текст | Google Scholar

Кришнамурти В., Фаулер К. и Сазонов Е. (2008). Влияние временной синхронизации беспроводных датчиков на модальный анализ конструкций. Smart Mater. Struct. 17, 55018–55113. DOI: 10.1088 / 0964-1726 / 17/5/055018

CrossRef Полный текст | Google Scholar

Кумар Р. и Шривастава М. Б. (2003). Протокол синхронизации по времени для категорий сенсорных сетей и дескрипторов субъектов. Работа .

Google Scholar

Ласассмех, С. М., Конрад, Дж. М. (2010). «Синхронизация времени в беспроводных сенсорных сетях: обзор», в Proceedings of the IEEE SoutheastCon 2010 (SoutheastCon) (Concord, NC), 242–245.

Google Scholar

Ли Дж., Мечитов К. А., Ким Р. Э. и Спенсер Б. Ф. (2016). Эффективная синхронизация времени для мониторинга состояния конструкций с помощью беспроводных интеллектуальных сенсорных сетей. Struct. Контроль за состоянием здоровья. 23, 470–486. DOI: 10.1002 / stc.1782

CrossRef Полный текст | Google Scholar

Линч, Дж. П., и Ло, К. Дж. (2006). Сводный обзор беспроводных датчиков и сенсорных сетей для мониторинга состояния конструкций. Ударный вибратор.Дайджест 38, 91–128. DOI: 10.1177 / 0583102406061499

CrossRef Полный текст | Google Scholar

Мэггс, М. К., О’Киф, С. Г., и Тиль, Д. В. (2012). Синхронизация согласованных часов для беспроводных сенсорных сетей. IEEE Sens. J. 12, 2269–2277. DOI: 10.1109 / JSEN.2011.2182045

CrossRef Полный текст | Google Scholar

Мароти, М., Куси, Б., Саймон, Г., и Ледеци, К. (2004). «Протокол синхронизации времени лавинной рассылки», Труды 2-й Международной конференции по встроенным сетевым сенсорным системам — SenSys ’04 (Балтимор, Мэриленд), 39–49.

Google Scholar

Нагаяма Т., Сим С., Миямори Ю. и Спенсер Б. Дж. (2007). Проблемы мониторинга состояния конструкций с использованием интеллектуальных датчиков. Smart Struct. Syst. 3, 299–320. DOI: 10.12989 / sss.2007.3.3.299

CrossRef Полный текст | Google Scholar

Нагаяма Т. и Спенсер Б. Ф. (2007). Мониторинг состояния конструкций с использованием интеллектуальных датчиков , Отчет № Урбана-Шампейн: NSEL.

Олфати-Сабер, Р., Факс, Дж. А.и Мюррей Р. М. (2007). Консенсус и сотрудничество в сетевых многоагентных системах. Proc. IEEE 95, 215–233. DOI: 10.1109 / JPROC.2006.887293

CrossRef Полный текст | Google Scholar

Петерс Б. и Де Рок Г. (2001). Стохастическая системная идентификация для оперативного модального анализа: обзор. J. Dyn. Syst. Измер. Контроль 123: 659. DOI: 10.1115 / 1.1410370

CrossRef Полный текст | Google Scholar

Сэдлер Б. и Свами А.(2006). «Синхронизация в сенсорных сетях: обзор», в Milcom 2006 (Вашингтон, округ Колумбия: IEEE), 1–6. DOI: 10.1109 / MILCOM.2006.302459

CrossRef Полный текст | Google Scholar

Сазонов Э., Кришнамурти В., Шиллинг Р. (2010). Беспроводная интеллектуальная сеть датчиков и исполнительных механизмов — масштабируемая платформа для синхронизированных по времени приложений мониторинга состояния конструкций. Struct. Мониторинг здоровья. 9, 465–476. DOI: 10.1177 / 1475921710370003

CrossRef Полный текст | Google Scholar

Сим, С.Х., Спенсер Б. Ф., Чжан М. и Се Х. (2010). Автоматический децентрализованный модальный анализ с использованием интеллектуальных датчиков. Struct. Контроль за состоянием здоровья. 17, 872–894. DOI: 10.1002 / stc.348

CrossRef Полный текст | Google Scholar

Спенсер, Б. Ф., Парк, Дж. У., Мечитов, К. А., Джо, Х. и Ага, Г. (2017). Беспроводные интеллектуальные датчики нового поколения для создания устойчивой гражданской инфраструктуры. Proc. Англ. 171, 5–13. DOI: 10.1016 / j.proeng.2017.01.304

CrossRef Полный текст | Google Scholar

Сундарараман, Б., Буй У., Кшемкаляни А. Д. (2005). Синхронизация часов для беспроводных сенсорных сетей: обзор. Ad Hoc Netw. 3, 281–323. DOI: 10.1016 / j.adhoc.2005.01.002

CrossRef Полный текст | Google Scholar

Volgyesi, P., Dubey, A., Krentz, T., Madari, I., Metelko, M., and Karsai, G. (2017). «Услуги синхронизации времени для недорогих приложений туманных вычислений», в Труды 28-го Международного симпозиума по быстрому созданию прототипов систем: сокращение пути от спецификации к прототипу (Сеул), 57–63.

Google Scholar

A. Приложение: Выражение ошибки отметки времени предлагаемого метода

Разница во времени между t P A ( k + l ) и t P A ( k ) выражается как

tPA (k + l) −tPA (k) = {tPI (k + l) + εtP (k + l)} — {tPI (k) + εtP (k)} = {tPI (k + l) −tPI ( k)} + {εtP (k + l) −εtP (k)} = l + εtP (k + l) −εtP (k) (A1)

Разница между значениями таймера / счетчика C P I ( k + l ) и C P I ( k ) выражается через тактовую частоту F clk MPU следующим образом.

CPI (k + l) −CPI (k) = Fclk (tPA (k + l) −tPA (k)) = Fclk (l + εtP (k + l) −εtP (k)) ≜Fclk ′ × l (A2 )

Истинная отметка времени м -го сбора данных C D I ( м )

ttrue (m) = tPA (k) + CDI (m) −CPI (k) CPI (k + l) −CPI (k) × (tPA (k + l) −tPA (k)) = tPA (k) + CDI (m) −CPI (k) CPI (k + l) −CPI (k) ︸≜A × (l + εtP (k + l) −εtP (k)) (A3)

Обратите внимание, что член A выше является константой в диапазоне [0, 1) (см. Рисунок 6).(m) = tPI (k) + CDA (m) −CPA (k) CPA (k + l) −CPA (k) ︸≜B × l (A4)

Член B в приведенном выше уравнении выражается как

B = (CDI (m) + εCD (m)) — (CPI (k) + εCP (k)) (CPI (k + l) + εCP (k + l)) — (CPI (k) + εCP (k )) = (CDI (m) −CPI (k)) + (εCD (m) −εCP (k)) (CPI (k + l) −CPI (k)) (1 + εCP (k + l) −εCP (k) CPI (k + l) — CPI (k))

Используя определения A и Fclk ′ и приближение 11 + x≃1-x для малых x ,

B≃ (A + εCD (m) −εCP (k) F ′ clkl) × (1 − εCP (k + l) −εCP (k) F ′ clkl)

Расширяя приведенное выше уравнение и игнорируя член 2-го порядка (1F′clkl) 2, можно пренебречь w. (m) = εtP (k) (1 − A) + εtP (k + 1) A + εCP (k) (1 − A) + εCP (k + 1) A − εCD (m) Fclk (A6)

Arduino RTC Tutorial: Сопряжение модуля часов реального времени с Arduino | Стрела.com

Платы Arduino и аналогичные микропроцессоры могут выполнять широкий спектр задач. Если, например, вы хотите включать светодиод один раз в секунду, используйте команды delay () или millis (). К сожалению, небольшие изменения в резонаторе системы или кварцевом генераторе могут привести к тому, что плата будет работать неравномерно.

Хотя это изменение времени минимально — отклонение 0,05% (0,0005x) от фактического времени — запаздывание в конечном итоге складывается.Например, если вы пытаетесь сделать будильник, отклонение 0,05% будет означать, что ваша система отличается от реальности на 43,2 секунды в день. В первую неделю это не повлияет, но когда вы опоздаете на работу на 20 минут через месяц, вы можете начать раздражаться.

Итак, что же делать? Ответ, конечно же, приходит в виде модуля часов реального времени или часов реального времени. Опции включают PCF8523 и DS1307, а также микросхему DS3231, о которой мы поговорим ниже.

Подключите RTC к Arduino

Если вы хотите начать работу с модулем RTC и Arduino, я рекомендую использовать коммутационную плату со следующими функциями:

— микросхема DS3231

— Подключения к Arduino

— Держатель и соединения для батарейки типа «таблетка» (CR2032)

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

Для этой настройки подключите все, как показано здесь, на плате Arduino Uno, подключив 5 В и землю к соответствующим соединениям, а линии SDA и SCL к соответствующим соединениям Arduino. На Uno A4 — это SDA, а A5 — SCL, но линии также удобно разбиты здесь, рядом с кнопкой сброса, где они соединяются на картинке выше. Подключите батарею CR2032, чтобы чип «работал».«

Запрограммируйте свое устройство RTC Arduino

Вот процесс:

1. Установите библиотеку Adafruit RTC через функцию поиска Arduino IDE или через эту страницу GitHub.

2. Перейдите к файлу — Примеры — RTClib и откройте ds3131 .

3. Откройте серийный монитор для обратной связи, затем загрузите программу на свою плату Arduino.

В первый раз, когда вы сделаете это, серийный монитор отметит: «RTC потерял питание, давайте установим время!» Это загружает время в RTC в зависимости от того, когда скетч был скомпилирован.После этого будет отображаться текущее время / дата, время с полуночи 1 января 1970 года и температура.

Обычно время отключается на несколько секунд, потому что оно получает время от компьютера при компиляции программы. Вы также можете установить время вручную, установив в строке rtc.adjust конкретную дату.

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

Резервный аккумулятор поддерживает работу модуля RTC даже при отключении основного питания.

Тактирование вашего проекта

Теперь вы готовы приступить к экспериментам с более точным хронометражем Arduino. Попробуйте создать собственное устройство для хронометража или автоматизировать процессы дома или на работе. По мере развития вы можете исследовать безграничные возможности продукта.

ArControl: комплексная поведенческая платформа на базе Arduino с производительностью в реальном времени

DOI: 10.3389 / fnbeh.2017.00244. Электронная коллекция 2017.

Принадлежности Расширять

Принадлежность

  • 1 Департамент биомедицинской инженерии, Школа естественных наук и технологий, Хуачжунский университет науки и технологий, Ухань, Китай.
Бесплатная статья PMC

Элемент в буфере обмена

Xinfeng Chen et al. Front Behav Neurosci. .

Бесплатная статья PMC Показать детали Показать варианты

Показать варианты

Формат АннотацияPubMedPMID

DOI: 10.3389 / fnbeh.2017.00244. Электронная коллекция 2017.

Принадлежность

  • 1 Департамент биомедицинской инженерии, Школа естественных наук и технологий, Хуачжунский университет науки и технологий, Ухань, Китай.

Элемент в буфере обмена

Полнотекстовые ссылки Опции CiteDisplay

Показать варианты

Формат АннотацияPubMedPMID

Абстрактный

Изучение поведения животных в лаборатории требует надежной стимуляции и мониторинга реакции.Мы создали комплексную поведенческую платформу (ArControl: Arduino Control Platform), которая была доступным, простым в использовании, высокопроизводительным решением, сочетающим программные и аппаратные компоненты. Аппаратный компонент состоял из платы Arduino UNO и простой схемы привода. Что касается программного обеспечения, ArControl предоставил автономное и интуитивно понятное приложение с графическим интерфейсом пользователя (GUI), которое не требовало от пользователей владения скриптами. Данные эксперимента автоматически записывались с помощью встроенной функции DAQ (сбора данных).ArControl также позволил полностью сохранить график поведения и управлять им на чипе Arduino. Это сделало ArControl настоящей системой реального времени с высоким временным разрешением (<1 мс). Мы протестировали ArControl на основе строгих измерений производительности и двух поведенческих экспериментов на мышах. Результаты показали, что ArControl представляет собой адаптивную и надежную систему, подходящую для поведенческих исследований.

Ключевые слова: Ардуино; Go / No-Go; Государственное обозначение; поведенческая платформа; методы; система реального времени; программного обеспечения.

Цифры

Рисунок 1

Схема ArControl. (A) Иерархический…

Рисунок 1

Схема ArControl. (A) Иерархическая структура ArControl. Arduino — это стержень ядра…

фигура 1

Схема ArControl. (A) Иерархическая структура ArControl. Arduino — это ядро, управляющее устройствами, рабочими задачами и регистрацией данных. На главном компьютере есть соответствующая поддержка графического интерфейса. (B) Оборудование ArControl состоит из Arduino Uno Rev3 и платы драйвера для преобразования напряжения. (C) Концентратор драйвера предоставляет слоты для оконечных устройств. Датчики могут работать от 5 В, а стимуляторы — от 5 или 12 В.

Рисунок 2

Схема государственного обозначения…

Рисунок 2

Схема принципа обозначения состояний, используемого ArControl. (A) У государства есть…

фигура 2

Схема принципа обозначения состояний, используемого ArControl. (A) Состояние имеет функциональную функцию для доставки стимула и когда-функцию , которая управляет переходами между состояниями. ( B ) Компонент (сокр. C) и структуры сеанса являются первичной и вторичной совокупностью состояний (сокр. S). (C) Иллюстрация испытания «Годен / не годен».

Рисунок 3

ArControl Designer для разработки задач.…

Рисунок 3

ArControl Designer для разработки задач. (A) Главное окно конструктора ArControl показывает…

Рисунок 3

ArControl Designer для разработки задач. (A) Главное окно конструктора ArControl показывает реализацию задачи «Go / No-Go». (B, C) Типичные всплывающие окна для настройки функций (B) и при работе (С). (D) Окно определяет и инициализирует глобальную переменную.

Рисунок 4

Проверка работоспособности ArControl. (А)…

Рисунок 4

Проверка работоспособности ArControl. (A) Задержка обратной связи от обнаружения входа до доставки…

Рисунок 4

Проверка работоспособности ArControl. (A) Задержка обратной связи от обнаружения входа до доставки вывода. Arduino представляет собой родную среду Arduino. ArControl Level 1-3 — это градиентный компромисс между эффективностью выполнения и сбором данных. (B) Затраты времени на пустое состояние. (C) Возможность сбора данных в ArControl , уровень 3 . Сигналы за пределами частоты (черная стрелка) не передаются точно. (D) Детали левого серого поля в (C) . Данные представляют собой среднее значение ± SD .

Рисунок 5

Проверка ArControl через Go / No-Go…

Рисунок 5

Проверка ArControl с помощью задачи Go / No-Go. (A) Последовательность событий в режиме «годен / нет»…

Рисунок 5.

Проверка ArControl с помощью задачи Go / No-Go. (A) Последовательность событий в задаче «Выполнено / Не выполнено». (B) Кривая обучения по сессиям ( n = 5 мышей). (C) Задержка от начала сигнала «годен / не годен» до первого лизания. (D) Поведение облизывания после хорошо обученного сеанса согласовано с сигналами «идти / нет». Данные представляют собой средние значения ± с.Эм.

Рисунок 6

Проверка ArControl с помощью вероятностной…

Рисунок 6

ArControl верификация через задачу вероятностного переключения. (A) Последовательность событий в…

Рисунок 6

ArControl верификация через задачу вероятностного переключения. (A) Последовательность событий в задаче вероятностного переключения. (B) Доля вариантов выбора для левого порта ( n = 8 мышей) для испытаний до и после переключения награждаемого порта (при испытании 0). (C) Доля вариантов проживания для историй вознаграждений, в которых два последовательных выбора были сделаны для одного порта. (D) Левая часть графика: вклад внутренней систематической ошибки (фиолетовый), вознагражденных (синий) и не вознагражденных (желтый) результатов в предыдущих пяти испытаниях на выбор в текущем испытании, полученный на основе логистической регрессии. Правый подзаголовок: фактическая доля выборов для левого порта, построенная против прогнозируемой доли с помощью регрессионной модели ( n = 8 мышей, всего 43 000 испытаний). Данные от каждого субъекта сгруппированы в 50 ячеек и представлены разными цветами. (E) Аналогично (D) , но повышает вероятность до 100% ( n = 8 мышей, всего 16 000 испытаний). (F) Разница в размере вознаграждения между портами ( n = 4 мыши, больше воды слева; n = 4 мыши справа; всего 30 000 испытаний). Данные представляют собой средние значения ± среднеквадратичное отклонение. Смещение = 0,41 ± 0,04 среднее ± среднеквадратичное отклонение, критерий Стьюдента t , *** p <0,001.

Похожие статьи

  • Новая масштабируемая и недорогая многоканальная система мониторинга топливных элементов с полимерным электролитом.

    Кальдерон А.Дж., Гонсалес И., Кальдерон М., Сегура Ф., Андухар Дж. М.. Кальдерон А.Дж. и др. Датчики (Базель). 2016 9 марта; 16 (3): 349. DOI: 10,3390 / s16030349. Датчики (Базель). 2016 г. PMID: 27005630 Бесплатная статья PMC.

  • Однооборудование с множеством приложений для автоматизированной системы управления роботом-автомобилем.

    Уллах С., Мумтаз З., Лю С., Абубакр М., Махбуб А., Мадни Х.А.Уллах С. и др. Датчики (Базель). 2019 6 февраля; 19 (3): 662. DOI: 10,3390 / s162. Датчики (Базель). 2019. PMID: 30736302 Бесплатная статья PMC.

  • Tap Arduino: микроконтроллер Arduino для слуховой обратной связи с малой задержкой в ​​экспериментах по сенсомоторной синхронизации.

    Schultz BG, van Vugt FT. Шульц Б.Г. и др. Методы Behav Res. 2016 декабрь; 48 (4): 1591-1607.DOI: 10.3758 / s13428-015-0671-3. Методы Behav Res. 2016 г. PMID: 26542971

  • Запись электрокортикографических сигналов человека (ЭКоГ) для нейробиологических исследований и функционального кортикального картирования в реальном времени.

    Хилл Нью-Джерси, Гупта Д., Бруннер П., Гундуз А., Адамо М.А., Ритаччо А., Шалк Г. Hill NJ, et al. J Vis Exp. 2012 г. 26 июня; (64): 3993. DOI: 10,3791 / 3993. J Vis Exp.2012 г. PMID: 22782131 Бесплатная статья PMC.

  • Портативная платформа для сбора и анализа поведенческих данных одновременно с нейрофизиологическими сигналами.

    Тяньсяо Цзян, Сиддики Х, Рэй С., Асман П., Озтюрк М., Инс Н.Ф. Тяньсяо Цзян и др. Annu Int Conf IEEE Eng Med Biol Soc. 2017 июль; 2017: 1784-1787. DOI: 10.1109 / EMBC.2017.8037190. Annu Int Conf IEEE Eng Med Biol Soc.2017 г. PMID: 234 Обзор.

Процитировано

3 статей
  • Интерфейс на базе микроконтроллера Teensy для управления камерой оптического изображения во время поведенческих экспериментов.

    Романо М., Баклин М., Гриттон Х., Мехротра Д., Кессель Р., Хан Х.Романо М. и др. J Neurosci Methods. 2019 15 мая; 320: 107-115. DOI: 10.1016 / j.jneumeth.2019.03.019. Epub 2019 1 апр. J Neurosci Methods. 2019. PMID: 30946877 Бесплатная статья PMC.

  • ABE-VIEW: Android-интерфейс для беспроводного сбора данных и управления.

    Дженкинс Д.М., Курасаки Р. Дженкинс Д.М. и др. Датчики (Базель). 2018 13 августа; 18 (8): 2647. DOI: 10.3390 / с18082647. Датчики (Базель). 2018. PMID: 30104474 Бесплатная статья PMC.

  • Инструменты с открытым исходным кодом для временно контролируемого поведения грызунов, подходящие для электрофизиологии и оптогенетических манипуляций.

    Солари Н., Святко К., Ласловски Т., Хегедюс П., Хангья Б. Солари Н. и др. Front Syst Neurosci. 15 мая 2018; 12:18. DOI: 10.3389 / fnsys.2018.00018. eCollection 2018.Front Syst Neurosci. 2018. PMID: 29867383 Бесплатная статья PMC.

использованная литература

    1. Цуй Ю., Львов Г., Цзинь С., Пэн Дж., Юань Дж., Хе Х. и др. . (2017). Центральная нейронная цепь миндалевидного тела — субстанция innominata кодирует отталкивающие сигналы подкрепления. Cell Rep. 21, 1770–1782. 10.1016 / j.celrep.2017.10.062 — DOI — PubMed
    1. Д’Аусилио А.(2012). Arduino: недорогое многофункциональное лабораторное оборудование. Behav. Res. Методы 44, 305–313. 10.3758 / s13428-011-0163-z — DOI — PubMed
    1. Девараконда К., Нгуен К. П., Кравиц А. В. (2016). ROBucket: недорогая операционная камера на базе микроконтроллера Arduino. Behav. Res. Методы 48, 503–509. 10.3758 / s13428-015-0603-2 — DOI — PubMed
    1. Долзани С.Д., Накамура С., Купер Д. С. (2013). Новое задание с переменной задержкой «годен / не годен» для изучения внимания, мотивации и рабочей памяти у грызунов с фиксированной головой. F1000 Рес 2: 125. 10.12688 / f1000research.2-125.v1 — DOI — ЧВК — PubMed
    1. Эскобар Р., Перес-Эррера К. А. (2015). Недорогой USB-интерфейс для исследования оперантов с использованием Arduino и Visual Basic. J. Exp. Анальный. Behav. 103, 427–435. 10.1002 / jeab.135 — DOI — PubMed

Показать все 18 ссылок

LinkOut — дополнительные ресурсы

  • Источники полных текстов

  • Другие источники литературы

  • Разное

Все, что вам нужно знать о коде Arduino

С момента запуска платформы с открытым исходным кодом Arduino бренд зарекомендовал себя в центре обширного сообщества разработчиков ПО с открытым исходным кодом.Экосистема Arduino состоит из разнообразного сочетания аппаратного и программного обеспечения. Универсальность Arduino и ее простой интерфейс делают ее лучшим выбором для широкого круга пользователей по всему миру, от любителей, дизайнеров и художников до прототипов продуктов.

Плата Arduino подключается к компьютеру через USB, где она подключается к среде разработки Arduino (IDE). Пользователь записывает код Arduino в IDE, а затем загружает его в микроконтроллер, который выполняет код, взаимодействуя с входами и выходами, такими как датчики, двигатели и источники света.

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

Спланируйте следующий проект Arduino >>

Среда кодирования Arduino и основные инструменты

Какой язык представляет собой Arduino?

Код Arduino написан на C ++ с добавлением специальных методов и функций, о которых мы поговорим позже.C ++ — это язык программирования, понятный человеку. Когда вы создаете «эскиз» (имя, данное файлам кода Arduino), он обрабатывается и компилируется на машинный язык.

Arduino IDE

Интегрированная среда разработки Arduino (IDE) — это основная программа редактирования текста, используемая для программирования Arduino. Здесь вы будете набирать код, прежде чем загружать его на доску, которую хотите запрограммировать. Код Arduino обозначается как , эскизы .

Примечание. Важно использовать последнюю версию Arduino IDE.Время от времени проверяйте обновления здесь.

Пример кода Arduino

Как видите, IDE имеет минималистичный дизайн. В строке меню всего 5 заголовков, а также ряд кнопок под ними, которые позволяют вам проверять и загружать свои эскизы. По сути, IDE переводит и компилирует ваши эскизы в код, понятный Arduino. Как только ваш код Arduino скомпилирован, он загружается в память платы.

Все, что нужно сделать пользователю, чтобы начать компилировать свой скетч, — это нажать кнопку (руководство по этому поводу можно найти ниже).

Если есть какие-либо ошибки в коде Arduino, появится предупреждающее сообщение, предлагающее пользователю внести изменения. Большинство новых пользователей часто испытывают трудности с компиляцией из-за строгих требований к синтаксису Arduino. Если вы сделаете какие-либо ошибки в пунктуации при использовании Arduino, код не скомпилируется, и вы получите сообщение об ошибке.

Последовательный монитор и последовательный плоттер

Последовательный монитор Arduino можно открыть, щелкнув значок увеличительного стекла в верхней правой части среды IDE или под инструментами.Последовательный монитор используется в основном для взаимодействия с платой Arduino с помощью компьютера и является отличным инструментом для мониторинга и отладки в реальном времени. Чтобы использовать монитор, вам нужно использовать класс Serial.

В коде, который вы загружаете с сайта circuito.io, есть тестовый раздел, который поможет вам протестировать каждый компонент с помощью последовательного монитора, как вы можете видеть на снимке экрана ниже:

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

Отладка кода и оборудования Arduino

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

Используя класс Serial, вы можете печатать на мониторе последовательного порта, отлаживая комментарии и значения переменных.На большинстве моделей Arduino будут использоваться последовательные контакты 0 и 1, подключенные к USB-порту.

Структура кода

Библиотеки

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

Чтобы импортировать новую библиотеку, вам нужно перейти в Sketch> Import Library

Кроме того, в верхней части вашего файла .ino вам нужно использовать «#include» для включения внешних библиотек. Вы также можете создавать собственные библиотеки для использования в изолированных эскизах.

Определения выводов

Чтобы использовать выводы Arduino, вам необходимо определить, какой вывод используется и его функции. Удобный способ определить используемые контакты:

‘#define pinName pinNumber’.

Функциональные возможности являются входными или выходными и определяются с помощью метода pinMode () в разделе настройки.

Объявления

Переменные

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

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

Экземпляры

В программировании класс представляет собой набор функций и переменных, которые хранятся вместе в одном месте. Каждый класс имеет специальную функцию, известную как конструктор , которая используется для создания экземпляра класса. Чтобы использовать функции класса, нам нужно объявить для него экземпляр.

Setup ()

Каждый скетч Arduino должен иметь функцию настройки.Эта функция определяет начальное состояние Arduino при загрузке и запускается только один раз.

Здесь мы определим следующее:

  1. Функциональность контактов с использованием функции pinMode
  2. Начальное состояние контактов
  3. Инициализация классов
  4. Инициализация переменных
  5. Логика кода

Loop ()

Функция цикла также является обязательным для каждого скетча Arduino и запускается после завершения setup (). Это основная функция, и, как следует из названия, она запускается в цикле снова и снова.Цикл описывает основную логику вашей схемы.

Например:

Примечание. Использование термина «void» означает, что функция не возвращает никаких значений.

Как программировать Arduino

Базовая логика кода Arduino представляет собой структуру «если-то» и может быть разделена на 4 блока:

Setup — обычно записывается в разделе настройки кода Arduino и выполняет вещи, которые нужно сделать только один раз, например, калибровка датчика.

Вход — в начале цикла читать входы.Эти значения будут использоваться в качестве условий («если»), таких как показания внешней освещенности от LDR с использованием analogRead ().

Manipulate Data — этот раздел используется для преобразования данных в более удобный вид или выполнения вычислений. Например, AnalogRead () дает значение 0-1023, которое можно сопоставить с диапазоном 0-255, который будет использоваться для ШИМ. (См. AnalogWrite ())

Выход — этот раздел определяет окончательный результат логика («затем») в соответствии с данными, рассчитанными на предыдущем шаге.Рассматривая наш пример LDR и PWM, включайте светодиод только тогда, когда уровень окружающего освещения опускается ниже определенного порога.

Библиотеки кода Arduino

Структура библиотеки

Библиотека — это папка, состоящая из файлов с файлами кода C ++ (.cpp) и файлов заголовков C ++ (.h).

Файл .h описывает структуру библиотеки и объявляет все ее переменные и функции.

Файл .cpp содержит реализацию функции.

Импорт библиотек

Первое, что вам нужно сделать, это найти библиотеку, которую вы хотите использовать, из множества библиотек, доступных в Интернете. После загрузки на свой компьютер вам просто нужно открыть Arduino IDE и щелкнуть Sketch> Include Library> Manage Libraries. Затем вы можете выбрать библиотеку, которую хотите импортировать в IDE. После завершения процесса библиотека будет доступна в меню эскиза.

В коде, предоставленном circuito.io, вместо добавления внешних библиотек, как упоминалось ранее, мы предоставляем им папку с прошивкой.В этом случае IDE знает, как их найти при использовании #include.

От программного обеспечения к оборудованию

О программных возможностях Arduino можно много сказать, но важно помнить, что платформа состоит как из программного, так и из аппаратного обеспечения. Они работают в тандеме, чтобы запустить сложную операционную систему.

Код → Скомпилировать → Загрузить → Выполнить

В основе Arduino лежит возможность компилировать и запускать код.

После написания кода в IDE необходимо загрузить его в Arduino.Нажатие кнопки «Загрузить» (значок со стрелкой вправо) скомпилирует код и загрузит его, если он прошел компиляцию. После завершения загрузки программа запустится автоматически.

Вы также можете сделать это пошагово:

  1. Сначала скомпилируйте код. Для этого просто щелкните значок проверки (или щелкните эскиз> Проверить / Компилировать в строке меню.

Как видите, значок проверки находится в верхнем левом углу под тегом «Файл» в разделе меню.

Как только вы это сделаете, Arduino начнет компиляцию. По завершении вы получите сообщение о завершении, которое выглядит следующим образом:

Как видите, зеленая линия внизу страницы сообщает вам, что вы «закончили компиляцию». Если ваш код не запускается, вы получите уведомление в том же разделе, а проблемный код будет выделен для редактирования.

После того, как вы скомпилировали свой набросок, пора его загрузить.

  1. Выберите последовательный порт, к которому в настоящее время подключена ваша Arduino.Для этого нажмите в меню Инструменты> Последовательный порт, чтобы указать выбранный вами последовательный порт (как показано выше). Затем вы можете загрузить скомпилированный эскиз.
  2. Чтобы загрузить эскиз, щелкните значок загрузки рядом с галочкой. В качестве альтернативы вы можете перейти в меню и щелкнуть Файл> Загрузить. Ваши светодиоды Arduino будут мигать после передачи данных.

После завершения вы увидите сообщение о завершении, в котором сообщается, что Arduino завершила загрузку.

Настройка IDE

Для подключения платы Arduino к компьютеру вам понадобится USB-кабель.При использовании Arduino UNO USB передает данные программы прямо на вашу плату. USB-кабель используется для питания вашего Arduino. Вы также можете запустить Arduino от внешнего источника питания.

Перед загрузкой кода необходимо настроить некоторые параметры.

Выберите свою плату. Вам необходимо указать, какую плату Arduino вы собираетесь использовать. Сделайте это, щелкнув Инструменты> Доска> Ваша доска.

Выберите свой процессор — существуют определенные платы (например, Arduino pro-mini), для которых вам нужно указать, какая у вас модель процессора.В разделе инструменты> процессор> выберите имеющуюся у вас модель.

Выберите свой порт — чтобы выбрать порт, к которому подключена ваша плата, перейдите в Инструменты> Порт> COMX Arduino (это последовательный порт Arduino).

Как установить сторонние платы (например, NodeMCU)

Некоторые модели плат не предварительно установлены в Arduino IDE, поэтому вам необходимо установить их перед загрузкой кода.

Чтобы установить не родную плату, такую ​​как NodeMCU, вам необходимо:

  1. Нажмите «Инструменты»> «Платы»> «Диспетчер плат»
  2. Найдите плату, которую вы хотите добавить, в строке поиска и нажмите «установить».

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

  1. Щелкните «Файлы»> «Настройки».
  2. . В поле «Диспетчер дополнительных плат» вставьте URL-адрес установочного пакета вашей платы. Например, для nodeMCU добавьте следующий URL-адрес: http://arduino.esp8266.com/stable/package_esp8266com_index.json
  3. Нажмите OK
  4. Перейдите в инструменты> Доски> Диспетчер плат
  5. Найдите плату, которую вы хотите добавить в строке поиска и нажмите «установить».

По завершении этого шага вы увидите установленные платы в списке плат под инструментами.

Примечание: процесс может незначительно отличаться для разных плат.

Arduino: чрезвычайно универсальная платформа

Arduino — это гораздо больше, чем просто микроконтроллер. Благодаря обширной среде IDE и широкому спектру аппаратных конфигураций Arduino действительно представляет собой разнообразную платформу. Разнообразие библиотек и интуитивно понятный дизайн делают его любимым как для новых пользователей, так и для опытных разработчиков.Существуют тысячи ресурсов сообщества, которые помогут вам начать работу с аппаратным и программным обеспечением.

По мере развития навыков вы можете столкнуться с проблемами, требующими отладки, что является слабым местом Arduino IDE. К счастью, есть несколько инструментов и методов для отладки оборудования и программного обеспечения Arduino.

alexxlab

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *