Изменить стиль страницы

5.8 Сложные сенсоры

Мы определим сложные сенсоры как такие, которые могут выдавать информацию, что требует больше чем просто функции digitalRead() или analogRead(). Обычно они представляют собой маленькую схему с небольшим микроконтроллером внутри, который предварительно обрабатывает информацию.

Некоторые из таких сложных сенсоров являются ульразвуковыми или инфракрасными датчиками расстояния, акселерометрами. Вы можете увидеть примеры на нашем сайте в разделе "Tutorials" (www.arduino.cc/en/Tutorial/HomePage).

Книга "Making Things Talk" (автор - Tom Igoe, издательство O'Reilly) подробно разъясняет принципы работы этих сенсоров, а также множества других.

Рис. 5-7. Схема двигателя вентилятора с Arduino

Знакомство с Arduino (перевод книги

Глава 6. Разговоры с облаками

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

6.1 Цифровой вывод

6.1.1 Цифровой вывод

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

6.1.2 Аналоговый вывод

Даёт возможность управлять яркостью светодиода, а не просто включать или выключаеть его. Мы даже можем контролировать с его помощью скорость электродвигателя.

6.1.3 Цифровой ввод

Позволяет нам читать состояние простых сенсоров, таких как кнопки или датчики наклона.

6.1.4 Аналоговый ввод

Мы можем читать сигналы с датчиков, которые постоянно посылают данные, а не просто "вкл/выкл", таких как потенциометр или датчик света.

6.1.5 Последовательная связь

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

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

Вот где во мне проявляется желание быть дизайнером. Мы создадим версию двадцать первого века классической лампы моего любимого итальянского дизайнера, Джо Коломбо. Объект, который мы будем создавать, называется "Атон" с 1964 года.

Рис. 6-1. Закончення лампа

Знакомство с Arduino (перевод книги

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

В терминах функциональности, мы хотим создать устройство, которое должно подключаться к интернету, получать текущий список статей в блоге Make blog (blog.makezine.com) и подсчитывать использованное количество слов "peace", "love" и "Arduino". С этими значениями мы будет создавать цвет и показывать его при помощи лампы. Лампа имеет кнопку для включения и выключения, а также датчик света для автоматического включения.

6.2 Планирование

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

Arduino - это простой компьютер с небольшой памятью, она не может легко обрабатывать большие файлы, и мы подключимся к RSS-ленте для получения понятного XML-файла, который требует больше оперативной памяти. Мы создадим промежуточный элемент (прокси) для упрощения XML с применением языка Processing.

Processing

Processing - это то, откуда появился Arduino. Мы любим этот язык и используем его как для обучения программирования начинающих, так и для создания прекрасного кода. Другое преимущество Processing - это то, что у него открытый код и он работает на всех основных платформах (Mac, Linux и Windows). Он также может создавать отдельные приложения, которые будут выполняться на этих платформах. Более того, сообщество Processing довольно оживлено и полезно, к тому-же вы можете найти тысячи уже написанных примеров программ.

Прокси сделает для нас следующая работу: скачает ленту RSS с сайта makezine.com и извлечёт все слова из полученного XML-файла. Затем, пройдя по файлу, он подсчитает количество слов "peace", "love" и "Arduino" в тексте. Исходя из полученных трёх чисел мы можем вычислить значение цвета, которое пошлём Arduino. Плата отправит обратно величину света, измеренную датчиком и покажет её на экране компьютера.

Со стороны аппаратного обеспечения, мы объединим пример с кнопкой, управлением светодиодом при помощи ШИМ (умноженное на три) и последовательную связь.

Поскольку Arduino - простое устройство, нам требуется закодировать цвет простым способом. Мы будем использовать стандартный способ, представленный в языке HTML: знак решётки # с шестью шестнадцатеричными цифрами после него.

Шестнадцатеричные цифры удобны потому, что каждое 8-ми битовое число сохраняется в двух битах; для десятичных чисел количество знаков меняется от одного до трёх. Предсказуемость делает код проще: ждём, пока не увидим решётку "#", затем считываем шесть знаков после неё в буфер (переменную для временного хранения данных). И, наконец, превращаем каждую группу из двух цифр в один байт, который будет соответствовать яркости одного из трёх светодиодов.

6.3 Программирование

Вы будете запускать два скетча: один скетч на языке Processing и один а языке Arduino. Вот код для Processing. Вы можете скачать его с www.makezine.com/getstartedarduino.

Пример 6-1. Часть кода для лампы с подключением к сети, вдохновлённые записью блоге Tod E. Kurt (todbot.com)

import processing.serial.*;

String feed = "http://blog.makezine.com/index.xml";

int interval = 10; // retrieve feed every 60 seconds;

int lastTime; // the last time we fetched the content

int love = 0;

int peace = 0;

int arduino = 0;

int light = 0; // light level measured by the lamp

Serial port;

color c;

String cs;

String buffer = ""; // Accumulates characters coming from Arduino

PFont font;

void setup() {

  size(640,480);

  frameRate(10);   // we don't need fast updates

  font = loadFont("HelveticaNeue-Bold-32.vlw");

  fill(255);

  textFont(font, 32);

  // IMPORTANT NOTE:

  // The first serial port retrieved by Serial.list()

  // should be your Arduino. If not, uncomment the next

  // line by deleting the // before it, and re-run the

  // sketch to see a list of serial ports. Then, change