Учительское сообщество «Arduino-робототехника»

Содержание

Скетч

p170_servo.ino
// управлять сервоприводами (англ. servo motor) самостоятельно
// не так то просто, но в стандартной библиотеке уже всё
// заготовлено, что делает задачу тривиальной
#include <Servo.h>
 
#define POT_MAX_ANGLE 270.0 // макс. угол поворота потенциометра
 
// объявляем объект типа Servo с именем myServo. Ранее мы
// использовали int, boolean, float, а теперь точно также
// используем тип Servo, предоставляемый библиотекой. В случае
// Serial мы использовали объект сразу же: он уже был создан
// для нас, но в случае с Servo, мы должны сделать это явно.
// Ведь в нашем проекте могут быть одновременно несколько
// приводов, и нам понадобится различать их по именам
Servo myServo;
 
void setup()
{
  // прикрепляем (англ. attach) нашу серву к 9-му пину. Явный
  // вызов pinMode не нужен: функция attach сделает всё за нас
  myServo.attach(9);
}
 
void loop()
{
  int val = analogRead(A0);
  // на основе сигнала понимаем реальный угол поворота движка.
  // Используем вещественные числа в расчётах, но полученный
  // результат округляем обратно до целого числа
  int angle = int(val  1024.0 * POT_MAX_ANGLE);
  // обычная серва не сможет повторить угол потенциометра на
  // всём диапазоне углов. Она умеет вставать в углы от 0° до
  // 180°. Ограничиваем угол соответствующе
  angle = constrain(angle, , 180);
  // и, наконец, подаём серве команду встать в указанный угол
  myServo.write(angle);
}

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

Возможности платы EasyVR — огромны. Мы показали лишь самый простой пример
использования этого модуля. При этом было задействовано едва ли 30%
возможностей. Помимо распознавания голоса на английском языке модуль способен:

  1. Распознавать команды на некоторых других языках (Немецкий, Французский, Итальянский, Испанский, Корейский и Японский). Это даёт возможность строить устройства для обучения произношению иностранных слов на всех перечисленных языках.
  2. Воспользовавшись режимом «speaker-dependent можно собирать кодовые замки, отпираемые только по вашему голосу.
  3. Устройство также умеет распознавать коды тонового набора. Это даёт возможность разрабатывать исполнительные устройства, принимающие команды по проводной телефонной линии.

Исходный код

gamePong.ino

// библиотека для работы с композитным видео выходом
#include

// создаём объект TV класса TVout
TVout TV;

// максимальное количесво очков
#define MAX_SCORE 7
// длина ракеток
#define PADDLE_HEIGHT 10
// невидимые боковые грани рекакетки
// для отбивания в крайних точках ракетки
#define PADDLE_OFFSET 2

// пины подключения джойстиков каждого игрока
#define PLAYER_LEFT_PIN A5
#define PLAYER_RIGHT_PIN A0

// переменные для хранения размеров экрана
int hres, vres;
// координаты шара
int ballX, ballY;
// направление шара
int ballDX = 1;
int ballDY = 1;
// очки игроков
int playerScoreLeft = ;
int playerScoreRight = ;
int leftPaddleY = ;
int rightPaddleY = ;

// состояния системы
enum State
{
RESET_GAME,
NEXT_LEVEL,
PLAY_GAME,
STATE_MISS,
};

// объявляем переменную state
State state;

bool missed = ;

void setup()
{

// инициализируем коммуникацию с телевизиром
TV.begin(NTSC, 136, 96);
// ждём 1 секунду
delay(1000);
// считываем размеры экрана
hres = TV.hres();
vres = TV.vres();
// сбрасываем игру
state = RESET_GAME;

}

void loop()
{
switch (state) {
case RESET_GAME
// очищаем экран
TV.clearScreen();
// выбираем шрифт «4×6»
TV.selectFont(font4x6);
// печатем на экране слово «Амперка»
TV.print(55, , «Amperka»);
delay(1000);
// выбираем шрифт «8×8»
TV.selectFont(font8x8);
// печатем на экране название игры «Arduino Pong»»
TV.print(20, 30, «Arduino Pong»);
delay(1000);
// на старт, внимание, вперёд
for (int i = 3; i != ; i— ) {
TV.print(hres 2, 60, i);
TV.tone(1000, 300);
delay(1000);
}
TV.tone(2000, 300);
// выбираем шрифт «4×6»
TV.selectFont(font4x6);
// очищаем экран
TV.clearScreen();
// обнуляем счёт обоих игроков
playerScoreLeft = ;
playerScoreRight = ;
// переходим на следующий уровень
state = NEXT_LEVEL;
break;
case NEXT_LEVEL
// сброс шарика и ракеток
resetBallAndPaddles();
// рисуем игровое поле на экране
drawBox();
// выводим очки игроков на экране
drawScores();
// рисуем игровые ракетки
drawPaddles();
// переходим в состояние игры
state = PLAY_GAME;
break;
case PLAY_GAME
// если мяч достиг верхеней / нижней границицы поля
if (ballY == vres || ballY == ) {
ballDY *= -1;
}
// если мяч приближается к правой стороне
if (ballX >= hres — 2) {
// если мяч отбился правой ракеткой
if (ballY > rightPaddleY — PADDLE_OFFSET &&
ballY ) {
ballDX = -1;
}
}
// если мяч достиг правой стены
if (ballX == hres — 1) {
missed = true;
state = STATE_MISS;
playerScoreLeft++;
break;
}

// если мяч приближается к правой стороне
if (ballX leftPaddleY — PADDLE_OFFSET &&
ballY

Скетч

p190_serial_brightness.ino
#define LED_PIN 9
// для работы с текстом существуют объекты-строки (англ. string)
String message;
 
void setup()
{
  pinMode(LED_PIN, OUTPUT);
  Serial.begin(9600);
}
 
void loop()
{
  // передаваемые с компьютера данные поставляются байт за
  // байтом, в виде отдельных символов (англ. character). Нам
  // нужно последовательно их обрабатывать пока (англ. while)
  // в порту доступны (англ. available) новые данные
  while (Serial.available()) {  
    // считываем (англ. read) пришедший символ в переменную
    char incomingChar = Serial.read();
    // не стоит путать целые числа и символы. Они соотносятся
    // друг с другом по таблице, называемой кодировкой. Например
    // '0' — это 48, '9' — 57, 'A' — 65, 'B' — 66 и т.п. Символы
    // в программе записываются в одинарных кавычках
    if (incomingChar >= '0' && incomingChar <= '9') {
      // если пришёл символ-цифра, добавляем его к сообщению
      message += incomingChar;
    } else if (incomingChar == '\n') {
      // если пришёл символ новой строки, т.е. enter, переводим
      // накопленное сообщение в целое число (англ. to integer).
      // Так последовательность символов '1', '2', '3' станет
      // числом 123. Результат выводим на светодиод
      analogWrite(LED_PIN, message.toInt());
      // обнуляем накопленное сообщение, чтобы начать всё заново
      message = "";
    }
  }
  // посылайте сообщения-числа с компьютера через Serial Monitor
}

Скетч

p120_button_cowboys.ino
#define BUZZER_PIN   12  // пин с пищалкой
#define PLAYER_COUNT 2   // количество игроков-ковбоев
// вместо перечисления всех пинов по-одному, мы объявляем пару
// списков: один с номерами пинов с кнопками, другой — со
// светодиодами. Списки также называют массивами (англ. array)
int buttonPinsPLAYER_COUNT = {3, 13};
int ledPinsPLAYER_COUNT = {9, 11};
 
void setup()
{
  pinMode(BUZZER_PIN, OUTPUT);
  for (int player = ; player < PLAYER_COUNT; ++player) {
    // при помощи квадратных скобок получают значение в массиве
    // под указанным в них номером. Нумерация начинается с нуля
    pinMode(ledPinsplayer, OUTPUT);
    pinMode(buttonPinsplayer, INPUT_PULLUP);
  }
}
 
void loop()
{
  // даём сигнал «пли!», выждав случайное время от 2 до 7 сек
  delay(random(2000, 7000));
  tone(BUZZER_PIN, 3000, 250); // 3 килогерца, 250 миллисекунд
 
  for (int player = ; ; player = (player+1) % PLAYER_COUNT) {
    // если игрок номер «player» нажал кнопку...
    if (!digitalRead(buttonPinsplayer)) {
      // ...включаем его светодиод и сигнал победы на 1 сек
      digitalWrite(ledPinsplayer, HIGH);
      tone(BUZZER_PIN, 4000, 1000);
      delay(1000);
      digitalWrite(ledPinsplayer, LOW);
      break; // Есть победитель! Выходим (англ. break) из цикла
    }
  }
}

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

  1. Несмотря на золочение, контакты сенсора влажности со временем корродируют. Быстрее всего корродирование происходит при подключённом питании. Срок жизни сенсора можно значительно увеличить, если подключить питание к нему через силовой ключ. Когда надо получить данные — включаем питание сенсора, снимаем показания и тут же выключаем питание.
  2. Если оставить наш ирригатор работающим на длительный срок без присмотра, вода в резервуаре может закончиться. При работе без воды помпа быстро выходит из строя. Решением проблемы может быть автоматическое определение опустошения резервуара. Сенсор подбирается исходя из типа резервуара. Если он не глубок, то подойдёт ещё один датчик влажности. Когда же высоты его не хватает, можно воспользоваться УЗ-дальномером, сделать поплавок с датчиком наклона или просто опустить на дно два провода.
  3. Устройство, работающее от батареек, будет значительно безопасней питающегося от сети. Идеальным вариантом было бы питание ирригатора от батареек. Но Arduino Uno, как известно, даже в режиме сна потребляет более 10 мА. Выходом может являться использование Arduino Mini, способный в режиме сна снижать потребляемый ток до сотен мкА.
  4. Существует много правил полива домашних растений, как, например: не стоит поливать зимой вечером. Можно добавить сенсоров света или часы реального времени и скорректировать программу так, чтобы она старалась поливать в нужное время.

А ещё можно собрать автополив на Slot Shield — инструкция по сборке и прошивка.

Алгоритм

  • Сразу после подачи питания проверяем есть ли связь с GPRS устройством.Если связи нет, повторяем запрос снова и ждём подтверждения связи.
  • Проверяем память сим-карты на наличие новых непрочитанных сообщений.Если их нет, повторяем запрос снова и снова.
  • Читаем сообщение и проверяем содержимое его текста:
    • Если включаем розетку и отчитываемся о включении обратным смс.
    • Если выключаем розетку и отчитываемся о выключении обратным смс.
    • Если отправляем обратное смс о состоянии розетки.
    • Если текст не распознан, отправляем обратное смс об ошибке распознавания команды.
  • Удаляем сообщение из памяти сим-карты

Как собрать?

  1. Возьмите платформу Iskra Neo и нижнюю панель кубa (7×7), соедините её с помощью винтов и гаек, так чтобы гайки располагались между панелью и платформой.
  2. Вставьте сим-карту в GPRS Shield и установите его сверху на платформу Iskra Neo.
  3. Боковые панели куба (7×7) соедините с нижней панелью (7×7). Установите Relay Shield сверху на GPRS Shield.
  4. Заднюю панель куба (7×3) закрепите между левой и правой панелями внизу, напротив разъёмов USB и внешнего питания платформы Iskra Neo, заранее отделив бокорезами секции, мешающие ей устойчиво зафиксироваться.
  5. Теперь возьмите заднюю панель куба (7×2) и установите её между левой и правой панелями в верхней части. Затем возьмите панель крестиков (1×6) и установите между задними панелями (7×3) и (7×2), заранее откусив секцию напротив используемого реле.
  6. Настало время что-нибудь разобрать. Возьмите импульсный блок питания на 5 вольт, аккуратно с помощью отвёртки разберите его и достаньте плату преобразователя.
  7. Припаяйте к выходом преобразователя 5 вольт два провода папа-папа: красный к питанию, а чёрный к земле. На вход оставьте провода, которые уже были припаяны. Надёжно изолируйте преобразователь с помощью изоленты и закрепите его, используя стяжки, к верхней панели куба (7×7).
  8. Теперь возьмите клеммник, откусите от него 4 пары разъёмов и закрепите их к верхней панели куба (7×7) рядом с преобразователем напряжения на 5 вольт. Подключите входные проводники преобразователя в клеммник.
  9. Возьмите сетевой фильтр и разрежьте его провод пополам. Откусите от него с любой стороны часть провода длиной около 10 см, и используйте многожильные провода для коммуникации клемника и реле. Возьмите провод сетевого фильтра со стороны вилки и скоммутируйте его со входом преобразователя через клеммник. Провод с розетками подключите в два оставшихся разъёма на клеммнике. Так же через клеммник один из проводов от вилки удлинителя скоммутируйте с одним из проводов розетки.
  10. Скоммутируйте вторую пару проводов сетевого фильтра через клеммник и реле в режиме нормально разомкнутый: один провод на контакт реле , а второй на контакт реле . В итоге должна получиться такая схема. Из которой видно, что при включении вилки в 220 вольт напряжение идёт через клеммник на преобразователь, а на розетки через клеммник и реле. То есть розетки включаться только тогда, когда на управляющем входе реле будет высокий уровень.
  11. Установите, электроникой внутрь, верхнюю панель куба (7×7) на боковые панели. Возьмите переднюю панель куба (6×7) и соедините её с нижней, левой и правой панелями, заранее откусив бокорезами секции, мешающие выводу антенны. В заключение прикрутите антенну в SMA-разъём.

Задания для самостоятельного решения

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

  1. Создайте секундомер, который будет отсчитывать время, прошедшее с начала работы Arduino и выводить секунды и сотые секунд на экран.
  2. Совместите отсчет времени и измерение напряжения. Отобразите все данные на дисплее. Отправляйте их раз в 10 секунд на компьютер.

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

← Пантограф | Оглавление | Светильник, управляемый по USB →

Компоненты и их описания

Arduino Uno

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

Ардуино Уно

Датчик влажности почвы

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

Датчик влажности почвы

Этот датчик может выполнять свою работу в цифровом и аналоговом режимах. В нашем проекте используется датчик в цифровом режиме.
На модуле датчика есть потенциометр. С помощью этого потенциометра устанавливается пороговое значение. Также на модуле установлен компаратор. Компаратор сравнивает данные выхода датчика с пороговым значением и после этого даёт нам выходной сигнал через цифровой вывод. Когда значение датчика больше чем пороговое, цифровой выход передаёт 5 вольт (HIGH), земля сухая. В противном случае, когда данные датчика будут меньше чем пороговые, на цифровой вывод передаётся 0 вольт (LOW), земля влажная.

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

Фоторезистор

Фоторезистор (LDR) — это светочувствительное устройство, которое используются для определения интенсивности освещения. Значение сопротивления LDR зависит от освещённости. Чем больше света, тем меньше сопротивление. Совместно с резистором, фоторезистор образует делитель напряжения. Резистор в нашем случае взяли 10кОм.

Делитель напряжения

Подключив выход делителя Uin к аналоговому входу Ардуино, мы сможем считывать напряжения на выходе делителя. Напряжение на выходе будет меняться в зависимости от сопротивления фоторезистора. Минимальное напряжение соответствует темноте, максимальное – максимальной освещённости.

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

Релейный модуль

Реле представляет собой переключатель с электромеханическим или электрическим приводом.

Релейный модуль

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

Схема реле

В этом проекте используется 12 вольтовый водяной насос. Arduino Uno не может управлять напрямую насосом, поскольку максимальное напряжение на выводах Ардуино 5 вольт. Здесь нам приходит на помощь релейный модуль.

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

Водяной насос

В проекте используем 12-и вольтовый погружной насос с 18-ваттным двигателем. Он может поднимать воду до 1,7 метра.

Водяной насос

Этот насос можно эксплуатировать только тогда, когда он полностью погружен в воду. Это налагает некие обязательства по контролю уровня воды в ёмкости. Если водяной насос будет работать без воды, он просто-напросто сгорит.

Макетная плата

Макетная плата представляет собой соединительную плату, используемую для создания прототипов проектов электроники, без пайки.

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

  • Массив состоит из элементов одного типа, в нашем случае .
  • Объявить массив можно следующими способами:
int firstArray6; // 6 целых чисел с неопределёнными начальными значениями
int pwmPins = {3, 5, 6, 9, 10, 11}; // 6 целых чисел, длина вычисляется автоматом
boolean buttonState3 = {false, true, false}; // можно использовать элементы любого типа
  • Когда мы объявляем массив с указанием количества его элементов n, это число всегда на 1 больше, чем номер последнего элемента (n-1), т.к. индекс первого элемента — 0.
  • Считать или записать значение элемента массива можно, обратившись к нему по индексу, например или , где — переменная, такая как счетчик цикла
  • В переменных типа можно хранить значения до 2 147 483 647. в этом случае нам будет недостаточно, потому что 65 535 миллисекунд пройдут чуть больше чем за минуту!
  • Функция возвращает целое псевдослучайное число в интервале . Для драматичности каждая игра начинается с паузы случайной длины.
  • Благодаря массивам в этом эксперименте мы настраиваем порты, считываем кнопки и включаем светодиоды в циклах со счетчиком, который используется как индекс элемента.
  • Мы используем цикл без условия его завершения, поэтому пока мы явно того не потребуем, цикл будет крутиться до бесконечности.
  • Мы использовали выражение для счётчика цикла, чтобы не только увеличивать его на единицу каждый раз, но и обнулять при достижении последнего игрока.
  • Инструкция прекращает работу цикла и выполнение программы продолжается с инструкции после его конца.

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

  • Процедура выполняется один раз при запуске микроконтроллера. Обычно она используется для конфигурации портов микроконтроллера и других настроек
  • После выполнения запускается процедура , которая выполняется в бесконечном цикле. Именно этим мы пользуемся в данном примере, чтобы маячок мигал постоянно
  • Процедуры и должны присутствовать в любой программе (скетче), даже если вам не нужно ничего выполнять в них — пусть они будут пустые, просто не пишите ничего между фигурными скобками. Например:
void setup()
{
}

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

Для этого удобно после каждой открывающей скобки увеличивать отступ на каждой новой строке на один символ табуляции (клавиша Tab)

Обращайте внимание на в концах строк. Не стирайте их там, где они есть, и не добавляйте лишних

Вскоре вы будете понимать, где они нужны, а где нет.

Функция не возвращает никакого значения и принимает два параметра:

— номер цифрового порта, на который мы отправляем сигнал

— значение, которое мы отправляем на порт. Для цифровых портов значением может быть (высокое, единица) или (низкое, ноль)

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

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

Как собрать

  1. Установите Troyka Shield на плату Arduino Uno.
  2. Приклейте макетную плату на Troyka Shield.
  3. Вставьте в макетную плату два резистора на и и скоммутируйте их следующим образом:
    1. Резистор соедините проводами «папа-папа» с цифровым пином Arduino.
    2. Резистор — с цифровым пином Arduino.
    3. Соедините ножки резисторов резисторов между собой.
  4. Возьмите RCA-разъём и подключите его центральный пин к точке соединения резисторов и . Внешний пин подключите к земле. Через этот разъём будем выводить видеосигнал.
  5. Возьмите второй RCA-разъём и подключите его к пину Arduino и к земле. Этот разъём будет передавать аудиосигнал.
  6. Подключите два потенциометра (Troyka-модуль) к Troyka Shield стандартными трёхпроводными шлейфами к аналоговым пинам и .должна получится такая схема:
  7. Для безопасности и красоты спрячьте управляющую электронику в корпус:
    1. Потенциометры упакуйте в #структор и подключите через герметичные разъёмы.
    2. Аналогично подключите кнопку старта игры. Используйте для этого пин .
    3. Разъёмы аудио/видео и питание устройства разместите на противоположной панели корпуса.

Консоль готова. Подключите её соединительным кабелем 2×RCA «папа-папа» (тюльпаны) к телевизору, берите друга и наслаждайтесь игрой.

Аrduino nano распиновка

Аrduino nano распиновка — в этой статье хочу уделить немного внимания аппаратной основе плат семейства Arduino Nano. Вариации аппаратного исполнения я описал под фото.

Распиновка Arduino Nano.

Питание

Arduino Nano может быть запитан через кабель mini(micro)-USB, от внешнего источника питания с нестабилизированным напряжением 6-20 В (через вывод 30, подавать на этот вывод больше 12 В настоятельно не рекомендуется) либо со стабилизированным напряжением 5В (через вывод 27). Устройство автоматически выбирает источник питания с наибольшим напряжением.

Напряжение на микросхему FTDI FT232RL подается только в случае питания Arduino Nano через USB. Поэтому при питании устройства от других внешних источников (не USB), выход 3.3 В (формируемый микросхемой FTDI) будет неактивен, в результате чего светодиоды RX и TX могут мерцать при наличии высокого уровня сигнала на выводах 0 и 1.

Входы и выходы

Каждый из 20 (0-19, на схеме аrduino nano распиновка помещены в сиреневые параллелограммы, на той же схеме в серых параллелограммах указаны выводы микроконтроллера) цифровых выводов Arduino Nano может работать в качестве входа или выхода. Рабочее напряжение выводов — 5В. Максимальный ток, который может отдавать один вывод, составляет 40 мА, но нагружать выходы более, чем на 20 мА не рекомендуется. При этом суммарная нагрузка по всем выводам не должна превышать 200 мА. Все выводы сопряжены с внутренними подтягивающими резисторами (по умолчанию отключенными) номиналом 20-50 кОм. Помимо основных, некоторые выводы Arduino Nano могут выполнять дополнительные функции:

Последовательный интерфейс:

Последовательный интерфейс: выводы 0 (RX) и 1 (TX). Используются для получения (RX) и передачи (TX) данных по последовательному интерфейсу. Эти выводы соединены с соответствующими выводами микросхемы-преобразователя USB-UART от FTDI.

Внешние прерывания: выводы 2 и 3. Данные выводы могут быть сконфигурированы в качестве источников прерываний, возникающих при различных условиях: при низком уровне сигнала, по фронту, по спаду или при изменении сигнала. Для получения дополнительной информации см. функцию attachInterrupt().

ШИМ: выводы 3, 5, 6, 9, 10 и 11. С помощью функции analogWrite() могут выводить 8-битные аналоговые значения в виде ШИМ-сигнала.

Интерфейс SPI: выводы 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Данные выводы позволяют осуществлять связь по интерфейсу SPI. В устройстве реализована аппаратная поддержка SPI.

Светодиод: вывод 13. Встроенный светодиод, подсоединенный к цифровому выводу 13. При отправке значения HIGH светодиод включается, при отправке LOW — выключается.

I2С: выводы 4 (SDA) и 5 (SCL). С использованием библиотеки Wire (документация на веб-сайте Wiring) данные выводы могут осуществлять связь по интерфейсу I2C (TWI).

Помимо перечисленных на плате существует еще несколько выводов:

AREF. Опорное напряжение для аналоговых входов. Может задействоваться функцией analogReference().

Reset. Формирование низкого уровня (LOW) на этом выводе приведет к перезагрузке микроконтроллера. Обычно этот вывод служит для функционирования кнопки сброса на платах расширения.

Аналоговые входы A0-А7: входы с 10-битным аналого-цифровым преобразователем (АЦП). Напряжение поданное на аналоговый вход, обычно от 0 до 5 вольт будет преобразовано в значение от 0 до 1023, это 1024 шага с разрешением 0.0049 Вольт. Источник опорного напряжения может быть изменен.

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

Схема соединений разъёмов J1 и J2.

Схема соединений микроконтроллера. В качестве МК могут быть применены ATMega 328P или ATMega 168P.

Схема соединений преобразователя USB-UART.

Есть версии плат с микросхемами CH340G(более капризные), в оригинальной версии стоит FT232RL. В базовой версии устанавливается разъём mini-USB, но попадаются версии и с более удобным разъёмом micro-USB.

Соединения цепей питания и разъёма ICSP. Есть версии плат с номинальным напряжением питания 5 В или 3,3 В.

Предыдущая запись Активная концертная акустика

Следующая запись Прибой Э014С

Документация

Стандартный JavaScript

  • Встроенные функции и константы — константы и функции
  • Array, Boolean, Function, Number, Object, String — примитивы
  • ArrayBuffer — типизированые массивы, ArrayBuffer, DataView, ArrayBufferView
  • Error, , , , — ошибки
  • Date — работа с датами и временем
  • JSON — кодирование и декодирование JSON
  • Math — математические функции

Классы и объекты, уникальные для Espruino и Iskra JS

  • E — утилитарные функции Espruino
  • Pin — работа с портами ввода-вывода (пинами)
  • File — чтение и запись файлов
  • SPI — работа с интерфейсом SPI
  • I2C — работа с интерфейсом TWI/I²C
  • Serial — работа с интерфейсом UART
  • OneWire — работа с шиной 1-Wire

Встроенные библиотеки Espruino и Iskra JS

  • crypto — работа с криптографией
  • Flash — прямые чтение и запись флеш-памяти контроллера
  • fs — работы с файловой системой карт памяти

Подгружаемые библиотеки

  • @amperka/accelerometer — драйвер акселерометра
  • @amperka/analog-line-sensor — драйвер аналогового сенсора пересечения линии
  • @amperka/animation — плавное изменение параметров
  • @amperka/barometer — драйвер барометра
  • @amperka/bluetooth — драйвер bluetooth-модуля
  • @amperka/button — драйвер модуля-кнопки и других кнопок
  • @amperka/buzzer — драйвер модуля-зуммера
  • @amperka/card-reader — расширение библиотеки fs для работы с SD картами
  • @amperka/digital-line-sensor — драйвер цифрового сенсора пересечения линии
  • @amperka/dweetio — клиент для работы с графиками в dweet.io
  • @amperka/gas-sensor — драйвер датчиков газа
  • @amperka/gpio-expander — драйвер GPIO expander
  • @amperka/gprs-shield — драйвер GPRS-модуля
  • @amperka/hysteresis — фиксация пересечения пороговых значений
  • @amperka/ifttt-webhooks — клиент для компонента webhooks сервиса ifttt.com
  • @amperka/ir-receiver — драйвер модуля инфракрасного приёмника
  • @amperka/led — драйвер модуля-светодиода и других светодиодов
  • @amperka/led-matrix — драйвер светодиодной матрицы 8×8
  • @amperka/led-strip — драйвер светодиодной ленты
  • @amperka/light-sensor — драйвер модуля сенсора освещённости
  • @amperka/magnetometer — драйвер магнитометра (компаса)
  • @amperka/motor — драйвер для контроллера двигателей
  • @amperka/multiservo — драйвер для контроллера сервоприводов
  • @amperka/nfc — драйвер RFID/NFC сканера
  • @amperka/pot — драйвер модуля-потенциометра
  • @amperka/pid — ПИД-регулятор
  • @amperka/power-control — управление транзистором
  • @amperka/proximity — драйвер датчика приближения и освещённости
  • @amperka/quaddisplay — драйвер для работы с четырёхразрядным индикатором (v1)
  • @amperka/quaddisplay2 — драйвер для работы с четырёхразрядным индикатором (v2)
  • @amperka/ringtone — проигрывание мелодий в формате Nokia RTTTL
  • @amperka/relay — драйвер для работы с реле
  • @amperka/robot-2wd — драйвер двухколёсного робота
  • @amperka/rs-485 — драйвер для работы с модулей RS-485
  • @amperka/rtc — драйвер для работы с часами реального времени
  • @amperka/servo — драйвер хобби-сервомоторов
  • @amperka/stepper — драйвер шагового двигателя
  • @amperka/telegram — телеграм-бот
  • @amperka/thermometer — драйвер для модуля аналогового линейного термометра
  • @amperka/timer — периодически повторяющиеся и отложенные действия
  • @amperka/ultrasonic — драйвер для ультразвукового дальномера HC-SR04
  • @amperka/usb-keyboard — эмуляция HID-устройства USB-клавиатуры
  • @amperka/water-flow — драйвер датчика потока воды
  • @amperka/water-level — драйвер датчика уровня воды
  • @amperka/wifi — драйвер модуля Wi-Fi

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

Вы также можете создать свою библиотеку и подключить её к Espruino Web IDE.

Программная эмуляция

Платформа Arduino Nano Every с микроконтроллером ATmega4809 поддерживает программную эмуляцию для полной совместимости с платой предшественника Arduino Nano с микроконтроллером ATmega328.

  • Включение совместимости:
    Инструменты
    Registaers Emulation
    ATMEGA328
  • Отключение совместимости:
    Инструменты
    Registaers Emulation
    None (ATMEGA4809)

Эмуляция будет полезна, только если одновременно выполнены следующие пункты:

  1. Ваш проект собран на базовой плате Arduino Nano.
  2. Вы решили перейти с платы Arduino Nano на плату Arduino Nano Every.
  3. В коде прошивки использованы не базовые функции языка C++, а именно регистры микроконтроллера ATmega328.
  4. Вам лень менять код.

Во всех остальных случаях рекомендуем не включать эмуляцию.

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

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