Пироэлектрический инфракрасный (pir) датчик движения и arduino

Что такое LDR?

LDR сенсор на английском звучит как Light Dependent resistor, что в переводе означает «светозависимый резистор».

Неправда ли, было бы интересно иметь под рукой устройство, которое включает свет при наступлении сумерок? Цель нашего проекта сделать именно такое устройство.

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

Чтобы обнаружить интенсивность света или темноты, мы используем датчик, называемый LDR (резистор, зависящий от света или светозависимый резистор).

LDR — это особый тип резистора, который позволяет пропускать через себя более высокие напряжения (низкое сопротивление), когда есть высокая интенсивность света, и пропускает низкое напряжение (высокое сопротивление), когда слабая интенсивность света. Мы можем воспользоваться этим свойством LDR и использовать его в нашем проекте Ардуино.

Пример для Iskra JS

Схема устройства

Скоммутируйте PIR-сенсор к Iskra JS через Troyka Shield к цифровому пину.

Чтобы полностью избавиться от проводов, возьмите Troyka Slot Shield

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

Зафиксируйте движение объекта с помощью Espruino и языка JavaScript.

motionDetect.js
// наблюдаем за датчиком движения
setWatch(function() {
  // если датчик зафиксировал движение
  // печатаем об этом в консоль
  print("Movement detected");
}, P4, {
  // функция вызывается многократно
  repeat true,
  // фиксация восходящего фронта
  edge "rising"
});

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

Разновидности

Приборов автоматического определения присутствия существует достаточно много, и разделяются они по таким признакам как:

  1. Где он устанавливается:
    • на улице;
    • в комнате;
    • настенные;
    • на потолках.
  2. Способ монтажа:
    • накладного типа;
    • встроенные.
  3. Тип подключения:
    • проводной;
    • беспроводной;
    • автономный.
  4. Тип чувствительного элемента:
    • инфракрасный;
    • ультразвуковой;
    • микроволновый;
    • мультисенсорный.
  5. 5.     По сложности исполнения:
    • однокомпонентный;
    • 2-х компонентный;
    • 3-х компонентный;
    • дизайнерского исполнения.

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

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

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

DS18B20 является цифровым датчиком. Цифровые датчики передают значение измеряемой температуры в виде определенного двоичного кода, который поступает на цифровые или аналоговые пины ардуино и затем декодируется. Коды могут быть самыми разными, ds18b20 работает по протоколу данных 1-Wire. Мы не будем вдаваться в подробности этого цифрового протокола, укажем лишь необходимый минимум для понимания принципов взаимодействия.

Обмен информацией в 1-Wire происходит благодаря следующим операциям:

  • Инициализация – определение последовательности сигналов, с которых начинается измерение и другие операции. Ведущее устройство подает импульс сброса, после этого датчик должен подать импульс присутствия, сообщающий о готовности к выполнению операции.
  • Запись данных – происходит передача байта данных в датчик.
  • Чтение данных – происходит прием байта из датчика.

Для работы с датчиком нам понадобится программное обеспечение:

  • Arduino IDE;
  • Библиотека OneWire, если используется несколько датчиков на шине, можно использовать библиотеку DallasTemperature. Она будет работать поверх OneWire.

Из оборудования понадобятся:

  • Один или несколько датчиков DS18B20;
  • Микроконтроллер Ардуино;
  • Коннекторы;
  • Резистор на 4,7 кОм (в случае подключения одного датчика пойдет резистор номиналом от 4 до 10K);
  • Монтажная плата;
  • USB-кабель для подключения к компьютеру.

К плате Ардуино UNO датчик подключается просто: GND с термодатчика присоединяется к GND Ардуино, Vdd подключается к 5V, Data – к любому цифровому пину.

Простейшая схема подключения цифрового датчика DS18B20 представлена на рисунке.

В режиме паразитного питания контакт Vdd с датчика подключается к GND на Ардуино – в этом случае пригодятся только два провода. Работу в паразитном режиме лучше не использовать без необходимости, так как могут ухудшиться быстродействие и стабильность.

Управляем освещением при помощи датчика приближения

Датчик приближения удобно использовать для сигнализации, но мы его будем использовать для автоматического включения света при сближении с каким-либо объектом. Например, если человек входит в темный угол какого-то помещения, датчик его регистрирует, и микроконтроллер включает свет в этом месте. Для этого примера потребуется такое оборудование и ПО:

  • Arduino UNO — одна из разновидностей плат ардуино;
  • PIR-датчик;
  • Блок реле SRD-12VDC-SL-C;
  • Arduino IDE — программное обеспечение для загрузки микрокода в микроконтроллер Arduino;
  • Лампочка, подключаемая к сети 220 вольт.

Как и в предыдущих примерах, первым делом соберем схему, представленную ниже.

Теперь наберем в Arduino IDE код, представленный ниже, и загрузим его на плату:
Принцип работы этой программы детально описан в ее комментариях. Проверить работу датчика можно с помощью «Монитора порта», в котором будут выводиться сообщения «The object started moving» и «The object does not move».

Пример использования с Arduino

Проверим датчик в действии с платформами Arduino. На выходе сенсора цифровой сигнал.
Для быстрого и удобного подключения используйте Troyka Shield.

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

digital-line-sensor.ino
// пин датчика линии
#define SENSOR_LINE_PIN A0
 
void setup() {
  // открываем последовательный порт
  Serial.begin(9600);
}
 
void loop() {
  // считываем значение с датчика
  bool signal = digitalRead(SENSOR_LINE_PIN);
  if ( !signal ) {
    // если сигнал ноль
    // выдаем предупреждение
    Serial.println("Warning! Out of table!");
  } else {
    // если сигнал единица
    Serial.println("OK! Above table!");
  }
 
  delay(100);
}

После загрузки скетча — откройте монитор Serial-порта. Проведите датчиком сначала над столом, а потом за краем стола. При выходе за край стола на мониторе должно возникнуть предупреждение.

Управляем освещением при помощи датчика освещенности

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

  • Arduino UNO — одна из разновидностей плат ардуино;
  • Блок реле SRD-12VDC-SL-C;
  • Резистор на 10 кОм;
  • Фоторезистор (выступает в роли датчика освещенности);
  • Arduino IDE — программное обеспечение для загрузки микрокода в микроконтроллер Arduino;
  • Лампочка, подключаемая к сети 220 вольт.

Первым делом соберем схему с помощью этих компонентов изображенную ниже.

Теперь откроем Arduino IDE и внесем в нее такой код:
Этот код не предназначен для включения нашей лампочки. С помощью этого кода мы проверим наш датчик освещенности. Поэтому загрузим этот код в Arduino UNO и откроем «Монитор порта».

В «Мониторе порта» видно, что мы получаем значения с фоторезистора, а это значит, что он нормально функционирует. Теперь пришло время загрузить основной код для автоматического управления светом. Для этого вставьте этот код в Arduino IDE:
Принцип работы этого скетча основан на условном операторе, при котором выполняется условие «s2 < 700». Это условие означает, что при значении датчика меньше 700 лампочка будет включаться, а если значение больше 700, то лампочка отключится. Из примера видно, как легко можно создать адаптивную систему автоматического освещения.

Как это работает?

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

LDR выдает аналоговое напряжение при подключении к VCC (5V), которое изменяется по величине прямо пропорционально интенсивности входного света на нем. То есть, чем больше интенсивность света, тем больше будет соответствующее напряжение от LDR.

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

Когда в окружающей среде или на ее поверхности достаточно света, преобразованные цифровые значения, считываемые из LDR через Arduino, будут находиться в диапазоне 800-1023.

Кроме того, мы запрограммируем Ардуино на включение реле. Соответственно, реле заставит включиться лампочку при слабой интенсивности света (например, вы покроете датчик LDR полотенцем или чем-то еще), то есть когда цифровые значения считаются в более высоком диапазоне, чем обычно.

Влияние на окружающую среду

Воздействие на атмосферу

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

Воздействие на литосферу

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

Разбор кода для BME680

Библиотеки

Код начинается с подключения необходимых библиотек: для использования I2C, SPI, Adafruit_Sensor. а также Adafruit_BME680.

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include "Adafruit_BME680.h"

Соединение по SPI

Обычно мы предпочитаем использовать протокол связи I2C. Однако код адаптирован и для использования SPI. Вам просто нужно раскомментировать следующие строки кода, которые определяют контакты SPI:

/*#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10*/

Давление над уровнем моря

Создаем переменную SEALEVELPRESSURE_HPA:

#define SEALEVELPRESSURE_HPA (1013.25)

Эта переменная сохраняет давление над уровне моря в гектопаскале (эквивалент милибару). Эта переменная используется для оценки высоты для данного давления путем сравнения его с давлением на уровне моря.

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

Соединение по I2C

В этом примере по умолчанию используется шина I2C.

Следующая строка создает объект Adafruit_BME680 с именем bme на выводах Ардуино I2C: D5 (SCL), D4 (SDA):

Adafruit_BME680 bme; // I2C

Чтобы использовать SPI, вам нужно прокомментировать эту строку и раскомментировать следующую строку:

//Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI

Функция setup()

В функции setup() мы запускаем последовательный порт:

Serial.begin(115200);

Инициализируем датчик BME680:

if (!bme.begin()) {
Serial.println(F("Could not find a valid BME680 sensor, check wiring!"));
while (1);
}

Устанавливаем параметры датчика BME680:

// Set up oversampling and filter initialization
bme.setTemperatureOversampling(BME680_OS_8X);
bme.setHumidityOversampling(BME680_OS_2X);
bme.setPressureOversampling(BME680_OS_4X);
bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
bme.setGasHeater(320, 150); // 320*C for 150 ms

Эти методы могут принимать один из следующих параметров (разрешение):

  • BME680_OS_NONE: выключить чтение;
  • BME680_OS_1X
  • BME680_OS_2X
  • BME680_OS_4X
  • BME680_OS_8X
  • BME680_OS_16X

Датчик BME680 имеет встроенный IIR фильтр для уменьшения кратковременных изменений выходных значений датчика, вызванных внешними помехами. ВsetIIRFilterSize() устанавливает IIR фильтр. Он принимает размер фильтра в качестве параметра:

  • BME680_FILTER_SIZE_0 (no filtering)
  • BME680_FILTER_SIZE_1
  • BME680_FILTER_SIZE_3
  • BME680_FILTER_SIZE_7
  • BME680_FILTER_SIZE_15
  • BME680_FILTER_SIZE_31
  • BME680_FILTER_SIZE_63
  • BME680_FILTER_SIZE_127

В датчик газа имеет нагреватель. Установите параметр нагревателя с помощью метода setGasHeater(), который принимает в качестве аргументов:

  • температура нагревателя (в градусах Цельсия)
  • время работы нагревателя (в миллисекундах)

Мы будем использовать настройки по умолчанию: 320 ºC в течение 150 мс.

Функция loop()

В функции  loop() мы получаем данные от датчика BME680.

Сначала укажем датчику, чтобы он начать асинхронное считывание с помощью bme.beginReading(). Это возвращает время, когда будет готово чтение.

// Tell BME680 to begin measurement.
unsigned long endTime = bme.beginReading();
if (endTime == 0) {
Serial.println(F("Failed to begin reading :("));
return;
}
Serial.print(F("Reading started at "));
Serial.print(millis());
Serial.print(F(" and will finish at "));
Serial.println(endTime);

Затем вызываем метод endReading() для завершения асинхронного чтения.

if (!bme.endReading()) {
Serial.println(F("Failed to complete reading :("));
return;
}

После этого мы получим следующие показания:

  • bme.temperature: возвращает показания температуры
  • bme.pressure: возвращает показания давления
  • bme.humidity: возвращает показания влажности
  • bme.gas_resistance: возвращает сопротивление по газу
Serial.print(F("Temperature = "));
Serial.print(bme.temperature);
Serial.println(F(" *C"));

Serial.print(F("Pressure = "));
Serial.print(bme.pressure / 100.0);
Serial.println(F(" hPa"));

Serial.print(F("Humidity = "));
Serial.print(bme.humidity);
Serial.println(F(" %"));

Serial.print(F("Gas = "));
Serial.print(bme.gas_resistance / 1000.0);
Serial.println(F(" KOhms"));

Serial.print(F("Approx. Altitude = "));
Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(F(" m"));

Описание датчика DS18B20 для Arduino

Микросхема имеет три выхода, из которых для данных используется только один, два остальных – это земля и питание. Число проводов можно сократить до двух, если использовать схему с паразитным питанием и соединить Vdd с землей. К одному проводу с данными можно подключить сразу несколько датчиков DS18B20 и в плате Ардуино будет задействован всего один пин.

Особенности цифрового датчика DS18B20

Погрешность измерения не больше 0,5 С (для температур от -10С до +85С), что позволяет точно определить значение температуры. Не требуется дополнительная калибровка.
Температурный диапазон измерений лежит в пределах от -55 С до +125 С.
Датчик питается напряжением от 3,3В до 5В.
Можно программно задать максимальную разрешающую способность до 0,0625С, наибольшее разрешение 12 бит.
Присутствует функция тревожного сигнала.
Каждое устройство обладает своим уникальным серийным кодом.
Не требуются дополнительные внешние элементы.
Можно подключить сразу до 127 датчиков к одной линии связи.
Информация передается по протоколу 1-Wire.
Для присоединения к микроконтроллеру нужны только 3 провода.
Существует так называемый режим паразитного питания – в нем происходит питание напрямую от линии связи. Для подключения в этом случае нужны только 2 провода

Важно, что в этом режиме не гарантируется корректная работа при температурах выше 100С. Режим паразитного питания удобно обычно применяется для приложений с удаленным температурным датчиком.

Память датчика состоит из двух видов: оперативной и энергонезависимой – SRAM и EEPROM. В последнюю записываются регистры конфигурации и регистры TH, TL, которые могут использоваться как регистры общего назначения, если не используются для указания диапазона допустимых значений температуры.

Основной задачей DS18B20 является определение температуры и преобразование полученного результата в цифровой вид. Мы можем самостоятельно задать необходимое разрешение, установив количество бит точности –  9, 10, 11 и 12. В этих случаях разрешающие способности будут соответственно равны 0,5С, 0,25С, 0,125С и 0,0625С.

Во время включения питания датчик находится в состоянии покоя. Для начала измерения контроллер Ардуино выполняет команду «преобразование температуры». Полученный результат сохранится в 2 байтах регистра температуры, после чего датчик вернется в первоначальное состояние покоя. Если схема подключена в режиме внешнего питания, микроконтроллер регулирует состояние конвертации. Во время выполнения команды линия находится в низком состоянии, после окончания программы линия переходит в высокое состояние. Такой метод не допустим при питании от паразитной емкости, так как на шине постоянно должен сохраняться высокий уровень сигнала.

Полученные температурные измерения сохраняются в SRAM датчика. 1 и 2 байты сохраняют полученное значение температуры, 3 и 4 сохраняют пределы измерения, 5 и 6 зарезервированы, 7 и 8 используются для высокоточного определения температуры, последний 9 байт хранит устойчивый к помехам CRC код.

Полевые испытания

Прошу прощения за эстетику монтажа.

Установка на входную дверь. Часть конструкции справа (непосредственно на самой двери) — магнит для срабатывания геркона

На место постоянного использования (гараж) устройство было установлено 4 месяца назад. Для целей усиленного тестирования, функция расписания не используется (по каждому событию отправляется SMS). В среднем получается 5 SMS в день: два при входе в гараж (срабатывает датчик открытия двери и датчик освещения), два при выходе и один «ежедневный отчет». На текущий момент батареи (3x AA) держат напряжение 4.1в при включенном модеме.

Пример программы

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

  • Вероятность ложных срабатываний, за счет того, что для самоинициализации датчика требуется одна минута;
  • Отсутствие выходных устройств исполнительного типа – реле, сирены, светоиндикации;
  • Короткий временной интервал сигнала на выходе сенсора, который необходимо на программном уровне задержать, в случае появления движения.

Указанные недостатки устраняются при расширении функционала датчика.

Скетч самого простого типа, который может быть использован в качестве примера работы с датчиком движения на Arduino, выглядит таким образом:

#define PIN_PIR 2
#define PIN_LED 13

void setup() {
  Serial.begin(9600);

  pinMode(PIN_PIR, INPUT);
  pinMode(PIN_LED, OUTPUT);

}

void loop() {
  int pirVal = digitalRead(PIN_PIR);
  Serial.println(digitalRead(PIN_PIR));

  //Если обнаружили движение
  if (pirVal)
  {
    digitalWrite(PIN_LED, HIGH);
    Serial.println("Motion detected");
    delay(2000);
  }
  else
  {
    //Serial.print("No motion");
    digitalWrite(PIN_LED, LOW);
  }
}

Скетч для Arduino и сенсора DS18B20

Установливаем библиотеку OneWire Library

После того как вы скачали архив с библиотекой, ее надо импортировать. Для этого в Arduino IDE выберите пункт “Sketch” — “Import Library” — “Add Library” и выберите архив, который вы скачали. Если у вас возникли проблемы, с установкой библиотеки, ознакомьтесь с инструкцией по установке библиотек в Arduino.

Загружаем скетч на Arduino

Скетч, который представлен ниже, есть в библиотеке OneWire, в категории examples. Перейдите в “File” — “Examples” — “OneWire” и выберите пример “DS18x20_Temperature”. Код программы представлен ниже.

Данный пример использует библиотеку OneWire Library, для того, чтобы собрать данные со всех подключенных датчиков температуры DS28B20 (как подключить несколько сенсоров описано в конце статьи) и отобразить их в окне серийного монитора Arduino IDE.

В окне серийного монитора вы увидите примерно следующее:

ROM = 28 88 84 82 5 0 0 6A

Chip = DS18B20

Data = 1 56 1 4B 46 7F FF A 10 D1 CRC=D1

Temperature = 21.37 Celsius, 70.47 Fahrenheit

No more addresses.

ROM = 28 88 84 82 5 0 0 6A

Chip = DS18B20

Data = 1 56 1 4B 46 7F FF A 10 D1 CRC=D1

Temperature = 21.37 Celsius, 70.47 Fahrenheit

No more addresses.

ROM = 28 88 84 82 5 0 0 6A

Chip = DS18B20

Data = 1 56 1 4B 46 7F FF A 10 D1 CRC=D1

Temperature = 21.37 Celsius, 70.47 Fahrenheit

No more addresses.

Обычное или паразитное питание?

DS18B20 может работать в обычном или в так называемом «паразитном» режиме. В обычном режиме для подключения используется 3 коннектора, в «паразитном» режиме — в его лишь 2.

Вам надо настроить правильный режим в скетче, чтобы снять достоверные показания с датчика:

  • Для «паразитного» режима в строке 65 надо указать: ds.write(0x44, 1);
  • Для обычного режима в строке 65 указывается: ds.write(0x44);

Убедитесь, что вы указали корректные пины!

В строке 10, где указано “OneWire ds(2);” устанавливается пин, к которому подключен контакт data с сенсора.

В этом примере использован пин 2, но значения пина по умолчанию в примере OneWire стоит на 10. Можно использовать и его.

#include &ltOneWire.h&gt

// пример использования библиотеки OneWire DS18S20, DS18B20, DS1822

OneWire ds(2); // на пине 10 (нужен резистор 4.7 КОм)

void setup(void) {

Serial.begin(9600);

}

void loop(void) {

byte i;

byte present = 0;

byte type_s;

byte data;

byte addr;

float celsius, fahrenheit;

if ( !ds.search(addr)) {

Serial.println(«No more addresses.»);

Serial.println();

ds.reset_search();

delay(250);

return;

}

Serial.print(«ROM =»);

for( i = 0; i

Serial.write(‘ ‘);

Serial.print(addr, HEX);

}

if (OneWire::crc8(addr, 7) != addr) {

Serial.println(«CRC is not valid!»);

return;

}

Serial.println();

// первый байт определяет чип

switch (addr) {

case 0x10:

Serial.println(» Chip = DS18S20″); // или более старый DS1820

type_s = 1;

break;

case 0x28:

Serial.println(» Chip = DS18B20″);

type_s = 0;

break;

case 0x22:

Serial.println(» Chip = DS1822″);

type_s = 0;

break;

default:

Serial.println(«Device is not a DS18x20 family device.»);

return;

}

ds.reset();

ds.select(addr);

ds.write(0x44); // начинаем преобразование, используя ds.write(0x44,1) с «паразитным» питанием

delay(1000); // 750 может быть достаточно, а может быть и не хватит

// мы могли бы использовать тут ds.depower(), но reset позаботится об этом

present = ds.reset();

ds.select(addr);

ds.write(0xBE);

Serial.print(» Data = «);

Serial.print(present, HEX);

Serial.print(» «);

for ( i = 0; i

data = ds.read();

Serial.print(data, HEX);

Serial.print(» «);

}

Serial.print(» CRC=»);

Serial.print(OneWire::crc8(data, 8), HEX);

Serial.println();

// конвертируем данный в фактическую температуру

// так как результат является 16 битным целым, его надо хранить в

// переменной с типом данных «int16_t», которая всегда равна 16 битам,

// даже если мы проводим компиляцию на 32-х битном процессоре

int16_t raw = (data

if (type_s) {

raw = raw

if (data == 0x10) {

raw = (raw & 0xFFF0) + 12 — data;

}

} else {

byte cfg = (data & 0x60);

// при маленьких значениях, малые биты не определены, давайте их обнулим

if (cfg == 0x00) raw = raw & ~7; // разрешение 9 бит, 93.75 мс

else if (cfg == 0x20) raw = raw & ~3; // разрешение 10 бит, 187.5 мс

else if (cfg == 0x40) raw = raw & ~1; // разрешение 11 бит, 375 мс

//// разрешение по умолчанию равно 12 бит, время преобразования — 750 мс

}

celsius = (float)raw / 16.0;

fahrenheit = celsius * 1.8 + 32.0;

Serial.print(» Temperature = «);

Serial.print(celsius);

Serial.print(» Celsius, «);

Serial.print(fahrenheit);

Serial.println(» Fahrenheit»);

}

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

/*Ультразвуковой датчик расстояния и Arduino – полный гайд

Распиновка ультразвукового датчика расстояния:

VCC: +5V

Trig : Триггер (INPUT) – 11 пин

Echo: Эхо (OUTPUT) – 12 пин

GND: GND

*/

int trigPin = 11;    //Триггер – зеленый проводник

int echoPin = 12;    //Эхо – желтый проводник

long duration, cm, inches;

void setup() {

//Serial Port begin

Serial.begin (9600);

//Инициализирум входы и выходы

pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

}

void loop()

{

// Датчик срабатывает и генерирует импульсы шириной 10 мкс или больше

// Генерируем короткий LOW импульс, чтобы обеспечить «чистый» импульс HIGH:

digitalWrite(trigPin, LOW);

delayMicroseconds(5);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

// Считываем данные с ультразвукового датчика: значение HIGH, которое

// зависит от длительности (в микросекундах) между отправкой

// акустической волны и ее обратном приеме на эхолокаторе.

pinMode(echoPin, INPUT);

duration = pulseIn(echoPin, HIGH);

// преобразование времени в расстояние

cm = (duration/2) / 29.1;

inches = (duration/2) / 74;

Serial.print(inches);

Serial.print(«in, «);

Serial.print(cm);

Serial.print(«cm»);

Serial.println();

delay(250);

}

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий