Главная » Arduino
Призовой фонд
на март 2017 г.
1. UNI-T UT-39C
Паяльник
2. Тестер компонентов LCR-T4
Паяльник
3. 100 руб.
От пользователей

Похожие статьи:


Курс Arduino - Датчики

Взаимодействие с окружающим миром

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

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

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

  • Резстор на 10 КОм и на 220 Ом
  • Термистор
  • Фоторезистор
  • Кнопка тактовая
  • Светодиод
  • Соединительные провода «Папа-Папа»

Термистор

Термистор – это резистор, сопротивление которого изменяется в зависимости от его нагрева. С помощью термистора можно измерять температуру.

Давайте соберем небольшой эксперимент с термистором. Внимание на схему сборки.

 

А теперь давайте немного покодим. 

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

#include <math.h>
  
void setup() {
  
  //Для того, чтобы снять показания с нашего мини-термометра, нам нужно включить SerialMonitor.
  //Он предназначен для связи Arduino с компьютером.
  //О нем можно прочитать здесь: http://arduino.ru/Reference/Serial
  //Мы будем выводить показания нашего датчика в Serial  Monitor.
  //Чтобы его открыть, зажмите Ctrl+Shift+M
  
  Serial.begin(9600);
}

void loop() {
  //Есть переменные различных типов.В этом эксперименте мы должны создать переменную с плавающей запятой.
  //Подробнее о таких переменных переменных читайте здесь: http://arduino.ru/Reference/Float
  //Нужно указывать дробную часть у всех констант. Иначе, дробная часть отбросится.
  
  float i = analogRead(A2) * 5.0 / 1024.0;  //Создадим промежуточную переменную,в которую запомним   
 //показания термистора.
                                            //Считываем с помощью функции AnalogRead.
                                            //О ней: http://arduino.ru/Reference/AnalogRead
                                            // Эта часть кода  "* 5.0 / 1024.0" приводит считываемые                            
 //значения в нужную нам форму, для применения в формуле.

                                                                                       
  float temp = -14.5 * log((10000.0 * i) / (5.0 - i) / 27074.0); 
 //Мы создали переменную для вывода в Serial monitor.
                                //И, чтобы найти значение температуры,применяем нашу формулу.

    Serial.println (temp);  //Теперь выводим нашу температуру в Serial monitor. 
    
    delay(1000);            //Делаем небольшую задержку перед выводами значений в Serial monitor.                                                   
}
//Теперь откроем Serial monitor.Открываем после компиляции программы.

Пояснения к коду

#include – С помощью этой функции мы можем подключать различные библиотеки, нужные для выполнения различных задач. Библиотека представляет собой набор функций, шаблонов и всякой всячины. Она нужна для расширения возможностей языков программирования.

Serial -  Позволяет установить соединение с компьютером. С помощью Serial monitor можно получать на экран компьютера показания датчиков и отправлять команды на контроллер. Очень полезная штука при отладке скетчей. Как это делать будет описано в последующих уроках.

Фоторезистор

Фоторезистор тоже резистор, но его сопротивление изменяется в зависимости от освещенности. Давайте его подключим.

А теперь код.

// Теперь подключим фоторезистор.

void setup() { 
Serial.begin(9600);          // Снова подключим Serial monitor
}

void loop() {
 float i = analogRead(A2);  
 i = map(i, 0, 1023, 0, 4);    //Приведем значения, считываемые с датчика в нужную нам форму.
 Serial.println(i);            //Выведем значение переменной i в  Serial monitor
 delay(1000);                  //Сделаем небольшую паузу.
}
//Теперь мы получаем данные об освещенности в диапазоне от 0 до 4.

Пояснения к коду

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

Цифровой датчик

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

 

#define LED 8   //Это светодиод.
#define BUT 12  // Это кнопка, с помощью которой, светодиод будет включаться.

void setup() {
  pinMode(LED, OUTPUT);         //Обозначим светодиод как выход.
  pinMode(BUT, INPUT_PULLUP);   //INPUT_PULLUP позволяет не включать подтягивающий/стягивающий резистор в    
 //схему.
                                //На пинах Arduino уже предусмотрен подтягивающий резистор.
                                 
  Serial.begin(9600);    //Установим связь с компьютером, чтобы посмотреть, какие сигналы идут от кнопки.
}
void loop() {
  boolean val = digitalRead(BUT); //Создаем переменную типа boolean.

 //Это логическая переменная.О ней: http://arduino.ru/Reference/BooleanVariables
 //Ей можно задавать всего два значения True ли False.
                                  
  if (!val)             //Это оператор с условием.В скобках задается условие.
                        //Мы задали:Если принято значение "не val", включить светодиод,иначе - выключить.
                        //Знак ! обращает логическое значение в обратное ему.Про него:             
 //http://cppstudio.com/post/297/
                        //В не нажатом состоянии значение кнопки равно 1.В нажатом- 0.
                        //Поэтому мы использовали !
  {
    digitalWrite(LED, HIGH);
  }
  else                           //Если значение val равно единице- выключаем светодиод.                             
  {
    digitalWrite(LED, LOW);
  }
  Serial.println(val); //Выведем в Serial monitor значение, считываемое с кнопки, чтобы убедиться, что 
                       //оно может быть 1 или 0, TRUE или FALSE.
         
}

Пояснения к коду

INPUT_PULLUP -  предназначен для включения встроенного в Arduino подтягивающего резистора. Подтягивающий резистор нужен, чтобы гарантировать на пине, с которым соединен проводник, высокий или низкий уровень .Попробуйте настроить пин просто как INPUT, вы увидите, что светодиод горит, независимо от того, нажата ли кнопка.

BOOLEAN - Это тип логических данных. Он может быть либо true(1), либо false(0).

IF –  Оператор условия. Проверяет данное условие или условия и, в зависимости от результата сравнения, выполняет определенные действия.

 

Вывод

В этом уроке мы научились считывать значения с нескольких датчиков. А с помощью значения, считываемого с кнопки, мы включали и выключали светодиод. Так же мы узнали новый тип переменных - логическая переменная и научились применять ветвление программы. Отлично! Можно двигаться дальше.

Список радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
Плата Arduino
Arduino Uno
1 Поиск в FivelВ блокнот
Светодиод
АЛ307ВМ
1 Поиск в FivelВ блокнот
ТермисторB57164-K 103-J1 Поиск в FivelВ блокнот
Резистор
10 кОм
1 Поиск в FivelВ блокнот
Резистор
220 Ом
1 Поиск в FivelВ блокнот
ФоторезисторVT90N21 Поиск в FivelВ блокнот
Кнопка тактоваяБез фиксатора1 Поиск в FivelВ блокнот
Макетная платаBreadboard-half1 Поиск в FivelВ блокнот
Соединительные провода"Папа-Папа"4 Поиск в FivelВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: Изменена: 09.01.2017 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (2) | Я собрал (0) | Подписаться

0
Сергей #
Подскажите почему данные об освещенности в диапазоне от 0 до 4 получаются? Как и где это прописано?
Ответить
0

[Автор]
Симилячник #
Я, видимо хотел сделать что-то эдакое. На самом деле показания будут от 0 до 1023. Я пропустил строку.
Если хочется получать показания от 0 до 4, применяйте вот такую функцию.
i = map(i, 0, 1023, 0, 4);
Ее ставите до вывода данных в сериал.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Raspberry Pi 2
Raspberry Pi 2
Тестер ESR, полупроводников, резисторов, индуктивностей AVR-программатор USB ASP
вверх