PDA

Просмотр полной версии : Ардуино парктроник на базе Sho-Me 2616


NSMax
19.10.2015, 12:48
Здравствуйте, уважаемые :)
Давненько я тут не был.
Предлагаю Вашему вниманию крайне простую конструкцию парктроника на базе SHO-ME 2616, но думаю, что в качестве донора может стать любой с похожей схемотехникой, а она как правило одинакова.

Итак имеем парктроник в котором есть MUX - HCF4032, Усилитель - NE5532, обвязка по питанию и процессор - EM78P156.

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

Первым делом разобрался с пинами мукса

http://pccar.ru/attachment.php?attachmentid=41328&stc=1&d=1445241147

и снял эпюры:

http://pccar.ru/attachment.php?attachmentid=41327&stc=1&d=1445240905

Видим что на "Common X" - посылается сигнал 40кГц длительностью 0.48ms и потом он отлавливается с "Common Y" после операционника. Также подрыгиванием ног 10 и 9 можем выбирать датчик с которым работаем в текущий момент

http://pccar.ru/attachment.php?attachmentid=41329&stc=1&d=1445241623

Ну а дальше все крайне элементарно - дрыгаем ногой ардуины и ждем ответ на 2й ноге (int1). Вот кусок кода дрыганья ногами.
2-я чтение
9-я запись пакета в порт
3,4 - MUX select

long time_delay;

void setup()
{
Serial.begin(115200);
DDRD = B11111001;
}

void loop()
{
DDRD = B11111101;
PORTD = B00011000;
tone(OUT, 39200, 3);
_delay(0);
pinMode(IN, INPUT_PULLUP);
_delay(30000);
PORTD = B00000000;
}

void _delay(int x) {
time_delay = 0;
time_delay = micros();
while (micros() - time_delay < x) { }
x = 0;
}

На выходе имеем следующее:

http://pccar.ru/attachment.php?attachmentid=41330&stc=1&d=1445242563

Из картинки видно, что эхо прилетело через 17.408ms а это с учетом скорости звука 340.29m/s и пути в оба конца, составляет 2961,88416 mm. Правда есть один нюанс - скорость переключения MUXа из режима записи в режим чтения (или еще какие переключения) - 0.442ms что составляет 75,20409 мм что накладывает ограничение на минимальное измеряемое расстояние.
В ходе экспериментов удалось замерить с достаточной точностью (~10см) расстояние в 5 метров.

А теперь фото парктроника с точками подключения:

http://pccar.ru/attachment.php?attachmentid=41331&stc=1&d=1445244292
Справа на разъемах это соответствие пинам MUX

Ниже:
1 - MUX select B
2 - MUX select A
3 - Common X - запись
4 - Common Y - чтение

(vS)
20.10.2015, 09:18
насколько точно воду мерит?

NSMax
20.10.2015, 22:27
Привет! Виктор....
Получилось следующее: при условии спокойной воды (не в режиме аэрации и при выключенном насосе наполнения) на расстояниях 20-15 см точность около 4х см, при расстояниях 120 - 240см (мне больше не надо) разброс не превышает 10 мм...
Сейчас заморочен написанием правильного кода. И у меня на выходе данные будут передаваться стандартным I2C 3-мя байтами. Причем не сырыми, а усредненными. Полный цикл опроса и обработки будет около 0,5 сек + одна нога на внешний INT и режим сна. При работе устройство пожирает около 100ма... Как то так.

(vS)
21.10.2015, 06:18
Привет, Макс

100ма не дофига?
при условии стандартной бочки 200л, там наверно 120 высота емкости, что там будет с точностью? и ограниченность пространства насколько сказывается? т.е. насколько узкий "луч" ?

NSMax
21.10.2015, 08:31
Высота у меня 140см. Расстояние от верхней границы воды до. Места установки около 20см. Я стал морочится когда мех. датчик навернулся а поменять его вообще не вариант, т.к. стоит у дна. Точность буду пробовать улучшить. По поводу 100ма - мой дипломный проект на подобную тему жрал около 4х ампер ) Правда был на ттл весь )

(vS)
22.10.2015, 00:32
у меня сейчас на руках автономная (читай на батарейках) поделка индусских студентов с громким названием. Почему студенты? элементарная база используемая мною в курсовой работе 20 лет назад, типовые схемы включения, в том числе "все включено". жрет 300ма, пытаюсь загнать в 25ма )))