void setup() {
pinMode(LED, OUTPUT); // LED is as an OUTPUT
// Note: Analogue pins are
// automatically set as inputs
}
void loop() {
val = analogRead(0); // read the value from
// the sensor
digitalWrite(13, HIGH); // turn the LED on
delay(val); // stop the program for
// some time
digitalWrite(13, LOW); // turn the LED off
delay(val); // stop the program for
// some time
}
Теперь попробуйте пример 5-4, но перед этим вам придётся изменить свою схему. Посмотрите на рис. 5-4 ещё раз и соедините светодиод с выводом 9. Так как у вас уже есть собранная схема, вам надо найти точку платы где светодиод, провод и резистор не будет соединён с фотодатчиком.
Пример 5-4. Установка яркости светодиода, определяемая данными на аналоговом входе.
#define LED 9 // the pin for the LED
int val = 0; // variable used to store the value
// coming from the sensor
void setup() {
pinMode(LED, OUTPUT); // LED is as an OUTPUT
// Note: Analogue pins are
// automatically set as inputs
}
void loop() {
val = analogRead(0); // read the value from
// the sensor
analogWrite(LED, val/4); // turn the LED on at
// the brightness set
// by the sensor
delay(10); // stop the program for
// some time
}
Примечание: мы указываем яркость, деля val на 4 из-за того, что analogRead() возвращает число до 1023, а analogWrite() принимает 255 максимум.
5.5 Попробуйте другие аналоговые датчики
Используя ту же схему что вы видели в предыдущем разделе, вы можете подсоединить множество других резистивных датчиков, которые работают более менее подобным образом. Например, вы можете подключить термистор (простое устройство, изменяющее своё сопротивление в зависимости от температуры). В схеме показано как изменение сопротивления изменяет напряжение в ней. Это напряжение может быть измерено Arduino.
Если вы работаете с термистором, будьте внимательны с правильным соотношением данных, которые вы прочитали и действительно измеренной температурой. Если вам надо точные значения, вам потребуется записать числа, считываемые с аналогового входа и сравнить их с настоящим термометром. После этого можно составить табличку и выработать способ калибровки аналоговых результатов и фактической температуры окружающей среды.
До сих пор мы использовали в качестве устройства вывода светодиод, но сейчас как нам прочесть действительные данные значений, полученный Arduino с датчика? Мы не можем сделать плату, мигающую кодом Морзе (ну, вообще-то можем, но для людей есть более простые способы чтения данных). Для этого мы может заставить Arduino общаться с компьютером по последовательному порту, который и будет описан в следующем разделе.
5.6 Последовательная связь
Как вы прочли в начале книги, у Arduino есть USB-подключение, используемое средой разработки для загрузки кода в процессор. Хорошая новость в том, что это подключение также может использоваться скетчами для отправки назад на компьютер данных или получения команд от него. Для этой цели мы изучим обьект serial (обьект - это набор свойств, которые обьединены вместе для удобства пишущих скетчи людей).
Этот объект содержит весь код, необходимый для отправки и получения данных. Сейчас мы используем предыдущую схему с фоторезистором и будем отправлять значения, которые прочли, на компьютер. Вставьте следующий код в новый скетч (его также можно скачать с www.makezine.com/getstartedarduino):
Пример 5-5. Отправка на компьютер данных, прочитанных с аналогового входа 0. После выгрузки скетча на плату нажмите кнопку "Serial Monitor" в IDE.
#define SENSOR 0 // select the input pin for the
// sensor resistor
int val = 0; // variable to store the value coming
// from the sensor
void setup() {
Serial.begin(9600); // open the serial port to send
// data back to the computer at
// 9600 bits per second
}
void loop() {
val = analogRead(SENSOR); // read the value from
// the sensor
Serial.println(val); // print the value to
// the serial port
delay(100); // wait 100ms between
// each send
}
После того, как вы выгрузите скетч в Arduino, нажмите кнопку "Serial Monitor" в Arduino IDE; в открывшемся вы увидите постоянно увеличивающийся список цифр. Теперь любая программа, способная работать с последовательным портом, может вести диалог с Arduino. Существует много языков программирования, которые позволяют писать программы, общающиеся с последовательным портом. Processing (www.processing.org) является отличным дополнением к Arduino из-за того что он, и Arduino IDE очень похожи.
5.7 Управление большими нагрузками (электродвигатели, лампы и тому подобное)
Каждый из выводов Arduino может быть использован для запитки устройств с током до 20 миллиампер - это очень маленькая величина тока, достаточная только для питания светодиода. Если вы попробуете управлять чем-нибудь другим, например, моторчиком, вывод немедленно перестанет работать, и, вероятно, сожжёт весь процессор. Для управления большими нагрузками, такими как электродвигатели или лампы накаливания нам требуется внешний компонент, который может включать и выключать другие компоненты и который управляется выводом Arduino. Одним из таких приборов является MOSFET-транзистор (МОП-транзистор) - не обращайте внимания на смешное название - это электронный выключатель, который может управляться подачей напряжения на один из его трёх выводов, каждый из которых называется затвором. Он подобен выключателю света в доме, когда движение руки для включения или выключения света заменено выводом Arduino, подающим напряжение на затвор такого транзистора.
Примечание: MOSFET означает "metal–oxide–semiconductor field-effect transistor" (металл-оксид-полупроводник (МОП) полевой транзистор). Это специальный вид транзистора, который может работать на принципе полевого эффекта. Это означает, что электричество будет протекать через частицу полупроводника (между выводами стока и истока) при прикладывании напряжения к выводу затвора. Так как затвор изолирован от остальных выводов плёнкой оксида металла, из Arduino в MOSFET ток не протекает, что позволяет создать простой интерфейс. Они идеальны для включения и выключения больших нагрузок с высокой частостой.
На рис. 5-7 видно как мы применили MOSFET IRF520 для включения и выключения маленького моторчика, присоединённого к вентилятору. Вы также должны заметить, что моторчик получает питание от разъёма 9 В на плате Arduino. Это ещё одно преимущество MOSFET: он позволяет управляет приборами, у которых питание осуществляется от других источников. Так как MOSFET подключён к выводу 9, мы может использовать команду analogWrite() для управления скоростью моторчика при помощи ШИМ.