Главная страница

Руководство по освоению Arduino - 2012. Руководство по освоению Arduino


Скачать 1.4 Mb.
НазваниеРуководство по освоению Arduino
АнкорРуководство по освоению Arduino - 2012.pdf
Дата28.05.2017
Размер1.4 Mb.
Формат файлаpdf
Имя файлаРуководство по освоению Arduino - 2012.pdf
ТипРуководство
#8187
страница3 из 4
1   2   3   4


*
* Включаем и выключаем светодиод нажатием кнопки.
* http://www.arduino.cc/en/Tutorial/Button
*/
int ledPin = 13; // задаем номер выхода светодиода int inputPin = 2; // задаем номер входа, подключенный к кнопке int val = 0; // переменная для хранения состояния кнопки void setup() {
pinMode(ledPin, OUTPUT);
// инициализируем контакт, подключенный к светодиоду, как выход pinMode(inputPin, INPUT);
//инициализируем контакт, подключенный к кнопке, как вход
}
void loop(){
val = digitalRead(inputPin); // считываем значения с входа кнопки if (val == HIGH) { // проверяем нажата ли кнопка digitalWrite(ledPin, LOW); // выключение светодиода
} else {
digitalWrite(ledPin, HIGH); // включение светодиода
}
}
Подробности, где купить детали к проекту, где задать вопросы:
http://ardx.org/CIRC07
Не работает?
(3 проблемы и их решения)
Усовершенствуем устройство
File > Examples > 2.Digital > Button
(
)
это пример с сайта arduino.cc, также там можно найти много отличных идей
К
ОД
не надо набирать вручную, он находится по адресу:
Светодиод
загорается плавно
(тухнет)
Не забудьте переключить светодиод с порта 13 на порт
9 для этого задания.
не
Светодиод не
включается
Кнопка квадратная, поэтому ее легко вставить повернув на 90 градусов. Проверьте правильность подключения кнопки.
Кнопка включения и кнопка выключения:
Плавное включение/выключение светодиода:
Первый пример может немного разочаровать (например, «мне
Давайте используем кнопку для управления аналоговыми не нужен Arduino, чтобы сделать это»), давайте его немного сигналами. Для этого необходимо переключить светодиод с порта усложним. Одна кнопка будет включать светодиод, а другая
13 на порт 9 и изменить программу:
выключать. Измените программу следующим образом:
int ledPin = 13; ----> int ledPin = 9;
int ledPin = 13;
Теперь измените функцию loop() следующим образом:
// выберите разъем для светодиода int value = 0;
int inputPin1 = 3; // кнопка 1
void loop(){
int inputPin2 = 2; // кнопка 2
if (digitalRead(inputPin1) == LOW) { value--; } void setup() {
else if (digitalRead(inputPin2) == LOW) { value++; }
pinMode(ledPin, OUTPUT);
value = constrain(value, 0, 255);
// светодиод задается как выход analogWrite(ledPin, value);
pinMode(inputPin1, INPUT); // кнопка 1 - вход delay(10);
pinMode(inputPin2, INPUT); // кнопка 2 - вход
}
}
Изменение скорости включения/выключения светодиода:
void loop(){
Если Вы хотите, чтобы светодиод загорался или гас быстрее, if (digitalRead(inputPin1) == LOW) { digitalWrite(ledPin, LOW); // выключение необходимо изменить только одну команду в программе:
светодиода delay(10); ----> delay(новое значение);
} else if (digitalRead(inputPin2) == LOW) { digitalWrite(ledPin, HIGH); // включение
Для ускорения эффекта необходимо уменьшать это число. Для светодиода }
замедления включения/выключения это число необходимо
}
увеличить.
Загрузите программу и проверьте работоспособность.
Разочарованы?
Не беспокойтесь, все устройства в этом наборе упрощены до предела, чтобы было проще понять основы.
Когда Вы разберетесь в основах — перед вами откроются неограниченные возможности.
Е
СТЬ
ЕЩЕ
ВОПРОСЫ
?

Компоненты:
.:Кручение
(потенциометры):.
Провод
х
2 контактный разъем
x4
Карточка задания
CIRC-08
x1
Зеленый светодиод
x1
Arduino контакт 13
свето- диод резистор
(560Ом)
(зеленый-синий- коричневый)
общий вывод
(ground) (-)
потенциометр
+5 Вольт
Arduino аналоговый вывод 2
.:скачать:.
карточку задания
.:
:.
видео сборки
http://ardx.org/BBLS08
посмотреть
http://ardx.org/VIDE08
Схема
Описание задания:
22
CIRC-08
У
СТРОЙСТВО
:
в Интернете:
Кроме цифровых портов Arduino оборудован шестью портами, которые могут быть аналоговыми входами. При помощи такого входа можно преобразовать напряжение в диапазоне 0...5В в цифровой код с диапазоном 0...1023
(соответствует разрешению 10 бит). Потенциометр
(переменный резистор) это очень полезное устройство, которое можно использовать совместно с таким входом. Когда потенциометр подключен крайними выводами к
«земле» и к +5В, на среднем выводе будет присутствовать некое напряжение из диапазона 0...5В, зависящее от положения движка потенциометра (угла поворота). В среднем положении значение на среднем выводе будет соответствовать 2.5В. Можно использовать измеренное значение напряжения на среднем выводе потенциометра в качестве переменной в программе.
Резистор
Зеленый-синий-
коричневый
x1
560 Oм
Потенциометр
10 кОм
x1

Не работает
Убедитесь, что не подключили средний вывод потенциометра к цифровому входу 2 вместо аналогового входа 2 (аналоговые входы находятся в одном ряду с разъемом питания).
/*
* Демонстрирует аналоговый вход, считывая значение аналогового сенсора со входа 0 и включая и
* выключая светодиод, подключенный к цифровому выводу 13. Время пребывания светодиода во
* включенном или выключенном состоянии зависит от значения, полученного при помощи analogRead().
* Created by David Cuartielles
* Modified 16 Jun 2009
* By Tom Igoe
* http://arduino.cc/en/Tutorial/AnalogInput
*/
int sensorPin = 0; // задаем номер входа для потенциометра int ledPin = 13; // задаем номер выхода светодиода int sensorValue = 0; // переменная для хранения значения, поступающего с сенсора void setup() {
pinMode(ledPin, OUTPUT); //инициализируем контакт, подключенный к светодиоду, как выход
}
void loop() {
sensorValue = analogRead(sensorPin);// считываем значения с сенсора digitalWrite(ledPin, HIGH); // включает светодиод delay(sensorValue); // задержка на в миллисекундах digitalWrite(ledPin, LOW); // выключает светодиод delay(sensorValue); // задержка на в миллисекундах
}
Подробности, где купить детали к проекту, где задать вопросы:
http://ardx.org/CIRC08
Потенциометр
периодически перестает
работать
Это возможно из-за плохого контакта выводов потенциометра. Попробуйте прижать потенциометр плотнее к макетной плате.
Все еще н
Попробуйте изменить полярность подключения потенциометра. Иногда это помогает.
е работает
23
CIRC-08
Не работает?
(3 проблемы и их решения)
Усовершенствуем устройство
File > Examples > 3.Analog > AnalogInput
(
)
это пример с сайта arduino.cc, также там можно найти много отличных идей
К
ОД
не надо набирать вручную, он находится по адресу:
Пороговый переключатель:
текст программы:
int ledPin = 13; ----> int ledPin = 9;
Иногда необходимо переключать что-то при достижении
Измените фунцию loop на:
измеренным параметром заданной величины (например void loop() {
отключать подачу воды в стиральную машину, при int value = analogRead(potPin) / 4;
analogWrite(ledPin, value);
достижении заданного уровня). Чтобы сделать это с
}
потенциометром необходимо изменить программу
Загрузите программу в микроконтроллер и убедитесь, что следующим образом:
яркость светодиода зависит от положения движка void loop() {
потенциометра. Мы разделили измеренное значение на 4, int threshold = 512;
if(analogRead(sensorPin) > threshold){ потому что яркость может изменяться только в пределах 0...255 digitalWrite(ledPin, HIGH);}
(8 бит) , тогда как функция analogRead() - в пределах else{ digitalWrite(ledPin, LOW);}
0...1024 (10 бит).
}
Светодиод будет включаться/выключаться при
Контроль сервопривода:
достижении среднего значения. Вы можете изменить
Это интересный пример, объединяющий два устройства в одном. чувствительность, путем редактирования параметра
Подключите сервопривод как в задании CIRC-04, откройте threshold.
пример File>Examples>Servo>Knob, измените строку:
int potpin = 0; ----> int potpin = 2;
Контроль яркости:
Загрузите программу в микроконтроллер и убедитесь, что
Можно управлять яркостью светодиода непосредственно положение потенциометра определяет положение при помощи потенциометра. Для этого необходимо сервопривода.
переключить светодиод с порта 13 на порт 9 и изменить
Е
СТЬ
ЕЩЕ
ВОПРОСЫ
?

24
CIRC-09
.:Свет
(фоторезисторы):.
Провод
Карточка задания
CIRC-09
x1
Arduino контакт 13
свето- диод резистор
(560 Ом)
общий вывод
(ground) (-)
+5 Вольт фото- резистор резистор
(10 кОм)
Arduino аналоговый вход 0
.:скачать:.
карточку задания
.:
:.
видео сборки
http://ardx.org/BBLS09
посмотреть
http://ardx.org/VIDE09
Схема
Описание задания:
Компоненты:
У
СТРОЙСТВО
:
в Интернете:
В предыдущем задании мы рассмотрели потенциометр, который может использоваться для ввода информации человеком. Существуют разнообразные сенсоры, позволяющие получить информацию об окружающей обстановке. Например фоторезистор может использоваться в качестве датчика освещенности. Принцип работы с Arduino не изменяется. Arduino не может непосредственно измерять сопротивление (можно измерять напряжение), поэтому фоторезистор включается как часть делителя напряжения (http://ardx.org/VODI).
Можно рассчитать точное значение напряжения на аналоговом входе, но для нашей задачи это не нужно. Будем измерять относительный уровень освещенности. Малые значения будут соответствовать яркому свету, большие значения — темноте.
Резистор 10 kOм
коричневый-черный
-оранжевый
x2
х
2 контактный
разъем
x4
Резистор
Зеленый-синий-
коричневый
x1
560 Oм
Фоторезистор
x1
Зеленый светодиод
x1

Подробности, где купить детали к проекту, где задать вопросы:
http://ardx.org/CIRC09
его можно загрузить с
(
)
http://ardx.org/CODE09
скопируйте текст и вставьте его в новое окно Arduino Sketch
/*
pinMode(ledPin, OUTPUT);
* Простая программа, изменяющая интенсивность
//
инициализируем //контакт, подключенный к
* свечения светодиода на основе количества
//светодиоду, как выход
* света, падающего на фоторезистор.
}
*/
/*
* функция loop() начнется после окончания функции
//PhotoResistor Pin
* setup и будет повторяться int lightPin = 0; //аналоговый вход к которому
*/
// присоединен фоторезистор.
void loop()
// фоторезистор не откалиброван по каким-либо
{
// единицам измерения, а просто выдает напряжение int lightLevel = analogRead(lightPin);
// пропорциональное уровню освещенности
//считываем уровень освещенности value (relative light)
lightLevel = map(lightLevel, 0, 900, 0, 255);
//LED Pin
//выставляем значение переменной в пределах 0-900
int ledPin = 9;
lightLevel = constrain(lightLevel, 0, 255);
//контакт к которому подключен светодиод.
//ограничиваем значение переменной промежутком 0-255
//мы контролируем яркость, поэтому используем analogWrite(ledPin, lightLevel);
//выводим значение переменной аналоговый выход ШИМ (Широтно-Импульсная
}
модуляция)
void setup()
{
25
CIRC-09
Не работает?
(3 проблемы и их решения)
Усовершенствуем устройство
К
ОД
не надо набирать вручную,
Все еще не работает?
Возможно в комнате, где Вы проводите эксперимент, слишком темно или наоборот слишком светло. Попробуйте включить/выключить свет — возможно это поможет.
Если у вас есть под рукой фонарь — попробуйте осветить им датчик.
Устройство не
реагирует на изменение
освещенности
Проверьте правильно ли подключен фоторезистор.
Светодиод остается
темным
Очень часто светодиод подключается с несоблюдением полярности.
Попробуйте повернуть его на
180 градусов.
Инвертирование выхода:
Сервопривод, управляемый светом:
Возможно Вы хотите, чтобы светодиод работал в
Давайте используем этот сенсор для управления инверсном режиме. Для этого отредактируйте сервоприводом. Подключите сервопривод к порту 9 (как в программу следующим образом:
CIRC-04). Загрузите в контроллер программу Knob File > analogWrite(ledPin, lightLevel); ----> analogWrite(ledPin, 255 - lightLevel);
Examples > Servo > Knob (пример из CIRC-08). Посмотрите
Ночник:
как будет работать сервопривод.
Вместо того, чтобы изменять яркость светодиода в
Вы наверняка обратили внимание, что сервопривод зависимости от освещенности, можно просто работает не во всем диапазоне. Это происходит потому, включать и выключать его. Замените текст подпрограммы loop() следующим образом:
что благодаря делителю напряжения мы работаем в void loop(){
меньшем диапазоне, чем 0...5В. Это можно int threshold = 300;
if(analogRead(lightPin) > threshold){
скорректировать при помощи команды val = digitalWrite(ledPin, HIGH);
map(val,0.1023,0,179); Подробное объяснение этой
}else{
digitalWrite(ledPin, LOW); функции можно найти по адресу
}
http://arduino.cc/en/Reference/Map.
}
Е
СТЬ
ЕЩЕ
ВОПРОСЫ
?

26
CIRC-10
.:Температура
(температурный датчик ТМР36):.
Что еще можно измерить при помощи Arduino? Температуру!
Для измерения температуры будем использовать достаточно сложную микросхему, спрятанную в корпусе аналогичном корпусу транзистора P2N222AG. Эта микросхема имеет три вывода: «земля», сигнал и питание +5В. Она выдает 10мВ/градус
Цельсия (чтобы измерять отрицательные температуры предусмотрен сдвиг напряжения на
500 мВ, т. е. 25°С = 750 мВ, 0°С = 500 мВ). Чтобы преобразовать значение напряжения в температуру будем использовать математические способности Arduino. Для отображения температуры используем отладочное окно интерфейса Arduino. Будем посылать значения температуры через последовательный порт для отображения на экране компьютера.
Это устройство использует монитор последовательного порта. Чтобы запустить его необходимо загрузить программу в Arduino, затем нажать кнопку похожую на прямоугольник с антенной:
Документация по датчику TMP36: http://ardx.org/TMP36
Провод
Температурный
датчик TMP36
x1
х
2 контактный
разъем
x4
Карточка задания
CIRC-10
x1
+5 Вольт
TMP36
(температурный датчик)
общий вывод
(ground) (-)
gnd
+5В
сигнал имеет маркировку
“TMP36”
.:скачать:.
карточку задания
.:
:.
видео сборки
http://ardx.org/BBLS10
посмотреть
http://ardx.org/VIDE10
Компоненты:
в Интернете:
Схема
Описание задания:
У
СТРОЙСТВО
:
Arduino аналоговый вход 0

27
CIRC-10
Подробности, где купить детали к проекту, где задать вопросы:
http://ardx.org/CIRC10
его можно загрузить с
(
)
http://ardx.org/CODE10
скопируйте текст и вставьте его в новое окно Arduino Sketch
Не работает?
(3 проблемы и их решения)
Усовершенствуем устройство
Отображаются
странные данные
Скорее всего это происходит из-за того, что Ваш монитор последовательного порта принимает данные не с той скоростью. Переключите скорость работы монитора на
«9600 baud».
Ничего не происходит
Эта программа не использует индикацию. Для того чтобы увидеть результат, Вам необходимо запустить монитор последовательного порта.
---->
Отображение напряжения:
Serial.print(temperature);
Это очень просто сделать, поскольку сенсор уже
Serial.println(" degrees centigrade");
выдает напряжение. Достаточно удалить строку
Изменения в первой строке означают, что следующий delete the line temperature = (temperature - .5) * 100; вывод данных будет осуществляться в ту же строку на
Отображение температуры в Фаренгейтах:
дисплее. Следующая строка выводит вспомогательную
Это тоже несложно, поскольку затрагивает только информацию и осуществляет переход на новую строку.
вычислительную часть. Чтобы перейти от градусов
Изменение скорости передачи:
Цельсия к градусам Фаренгейта необходимо
Если Вы собираетесь посылать большой объем использовать следующую формулу:
информации через последовательный порт, то имеет
( F = C * 1.8) + 32 ) смысл делать это так быстро, насколько возможно. В добавьте строку temperature = нашем примере мы передаем данные на скорости 9600
(((temperature - .5) * 100)*1.8) + 32; бод, однако возможно использовать намного большие перед строкой Serial.println(temperature);
скорости. Измените строку:
Serial.begin(9600); ----> Serial.begin(115200);
Более информативный вывод данных:
Давайте добавим сообщение к данным, посылаемым
Таким образом, скорость передачи увеличивается в 12 через последовательный порт. Вернитесь к раз. Не забудьте изменить скорость работы монитора исходной программе, затем замените:
последовательного порта.
Serial.println(temperature);
Значение
температуры не
изменяется
Прикоснитесь к сенсору пальцем, чтобы нагреть его.
Или используйте кусочек льда, чтобы охладить сенсор.
/* ---------------------------------------------
* | Экспериментальный набор Arduino |
* | пример программы для задания CIRC-10 |
temperature = (temperature - .5)
* | .: Температурный датчик :. |
* 100;
* ---------------------------------------------
//переводит полученное значение из 10мВ/градус в градусы
* Простая программа для вывода текущей температуры
(напряжение - 500мВ)x100
* на монитор последовательного порта
Serial.println(temperature); //выводим результат
//TMP36 Pin Variables delay(1000); //задержка 1 сек int temperaturePin = 0;
}
// задаем аналоговый вывод, к которому присоединен выход датчика TMP36. Разрешение - 10мВ/градус цельсия
/*
(смещение на 500мВ для отображения негативных
* getVoltage() - возвращает значение напряжения на температур)
аналоговом входе
*/
void setup()
float getVoltage(int pin){
{
return (analogRead(pin) * .004882814);
Serial.begin(9600);
//преобразует значение в цифровом диапазоне 0...1024 в
//открываем последовательное соединение. Для диапазон 0...5 мВ (каждое показание

5 милливольт)
отображения результата необходимо запустить монитор
}
последовательного порта (последняя кнопка под главным меню, выглядит как прямоугольник с антенной)
}
void loop() // бесконечный цикл
{
float temperature = getVoltage(temperaturePin);
/*получает значение напряжения с температурного датчика*/
1   2   3   4


написать администратору сайта