Чтение данных с SM0038

ukrop
Offline
Зарегистрирован: 15.07.2016

Захотел подключить к ардуинке этот датчик. Для начала ожидал, что я буду светить на него диодом, а ардуина будет зажигать лампочку на 13 ноге.

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

Попробовал во первых добавить резисторы (как в даташите - на 5 в резисторв в 100 ом, между ногой данных и 5 вольтами - 10 кОм, чтобы подтянуть значение до 5вольт, без конденсатора), и во вторых подключил датчик к аналоговому входу.

Теперь у меня все время показания в районе 1024 (ну максимум), и если я свечу диодом на датчик, то иногда проскакивает что-то около 0, но редко. 

Что я делаю не так, почему у меня не работает вроде бы простая схема?

Этот датчик может требует модулированного сигнала (с частотой 38 кГц)?

Araris
Offline
Зарегистрирован: 09.11.2012

ukrop пишет:

Что я делаю не так, почему у меня не работает вроде бы простая схема?

Вы не привели ни схему подключения, ни исходник скетча, поэтому вопрос сочтём риторическим. Подозреваю, что путаете SM0038 с фоторезистором. Возможно, это прояснит : http://ntbox.blogspot.com/2014/03/how-to-interface-ir-receiver-to-arduino.html

ukrop
Offline
Зарегистрирован: 15.07.2016

Первая моя схема - такая-же, как и по вашей ссылке. Скетч следующий:

void setup() {
  Serial.begin( 9600 );
  pinMode( 3, INPUT );
  pinMode( 13, OUTPUT );
}

void loop() {
  int t = analogRead( 3 );
  Serial.println( t );
  if (t > 500)
    t = HIGH;
  else
    t = LOW;
  digitalWrite( 13,t );
  delay(20);
}

То есть читаем, зажигаем диодик, спим.

Единственная разница - я не включаю PWM, а просто подаю напряжение. Может в этом проблема?

Araris
Offline
Зарегистрирован: 09.11.2012

Проблема в том, что Вы не затруднились увидеть скетчи, приведённые в статье по ссылке.

Хорошо, вот один из них :

/* here are code for turn ON\OFF LED by IR RECIVER and TV remote
you can use this code by changing two values by your tv remote value by using sample program
sample program used to detect vlue for differnt button of your remote
so kindly use sample program first of all to get value then put those value in this program
and your job is DONE*/
#include <IRremote.h>



int RECV_PIN2 = 2;

IRrecv irrecv2(RECV_PIN2);
int led =8;
decode_results results2;

void setup()
{
  Serial.begin(9600);
  pinMode(led, OUTPUT);
  irrecv2.enableIRIn(); // Start the receiver
}

void loop() {
  if (irrecv2.decode(&results2)) {
    if (results2.value == 33441975)
    {
      digitalWrite(led, HIGH);
      Serial.println("Power Pressed");
    }
    else if (results2.value == 33446055)
    {
      digitalWrite(led, LOW);
      Serial.println("Mode Pressed");
    }
    //    Serial.println(results2.value);
    irrecv2.resume(); // Receive the next value
  }
}

Сравните со своим...

ukrop
Offline
Зарегистрирован: 15.07.2016

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

Моя цель - счетчик посетителей (диод светит, датчик принимает), а не прием сигнала с пульта сони.

ukrop
Offline
Зарегистрирован: 15.07.2016

Можно даже по другому вопрос спросить - может ли этот датчик принимать немодулированный сигнал (постоянное горение диода) или обязательно нужна модуляция с частотой 38 кГц (для этого датчика).

Araris
Offline
Зарегистрирован: 09.11.2012

Датчик работает только с модулированным частотой 38 кГц сигналом.

ukrop
Offline
Зарегистрирован: 15.07.2016

Да, тогда это проясняет, почему же он не видит мой диод. Завтра буду пробовать модулировать. Спасибо за помощь

ukrop
Offline
Зарегистрирован: 15.07.2016

Хотел дополнить: http://www.righto.com/2010/03/detecting-ir-beam-break-with-arduino-ir.html

По ссылке библиотека (которая и в вашем ответе умопинается), но она описывает еще функцию "подать на ногу 3 на котороый висит IR-диод 38 кгц", после чего мой скетч должен по идее работать правильно :) Используется TIMER2 (можно через напильник заменить на TIMER1 и ногу 9 или 10).