Ардуино датчик давления: используем как переключатель для светодиода

Датчик давления Arduino: используем как переключатель

2 октября в 15:10

Уроки / Arduino, Датчики

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

Оглавление

  • Комплектующие
  • Схема соединения
  • Программирование
  • Тестирование

Комплектующие

Для осуществления проекта датчика давления с Ардуино нам пригодится набор деталей.

Можно использовать:

  • 1х — Датчик давления IEFSR
  • 1х — Cветодиод
  • 1х — Резистор 547 Ом
  • 1х — Резистор 10k
  • 5х — Провода
  • 1х — Arduino
  • 1х — Макетная плата

Как всё подключено вы можете посмотреть на фото выше. Подключите датчик давления к источнику питания 5В Arduino, затем подключите другой штырь к резистору 10к, а затем к земле (GND).

Подключите тот же контакт к A0.

Затем подключите другой резистор к одному из цифровых портов (в нашем случае использован 6-ой без особых причин). Соедините светодиод последовательно, а затем подключите его к земле (GND). Все основные соединения датчика давления и Ардуино настроены.

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

После настройки схемы откройте программу Arduino IDE на своем компьютере и убедитесь, что выбран правильный Arduino, а также COM-порт.

Вы можете скопировать или скачать код ниже.

Скачать arduino-datchik-davleenia.inoconst int pressurePin = A0; const int ledPin = 6; int pinState = 0; int pinCount = 0; void setup() { Serial.

begin(9600); pinMode(pressurePin, INPUT); pinMode(ledPin, OUTPUT); } void loop() { pinState = analogRead(pressurePin); if(pinState > 1) { pinCount = pinCount + 10; if(pinCount > 255) { pinCount = 0; } } else { pinCount = 0; } analogWrite(ledPin, pinCount); Serial.

println(pinState); Serial.println(pinCount); Serial.println(«ledPin » + pinCount); delay(200); }

Основная идея заключается в том, что Arduino будет настраивать контакты как OUTPUT и INPUT, а также использовать информацию, поступающую с пина A0, чтобы сообщить на выход 6, что делать.

К сожалению, этот урок не покажет вам, как сделать светодиод ярче относительно давления, но сделает светодиод ярче с течением времени, пока датчик нажат.

Тестирование

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

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

Источник: https://ArduinoPlus.ru/arduino-datchik-davlenia/

Использование Arduino для считывания датчика барометрического давления через SPI

В данном примере показано, как использовать библиотеку связи SPI (Serial Peripheral Interface, последовательный периферийный интерфейс) для чтения данных от датчика барометрического (атмосферного) давления SCP1000. Для более подробной информации об этой библиотеке смотрите статью «Библиотека SPI для Arduino»

Необходимые комплектующие

  • плата Arduino или Genuino;
  • плата с датчиком давления SCP1000;
  • перемычки.

Схема

Схема соединений подключения датчика атмосферного давления к плате Arduino UnoПринципиальная схема подключения датчика атмосферного давления к плате Arduino Uno

Барометрический датчик давления SCP1000 может считывать и давления воздуха, и температуру и сообщать о них через соединение SPI. Подробнее о регистрах управления SCP1000 смотрите в техническом описании.

Код программы

Код ниже начинается с установки регистров конфигурации SCP1000 в функции setup(). В основном цикле он устанавливает датчик в режим считывания в высоком разрешении, что означает, что датчик вернет 19-битное значение для показаний давления и 16 бит для температуры. Реальные показания в градусах Цельсия – это 16-разрядный результат, деленный на 20.

Затем программа считывает два байта температуры. Как только она получит температуру, то сразу считывает давление в двух частях. Сначала Arduino считывает самые старшие 3 бита, а затем младшие 16 бит.

Затем программа объединяет эти два значения в одно длинное целое с помощью побитового сдвига старших битов, а затем используем побитовое ИЛИ, чтобы объединить их с младшими 16-тью битами.

Реальное давление в паскалях – это 19-разрядный результат, деленный на 4.

/* Схема: Датчик SCP1000 подключен к выводам 6, 7, 10 — 13: DRDY: вывод 6 CSB: вывод 7 MOSI: вывод 11 MISO: вывод 12 SCK: вывод 13 */ // датчик взаимодействует через шину SPI, поэтому подключаем библиотеку: #include // Адреса регистров памяти датчика const int PRESSURE = 0x1F; //3 старших значащих бита давления const int PRESSURE_LSB = 0x20; //16 младших значащих бита давления const int TEMPERATURE = 0x21; //16 бит показаний температуры const byte READ = 0b11111100; // команда чтения SCP1000 const byte WRITE = 0b00000010; // команда записи SCP1000 // выводы, используемые для подключения датчика // остальные контролируются библиотекой SPI: const int dataReadyPin = 6; const int chipSelectPin = 7; void setup() { Serial.begin(9600); // запустить библиотеку SPI: SPI.begin(); // настроить выводы готовности данных и выбора чипа: pinMode(dataReadyPin, INPUT); pinMode(chipSelectPin, OUTPUT); // настроить SCP1000 на малошумящую конфигурацию: writeRegister(0x02, 0x2D); writeRegister(0x01, 0x03); writeRegister(0x03, 0x02); // дать датчику время для настройки: delay(100); } void loop() { // выбрать режим высокого разрешения writeRegister(0x03, 0x0A); // ничего не делать, пока на выводе готовности данных не появится лог.1: if (digitalRead(dataReadyPin) == HIGH) { // прочитать данные температуры int tempData = readRegister(0x21, 2); // преобразовать температуру в градусы Цельсия и отобразить ее: float realTemp = (float)tempData / 20.0; Serial.print(«Temp[C]=»); Serial.print(realTemp); // прочитать 3 старших бита данных давления: byte pressure_data_high = readRegister(0x1F, 1); pressure_data_high &= 0b00000111; // нам необходимы биты только с 2 по 0 // прочитать 16 младших битов данных давления: unsigned int pressure_data_low = readRegister(0x20, 2); // объединить две части в одно 19-разрядное число: long pressure = ((pressure_data_high

Источник: https://radioprog.ru/post/247

Arduino Урок 2 – Подключаем кнопку и светодиод Опубликовано HelioSun в 06.09.2017

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

Подключение кнопки

Сперва подключим кнопку к Arduino через любой доступный порт (pin). Можно использовать как аналоговый, так и цифровой порт. Для этого подадим на вход нашей кнопки 5 вольт, а выход соединим с портом Arduino, пусть это будет порт #2.

Так же, следует понимать, когда кнопка не нажата, связь между портами “5V” и “2” будет разомкнута. Из-за этого Arduino не сможет корректнто считывать информацию из порта “2”, так как этот pin будет висеть в воздухе. Решается эта проблема очень просто.

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

Таким образом, при нажатии на кнопку на порт “2” будет поступать 5 вольт напряжения, а когда не нажата порт будет соединён с землёй.

Добавляем светодиод

Давайте подключим светодиод который будет загораться при нажатии на нашу кнопку. Сделать это очень просто. Достаточно подключить анод светодиода (длинная ножка) в порт “13”. Далее в программе мы будем включать светодиод просто подавая 5 вольт на этот порт.

Катод светодиода (короткая ножка) подключаем на землю через разъём “GND”. Но не забываем про резистор, так как 5 вольт для одного светодиода слишком много и светодиод может перегореть.

Что бы правильно подобрать резистор с нужным нам сопротивлением можно воспользоваться специальной таблицей:

Цветовая характеристика светодиода Напряжение
Инфракрасный до 1.9 В
Красный от 1.6 до 2.03 В
Оранжевый от 2.03 до 2.1 В
Желтый от 2.1 до 2.2 В
Зелёный от 2.2 до 3.5 В
Синий от 2.5 до 3.7 В
Фиолетовый от 2.8 до 4 В
Ультрафиолетовый от 3.1 до 4.4 В
Белый от 3 до 3.7 В

Рассчитать необходимое сопротивление резистора можно по следующей формуле: 
R=(Uист-Uд)/Iд, где Uист – напряжение источника питания, – напряжение диода, – ток диода (обычный светодиод потребляет около 20 миллиампер).

Пишем программу

Наша схема готова, осталось написать программу. Запускаем Arduino IDE и вставляем следующий код:

const int buttonPin = 2; // номер порта нашей кнопки const int ledPin = 13; // номер порта светодиода void setup() { // устанавливаем порт светодиода на выход pinMode(ledPin, OUTPUT); // устанавливаем порт кнопки на вход pinMode(buttonPin, INPUT); } void loop() { // читаем состояние порта кнопки и записываем в переменную int buttonState = digitalRead(buttonPin); // делаем простую проверку нашей переменной, если на входе в порт кнопки присутствует напряжение — включаем светодиод, иначе — выключаем if (buttonState == HIGH) { // подаем 5 вольт на порт наешго светодиода digitalWrite(ledPin, HIGH); } else { // выключаем светодиод digitalWrite(ledPin, LOW); } }

Подключаем нашу Arduino и перепрошиваем её через меню «Скетч → Загрузка» или нажав на комбинацию Control+U. Дожидаемся сообщения «Загрузка завершена».

Проверка работы устройства

Если Вы сделали всё правильно то при нажатии на кнопку можно увидеть как зажигается светодиод. Если же кнопку отпустить светодиод выключится.

Обсудить статью на форуме

Источник: https://heliosun.com.ua/arduino-urok-2-podklyuchaem-knopku-i-svetodiod/

Измерение давления при помощи Arduino и датчика SPD005G

ПодробностиКатегория: ArduinoОпубликовано 11.08.2015 12:17Автор: AdminПросмотров: 8231

В данной статье будем измерять давление при помощи Arduino и датчика давления SPD005G.

Для измерения атмосферного давления используются датчики давления. В данной статье описан датчик давления SPD005G от Smartec. SPD означает Smart Pressure Device . Эти датчики собраны на основе кремния и пригодны как использования как в промышленности так и для использования в быту. Датчик представляет собой пластиковый корпус с специальным отверстием для измерения атмосферного давления.

Читайте также:  Syma x5uc: обзор квадрокоптер с камерой - arduino+

Датчик может работать в двух режимах:в режиме абсолютного измерения когда давление измеряется относительно ваккума, и в режиме относительного измерения — когда измерение осуществляется относительно атмосферного давления. Когда датчик работает в режиме абсолютного измерения, то измеряет ся перепад давления между измеряемым давлением и давлением ваккумной камеры, которая находится в самом датчике.

Датчик SPD005G используется в различных медицинских аппаратах, системах кондиционирования воздуха, и многих других устройствах требующих достаточного уровня точности.

В проекте используется символьный LCD дисплей. Про подключение дисплея к Arduino было сказано ранее.

Принципиальная схема датчика давления

Документация датчика spd005g и его технические характеристики.

Схема подключения датчика давления к Arduino

Датчик подключается к Arduino через специальный каскад собранным на операционном усилителе LM324. Выходной вывод каскада 12 подключается к выводу A0 arduino. Вывод измеренного значения с датчика давления выводится на символьный LCD дисплей 16×2.

Светодиод L2 можно исключить из схемы, он необхоим только лишь для сигнализации наличия напряжения. Переменое сопротивление R4 предназначено для регилировки контрасности дисплея. Передачи данных осуществляется по 4-м проводам подключенным к выводам DB4-DB7.

Питание LCD дисплея 16×2 осуществляется от источника в 5 Вольт.

Программа для Arduino

#include int sensor=A0; int dig_out; float millivolt; LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // sets the lcd interfacing pins void setup() { pinMode(sensor,INPUT); // sets A0 as input lcd.begin(16, 2); // initializes the lcd } void loop() { dig_out=analogRead(sensor); // reads the input voltage millivolt=(dig_out*4.882); // converts the reading to millivolt lcd.setCursor(0,0); lcd.print(«Pressure Sensor»); // prints «Pressure Sensor» lcd.setCursor(0,1); lcd.print(millivolt); // prints the input voltage lcd.setCursor(9,1); lcd.print(«mV»); // prints the»mV» notation delay(300); // 300 mS delay lcd.clear(); // clears screen }

Источник: http://www.radio-magic.ru/arduino-projects/282-arduino-i-datchik-davleniya

Arduino — GPIO, Кнопки и PWM | Логово Трунагола

Автор Trunagol, 7th Ноябрь, 2013

Всем привет это второй урок об Arduino. В первом уроке мы говорили об азах программирования Arduino. Сегодня мы будем говорить о GPIO у Arduino и PWM сигналах. Мы будем использовать кнопки и управлять яркостью светодиода с помощью PWM сигнала. Также мы будем использовать функции в среде программирования Arduino.

Для начала давайте попробуем управлять светодиодом с помощью кнопки.

Нам понадобятся:

  1. Резистор номиналом около 100-400 ом. Для ограничения тока, который идет через светодиод, чтобы не сжечь его.
  2. Резистор номиналом около 10 ком. Для подтягивания логических уровней на входе Arduino. Если его не ставить то наша кнопка будет работать очень нестабильно, т.к. на входе Arduino вместо полезного сигнала будут помехи.
  3. Светодиод АЛ307 или любой который вам понравиться. Собственно его мы и будем зажигать.
  4. Тактовая кнопка IT-1102 или любая другая. Будет использоваться для управления светодиодом.

Теперь настало время собрать простую схему, можно это сделать используя отладочную плату BreadBoard или при помощи паяльника и проводов.

Схема подключения светодиода и кнопки к Arduino

Светодиод подключен через токоограничительный резистор 200 ом к 10 выходу Arduino, номинал резистора можно поставить 200 ом — 500 ом, от этого будет меняться ток, идущий через светодиод и соответственно его яркость.

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

Необходимо также учесть что светодиод, это как никак диод, у него есть полярность!

Полярность светодиода

Если вы подключите светодиод неправильно, он не загорится, потому что ток через него не пойдет (он просто будет закрыт). Определить полярность светодиода легко, короткая нога светодиода это минус (т.е. ноль или GND), а длинная это +.

Кнопка подключена таким образом, что в момент нажатия она скоммутирует на вход №10 Arduino +5 вольт что соответствует логической единице цифрового входа Arduino. В момент когда кнопка не нажата наш резистор номиналом 10 ком, притянет вход Arduino к GND (т.е. к нулю) и на входе Arduino стабильно будет логический ноль.

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

Итак, настало время написать программу для Arduino. Для начала давайте будем держать включенным светодиод до тех пор, пока нажата кнопка. Конечно решить такую задачу очень легко без микроконтроллера, но ведь нам нужно с чего-то начать. Открываем среду программирования Arduino (как программировать Arduino подробно изложено в уроке №1) и начинаем писать код:

/*
Урок 2. GPIO, Кнопки и PWM у Arduino
Мигаем светодиодом.
Будем держать включенным светодиод до тех пор, пока нажата кнопка.
Этот демонстрационный код был скачан с сайта www.trunagol.ru
*/

int switchPin = 10; // Для удобства задаем имя «switchPin» для 10 вывода
int ledPin = 13; // Для удобства задаем имя «ledPin» для 13 вывода

void setup() // Блок «Setup» запускается только 1 раз при запуске Arduino, он нужен для инициализации.
{
pinMode(switchPin, INPUT); // Конфигурируем 10 вывод Arduino на вход. Т.к. мы будем считывать состояние кнопки.
pinMode(ledPin, OUTPUT); // Конфигурируем 13 вывод Arduino на выход. С помощью него мы будем включать светодиод.
}

void loop() // Блок «loop» это цикл, т.е.

код который работает раз за разом бесконечно
{
if (digitalRead(switchPin) == HIGH) // Если кнопка нажата, наша переменная switchPin будет иметь значение HIGH (логическую 1) и выполниться код на след.

строке
{
digitalWrite(ledPin, HIGH); // Зажигаем светодиод, выставив логическую 1 (уровень HIGH) на выходе 13
}
else // Если кнопка не нажата выполниться код идущий ниже.

{
digitalWrite(ledPin, LOW); // Выключаем светодиод
}
}

Ну что работает?! 🙂

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

Наш код для этих целей будет выглядеть  так:

/*
Урок 2. GPIO, Кнопки и PWM у Arduino
Включаем/выключаем светодиод.
Будем включать светодиод после нажатия кнопки и выключать после второго нажатия.
Этот демонстрационный код был скачан с сайта www.trunagol.ru
*/

int switchPin = 10; // Для удобства задаем имя «switchPin» для 10 вывода
int ledPin = 13; // Для удобства задаем имя «ledPin» для 13 вывода
boolean lastButton = LOW; // В этой переменной мы будем хранить состояние кнопки во время предыдущей обработки нашего цикла, а также установим его в ноль.

boolean ledOn = false; // В этой переменной мы будем хранить состояние светодиода, чтобы мы могли переключать его
void setup() // Блок «Setup» запускается только 1 раз при запуске Arduino, он нужен для инициализации.
{
pinMode(switchPin, INPUT); // Конфигурируем 10 вывод Arduino на вход. Т.к. мы будем считывать состояние кнопки.

pinMode(ledPin, OUTPUT); // Конфигурируем 13 вывод Arduino на выход. С помощью него мы будем включать светодиод.
}

void loop() // Блок «loop» это цикл, т.е.

код который работает раз за разом бесконечно
{
if (digitalRead(switchPin) == HIGH && lastButton == LOW) // Если кнопка нажата, и последнее состояние кнопки было «не нажата», тогда выполняем следующий код
{
ledOn = !ledOn; // Меняем значение ledOn на противоположное
lastButton = HIGH; // Меняем значение lastButton на логическую единицу
}
else
{
lastButton = digitalRead(switchPin); // Устанавливаем в переменную lastButton такое же значение как в переменной switchPin
}
digitalWrite(ledPin, ledOn); // Собственно эта строчка будет зажигать и гасить светодиод
}

Ну как работает?! Хмм… Странно.. Иногда у нас все срабатывает как ожидается, а иногда нет… Почему так могло произойти? Всё дело в эффекте «дребезга контактов»:

Дребезг контактов

Как вы видите на этой осциллограмме на самом деле наша кнопка срабатывает не идеально… И если мы с большой частотой опрашиваем кнопку, то в переходный момент мы можем считать как единицу так и ноль.

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

Чтобы избежать этого дребезга нам придется доработать программу и просто ввести задержку по времени:

/*
Урок 2. GPIO, Кнопки и PWM у Arduino
Включаем/выключаем светодиод.
Будем включать светодиод после нажатия кнопки и выключать после второго нажатия и устраняем дребезг кнопок.
Этот демонстрационный код был скачан с сайта www.trunagol.ru

*/

int switchPin = 10; // Для удобства задаем имя «switchPin» для 10 вывода
int ledPin = 13; // Для удобства задаем имя «ledPin» для 13 вывода
boolean lastButton = LOW; // В этой переменной мы будем хранить состояние кнопки во время предыдущей обработки нашего цикла, а также установим его в ноль.

boolean ledOn = false; // В этой переменной мы будем хранить состояние светодиода, чтобы мы могли переключать его
boolean currentButton = LOW; // Переменная для нашей функции debounce

void setup() // Блок «Setup» запускается только 1 раз при запуске Arduino, он нужен для инициализации.
{
pinMode(switchPin, INPUT); // Конфигурируем 10 вывод Arduino на вход. Т.к. мы будем считывать состояние кнопки.
pinMode(ledPin, OUTPUT); // Конфигурируем 13 вывод Arduino на выход. С помощью него мы будем включать светодиод.
}

boolean debounce(boolean last) //функция для устранения дребезга контактов кнопки, будет возвращать предыдущее её состояние
{
boolean current = digitalRead(switchPin); // Пишем в current текущее состояние кнопки
if (last != current) // Проверяем изменилось ли состояние кнопки
{
delay(5); // Если да, делаем задержку 5 миллисекунд, для того чтобы кнопка перестала «дребезжать»
current = digitalRead(switchPin); // Считываем значение кнопки после паузы, сейчас дребезг уже должен пройти
}
return current; // возвращаем стабильное значение кнопки
}

Читайте также:  Цифровой температурный датчик на основе arduino - arduino+

void loop() // Блок «loop» это цикл, т.е.

код который работает раз за разом бесконечно

{
currentButton = debounce(lastButton); // передаем в currentButton результат работы функции debounce с переданным в него состоянием кнопки
if (lastButton == LOW && currentButton == HIGH) // Проверяем была ли нажата кнопка
{
ledOn = !ledOn; // Меняем значение ledOn на противоположное
}
lastButton = currentButton; // Устанавливаем в переменную lastButton такое же значение как в переменной currentButton
digitalWrite(ledPin, ledOn); // Собственно эта строчка будет зажигать и гасить светодиод
}

Я думаю теперь у всех все заработало так, как и задумывалось 😉

Теперь настало время изменить нашу программу таким образом, чтобы после каждого нажатия кнопки менялась яркость светодиода, для этого мы будем использовать ШИМ сигнал или как его еще называют PWM. Если вы хотите узнать подробнее про ШИМ, можете почитать об этом в ВИКИ.

А для нас на текущий момент достаточно знать лишь то, что меняя логические значения 0 и 1 в определенной последовательности можно заставить светодиод светиться по разному, но сути он просто будет по разному мигать, но так как частота миганий высокая, глазу будет казаться что он просто меняет яркость.

Но к сожалению не все выходы Arduino поддерживают PWM, поддержка PWM обозначена значком ~ рядом с номером контакта на шелкографии Arduino. Одним из таких контактов является контакт №11, а текущий наш контакт №13 не поддерживает PWM, следовательно нам нужно изменить схему подключения следующим образом:

Схема подключения светодиода и кнопки к Arduino c PWM

А также внести изменения в программный код, а именно нужно изменить номер контакта и добавить использование ШИМ:

/*
Урок 2. GPIO, Кнопки и PWM у Arduino
Меняем яркость светодиода.
Будем менять яркость свечения светодиода после каждого нажатия кнопки.
Этот демонстрационный код был скачан с сайта www.trunagol.ru
*/

int switchPin = 10; // Для удобства задаем имя «switchPin» для 10 вывода
int ledPin = 11; // Для удобства задаем имя «ledPin» для 11 вывода
boolean lastButton = LOW; // В этой переменной мы будем хранить состояние кнопки во время предыдущей обработки нашего цикла, а также установим его в ноль.
int ledLevel = 0; // В этой переменной мы будем хранить яркость свечения светодиода, яркость может иметь значение от 0 до 255, в момент инициализации установим его в 0, чтобы светодиод не светился
boolean currentButton = LOW; // Переменная для нашей функции debounce

void setup() // Блок «Setup» запускается только 1 раз при запуске Arduino, он нужен для инициализации.
{
pinMode(switchPin, INPUT); // Конфигурируем 10 вывод Arduino на вход. Т.к. мы будем считывать состояние кнопки.
pinMode(ledPin, OUTPUT); // Конфигурируем 13 вывод Arduino на выход. С помощью него мы будем включать светодиод.
}

boolean debounce(boolean last) //функция для устранения дребезга контактов кнопки, будет возвращать предыдущее её состояние
{
boolean current = digitalRead(switchPin); // Пишем в current текущее состояние кнопки
if (last != current) // Проверяем изменилось ли состояние кнопки
{
delay(5); // Если да, делаем задержку 5 миллисекунд, для того чтобы кнопка перестала «дребезжать»
current = digitalRead(switchPin); // Считываем значение кнопки после паузы, сейчас дребезг уже должен пройти
}
return current; // возвращаем стабильное значение кнопки
}

void loop() // Блок «loop» это цикл, т.е.

код который работает раз за разом бесконечно
{
currentButton = debounce(lastButton); // передаем в currentButton результат работы функции debounce с переданным в него состоянием кнопки
if (lastButton == LOW && currentButton == HIGH) // Проверяем была ли нажата кнопка
{
ledLevel = ledLevel + 51; // Меняем значение яркости на 51
}
lastButton = currentButton; // Устанавливаем в переменную lastButton такое же значение как в переменной currentButton

if (ledLevel > 255) ledLevel = 0; // Ограничиваем макс. значение в 255
analogWrite(ledPin, ledLevel); // Собственно эта строчка будет зажигать светодиод с нужной яркостью
}

Надеюсь у вас все заработало. Это конец урока.

Вы можете задать вопросы и спросить совета в комментариях.

Код программ из урока для загрузки доступен здесь: Примеры из второго урока

Источник: http://trunagol.ru/elektronika/urok-2-gpio-knopki-i-pwm-u-arduino/

Использование датчика холла с arduino

В этой статье мы рассмотрим, как использовать модуль датчик холла совместно с Arduino. Датчик холла — это датчик, который меняет свой выходной потенциал (напряжение) в зависимости от присутствии или отсутствии магнитного поля.

Это означает, что выходной сигнал датчика Холла является функцией плотности магнитного поля вокруг него.

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

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

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

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

По виду они обычно выглядят как плата с 3 контактами: один контакт сигнал и другие 2 для питания датчика. Это существенно упрощает подключение модуля к любому микроконтроллеру или исполнительной схеме.

В сегодняшнем материале Elwo.ru покажет, как работает датчик холла, подключив его вместе со светодиодом к Arduino блоку. Arduino будет запрограммирован таким образом, что, когда магнит приближается к датчику холла — светодиод включается, а когда магнит удаляется — он гаснет.

Схема принципиальная

Схема для этого проекта проста, так как все, что нам нужно сделать, это подключить 3 контакта датчика холла и светодиод к платформе Arduino. Соедините компоненты, как показано на схеме.

Датчик Холла — Ардуино

  • VCC — 5V
  • GND — GND
  • SIG — D2

LED можно подсоединить сразу в Arduino с положительной ногой в pin 13 Arduino и другой ногой в земляной штырь без резистора, потому что arduino имеет внутренний резистор прикрепленный к pin 13.

Требуемые компоненты для схемы

Для построения этого проекта требуются следующие компоненты.

  • Датчик холла
  • Arduino Uno
  • LED
  • Магнит
  • Провода

Теперь можем перейти к коду для этого проекта.

Код прошивки МК

Код для этого проекта очень прост, так как все, что нужно сделать это проверить, ощущается ли магнитное поле, и если да — включается ли от него светодиод.

В функции настройки void мы объявляем pinmode для контактов Arduino, к которому подключены светодиод и датчик Холла.

Далее идет функция void loop, задача здесь как если бы надо было использовать кнопку для управления светодиодом с Arduino между ними. Читаем выход датчика холла и храним в переменной с именем state.

Полный код для этого проекта показан далее:

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

   Схемы на микроконтроллерах

Источник: http://elwo.ru/publ/skhemy_na_mikrokontrollerakh/ispolzovanie_datchika_kholla_s_arduino/9-1-0-1088

Урок 5. Первая программа. Функции управления вводом/выводом. Кнопка, светодиод

В этом уроке напишем первую программу, научимся считывать значение цифровых входов и устанавливать состояние выходов. Реализуем управление такими простыми элементами, как кнопка и светодиод.

Предыдущий урок     Список уроков     Cледующий урок

Первая программа должна управлять светодиодом с помощью кнопки:

  • при нажатой кнопке светодиод светится;
  • при отжатой кнопке светодиод не светится.

Подключение кнопки и светодиода к плате Ардуино.

Для связи с внешними элементами в контроллере Arduino UNO существуют 14 цифровых выводов. Каждый вывод может быть определен программой как вход или выход.

У цифрового выхода есть только два состояния высокое и низкое. Высокое состояние соответствует напряжению на выходе порядка 5 В, низкое состояние – 0 В. Выход допускает подключение нагрузки с током до 40 мА.

Когда вывод определен как вход, считав его состояние, можно определить уровень напряжения на входе. При напряжении близком к 5 В (реально более 3 В) будет считано высокое состояние, соответствующее константе HIGH. При напряжении близком к 0 (менее 1,5 В) будет считано низкое состояние, или константа LOW.

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

Светодиод подключается через резистор, ограничивающий ток. Вот типичная схема.

Резистор рассчитывается по формуле I = Uвыхода – Uпадения на светодиоде / R.

Uвыхода = 5 В, Uпадения на светодиоде можно принять равным 1,5 В (более точно указывается в справочнике). Получается, то в нашей схеме ток через светодиод задан на уровне 10 мА.

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

Читайте также:  Инженер-радиотехник - arduino+

Кнопку подключаем к любому другому выводу, например, 12. Аппаратная часть схемы подключения кнопки должна обеспечивать уровни напряжений 0 В при нажатой кнопке и 5 В при свободной. Это можно сделать простой схемой.

При отжатой кнопке резистор формирует на выводе 5 В, а при нажатой – вход замыкается на землю. Рекомендации по выбору резистора я напишу в заключительном уроке про кнопки. Сейчас предложу другой вариант.

Все выводы платы имеют внутри контроллера резисторы, подключенные к 5 В. Их можно программно включать или отключать от выводов. Сопротивление этих резисторов порядка 20-50 кОм.

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

В итоге схема подключения будет выглядеть так.

Кнопку можно припаять на проводах к разъему. Я установил ее на макетную плату без пайки. Купил специально для демонстрации уроков.

Функции управления вводом/выводом.

Для работы с цифровыми выводами в системе Ардуино есть 3 встроенные функции. Они позволяют установить режим вывода, считать или установить вывод в определенное состояние. Для определения состояния выводов в этих функциях используются константы HIGH и LOW, которые соответствуют высокому и низкому уровню сигнала.

pinMode(pin, mode)

Устанавливает режим вывода (вход или выход).

Аргументы: pin и mode.

  • pin – номер вывода;
  • mode – режим вывода.
 mode = INPUT вывод определен как вход, подтягивающий резистор отключен
 mode = INPUT_PULLUP вывод определен как вход, подтягивающий резистор подключен
 mode = OUTPUT вывод определен как выход

Функция не возвращает ничего.

digitalWrite(pin, value)

Устанавливает состояние выхода (высокое или низкое).

Аргументы pin и value:

  • pin – номер вывода;
  • value – состояние выхода.
 value = LOW устанавливает выход в низкое состояние
 value = HIGH устанавливает выход в высокое состояние

Функция не возвращает ничего.

digitalRead(pin)

Считывает состояние входа.

Аргументы:  pin — номер вывода.

Возвращает состояние входа:

 digitalRead(pin) = LOW  низкий уровень на входе
 digitalRead(pin) = HIGH  высокий уровень на входе

Программа управления светодиодом.

С учетом предыдущего урока теперь у нас есть вся необходимая информация для написания программы. Программа в Ардуино состоит из двух функций setup() и loop.

В setup() мы устанавливаем режимы выводов, а в loop() считываем состояние кнопки в переменную buttonState и передаем его на светодиод. По пути инвертируем, т.к.

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

/* Программа scetch_5_1 урока 5
   Зажигает светодиод (вывод 13) при нажатии кнопки (вывод 12) */
 
boolean buttonState;   // создаем глобальную переменную buttonState
   
 void setup() {
  pinMode(13, OUTPUT);        // определяем вывод 13 (светодиод) как выход
  pinMode(12, INPUT_PULLUP);  // определяем вывод 12 (кнопка) как вход
}

//  бесконечный цикл
void loop() {
  buttonState = digitalRead(12);  // считываем состояние 12 входа (кнопки) и записываем в buttonState
  buttonState = ! buttonState;    // инверсия переменной buttonState
  digitalWrite(13, buttonState);  // записываем состояние из buttonState на выход 13 (светодиод)
}

Для хранения промежуточного значения состояния кнопки создаем переменную buttonState с типом boolean. Это логический тип данных. Переменная может принимать одно из двух значений: true (истинно) или false (ложно). В нашем случае — светодиод светится и не светится.

Скопируйте или перепишите код программы в окно Arduino IDE. Загрузите в контроллер и проверьте.

Для сохранения проектов Ардуино я создал папку d:Arduino ProjectsLessonsLesson5. В каждом уроке программы называю scetch_5_1, scetch_5_2, … Вы можете поступать также или ввести свою систему сохранения файлов.

Блок программы:

buttonState = digitalRead(12);  // считываем состояние 12 входа (кнопки) и записываем в buttonState
  buttonState = ! buttonState;    // инверсия переменной buttonState
  digitalWrite(13, buttonState);  // записываем состояние из buttonState на выход 13 (светодиод)

можно записать без использования промежуточной переменной buttonState.

digitalWrite(13, ! digitalRead(12) );

В качестве аргумента для функции digitalWrite() выступает  функция digitalRead(). Хороший стиль это именно такой вариант. Не требуются дополнительные переменные, меньше текст.

Т.е. функцию можно использовать как аргумент другой функции. Функции можно вызывать из функций.

Другой вариант этой же программы, использующий условный оператор if.

/* Программа scetch_5_2 урока 5
   Зажигает светодиод (вывод 13) при нажатии кнопки (вывод 12) */
  
void setup() {
  pinMode(13, OUTPUT);        // определяем вывод 13 (светодиод) как выход
  pinMode(12, INPUT_PULLUP);  // определяем вывод 12 (кнопка) как вход
}

//  бесконечный цикл
void loop() {
  if ( digitalRead(12) == LOW ) digitalWrite(13, HIGH);
  else digitalWrite(13, LOW);
}

В бесконечном цикле проверяется состояние вывода 12 (кнопка), и если оно низкое (LOW), то на выводе 13 (светодиод) формируется высокое состояние (HIGH). В противном случае состояние светодиода низкое (LOW).

Директива  #define.

Во всех примерах для функций ввода/вывода мы указывали аргумент pin, определяющий номер вывода, в виде конкретного числа — константы. Мы помнили, что константа 12 это номер вывода кнопки, а 13 – номер вывода светодиода. Гораздо удобнее работать с символьными именами. Для этого в языке C существует директива, связывающая идентификаторы с константами, выражениями.

Директива #define определяет идентификатор и последовательность символов, которая подставляется вместо идентификатора, каждый раз, когда он встречается в тексте программы.

В общем виде она выглядит так:

#define имя последовательность_символов

Если в наших программах мы напишем:

#define LED_PIN 13     // номер вывода светодиода равен 13

то каждый раз, когда в программе встретится имя LED_PIN, при трансляции вместо него будет подставлены символы 13. Функция включения светодиода выглядит так:

digitalWrite(LED_PIN, HIGH);

Окончательный вариант программы с использованием #define.

/* Программа урока 5
   Зажигает светодиод (вывод 13) при нажатии кнопки (вывод 12) */
  
#define LED_PIN 13     // номер вывода светодиода равен 13
#define BUTTON_PIN 12  // номер вывода кнопки равен 12

void setup() {
  pinMode(LED_PIN, OUTPUT);    // определяем вывод 13 (светодиод) как выход
  pinMode(BUTTON_PIN, INPUT_PULLUP);  // определяем вывод 12 (кнопка) как вход
}

//  бесконечный цикл
void loop() {
  digitalWrite(LED_PIN, ! digitalRead(BUTTON_PIN) );
}

Обратите внимание, что после директивы #define точка с запятой не ставится, потому что это псевдо оператор. Он не совершает никаких действий.  Директива задает константы, поэтому принято имена для нее писать в верхнем регистре с разделителем – нижнее подчеркивание.

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

Предыдущий урок      Список уроков      Cледующий урок

Источник: http://mypractic.ru/urok-5-pervaya-programma-funkcii-upravleniya-vvodomvyvodom-knopka-svetodiod.html

Подключение цифровых датчиков к Arduino

Опубликовано 13.06.2015 22:28:00

В тематике Arduino имеется большое количество датчиков. В данной статье рассмотрим работу с цифровыми датчиками. Цифровыми они называются из-за того, что в зависимости от внешних факторов на их выходе имеется либо 0 (земля), либо 1 (входное напряжение датчика).

В данной статье мы расскажем о том как их подключить к Arduino и считать цифровой сигнал.

Цифровые датчики, если они не комбинированные (имеющие и аналоговый и цифровой выводы), имеют три вывода:

G (может также маркироваться как GND): минус питающего напряжения

V (может также маркироваться как VTG, +5V): плюс питающего напряжения

S (может также маркироваться как DO(digital output), SIG, OUT): выходной сигнал

Напряжение питания у различных датчиков может быть 3.3V либо 5V (смотреть в спецификации к датчику)

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

Подключение к Arduino

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

G : подключается к выводу GND

V : подключается к выводу +5V или 3.3V в зависимости от датчика

S : подключается к любому цифровому входу ( в примере D4 )

Самым наглядным примером будет вывести показания датчика в монитор порта Arduino.

void setup() {
  Serial.begin(9600); // Скорость работы монитор порта
  pinMode(4, INPUT); // Инициализируем цифровой pin 4 как вход
} void loop() {
  int sensorValue = digitalRead(4); // Задаем переменную sensorValue для считывания состояния
  Serial.println(sensorValue); // Выводим состояние кнопки в порт
  delay(500); // Ждем пол секунды
}

После заливки скетча открываем Arduino IDE, щелкаем Сервис => Монитор порта и смотрим получаемые значения. Мы получим значения либо 1 либо .

Для большиства людей казалось бы логичным, что при срабатывании датчика в порт отсылается единица, но большинство датчиков при срабатывании выдают наоборот 0. 

Дополнительный пример взаимодействия

В программном коде можно отслеживать цифровой сигнал и в зависимости от его состояния выполнять различные действия. В качестве примера зажжем  светодиод подключенный к pin13 на плате Arduino.

void setup() {   pinMode(4, INPUT); // Инициализируем цифровой pin 4 как вход
} void loop() {
  int sensorValue = digitalRead(4); // Задаем переменную sensorValue для считывания состояния
  if (sensorValue == 1) // Если на цифровом входе единица
  {     
    // Выполняем действие
    digitalWrite(13, HIGH); // Включаем светодиод
  }  
  else // В ином случае (если на цифровом входе 0)
  {   
    // Выполняем действие
    digitalWrite(13, LOW); // Выключаем светодиод
  }    
  delay(500);
}

Статьи в подобной тематике:

•  Подключение аналоговых датчиков к Arduino

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

Источник: http://zelectro.cc/digital_sensors_arduino

Ссылка на основную публикацию