atmega328p и ик датчик движения

Dmitriy.I
Offline
Зарегистрирован: 28.08.2016

Здравствуйте, заранее извиняюсь если тема уже поднималась. Проблема такая: спаял всю необходимую обвязку к МК atmega328p. Простые скетчи с миганием светодиода работают прекрасно. Попробовал подключить к своей схеме ик датчик движения HC-SR501 и тут контроллер ведет себя не очень-иногда срабатывает на датчик, правда очень плохо, потом и вовсе не реагирует. Запитывал его от кроны через стабилизатор LM7805 и напрямую от 3-4 батареек АА. Всё одинаково. На родной плате arduino uno r3 всё работает отлично, даже с подсаженой 9 вольтовой батарейкой. Такое впечатление, что питания не хватает одновременно на мк и на датчик. Не может быть проблема в стабилизаторе? на ардуинке стаб ams1117-на ней всё норм пашет, у меня же ни в какую. В чём может быть проблема?

Вот мой скетч:

01#include <avr/sleep.h>
02#include <avr/power.h>
03int pin = 2;
04int led=8;
05void wakeUp()
06{
07  digitalWrite(led,HIGH);
08}
09void EnterSleep()
10{
11  attachInterrupt(0, wakeUp, RISING);
12  delay(100);
13  sleep_enable();
14  sleep_mode();
15   
16}
17void setup()
18{
19  Serial.begin(9600);
20  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
21  pinMode(pin, INPUT);
22  pinMode(led,OUTPUT);
23}
24void loop()
25{
26  delay(1000);
27  digitalWrite(led,LOW);
28 EnterSleep();
29}

 

ptr
Offline
Зарегистрирован: 28.05.2016

А схему покажите.

Кстати, при питании от трех батарееке по полтора вольта вы получите не более 4.5 вольт, а датчик по даташит требует минимум 5V

https://www.mpja.com/download/31227sc.pdf

С учетом того, что выход у него при этом 3.3V хотелось бы увидеть, как Вы его согласовали с пятивольтовым входом МК.

Dmitriy.I
Offline
Зарегистрирован: 28.08.2016

Вот схема

5в согласен...однако я запитывал и через стабилизатор 7805 от 9в и подавал выходные 5в на мк и датчик- результат тот же. Может конечно что то не так делаю, я в этом деле пока что новичек)

ptr
Offline
Зарегистрирован: 28.05.2016

OUT датчика, судя по схеме в даташите, 3.3V c ОУ через резистор в 1К. Есть подозрение, что он не совсем 0V выдает.

Попробуйте:

1. Подтянуть выход датчика резистором 10К к земле.

2. Поступить правильно, и через резистор в 1К подключиться к базе NPN транзистора с эммитером на земле и коллектором, через ограничивающий резистор в 150Ом на входе МК. Транзистор любой маломощный, хоть КТ315. Чтобы вход МК не висел в воздухе при закрытом транзисторе, подтянуть его резистором 10К к +5V

 

Dmitriy.I
Offline
Зарегистрирован: 28.08.2016

Спасибо, попробую!

Dmitriy.I
Offline
Зарегистрирован: 28.08.2016

Если я Вас правильно понял, то выход датчика подключить к базе транзистора, коллектор которого через резистор 150 ом ко 2 пину мк, эмиттер-к земле, и 2 пин мк замкнуть с выводом 5в через резистор 10 Ком?

Dmitriy.I
Offline
Зарегистрирован: 28.08.2016

Так?

ptr
Offline
Зарегистрирован: 28.05.2016

Да, но учтите в программе, что эта схема инвертирует сигнал. То есть при 1 на выходе датчика транзистор откроется и на входе микроконтроллера будет 0. И наоборот, при 0 на выходе датчика на входе микроконтроллера будет 1.

 

Dmitriy.I
Offline
Зарегистрирован: 28.08.2016

Спасибо, попробовал первый вариант, который Вы предложили-работает, второй сейчас гляну. А чем 2 вариант лучше можете объяснить? или можно также и первый использовать?

ptr
Offline
Зарегистрирован: 28.05.2016

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

Dmitriy.I
Offline
Зарегистрирован: 28.08.2016

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

Dmitriy.I
Offline
Зарегистрирован: 28.08.2016

может ли второй вариант не дорабатывать из-за недостаточного снижения напряжения? при реакции датчика напряжение на 2 порту падает до 0,1...V, а должно быть 0, я правильно понимаю?

Dmitriy.I
Offline
Зарегистрирован: 28.08.2016

если поставить резистор на коллектор транзистора посильней это поможет?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Dmitriy.I пишет:

напряжение на 2 порту падает до 0,1...V, а должно быть 0, я правильно понимаю?

Нет, 0.1В это нормально. Логические уровни позволяют и больше:

https://learn.sparkfun.com/tutorials/logic-levels

ptr
Offline
Зарегистрирован: 28.05.2016

Dmitriy.I пишет:

может ли второй вариант не дорабатывать из-за недостаточного снижения напряжения? при реакции датчика напряжение на 2 порту падает до 0,1...V, а должно быть 0, я правильно понимаю?

0.1 вполне достаточно и с большим запасом. А в программе точно поправили, что не по переднему фронту, а по заднему реагировать?

Вместо

attachInterrupt(0, wakeUp, RISING);

Надо

attachInterrupt(0, wakeUp, FALLING);

 

 

ptr
Offline
Зарегистрирован: 28.05.2016

Dmitriy.I пишет:

если поставить резистор на коллектор транзистора посильней это поможет?

На коллекторе вообще у нас чисто защитный резистор, на случай, если при открытом транзисторе по ошибке в программе (заливке не той программы) порт будет включен на вывод и будет выведена единицу на этот порт.

 

Dmitriy.I
Offline
Зарегистрирован: 28.08.2016

да все именно так и сделал, но по-прежнему на датчик не реагирует

может из-за того что напряжение не поднимается до 3V, для ардуины я так понял минимальное напруга, при котором лог.1, но он не доогоняет до 3v

Dmitriy.I
Offline
Зарегистрирован: 28.08.2016

а поэтому по программе он и не реагирует на FALLING, т.к. лог. 1 нет и не на что прерыванию реагировать

ptr
Offline
Зарегистрирован: 28.05.2016

Dmitriy.I пишет:

а поэтому по программе он и не реагирует на FALLING, т.к. лог. 1 нет и не на что прерыванию реагировать

То есть транзистор не закрывается вообще и все время в режиме насыщения? Потому как, если он закроется, то через 10К резистор будет честная 1 на 5 вольт.

Dmitriy.I
Offline
Зарегистрирован: 28.08.2016

по ходу да транзистор не закрывается, через резистор где то 0,3 с копейками вольт

ptr
Offline
Зарегистрирован: 28.05.2016

Чудеса. Проэмулировал схему.

Все красиво:

Dmitriy.I
Offline
Зарегистрирован: 28.08.2016

сейчас попробую разобраться, может я в схеме напартачил

ptr
Offline
Зарегистрирован: 28.05.2016

А транзистор конкретно какой?

Dmitriy.I
Offline
Зарегистрирован: 28.08.2016

кт3102

ptr
Offline
Зарегистрирован: 28.05.2016

Dmitriy.I пишет:

кт3102

Проэмулировал с BC546B (аналогом 3102) - все нормально.
 

ptr
Offline
Зарегистрирован: 28.05.2016

Попробовал еще ухудшить параметры сигнала. Чтобы от 1 до 2 вольт прыгал. Тогда приходится принудительно к земле притягивать базу транзистора. Вот так:

Dmitriy.I
Offline
Зарегистрирован: 28.08.2016

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