Серия Учебных пособий по Arduino. Глава №1

Добро пожаловать в первую главу.
 

Я надеюсь, что вы получили большое удовольствие от Ваших новых навыков работы с Arduino и книги Массимо Баннзи "Приступая к работе с Ардуино". Есть много интересных примеров, чтобы завершить этот раздел: глава четвёртая и пятая этой книги, содержит важную информацию об электричестве. Мы рассмотрим новую команду, и два скетча, что позволит сэкономить вам время и много памяти скетча. Вот что мы сделаем: рассмотрим широтно-импульсную модуляцию, генерацию случайных чисел, получим входные данные с аналоговых устройств, выполним рассчёты с помощью Arduino, и наконец, завершим проект упражнением, чтобы проверить ваши новые знания.
Прежде всего, давайте перейдём на страницы с 38 до конца четвертой главы. Здесь содержатся отличные указания, как бороться с отключениями и отказами, что является жизненно важным для дальнейшей работы.

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

​​

digitalWrite(2, HIGH);   // включить светодиод на контакте 2
delay(del);              // выполнить задержку длительностью "del"
digitalWrite(2, LOW);    // вsключить светодиод на контакте 2
digitalWrite(3, HIGH);   // включить светодиод на контакте 3
delay(del);              // задержка
digitalWrite(3, LOW);    // выключить светодиод
digitalWrite(4, HIGH);   // включить светодиод на контакте 2
delay(del);              // задержка
digitalWrite(4, LOW);    // выключить светодиод
digitalWrite(5, HIGH);   // включить светодиод на контакте 2
delay(del);              // задержка
digitalWrite(5, LOW);    // выключить светодиод
digitalWrite(6, HIGH);   // включить светодиод на контакте 2
delay(del);              // задержка
digitalWrite(6, LOW);    // выключить светодиод
digitalWrite(7, HIGH);   // включить светодиод на контакте 2
delay(del);              // задержка
digitalWrite(7, LOW);    // выключить светодиод
digitalWrite(8, HIGH);   // включить светодиод на контакте 2
delay(del);              // задержка
digitalWrite(8, LOW);    // выключить светодиод
digitalWrite(9, HIGH);   // включить светодиод на контакте 2
delay(del);              // задержка
digitalWrite(9, LOW);    // выключить светодиод
 

Такой код выглядит громозским и трудоёмким! Однако есть способ проще и елегантнее, для этого мы используем новую команду. Цель этой команды, повторить, часть скетча несколько раз (конечно, это всегда целое число - вы не можете повторить цикл 3,141 раз!).

Ниже приведен очень простой пример:
 

/* упражнение 1.1 - использование команды 'for' для создания цикла */
 
int del=100; // устанавливаем значение переменной "del" равное 100 миллисекундам)
void setup()
{
  // инициализируем цифровые выводы со 2 по 9 как выходы
  for (int i = 2; i<=9 ; i++)
  {
    pinMode(i, OUTPUT);
  } // конец цикла
} // конец установки
void loop()
{
  for (int i = 2; i<=9; i++) // мигание светодиодами со 2 по 9
  {
    digitalWrite(i, HIGH);
    delay(del);
    digitalWrite(i, LOW);
  }
  for (int i = 8; i>=3; i--) // и в обратном порядке с 8 по 3
  {
    digitalWrite(i, HIGH);
    delay(del);
    digitalWrite(i, LOW);
  }
}
 

То, что происходит в этом скетче, заключается в следующем:

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

Так же вместо увеличения может происходить уменьшение переменной. В любом случае, если должно выполняться условие  i<= 9. Тогда цикл продолжается, если "i"> 9 он останавливается и скетч идет дальше.

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

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

Полезная информация не относящаяся к теме:

Предположим Вам нужно случайное число. Легко!

случайная (х) возвращает случайное целое число от 0 до х-1. Например, если вам нужно случайное число от 0 до 255, используйте случайный (256) . Однако, используя случайное () не является полностью случайным, необходимо инициализировать генератор случайных чисел в вашем Arduino чипе. Использование randomSeed (analogRead (0)), или другой открытый аналог контактный. Вы также можете указать диапазон, например случайное (10,20) будет производить случайное число от 10 до 19 лет (минимальный диапазона включительно, максимальная эксклюзив - именно поэтому диапазон 10 ~ 19.

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

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

Вам понадобится:

  • Ваш стандартный набор Arduino (компьютер, кабель, Arduino Uno или другой совместимый микроконтроллер)
  • Матовый, гамма светоизлучающий диод  с общим катодом
  • Резисторы 250 Ом 0,25 Вт. Для уменьшения тока, для защиты зеленого и синего раздела LED
  • Резистор 1 150 Ом 0,25 Вт. Для снижения тока красного раздела LED
  • макетная плата  и соединительные провода
  • камера (опционально) - документировать ваш успех!

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

rgbdata

Резисторы между выходными контактами ШИМ и анодами светодиода. См. схему системной платы на фото ниже:

example1point2small

А так же ниже представлен Вашему вниманию скетч:
 

/*
пример 1.2 - развлекаемся с ШИМ и RGB светодиодом
*/
int red = 11; //для удобства присваиваем переменным номера выводов ШИМ
int green = 9;
int blue = 10;
int i = 0; // для циклов
int j = 0;
void setup()
{
  pinMode(red, OUTPUT); // назначаем выводы 11,9 и 10 как выходы
  pinMode(green, OUTPUT);
  pinMode(blue, OUTPUT);
}
void loop()
{
  // сначала создаём цикл для каждого из основных цветов дважды
  for (j = 1; j < 6; j++)
  {  // цикл 5 раз
    for (i = 0; i < 255; i++)
    { // цикл от 0 до 254 для изменения яркости
      analogWrite(red, i);      // устанавливаем яркость светодиода
      delay(20); // задержка в 20 мс, так как analogWrite не срабатывает мгновенно
    }
    analogWrite(red,0);
    delay (20);
    for (i = 0; i < 255; i++)
    { // цикл от 0 до 254 для изменения яркости
      analogWrite(green, i);      // устанавливаем яркость светодиода
      delay(20); // задержка в 20 мс, так как analogWrite не срабатывает мгновенно
    }
    delay (20);
    analogWrite(green,0);
    for (i = 0; i < 255; i++)
    { // цикл от 0 до 254 для изменения яркости
      analogWrite(blue, i);      // устанавливаем яркость светодиода
      delay(20); // задержка в 20 мс, так как analogWrite не срабатывает мгновенно
    }
    delay (20);
    analogWrite(blue,0);
  }
  // безумный светодиод )))
  for (j = 1; j < 10000; j++)
  {
    analogWrite(red,random(255)); // устанавливаем яркость красного светодиода случайным образом
    delay (random(10,31));           // задержка длительность которой устанавливается случайным образом
    analogWrite(green,random(255));
    delay (random(10,31));
    analogWrite(blue,random(255));
    delay (random(10,31));
  }
}

На этом видео он в действии...

Разве это не весело? Надеюсь, вам понравилось, теперь ... мы переходим к аналоговым датчикам! Дочитайте книгу до конца стр. 69. Теперь нечто совсем другое. Пора узнать о новой команде: если ... еще. 

Чаще всего ваш эскиз нужно будет принять решение. Является включите? Или это от? Если переменная тел равна 8657309 Я пошлю это число к модулю GSM, чтобы набрать номер! Еще раз, с Arduino - это просто.

Пример: если значение температуры больше 100, выключите контакт 13, в противном случае включите его.

Вы также можете расширить это с еще, если ...

Пример: если значение температуры больше 100, выключите контакт 13, в противном случае, если значение влажности> 80, поверните на контакте 7.

С если ... еще заявлении у вас есть выбор из шести операторов:

  • == равно
  • > Больше
  • <Меньше
  • > = Больше или равно
  • <= Меньше или равно
  • ! = Не равно

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

Упражнение 1.1

Теперь мы хотим, чтобы собрать все вещи, извлеченные до сих пор и делают то, что имеет аналоговые входы, цифровые выходы, а также множество светодиодов ... вольтметр! Представьте себе гистограмму десять светодиодов, каждый из которых представляет собой диапазон напряжения. Диапазон вольтметра будет от 0 до 10 В постоянного тока - идеально подходит для тестирования батарей и клеток, прежде чем они отправиться в мусорную корзину.

Это звучит, как много работы (эскиз, не отбросив батареи), но это не тогда, когда вы разбить его на более мелкие задачи. Давайте думать об этом ...

Мы знаем, что analogRead () можно измерить между 0 и 5 вольт, и возвращать целое между 0 и 1023 по отношению к измерению. Да, но мы хотим измерить до 10 вольт. Легко - использовать делитель напряжения. Используйте два небольших резисторы равной ценности (например, 560 Ом 0,25 Вт).

Далее, как конвертировать, что analogRead () значение для представления напряжение мы относимся к светодиодом. Мы знаем, что он будет возвращать значение от 0 до 1023, в нашем случае, что относится к 0 ~ 10 вольт. Таким образом, каждый светодиод будет относиться к одной десятой максимального чтении. Таким образом, первый светодиод должны быть освещены, если analogRead ()возвращает от 0 до 102,3 (на самом деле 102, как она возвращается целые, а не реальные числа).Второй индикатор необходимо будет светиться, если analogRead () возвращает между 103 и 205. И так далее.

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

Вам понадобится:

  • Ваш стандартная настройка Arduino
  • десять светодиодов по вашему выбору. Стандартные них хорошо, или, возможно, смесь цветов?
  • 3 х 560 Ом 0,25 Вт резисторы. Один, чтобы уменьшить ток для защиты светодиодный индикатор в использовании, и два для делителя напряжения
  • 1 х 10 кОм 0,25 Вт резистор. Для использования с аналогового входа
  • макет и некоторые соединительный провод
  • камера (опционально) - документировать ваш успех!

Так вот наша диаграмма макета:

exer1p1

И вот он в реальной жизни:

ex1point1_small

 

... И боевик! Мы связаны с переменной выходной мощности для вольтметра ради демонстрации ...

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

  • положить переменный резистор в делителя напряжения. Тогда кормить известный источник, например, 5 В с регулятором LM7805, а затем настроить переменный резистор, пока не загорится 5 постоянно был на;
  • поставить еще один вольтметр (например мультиметр) на вход напряжения для измерения напряжения измеряемого нашей вольтметра; использовать Serial.begin и serial.println () функции (от стр. 69), чтобы отправить значение напряжения на экран. Настройте напряжение измеряемого пока вы не попали 1, 2, ... 10 - отметив последовательный выход. Тогда подставим эти значения в If ... Then дерева решений для светодиодов.

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

Вот скрепка, показывающий результаты второго варианта калибровки:

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

LEDborder

Получайте удовольствие и следите в  tronixstuff.com . Почему бы не последовать вещи на  твиттере , Google+ , подписаться на рассылку или RSS использованием ссылки на правой колонке, или присоединиться к нашей  группе Google  -., посвященный проектам и сопутствующих товаров на этом сайте  Зарегистрироваться  - это бесплатно, полезно друг с другом - и мы все можем узнать что-то.