Включение света с детектированием движения ультразвуком

Включение света с детектированием движения ультразвуком
Включение света с детектированием движения ультразвуком
Anonim

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

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

Билль о материалах

  1. Arduino Uno
  2. Транзистор NPN
  3. Датчик Maxbotix UltraSonic
  4. Провода
  5. макетировать
  6. Резистор 1 кОм или выше
  7. Компьютер с интегрированной средой разработки Arduino IDE
  8. мультиметр
  9. СВЕТОДИОД

Для этого проекта я использовал транзистор 2N3904 NPN в качестве коммутатора. Если у вас нет 2N3904, вы можете использовать эквивалент, такой как 2N2222. Пока это NPN, он будет работать с приведенным ниже кодом. Если у вас есть PNP-транзистор, необходимо внести изменения в код (который будет описан). Для включения и выключения светодиода эти транзисторы будут работать нормально. Но для того, чтобы включить более мощный свет, как лампа в вашем доме, вам понадобится альтернативный силовой транзистор. Один транзистор, который сможет обрабатывать ток, проходящий через него от розетки, - это NPN MJ15022 (PDF).

Использование ультразвукового датчика в качестве детектора движения

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

Ультразвуковой датчик, который мы используем, имеет диапазон до 20 футов. Это активный датчик, который постоянно излучает шум и ждет его получения. Он может посылать новую звуковую волну каждые 50 мс или с частотой 20 Гц. Мы будем использовать ультразвуковой датчик в качестве детектора движения; когда есть видимое изменение расстояния, мы будем рассматривать его как указание на то, что объект проходит перед датчиком. Таким образом, если вы укажете его у своей двери, он будет получать постоянное расстояние. Но как только кто-то ходит, расстояние, которое получает датчик сонара, изменится, и мы узнаем, что это что-то движется.

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

Использование транзистора в качестве коммутатора

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

Мы должны убедиться, что для этого урока вы используете транзистор NPN, а не PNP. В противном случае схема будет делать противоположное тому, что вы хотите. При использовании PNP-транзистора свет включается, когда движение не обнаружено и не отключается при обнаружении движения. Это происходит потому, что на транзисторе NPN между коллектором и эмиттером существует разомкнутая цепь, когда в базе нет тока. Это противоположный эффект для PNP. Когда в базе нет тока, происходит короткое замыкание между коллектором и эмиттером, что делает его замкнутой цепью и пропускает ток.

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

Image
Image

Если мы посмотрим на таблицу 2N3904 (PDF), то мы сможем прочитать все ее электрические характеристики. Электрической характеристикой, которой мы больше всего занимаемся при использовании транзистора в качестве переключателя, является минимальное напряжение насыщения базового излучателя и максимальное напряжение.

Когда транзистор работает в области насыщения, он позволит протекать ток между эмиттером и коллектором. Когда мы проверяем техническое описание 2N3904, мы видим, что минимальное напряжение, необходимое для работы этого транзистора в области насыщения, составляет 0, 65 В.

Image
Image

Если вы питаете свой Arduino батареей и не хотите посылать высокую мощность каждый раз, когда она что-то ощущает, вы можете изменить выход напряжения. По умолчанию, когда Arduino выдает HIGH, он выводит 5V. Но чтобы изменить его на что-то ниже, например 0, 65 В или 1 вольт, вам придется изменить аргументы функции AnalogWrite. Его текущее значение 255 дает максимальный (100%) рабочий цикл, что означает, что он выдает 5 В. Используя отношения, мы можем изменить выход до приблизительно 1 v, используя формулу:

$$ value = \ frac { text {напряжение желаемое x 255}} {5} $$

Если мы вставим 1 v в желаемую часть формулы напряжения, это даст значение 51. Я округлю до 50. Короче говоря, чтобы изменить выходное напряжение на 1 В, измените аргумент AnalogWrite на 50 так что код выглядит как код ниже. Таким образом, потребляется меньше энергии, и у вашего Arduino может быть больше времени автономной работы.

analogWrite (транзистор, 50);

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

Подключение наших компонентов на макет

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

Image
Image

Как объяснялось выше, наш аналоговый выход (который подключен к базе транзистора) закроет схему между 3.3V и светодиодом. Наш постоянный выход 3, 3 В от Arduino будет имитировать выход выходной мощности.

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

Код

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


#include "Maxbotix.h" // Library for Sonar Sensor Maxbotix rangeSensorPW(8, Maxbotix::PW, Maxbotix::LV); // Initializing Sensor Input at Digital Pin 8 int transistor = A2; // Initialzing Analog Output to Transistor at A2 void setup() { pinMode(transistor, OUTPUT); // Sets the Analog A2 as an output Serial.begin(9600); // Starts the Serial Monitor } void loop() { Serial.println(" "); Serial.print("Distance: "); // Prints Distance on the Screen Serial.print(rangeSensorPW.getRange()); // Receives the Distance in Cm Serial.print(" cm"); // Prints Cm if ((rangeSensorPW.getRange()) < 48) { // If Distance is less than 48 Cm Serial.println("Transistor On"); // Then the transitor turns on analogWrite(transistor, 255); // Sends out 5V on Output A2 delay(2000); // Leaves it on for 2 seconds, you can change it depending on how long you want the light on } //if else { // Else If distance is greater than 48 cm analogWrite(transistor, 0); // Turns off the Transistor Serial.println("Transistor Off"); // Prints Transistor Off } delay(100); // Wait 100 ms } // loop

Как только последовательный монитор будет открыт, вы увидите показания датчика. Так как в этом примере код был записан для обнаружения расстояния / движения менее 48 см, транзистор будет включаться и активировать наш свет, если движение обнаружено в пределах 48 см.

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

Image
Image

Если вы предпочитаете имперскую систему (потому что вы находитесь в Соединенных Штатах, Либерии или Мьянме) по сравнению с метрической системой, вам нужно сделать простое преобразование при печати ваших значений на последовательном мониторе. Когда вызывается функция rangeSensorPw.getRange (), умножьте ее на 0.393701, чтобы получить расстояние в дюймах. Если вы преследуете это изменение, вам нужно будет сделать это для всех случаев, когда эта функция вызывается. В сообщениях If новое состояние будет в дюймах. Таким образом, вместо 48 см, что составляет 18 дюймов, новый диапазон будет составлять 48 дюймов. Обязательно учитывайте это изменение и корректируйте расстояние до того, что вам нужно.

rangeSensorPw.getRange () *. 393701 // Выходное расстояние в дюймах вместо cm

Попробуйте этот проект сами! Получить спецификацию.