Перейти к содержимому


Фотография

Урок №16. Комплексное подключение. Часть четвертая


  • Авторизуйтесь для ответа в теме
В этой теме нет ответов

#1 admin

admin

    Администратор

  • Администраторы
  • 32 сообщений

Отправлено 22 Ноябрь 2014 - 12:41

  Продолжаем усложнять нашу программу. Теперь подключим датчик приближения. Он будет включать вентилятор. Внесем изменения в нашу программу. Добавим в нее строки, которые будут обрабатывать сигналы с сенсора датчика приближения.

//Кнопка «2» имеет код 16718055
//Кнопка «3» имеет код 16743045
//Кнопка «4» имеет код 16716015
#include <IRremote.h>
int LED = 4; // определяем порт для светодиода
int MOTOR = 6; // определяем порт для драйвера вентилятора
int SENSOR= 7; // определяем порт для датчика приближения
int SENSORStatus = 0; // первоначальный статус переменной СЕНСОР
int RECV_PIN = 11; // назначаем 11-ый вывод для подключения фотоприемника
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()  
{
  pinMode(LED, OUTPUT); //определяем вывод на светодиод как "выход"
  pinMode(MOTOR, OUTPUT); //определяем вывод на драйвер как "выход"
  pinMode (SENSOR , INPUT); // вывод для подключения датчика приближения //настраиваем как //"вход"
  digitalWrite(MOTOR,HIGH);  // выключаем вентилятор  при старте программы
  irrecv.enableIRIn(); // функция начала приема
}
void loop()
{
  if (irrecv.decode(&results)) 
 { // если сигнал принят
    if (results.value ==  16724175) // если принятый код равен коду клавиши «1»
      digitalWrite(LED,HIGH);   // то включаем светодиод    
    if (results.value == 16718055)  // если принятый код равен равен коду клавиши «2»
      digitalWrite(LED,LOW);  // выключаем светодиод
    if (results.value == 16743045)  // если принятый код равен равен коду клавиши «3»
      digitalWrite(MOTOR,LOW);  // включаем вентилятор
    if (results.value ==  16716015)  // если принятый код равен коду клавиши «4»
      digitalWrite(MOTOR,HIGH);   // то выключаем вентилятор   
    irrecv.resume(); // ждем прием следующего сигнала
  }
  SENSORStatus = digitalRead(SENSOR);  //считываем уровень на входе 7 и обновляем статус переменной СЕНСОР
  if (SENSORStatus  == HIGH) // если сработал датчик
    digitalWrite(MOTOR,LOW);  // включаем вентилятор
}

  Записываем программу в плату Arduino. Отключим USB шнур от платы Arduino и подключим блок батарей. проверяем реакцию вентилятора на нажатие клавиш пульта и на датчик движения. Здесь вы можете заметить , что чувствительность датчика движения довольно низкая. Переменный резистор приходится уменьшать практически до минимума, а датчик срабатывает лишь тогда, когда рука вплотную приближена  к датчику. На самом деле это связано с очень высокой чувствительностью инфракрасного приемника. Вместо того, что бы принимать отраженный сигнал от инфракрасного излучателя датчика, приемник улавливает постороннее  инфракрасное излучение от ламп освещения, Солнца и поэтому датчик постоянно срабатывает. Как следствие- приходится уменьшать чувствительность датчика. Побороть эту проблему довольно легко- нужно на инфракрасный приемник (он похож на черный светодиод) одеть светонепрозрачную трубку длиной в пару сантиметров. Например его можно изготовить из бумаги, скрутив и склеив из нее трубку такого размера, что бы она с небольшим усилием одевалась на приемник. Вы сразу заметите, как возрастет чувствительность и направленность датчика приближения.






Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных