Андрей Смирнов
Время чтения: ~24 мин.
Просмотров: 0

Секундомер ардуино: делаем своими руками на основе uno

Модифицированные библиотеки от Paul Stoffregen

Также доступны отдельно поддерживаемые и обновляемые копии TimerOne и TimerThree, которые отличается поддержкой большего количества оборудования и оптимизацией для получения более эффективного кода.

ПлатаШИМ выводы TimerOneШИМ выводы TimerThree
Teensy 3.13, 425, 32
Teensy 3.03, 4 
Teensy 2.04, 14, 159
Teensy++ 2.025, 26, 2714, 15, 16
Arduino Uno9, 10 
Arduino Leonardo9, 10, 115
Arduino Mega11, 12, 132, 3, 5
Wiring-S4, 5 
Sanguino12, 13 

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

Возобновляет работу остановленного таймера. Новый период не начинается.

Способ программирования Arduino для работы с DS1302

Обязательно нужно скачать действующую библиотеку из надёжных источников.

Библиотека позволяет считывать и записывать параметры реального времени. Небольшое описание я привожу ниже:

#include <iarduino_RTC.h> // Подключаем библиотеку.iarduino_RTC ОБЪЕКТ ( НАЗВАНИЕ ]] ); // Создаём объект.

Функция begin (); // Инициализация работы RTC модуля.

Функция settime ( СЕК ]]]]] ); // Установка времени.

Функция gettime (  ); // Чтение времени.

функция blinktime ( ПАРАМЕТР  ); // Заставляет функцию gettime «мигать» указанным параметром времени.

функция period ( МИНУТЫ ); // Указывает минимальный период обращения к модулю в минутах.

Переменная seconds // Возвращает секунды от 0 до 59.

Переменная minutes// Возвращает минуты от 0 до 59.

Переменная hours // Возвращает часы от 1 до 12.

Переменная Hours // Возвращает часы от 0 до 23.

Переменная midday // Возвращает полдень 0 или 1 (0-am, 1-pm).

Переменная day // Возвращает день месяца от 1 до 31.

Переменная weekday // Возвращает день недели от 0 до 6 (0-воскресенье, 6-суббота).

Переменная month // Возвращает месяц от 1 до 12.

Переменная year // Возвращает год от 0 до 99.

Пишем простенькую программу. Установка текущего времени в RTC модуль (DS1302):

Arduino

#include <iarduino_RTC.h> iarduino_RTC time(RTC_DS1302,6,7,8); void setup() { delay(300); Serial.begin(9600); time.begin(); time.settime(0,51,21,27,10,15,2); // 0 сек, 51 мин, 21 час, 27, октября, 2015 года, вторник } void loop(){ if(millis()%1000==0){ // если прошла 1 секунда Serial.println(time.gettime(«d-m-Y, H:i:s, D»)); // выводим время delay(1); // приостанавливаем на 1 мс, чтоб не выводить время несколько раз за 1мс } }

1
2
3
4
5
6
7
8
9
10
11
12
13
14

#include <iarduino_RTC.h>

iarduino_RTCtime(RTC_DS1302,6,7,8);

voidsetup(){

delay(300);

Serial.begin(9600);

time.begin();

time.settime(,51,21,27,10,15,2);// 0  сек, 51 мин, 21 час, 27, октября, 2015 года, вторник

}

voidloop(){

if(millis()%1000==){// если прошла 1 секунда

Serial.println(time.gettime(«d-m-Y, H:i:s, D»));// выводим время

delay(1);// приостанавливаем на 1 мс, чтоб не выводить время несколько раз за 1мс

}

}

Считываем текущее время с RTC модуля (DS1302) и выводим в «Последовательный порт» :

#include <iarduino_RTC.h> iarduino_RTC time(RTC_DS1302,6,7,8); void setup() { delay(300); Serial.begin(9600); time.begin(); } void loop(){ if(millis()%1000==0){ // если прошла 1 секунда Serial.println(time.gettime(«d-m-Y, H:i:s, D»)); // выводим время delay(1); // приостанавливаем на 1 мс, чтоб не выводить время несколько раз за 1мс } }

1
2
3
4
5
6
7
8
9
10
11
12
13

#include <iarduino_RTC.h>

iarduino_RTC time(RTC_DS1302,6,7,8);

voidsetup(){

delay(300);

Serial.begin(9600);

time.begin();

}

voidloop(){

if(millis()%1000==){// если прошла 1 секунда

Serial.println(time.gettime(«d-m-Y, H:i:s, D»));// выводим время

delay(1);// приостанавливаем на 1 мс, чтоб не выводить время несколько раз за 1мс

}

}

С вами на связи был я, Сёма. Пишите в комментах, подписывайтесь на новости, пишите письма.

Timer1

Данная библиотека представляет собой набор функций для настройки аппаратного 16-битного таймера Timer1 в ATMega168/328. В микроконтроллере доступно 3 аппаратных таймера, которые могут быть настроены различными способами для получения различных функциональных возможностей. Начало разработки данной библиотеки было вызвано необходимостью быстро и легко установить период или частоту ШИМ сигнала, но позже она разраслась, включив в себя обработку прерываний по переполнению таймера и другие функции. Она может быть легко расширена или портирована для работы с другими таймерами.

Точность таймера зависит от тактовой частоты процессора. Тактовая частота таймера Timer1 определяется установкой предварительного делителя частоты. Этот делитель может быть установлен в значения 1, 8, 64, 256 или 1024.

для тактовой частоты 16 МГц
ДелительДлительность одного отсчета, мксМаксимальный период, мс
10,06258,192
80,565,536
644524,288
256162097,152
1024648388,608

В общем:

  • Максимальный период = (Делитель / Частота) × 217
  • Длительность одного отсчета = (Делитель / Частота)

Скачать можно здесь (TimerOne-r11.zip) или с Google Code.

Для установки просто распакуйте и поместите файлы в каталог Arduino/hardware/libraries/Timer1/.

FAQ

  • Установить библиотеку

Да, модуль можно использовать, но скетч, библиотеки и схема сборки отличаются.

Вставьте QuadDisplay в правый нижний слот

Прошейте контроллер скетчем через Arduino IDE.

timer.ino
// Подключаем библиотеку для работы с дисплеем
#include <QuadDisplay.h>
 
// номер аналогового пина потенциометра
#define POT_PIN     A0
// номер цифрового пина пищалки
#define BUZZER_PIN  2
// номер цифрового пина кнопки
#define BUTTON_PIN  4
// номер цифрового пина дисплея
#define DISPLAY_PIN 11
 
// переменная для подсчёта времени
unsigned long prevMillis = ;
 
// переменная для хранения таймера
int reverseTimer;
 
void setup()
{
  // функция установки таймера
  settingTimer();
}
void loop()
{
  // если время таймера не дошло до нуля и прошла 1 секунда
  if ((reverseTimer > ) && ((millis() - prevMillis) > 1000)) {
    // выводим значение на дисплей
    displayInt(DISPLAY_PIN, --reverseTimer);
    // запоминаем текущее время
    prevMillis = millis();
    // если таймер дошёл до нуля
    if (reverseTimer == ) {
      // подаём звуковой сигнал и выводим «Off» на дисплей
      displayDigits(DISPLAY_PIN, QD_NONE, QD_O, QD_f, QD_f);
      tone(BUZZER_PIN, 4000, 200);
    }
  }
  // если нажата кнопка
  if (!digitalRead(BUTTON_PIN)) {
    // подаём звуковой сигнал
    tone(BUZZER_PIN, 500, 500);
    delay(1000);
    // выполняем настройку таймера
    settingTimer();
  }
}
 
// функция настройки таймера
void settingTimer()
{
  // пока кнопка не нажата
  while (digitalRead(BUTTON_PIN)) {
    // считываем значения с потенциометра
    reverseTimer = analogRead(A0);
    // и выводим его на дисплей
    displayInt(DISPLAY_PIN, reverseTimer);
    delay(30);
  }
  // после нажатия кнопки, подаём звуковой сигнал
  tone(BUZZER_PIN, 2000, 200);
  delay(300);
  tone(BUZZER_PIN, 3000, 200);
  delay(300);
  tone(BUZZER_PIN, 4000, 200);
}

Список деталей для эксперимента

  • 1 плата Arduino Uno

  • 1 беспаечная макетная плата

  • 1 семисегментный индикатор
  • 7 резисторов номиналом 220 Ом
  • 9 проводов «папа-папа»

Пояснения к коду

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

  • возвращает значение: n-ный бит справа в байте x

Собираем таймер

Как только электронные соединения собраны, можно собрать все вместе, т.е. к нашей схеме мы добавим еще и сам таймер в виде циферблата.

Вакансии

Программирование аппаратно-программных средств arduino, разработка чертежей в SolidWorks.

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

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

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

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

Позиционирование датчика HC-SR04 здесь является ключевым, т.к. нужно найти баланс. Датчик должен быть достаточно далеко от воды, но в то же время он должен без ложных срабатываний фиксировать движение ваших рук.

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

Внимание. Воды для электронных устройств очень опасна! Размещайте Arduino и другие детали дальше от влаги и воды.. Как только датчик вы разместили там, где нужно, — подключите Arduino к питанию, например, через USB-адаптер

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

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

Элементы платы

Микросхема DS1307

Микросхема, занимающаяся подсчетом времени. Связь с микросхемой происходит по протоколу I2C. Её I2C-адрес 0b1101000.

Кварцевый резонатор

Для точной работы часов используется кварцевый резонатор на частоте 32768 Гц. Та же частота используется в кварцевых часах. Такая частота обеспечивает 215 циклов в секунду, что очень удобно для простых двоичных счётчиков

Гнездо для батарейки

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

Контакты подключения 3-проводных шлейфов

Контакты питания:

  • Земля (G) — чёрный провод. Соедините с пином Arduino.
  • Питание (V) — красный провод. Соедините с пином Arduino.
  • Не используется.

Контакты шины I²C:

  • Сигнальный (D) — Подключите к пину Arduino.
  • Сигнальный (С) — Подключите к пину Arduino.
  • Не используется.

Семицветный светодиодный модуль KY-034

Модуль состоит из печатной платы, трёх выводов, сопротивления 10кОм (код SMD-резистора 103) и семицветного светодиода.

Семицветный мигающий светодиод имеет всего два контакта (плюс и минус). Достаточно добавить источник питания и светодиодный модуль будет мигать всеми цветами радуги в разных комбинациях. Происходит эта магия за счёт миниатюрной микросхемы, которая встроена в светодиод.

Программирования не требуется. Просто подключаем вывод к GND и S к 5V. При желании можете подключить не к питанию, а к цифровому пину Arduino и управлять включением и выключением светодиода (например, скетч Blink).

Входит в состав набора Набор из 37 датчиков

Описание

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

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

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

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

Работа проекта

Принцип работы проекта достаточно прост. После запуска программы на экране ЖК дисплея высветится надпись “Arduino Timer” и она будет гореть до тех пор пока вы не нажмете кнопку. После нажатия кнопки программа попросит вас ввести время, с которого начнется обратный отсчет, при помощи вызова функции “setFeedingTime”. Время вводится с помощью клавиатуры. После ввода времени необходимо нажать клавишу ‘D’ на клавиатуре чтобы сохранить введенное время и начать обратный отсчет.

Далее в функции loop() мы будем выполнять ряд вычислений чтобы осуществить уменьшение счета (секунда за секундой) и показывать на ЖК дисплее оставшееся до истечения таймера время в формате HH:MM:SS. Более подробно все эти процессы показаны на видео, приведенном в конце статьи.

Когда таймер обратного отсчета достигнет нуля зуммер начнет издавать звуки (100 раз если его не прервать). Чтобы остановить сигнал зуммера необходимо нажать и удерживать кнопку. Также нажать кнопку можно в любое время если вы хотите остановить таймер.

Зачем нужна паяльная установка

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

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

В состав типовой установки, как правило, входят следующие элементы:

  • электронагреватель соответствующего класса (электрический паяльник или термический фен);
  • регулируемый блок питания, собранный на основе достаточно мощного трансформаторного преобразователя, позволяющего выбирать требуемые режимы нагрева потребителя;
  • подставка под паяльное приспособление и устройство для отсоса расплавленного припоя (ими комплектуются не все продающиеся модели).

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

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

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

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

Кухонный таймер на Ардуино. ⋆ ОБЪЕМНИК

Простой кухонный таймер с обратным отсчетом позволяет выставить время от одной минуты до 99 часов 99 минут. Время выводится на дисплей tm1637. Для установки времени использована мембранная клавиатура с четырьмя кнопками, кнопки: +1 , +10, +60 минут и Сброс настроек. Таймер работает на  литиевом li-on аккумуляторе типоразмер 18650 и заряжается от стандартного 5В зарядного устройства для телефона, через micro USB разъем. Мозгом устройства является Arduino ProMini. Скетч написан в IDE Arduino 1.6.7 для Arduino UNO или ProMini.

с обратным отсчетом. С возможностью подключить реле на 3-й пин.

Принципиальная схема кухонного таймера

Для заряда аккумулятора установлен  контроллер  TP4056 с защитой от разряда.

В схеме питания таймера есть повышающий модуль mt3608 DC-DC Step Up, для повышения напряжения до 5В. Выходное напряжение  с платы защиты 4В, для работы Arduino ProMini и высокой яркости свечения led дисплея требуется напряжение 5В.

Вывод времени в конструкции таймера применен led дисплей tm1637.

Модуль звука Buzzer активный 5v.

Обозначение контактов:VCC – напряжение питания;I/O – управляющий сигнал;GND – общий контакт.

Указанные элементы, на принципиальной схеме кухонного таймера: резистор, транзистор и буззер, уже установлены в модуль звука Buzzer, поэтому этот элемент схемы можно заменить модулем.

Модуль адаптер micro USB.

В Скетч добавил выход на реле 3pin https://yadi.sk/d/3LDD01zEnptOvQ

Используемые компоненты (купить в Китае):

1. Arduino promini; http://got.by/2snd5z2. Мембранная клавиатура 1х4; http://ali.pub/2sng3r3. Модуль звука Buzzer; http://ali.pub/2sngdh4. led дисплей tm1637; http://ali.pub/2sng7g5. Тумблер 2 Pin; http://ali.pub/2snfxx6. Повышающий модуль mt3608; http://ali.pub/2snfo0 или http://ali.pub/2snfoz7. контроллер  TP4056; http://got.by/2snfa0 или http://ali.pub/28346d8. Честные аккумуляторы 18650, 2500 мА⋅ч; http://got.by/1x51u19. Модуль micro USB; http://ali.pub/2sng0910. Холдер 18650; http://ali.pub/2sndcl11. Коробочка для поделок; http://ali.pub/2snghk12. Реле модуль 1 канал http://ali.pub/2s42mk или  http://ali.pub/2s419r или http://ali.pub/2s42aw

с вашего сайта.

Прерывания таймеров в Arduino

Прерывания таймеров являются видом программных прерываний. В Arduino присутствуют следующие виды прерываний таймеров.

Прерывания переполнения таймера (Timer Overflow Interrupt)

Это прерывание происходит всегда, когда значение счетчика достигает его максимального значения, например, для 16-битного счетчика это 65535. Соответственно, процедура обработки (обслуживания) прерывания (ISR) вызывается когда бит прерывания переполнения таймера установлен (enabled) в TOIEx присутствующем в регистре масок прерываний TIMSKx.

ISR Format:

Output Compare Register (OCRnA/B) – регистр сравнения выхода

Процедура обработки прерывания сравнения выхода (Output Compare Match Interrupt) вызывается при вызове функции TIMERx_COMPy_vect если установлен бит/флаг OCFxy в регистре TIFRx. Эта процедура обработки прерывания (ISR) становится доступной при помощи установки бита OCIExy, присутствующем в регистре маски прерываний TIMSKx.

Захват входа таймера (Timer Input Capture)

Процедура обработки этого прерывания вызывается если установлен бит/флаг ICFx в регистре флагов прерываний таймера (TIFRx — Timer Interrupt Flag Register). Эта процедура обработки прерываний становится доступной при установке бита ICIEx в регистре маски прерываний TIMSKx.

Методы библиотек TimerOne и TimerThree

Настройка

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

Обратите внимание, что это нарушает работу на цифровых выводах 9 и 10 на Arduino.

Устанавливает период в микросекундах. Минимальный период и максимальная частота, поддерживаемые данной библиотекой, равны 1 микросекунде и 1 МГц, соответственно

Максимальный период равен 8388480 микросекунд, или примерно 8,3 секунды. Обратите внимание, что установка периода изменит частоту срабатывания прикрепленного прерывания и частоту, и коэффициент заполнения на обоих ШИМ выходах.

Управление запуском

Запускает таймер, начиная новый период.
Останавливает таймер.
Перезапускает таймер, обнуляя счетчик и начиная новый период.

Управление выходным ШИМ сигналом

Генерирует ШИМ сигнал на заданном выводе . Выходными выводами таймера Timer1 являются выводы 1 и 2, поэтому вы должны выбрать один из них, всё остальное игнорируется. На Arduino это цифровые выводы 9 и 10, эти псевдонимы также работают. Выходными выводами таймера Timer3 являются выводы , соответствующие выводам 2, 3 и 5 на Arduino Mega. Коэффициент заполнения задается, как 10-битное значение в диапазоне от 0 до 1023 (0 соответствует постоянному логическому нулю на выходе, а 1023 – постоянной логической единице)

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

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

Выключает ШИМ на заданном выводе, после чего вы можете использовать этот вывод для чего-либо другого.

Прерывания

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

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

Отключает прикрепленное прерывание.

Возможные проблемы

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

Обязательно подумайте об уменьшении чувствительности при увеличении «пороговой» переменной в скетче Arduino.

Если руки в раковине не активируют таймер, попробуйте увеличить чувствительность, уменьшив пороговую переменную в эскизе Arduino.

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

Тестировать таймер полезно до установки устройства по месту назначения.

Радиоуправление на ардуино

Используя arduino можно самостоятельно изготовить сложную систему радиоуправления не затрачивая, при этом, много усилий. Для популярной, на данный момент, платформы arduino существует огромное количество модулей расширяющих возможности данной платформы. Например модули nrf24l01 для радиосвязи.

Существует некоторое колличество разновидностей данного модуля. Есть модули для связи на расстояниях до 100м они небольшие и недорогиеРадиомодули рассчитанные на дальность до 100м можно запитать от вывода 3.3В с Arduino uno а радиомодули на дальность до 1100м от этого вывода запитать нельзя т.к.

данный вывод не способен выдать достаточный для нормальной работы модуля ток, поэтому если необходимо использовать модуль с дальностью радиосвязи до 1100м то необходимо использовать внешний стабилизатор на 3.3В для питания радиомодуля. О том как самостоятельно изготовить стабилизатор постоянного напряжения написано в статье http://electe.blogspot.

ru/2015/10/lm317.html там же есть программа для рассчёта. Этот стабилизатор просто надо сделать на 3.3В для того чтобы можно было им запитать радиомодуль. Ещё для того чтобы сделать систему радиоуправления на ардуино нужно само ардуино. Можно использовать почти любое (если не любое) ардуино.

Если необходима компактность то можно использовать другие ардуины например:

2) Arduino nano http://got.by/23nhej

Также можно использовать любое другое ардуино но эти два (описанных выше) проще всего. Есть например 

3) Arduino pro mini http://got.by/23ni7b для программирования Arduino pro mini нужен usb-uart переходник или другое ардуино.

Теперь давайте рассмотрим схему передатчика:

Рисунок 1 – Передатчик на ардуино

У данного передатчика имеется 10 кнопок и 5 потенциометров. Допустим нам надо управлять дистанционно двумя серврмрторами, 3мя ШИМами, одним пьезодинамиком и 8ю цифровыми выходами для каких либо целей (напр.

сделать 8 фонарей на радиоуправлямый автомобиль или 1 фонарь а 7 выводов оставить для чего нибудь на будущее).

Рисунок 2 – Приемник на Ардуино

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

К ним нельзя подключать слишком большую нагрузку для того чтобы Ардуино не испортилось. Для питания сервомоторов можно использовать отдельный источник питания. Если сервомоторы мощные то их вывод питания нельзя подключать к выводу питания ардуино.

Теперь давайте рассмотрим скетчь передатчика:

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

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

В основном цикле считываются значения с потенциометров для сервомоторов и преобразуются в градусы функцией map. Далее, в следующую ячейку массива, запихиваются состояния входов ардуино побитно. После чего считываются значения с потенциометров для управления ШИМами, делятс на 4 т.к. аппаратный ШИМ ардуино принимает 1 байт.

Теперь скетчь приемника:

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

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

Минимальные частоты и разрядность таймеров

Варианты вызовов timer_init_ISR_2Hz (2Гц, период 500мс) и timer_init_ISR_1Hz (1Гц, период 1с) на PIC32MX 80МГц будут работать только с 32-битными таймерами (_TIMER2_32BIT и _TIMER4_32BIT; TIMER_DEFAULT — по умолчанию = _TIMER4_32BIT), т.к. при 16-битных режимах таймеров PIC32MX 80МГц комбинация «делитель частоты» (prescaler — максимальный вариант 1/256) + «поправка периода» (adjustment — максимальный вариант 2^16=65536-1) дают минимальную частоту 5Гц (период — 200мс):
80000000/256/65536 = 4.8Гц

На PIC32 32-битные таймеры создаются комбинацией 2х 16-битных таймеров:

  • Timer4(32бит) = Timer4(16бит)+Timer5(16бит)
  • Timer2(32бит) = Timer2(16бит)+Timer3(16бит)

поэтому при использовании таймера _TIMER2_32BIT, обычные таймеры _TIMER2 и _TIMER3 будут заняты, при использовании _TIMER4_32BIT — заняты будут _TIMER4 и _TIMER5.

На AVR/Arduino можно получить частоту 1Гц стандартными делителями на 16-битном таймере.

На SAM/Arduino Due все таймеры 32-битные.

Тип данных для параметра adjustment — unsigned int.

  • На PIC32 разрядность int — 32 бит, этого хватит и для 16-тибитного режима таймера (если не закладывать значение более 2^16=65536-1) и для 32-битного (пойдет любое значение до 2^32=4294967296-1).
  • На SAM разрядность int — 32 бит, все таймеры 32-битные.
  • На AVR разрядность int — 16 бит, это опять же, как раз достаточно для 16-битных таймеров.

Таким образом, хотя разрядность параметра adjustment с типом int будет разной на разных платформах, во всех случаях значение будет соответствовать аппаратным свойствам таймеров.

Версия с поддержкой настоящего RTC

официального сайта проектафорумеCHIPSTERДополнениепромо ролик

Видео

На этом всё. Будьте здоровы и оптимистичны.

Видеоинструкция

Обратите внимание

  • Конденсатор в данной схеме нам нужен для того, чтобы при включении сервопривода избежать просадки питания платы.
  • Не забывайте про то, что нужно соблюдать полярность элетролитического конденсатора. Короткая ножка (со стороны белой полосы на корпусе) — «минус».
  • Вы можете соединить провод сервопривода с макетной платой проводами «папа-папа»: коричневый это земля, красный — питание, оранжевый — сигнал.
  • В данном эксперименте мы подключаем питние сервопривода к 5V-выходу Arduino. С одним сервоприводом плата справится, но если в каком-либо проекте вам нужно больше серв, используйте специальные платы-драйвера с отдельным источником питания для серв.

Автор: alexlevchenko

Что еще можно сделать?

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

  • Анемометр — стационарный прибор для измерения скорости ветра;
  • Акселерометр — сенсор, позволяющий определять ускорение и ориентацию в пространстве;
  • Аналоговый термометр — аналоговый сенсор для измерения температуры;
  • Барометр — сенсор, позволяющий определять атмосферное давление и температуру;
  • Датчик влажности почвы — сенсор, позволяющий узнать о пересыхании земли
  • Датчик водорода — датчик для обнаружения водорода;
  • Датчик тока — аналоговый сенсор для измерения силы тока;
  • Датчик уровня воды — цифровой датчик уровня воды в ёмкости;
  • Датчик температуры и влажности — сенсор, предоставляющий информацию об окружающей температуре и влажности в виде цифрового сигнала;
  • Датчик пульса — аналоговый датчик для измерения частоты сердечных сокращений
  • Гироскоп — сенсор, позволяющий определять собственную угловую скорость.

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

Желаем вам отличных проектов. Подписывайтесь на нашу группу ВКонтакте.

Как бороться и чем обработать грушу от галлового клеща

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

Скетч

p130_seven_segment_counter.ino
#define FIRST_SEGMENT_PIN   2
#define SEGMENT_COUNT       7
 
// префикс «0b» означает, что целое число за ним записано в
// в двоичном коде. Единицами мы обозначим номера сегментов
// индикатора, которые должны быть включены для отображения
// арабской цифры. Всего цифр 10, поэтому в массиве 10 чисел.
// Нам достаточно всего байта (англ. byte, 8 бит) для хранения
// комбинации сегментов для каждой из цифр.
byte numberSegments10 = {
  0b00111111, 0b00001010, 0b01011101, 0b01011110, 0b01101010,
  0b01110110, 0b01110111, 0b00011010, 0b01111111, 0b01111110,
};
 
void setup()
{
  for (int i = ; i < SEGMENT_COUNT; ++i)
    pinMode(i + FIRST_SEGMENT_PIN, OUTPUT);
}
 
void loop()
{
  // определяем число, которое собираемся отображать. Пусть им
  // будет номер текущей секунды, зацикленный на десятке
  int number = (millis()  1000) % 10;
  // получаем код, в котором зашифрована арабская цифра
  int mask = numberSegmentsnumber;
  // для каждого из 7 сегментов индикатора...
  for (int i = ; i < SEGMENT_COUNT; ++i) {
    // ...определяем: должен ли он быть включён. Для этого
    // считываем бит (англ. read bit), соответствующий текущему
    // сегменту «i». Истина — он установлен (1), ложь — нет (0)
    boolean enableSegment = bitRead(mask, i);
    // включаем/выключаем сегмент на основе полученного значения
    digitalWrite(i + FIRST_SEGMENT_PIN, enableSegment);
  }
}

Таймеры в Arduino Uno

В плате Arduino Uno используется три таймера:
Timer0: 8-битный таймер, используемый в таких функциях как delay(), millis().
Timer1: 16-битный таймер, используемый в библиотеке для управления серводвигателями.
Timer2: 8-битный таймер, используемый в функции tone().

Характеристики

  • MEMS-датчик: барометр LPS25HB
  • Интерфейс: I²C
  • I²C-адрес:
    • без перемычки: 0x5C
    • с перемычкой: 0x5D
  • Максимальная чувствительность: 2,4×10-4 мбар
  • Диапазон измерений: 260–1260 мбар
  • Напряжение питания: 3,3–5 В
  • Потребляемый ток: до 10 мА
  • Размеры: 25,4×25,4×10,1 мм

Часы с выводом на экран Nokia 5110

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

В этом уроке используются лишь несколько компонентов — только перемычки, Arduino и дисплей Nokia 5110/3110.

Комплектующие

Детали, используемые в этом проекте ниже.

Оборудование

  • Arduino UNO и Genuino UNO × 1
  • Adafruit дисплей Nokia 5110 × 1
  • Соединительные провода (универсальные) × 1
  • Резистор 221 Ом × 1

Программное обеспечение

Схема соединения

Соединяем детали часов на Ардуино как на схеме выше:

  • контакт pin 3 — последовательный тактовый выход (SCLK) // pin 3 — Serial clock out (SCLK)
  • контакт pin 4 — выход серийных данных (DIN) // pin 4 — Serial date out (DIN)
  • контакт pin 5 — дата / выбор команды (D / C) // pin 5 — date/Command select (D/C)
  • контакт pin 6 — выбор ЖК-чипа (CS / CE) // pin 6 — LCD chip select (CS/CE)
  • контакт pin 7 — сброс ЖК (RST) // pin 7 — LCD reset (RST)

Код урока

Код второй версии часов вы можете скачать или скопировать ниже.

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

Adafruit_PCD8544 display = Adafruit_PCD8544(3,4,5,6,7);

int second,minute, hour, day, mounth,year; 
unsigned long UtlTime; 

void setup() 
pinMode(2,OUTPUT);
UtlTime=0;   {   

minute=0;   
hour=0;   
day=0;   
mounth=0;   
year=0;   
Serial.begin(9600);   
  display.begin();
  display.setContrast(50); // Adjust the display contrast
  display.clearDisplay();   //Apaga o buffer e o display
  display.setTextSize(1);  //Seta o tamanho do texto
  display.setTextColor(BLACK); //Seta a cor do texto      
   
display.print(" date e hour ");   
display.setCursor(0,10);   
display.print(" com Arduino");   
display.display();
delay (5000); 

//Configura o minute   
display.clearDisplay();   
display.setCursor(0,0);   
display.print("minute: ");
display.display();
Serial.print("\nin between minute:");  
while(minute==0)   {     
if (Serial.available() > 0)     
{       
minute= Serial.parseInt();     
}   
}   
display.print(minute);   
display.display();
delay(1000); 

//Configura a hour   
display.clearDisplay();   
display.setCursor(0,0);   
display.print("hour: ");   
display.display();
Serial.print("\nin between hour:"); 
while(hour==0)   
{     
if (Serial.available() > 0)     
{       
hour= Serial.parseInt();     
}   
}   
display.print(hour);   
display.display();
delay(1000);    

//Configura o day   
display.clearDisplay();   
display.setCursor(0,0);   
display.print("day: ");
display.display();   
Serial.print("\nin between day:");   
while(day==0)   
{     
if (Serial.available() > 0)     
{       
day= Serial.parseInt();     
}   
}   
display.print(day);   
display.display();
delay(1000);    

//Configura o mês   
display.clearDisplay();   
display.setCursor(0,0);   
display.print("mounth: "); 
display.display();  
Serial.print("\nin between mounth:");  
while(mounth==0)   
{     
if (Serial.available() > 0)     
{       
mounth= Serial.parseInt();     
}   
}   
display.print(mounth);  
 display.display();
delay(1000);    

//Configura o year   
display.clearDisplay();   
display.setCursor(0,0);   
display.print("year: ");   
display.display();
Serial.print("\nin between year:");   
while(year==0)   
{     
if (Serial.available() > 0)     
{       
year= Serial.parseInt();     
}   
}   
display.print(year);   

display.display();   
delay(1000);
display.clearDisplay(); 

} 

void loop() 
{   

if(millis()-UtlTime<0)   
{     
UtlTime=millis();   
}   
else   
{     
second=int((millis()-UtlTime)/1000);   
}   
if(second>59)   
{     
second=0;     
minute++;     
UtlTime=millis();     
if(minute>59)     
{       
hour++;       
minute=0;       
if(hour>23)       
{         
day++;         
hour=0;         
if(mounth==1||mounth==3||mounth==5||mounth==7||mounth==8||mounth==10||mounth==12)         
{           
if(day>31)           
{             
day=1;             
mounth++;             
if(mounth>12)             
{               
year++;               
mounth=1;             
}           
}         
}         
else if(mounth==2)         
{           
if(year%400==0)           
{             
if(day>29)             
{               
day=1;               
mounth++;             
}           
}           
else if((year%4==0)&&(year%100!=0))           
{             
if(day>29)             
{              
day=1;               
mounth++;             
}           
}           
else           
{             
if(day>28)             
{               
day=1;               
mounth++;             
}           
}         
}         
else         
{           
if(day>30)           
{             
day=1;             
mounth++;           
}         
}       
}     
}   
}    

display.clearDisplay(); 
delay(1000); 
Serial.print(day);   
Serial.print("/");   
Serial.print(mounth);   
Serial.print("/");   
Serial.print(year);   
Serial.println();      

display.setCursor(0,0);   
display.print("date ");   
display.print(day);   
display.print("/");   
display.print(mounth);   
display.print("/");   
display.print(year);

 
display.display();
Serial.print(hour);   
Serial.print(":");   
Serial.print(minute);   
Serial.print(":");   
Serial.print(second);   
Serial.print("\n");   
Serial.println();      

display.setCursor(0,10);   
display.print("hour ");   
display.print(hour);   
display.print(":");   
display.print(minute);   
display.print(":");   
display.print(second); 
display.display();
char tecla;
tecla = Serial.read();
if(tecla=='1'){
digitalWrite(2,LOW);
}
if(tecla=='2'){
  digitalWrite(2, HIGH);
}

}
Рейтинг автора
5
Материал подготовил
Максим Иванов
Наш эксперт
Написано статей
129
Ссылка на основную публикацию
Похожие публикации