Руководство по освоению Arduino - 2012. Руководство по освоению Arduino
Скачать 1.4 Mb.
|
#include Servo myservo; // создание объекта “серво” для контроля сервопривода int pos = 0; // переменная для хранения позиции серво void setup() { myservo.attach(9); // назначает вывод 9 как управляющий для объекта серво } void loop() { for(pos = 0; pos < 180; pos += 1)// перемещается от 0° до 180 с шагом в 1 myservo.write(pos); //команда сервоприводу //перейти в позицию с переменной 'pos' delay(15); // задержка 15мс for the servo to reach the position } for(pos = 180; pos>=1; pos-=1) // перемещается от 180° до 0° { myservo.write(pos); //команда сервоприводу //перейти в позицию с переменной 'pos' delay(15); // задержка 15мс для достижения заданной позиции } } ° ° Если сервопривод двигается рывками Если сервопривод дергается и светодиод питания на Arduino мигает, возможно мощность источника питания недостаточна. Попробуйте использовать питание от внешнего источника, а не от USB. К ОД не надо набирать вручную, он находится по адресу: Е СТЬ ЕЩЕ ВОПРОСЫ ? 16 CIRC-05 .:Еще 8 светодиодов (сдвиговый регистр 74HC595):. Провод Микросхема сдвигового регистра 74HC595 x1 Резистор 560 Oм Зеленый-синий-коричневый x8 х 2 контактный разъем x4 Карточка задания CIRC-05 x1 Красный светодиод x8 светодиод резистор (560 Ом ) общий вывод (ground) (-) кон- такт 4 0 1 2 3 4 5 6 7 data clock latch +5В gnd 74HC595 Выемка в форме полумесяца должна быть вверху .:скачать:. карточку задания .: :. видео сборки http://ardx.org/BBLS05 посмотреть http://ardx.org/VIDE05 Описание задания: Компоненты: в Интернете: У СТРОЙСТВО : Схема Пришло время познакомиться с микросхемами. Внешний вид микросхемы может быть очень обманчивым. Например, микросхема контроллера на плате Arduino и микросхема сдвигового регистра выглядят очень похоже, хотя по сути очень сильно отличаются. Цена микроконтроллера ATMega составляет несколько долларов, в то время как цена сдвигового регистра 74HC595 — несколько центов. Освоение сдвигового регистра - хорошее начало, и если Вы разберетесь как им управлять и как работать с документацией (http://ardx.org/74HC595), то Вам уже будет не страшен мир микросхем. Сдвиговый регистр (также называется преобразователем последовательного интерфейса в параллельный) дает Вам 8 дополнительных цифровых выходов (для управления светодиодами или чем-то подобным) используя только три порта Arduino. Также эти регистры можно соединять последовательно, что позволяет организовать практически неограниченное число выходов, при использовании тех же трех портов Arduino. Для использования сдвигового регистра необходимо записать в него значение через последовательный интерфейс и затем выдать его на выход через параллельный интерфейс. Последовательный интерфейс представляет собой два входа: вход данных и вход тактов. Для передачи байта данных через такой интерфейс необходимо поочередно устанавливать на входе сдвигового регистра уровни, соответствующие значениям битов байта и посылать импульс на тактовый вход. После того как весь байт проходит в сдвиговый регистр, подается команда выдать этот байт через параллельный интерфейс. Более подробная документация содержится по адресу: http://ardx.org/SHIF. кон- такт 3 кон- такт 2 17 CIRC-05 Подробности, где купить детали к проекту, где задать вопросы: http://ardx.org/CIRC05 его можно загрузить с http://ardx.org/CODE05 ( ) скопируйте текст и вставьте его в новое окно Arduino Sketch Не работает? (3 проблемы и их решения) Усовершенствуем устройство Работает неправильно? Скорее всего, перепутаны какие-то провода. Внимательно проверьте подключение. Индикатор питания Arduino не горит Возможно вы вставили микросхему сдвигового регистра наоборот. Если Вы быстро отключите питание и переустановите микросхему — ничего не должно испортиться. Не получилось? Напишите нам письмо с описанием проблемы. Постараемся помочь так быстро, насколько возможно. help@oomlout.com Определение разъемов последовательность 74HC595 //74HC595 использует протокол SPI */ //у которого 3 разъема: int data = 2; void updateLEDs(int value){ int clock = 3; int latch = 4; void setup() digitalWrite(latch, LOW); //функция выполняется один раз //сигнал защелки установлен на LOW { pinMode(data, OUTPUT); shiftOut(data, clock, MSBFIRST, value); pinMode(clock, OUTPUT); //выдает 8 бит в сдвиговый регистр pinMode(latch, OUTPUT); } void loop() digitalWrite(latch, HIGH); // функция выполняется бесконечно //открывает защелку - выводит информацию { } int delayTime = 100; //задержка между обновлениями светодиодов -----полная программа в электронной версии------ for(int i = 0; i < 256; i++){ updateLEDs(i); delay(delayTime); } } /* * updateLEDs() - посылает состояния светодиодов в виде значений переменной на К ОД не надо набирать вручную, Е СТЬ ЕЩЕ ВОПРОСЫ ? Усложним задачу: оперировать с отдельными битами в байте. Подробное Arduino может делать сложные вещи относительно описание двоичных операций находится по адресу легко. Выдача данных через последовательный http://ardx.org/BITW. интерфейс - одна из таких задач. Тем не менее эту Отредактируйте текст программы следующим образом: int delayTime = 100; задачу возможно решить и более сложным образом (на //время задержки в мс между циклами Ваш выбор). Попробуйте изменить текст программы for(int i = 0; i < 8; i++){ changeLED(i,ON); следующим образом: delay(delayTime); updateLEDs(i); замените на updateLEDslong(i); }for(int i = 0; i < 8; i++){ Загрузите программу в контроллер и Вы убедитесь, что changeLED(i,OFF); delay(delayTime); ничего не изменилось. Посмотрите на текст функции } updateLEDslong(i); и Вы увидите, что передача Загрузите программу в Arduino. Светодиоды должны данных идет по одному биту (подробнее на загораться один за другим и так же гаснуть. http://ardx.org/SPI). Дополнительные эффекты: Независимое управление светодиодами: Вы можете скопировать подпрограмму эффектов из Попробуем управлять светодиодами как в задании программы CIRC02 и заменить команду CIRC02. Состояние всех восьми светодиодов хранится digitalWrite(led,state) на changeLED(led,state). при помощи одного байта (8 бит). Arduino может легко Arduino контакт 9 общий вывод (ground) (-) пьезо- элемент 18 CIRC-06 .:Музыка (пьезоэлемент):. Провод Пьезоэлемент x1 х 2 контактный разъем x4 Карточка задания CIRC-06 x1 .:скачать:. карточку задания .: :. видео сборки http://ardx.org/BBLS06 посмотреть http://ardx.org/VIDE06 The Internet Схема Описание задания: Компоненты: в Интернете: У СТРОЙСТВО : До сих пор мы управляли светом, движением и электронами. Давайте попробуем управлять звуком. Звук, как известно, аналоговое явление. Возможно ли создавать звуки при помощи цифрового Arduino? Возможно, благодаря относительно высокой скорости работы микроконтроллера. Пьезоэлемент щелкает каждый раз, когда на него подается электрический импульс. Если посылать эти импульсы с определенной частотой (например 440 раз в секунду для воспроизведения ноты Ля), то щелчки превратятся в музыкальный тон. Давайте поэкспериментируем и заставим Arduino сыграть какую-нибудь мелодию. 19 CIRC-06 Подробности, где купить детали к проекту, где задать вопросы: http://ardx.org/CIRC06 Не работает? (3 проблемы и их решения) Усовершенствуем устройство его можно загрузить с ( ) http://ardx.org/CODE06 скопируйте текст и вставьте его в новое окно Arduino Sketch Не возможно думать, пока играет мелодия Просто отключите пьезоэлемент от макетной платы, подумайте, затем подключите его обратно. Нет звука Благодаря форме и размерам пьезоэлемента легко промахнуться мимо правильных контактов на макетной плате. Проверьте расположение пьезоэлемента. Изменение скорости: Написание собственной мелодии: Для изменения скорости воспроизведения мелодии Программа играет 'Twinkle Twinkle Little Star’, но мелодию необходимо редактировать строку легко изменить. Каждая мелодия определяется одной переменной (число нот - int length ) и двумя массивами. int tempo = 300; ---> Один массив, notes[] задает последовательность нот, int tempo = (новое значение) другой, beats[] — длительность их звучания. Например: Для замедления темпа необходимо увеличивать это Twinkle Twinkle Little Star число, для ускорения темпа — уменьшать. int length = 15; Подстройка нот: char notes[] = {"ccggaagffeeddc "}; Если Вам кажется, что какие-либо ноты звучат int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, фальшиво, вы можете их скорректировать. Для этого 1, 1, 2, 4 }; необходимо редактировать соответствующую Happy Birthday (first line) переменную в массиве tones[]. int length = 13; char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', char notes[] = {"ccdcfeccdcgf "}; 'b', 'C' }; int beats[] = {1,1,1,1,1,2,1,1,1,1,1,2,4}; int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 }; Устали от этой мелодии? Программа готова, поэтому Вам надо лишь заменить ноты на другие. /* Мелодия * (cleft) 2005 D. Cuartielles for K3 digitalWrite(speakerPin, * LOW); * В этом примере мы проигрываем мелодию с помощью delayMicroseconds(tone); * пьезоэлемента. Он посылает ШИМ-сигнал соответствующей } * частоты, в результате генерируется музыкальный тон. } * Вычисление требуемой задержки осуществляется с помощью * следующей формулы: void playNote(char note, int duration) { * char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' }; * timeHigh = period / 2 = 1 / (2 * toneFrequency) int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 * }; * задержки задаются следующей таблицей: // проигрывать тональность соответствующую названию ноты * for (int i = 0; i < 8; i++) { * нота частота (period) timeHigh if (names[i] == note) { * c 261 Hz 3830 1915 playTone(tones[i], duration); * d 294 Hz 3400 1700 } * e 329 Hz 3038 1519 } * f 349 Hz 2864 1432 } * g 392 Hz 2550 1275 * a 440 Hz 2272 1136 void setup() { * b 493 Hz 2028 1014 pinMode(speakerPin, OUTPUT); * C 523 Hz 1912 956 } * * http://www.arduino.cc/en/Tutorial/Melody void loop() { */ for (int i = 0; i < length; i++) { if (notes[i] == ' ') { int speakerPin = 9; delay(beats[i] * tempo); // пауза int length = 15; // число нот } else { char notes[] = "ccggaagffeeddc "; // пробел представляет паузу playNote(notes[i], beats[i] * tempo); int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 }; } int tempo = 300; // пауза между нотами delay(tempo / 2); } void playTone(int tone, int duration) { } for (long i = 0; i < duration * 1000L; i += tone * 2) { digitalWrite(speakerPin, HIGH); delayMicroseconds(tone); К ОД не обязательно набирать вручную, Е СТЬ ЕЩЕ ВОПРОСЫ ? 20 CIRC-07 .:Нажатие на кнопку (кнопки):. Провод Резистор Зеленый-синий- коричневый x1 560 Oм х 2 контактный разъем x4 Красный светодиод x1 Резистор 10 kOм коричневый-черный -оранжевый x2 Arduino контакт 13 светодиод резистор (560Ом) общий вывод (ground) (-) контакт 2 кнопка +5 volts Arduino резистор (10kОм) .:скачать:. карточку задания .: :. видео сборки http://ardx.org/BBLS07 посмотреть http://ardx.org/VIDE07 Схема Описание задания: Компоненты: У СТРОЙСТВО : в Интернете: До этого момента мы рассматривали различные варианты управления. Настало время научить Arduino слышать, смотреть и чувствовать. Начнем с простой кнопки. Подключить кнопку очень просто. Необходим только один компонент, подтягивающий резистор. Он необходим потому, что Arduino получает информацию не так как мы. Он не чувствует нажата кнопка или нет, вместо этого он контролирует значение напряжения на своем входе. Нажатие на кнопку приводит к обнулению напряжения (LOW) на входе, когда кнопка отжата, напряжение становится высоким (HIGH). Резистор необходим, чтобы на входе Arduino уверенно формировалась логическая единица когда кнопка отжата. Обратите внимание: в первом примере используется только одна кнопка. Кнопка x2 Карточка задания CIRC-07 x1 контакт 3 |