Просмотр полной версии : Помогите написать программу для микропроцессора
Доброго всем времени суток! Есть необходимость написать программку для avr или pic. Нужно преобразовать изменение сопротивления датчика давления в килограммы и вывести в цифре на светодиодный индикатор. Характеристика датчика линейная. Оплачу. Предложения в личку.
выловлено гуглом - может подойдет? тыц (http://cxem.net/mc/mc299.php)
(для повторения все данные есть в статье)
olegtur77
19.12.2015, 07:45
Датчик давления имеется ввиду тензодатчики? Стенд для измерения статической тяги моторов?
- - - Добавлено - - -
http://arduino-diy.com/arduino-rezistivnyy-datchik-davleniya,
ну или купить кухонные веси, вытащить внутренности и пристроить к устройству.
ТЗ не определено
это датчик давления масла от авто, приспособленный для измерения усилия при затяжке параплана тросом(так называемая "малинка")
serg5791
19.12.2015, 18:11
Датчик давления имеется ввиду тензодатчики? Стенд для измерения статической тяги моторов?
- - - Добавлено - - -
http://arduino-diy.com/arduino-rezistivnyy-datchik-davleniya,
.....
Не слишком удачный пример. Там датчик цифровой, а автомобильный датчик аналоговый.
Более удачная тема с характеристиками датчика http://arduino.ru/forum/apparatnye-voprosy/tsifrovoi-manometr-s-datchikom-davleniya-masla-mm393a-vaz2106
Правда код там не слишком, сложный с выводом информации на СOM порт и ЖКИ дисплей.
Для цели автора темы луше бы подошел трехразрядный или четырехразрядный светодиодный индикатор (7ми сегментный, для чисел) типа такого http://www.kosmodrom.com.ua/el.php?name=E30361-I-BL-8-W
На улице его лучше видно, а точности трех знаков хватит с большим запасом.
Тут главные вопрос надежность? Если плата заглючит то парапланеристу не будет лишний риск?
Еще вопрос по калибровке или тарировке датчика в связи с не стандартным использованием.
По идее надо бы заложить такую функцию в программе. Или хотя бы возможность ручного ввода верхнего значения шкалы для датчика. Если верить интернету, у автомобильных датчиков давления большой разброс по конкретным экземплярам.
P.S/ Ops, извиняюсь про пример с цифровым датчиком, это первый ответ Dmitry
это датчик давления масла от авто, приспособленный для измерения усилия при затяжке параплана тросом(так называемая "малинка")
Программа тут самое плевое дело. Для начала нужно определиться с подключением индикатора и сколько цифр выводить, потом задать точность измерения этих самых килограммов ( до 1 кг , до 0,1 кг ??). Далее определиться жестко типом процессора.
Я бы выбрал Ардуино и LCD дисплей ( самый простой) - выводи себе хоть 16 цифр. Программы там на десяток строк. А вот LED индикацию не люблю - ток жрет, динамическую индикацию просит :), регистр внешний так и просится или токовые ключи.
В общем определяйтесь с ТЗ поточнее, может кто и согласится. Может и я решусь после 15 января, если не рехнусь от такого количества выходных на Новый Год.
с датчика характеристику уже снял, индикатор светодиодный 2 знака, время индикации(пересчёта вывода значения) около 0,5 секунды точность 1кг , процессор значения не имеет - программаторы в наличии, сборка тоже не проблема - отработана технология изготовления плат с фоторезистом. В общем в радиоделе не новичёк, а вот в программировании дуб-дубом, поэтому и прошу помощи.
serg5791
19.12.2015, 22:37
с датчика характеристику уже снял, индикатор светодиодный 2 знака, время индикации(пересчёта вывода значения) около 0,5 секунды точность 1кг , процессор значения не имеет - программаторы в наличии, сборка тоже не проблема - отработана технология изготовления плат с фоторезистом. В общем в радиоделе не новичёк, а вот в программировании дуб-дубом, поэтому и прошу помощи.
Если не нужна высокая надежность и у Вас есть время+терпение, то можем попробовать сделать на Ардуино (или на микросхемах ATMEL mega168 - mega 328).
Вариант возможной схемы устройства
Если не нужна высокая надежность и у Вас есть время+терпение, то можем попробовать сделать на Ардуино (или на микросхемах ATMEL mega168 - mega 328).
Вариант возможной схемы устройстваа что с надёжностью этой ардуинки не так? Весь сезон отлетал с вариометром на такой, общей наработки около 20-ти часов и никаких сбоев, так что в понедельник закажу и в среду чего-то соберу, но пробовал уже под неё скетч переделывать с других измерителей - ума не хватило:drag:, если поможете, буду очень благодарен.
serg5791
20.12.2015, 10:13
а что с надёжностью этой ардуинки не так? Весь сезон отлетал с вариометром на такой, общей наработки около 20-ти часов и никаких сбоев, так что в понедельник закажу и в среду чего-то соберу, но пробовал уже под неё скетч переделывать с других измерителей - ума не хватило:drag:, если поможете, буду очень благодарен.
Будете Ардуинку выбирать учтите, что их много вариантов даже но одной MEGA368-
с встроенным преобразователем порта USB (FTDI)
c отделяемым преобразователем USB (FTDI)
без преобразователя USB (FTDI)
Удобней всего с встроенным USB, можно зашивать программу без программатора.
Но если нужен минимальный вес (можно сэкономить 2-3 грамма) и габариты, то можно и без него.
По надежности, то просто дать гарантию 100% что не будет сбоев не смогу. Но работать и выдавать нужные показания будет.
Схемку и программу предлагаю доработать по шагово:
1) цепляем индикаторы и проверяем работу
2) реализуем АЦП и обработку данных с датчика с индикацией
Да и предложенный вариант схемы тоже обсуждаем, индикаторы подключены для динамической индикации, но можно реализовать и статический вариант (выходов портов хватает)
serg5791
20.12.2015, 13:38
nano V 3.0 подходит?
да подойдет
serg5791
29.12.2015, 10:43
Привет.
За основу программы взял пример http://www.radio-magic.ru/arduino-projects/123-led-seg
Немного доработал .
Тестовая версия программы только для проверки работы индикаторов. Выводит на экран число 64.Проверил в “железе”, работает.
Далее в разработке программы начал с определения значения. Ввел константу-параметр sсala, которая должна соответствовать максимальному пределу измерений датчика (определить при калибровке). Предварительно присвоил ей значение 99.
Датчик 360 Ом и постоянный резистор на 50 Ом образуют делитель напряжения с коэффициентом равным 360/(360+50)=360/410 Ом.
Напряжение с этого делителя поступает на вход 0 АЦП микроконтроллера и в программе преобразуется в число value от 0 до1023. (0…5 вольт)
Для преобразования в нормальные единицы датчика
Value=value/1023*scala*410/360.
Тут еще вопрос по характеристике датчика. Если предположить, что как в статье
при 360 Ом на датчике нет усилия (0 кг).
Тогда нужно формулу доработать до вида
Value=(1023-value)/1023*scala*410/360.
В принципе должно уже работать.
Но для удобства использования нужно осреднять значение. Не очень удобно, если каждые 5 миллисекунд значение меняется, например 19 на 20.
Для этого вводим цикл на 40 замеров и будет выводить на дисплей значения осредненные за 40 замеров, примерно за чуть больше 200 миллисекунд=0.2 секунды.
За 0.2 секунды человек обычно успевает прочесть значение.
Код выкладываю, но пока не проверил в “железе”.
Оба кода выложил в посте в формате программ под ардуино.
Привет.
За основу программы взял пример http://www.radio-magic.ru/arduino-projects/123-led-seg
Немного доработал .
Тестовая версия программы только для проверки работы индикаторов. Выводит на экран число 64.Проверил в “железе”, работает.
Далее в разработке программы начал с определения значения. Ввел константу-параметр sсala, которая должна соответствовать максимальному пределу измерений датчика (определить при калибровке). Предварительно присвоил ей значение 99.
Датчик 360 Ом и постоянный резистор на 50 Ом образуют делитель напряжения с коэффициентом равным 360/(360+50)=360/410 Ом.
Напряжение с этого делителя поступает на вход 0 АЦП микроконтроллера и в программе преобразуется в число value от 0 до1023. (0…5 вольт)
Для преобразования в нормальные единицы датчика
Value=value/1023*scala*410/360.
Тут еще вопрос по характеристике датчика. Если предположить, что как в статье
при 360 Ом на датчике нет усилия (0 кг).
Тогда нужно формулу доработать до вида
Value=(1023-value)/1023*scala*410/360.
В принципе должно уже работать.
Но для удобства использования нужно осреднять значение. Не очень удобно, если каждые 5 миллисекунд значение меняется, например 19 на 20.
Для этого вводим цикл на 40 замеров и будет выводить на дисплей значения осредненные за 40 замеров, примерно за чуть больше 200 миллисекунд=0.2 секунды.
За 0.2 секунды человек обычно успевает прочесть значение.
Код выкладываю, но пока не проверил в “железе”.
Оба кода выложил в посте в формате программ под ардуино.
тоже нашёл эту статью, собрал схемку, залил скетч, но потенциомер ещё не припаивал. Индикатор работает. С датчиком будет проблема - слишком пологая характеристика - при нагрузке 20 кг сопротивление 130 Ом, с добавлением каждого кг падает по 1 Ом, думаю, что АЦП не сможет адекватно пересчитывать столь малое изменение напряжения, да ещё кабель от датчика до устройства около 5 метров, будет много шумов. Буду ставить усилитель возле датчика.За коды спасибо - попробую залить.
serg5791
29.12.2015, 21:24
тоже нашёл эту статью, собрал схемку, залил скетч, но потенциомер ещё не припаивал. Индикатор работает. С датчиком будет проблема - слишком пологая характеристика - при нагрузке 20 кг сопротивление 130 Ом, с добавлением каждого кг падает по 1 Ом, думаю, что АЦП не сможет адекватно пересчитывать столь малое изменение напряжения, да ещё кабель от датчика до устройства около 5 метров, будет много шумов. Буду ставить усилитель возле датчика.За коды спасибо - попробую залить.
Пологая характеристика не проблема! Даете табличку характеристики датчика и вводим подпрограммку расчета значений по табличным значением c апроксимацией значений кубическим сплайном (функцией y=a+b*x+c*x^2+d*x^3).
Идем от простого к сложному.
1) Шаг первый. Работа индикаторов. +
2) Шаг второй. Работа АЦП и отображение на индикаторах значений, пусть и с плохой точностью.
3) Шаг третий. Доводка до нормального вида и устранение проблем, улучшения точности за счет усложнено математической обработки
P.S. Усилитель не советую, с этого "датчика" идет сигнал нормальной амплитуды от 0... до почти +5В. Усилитель ничего не даст, это не тензодатчик с мв сигналом.
Если бюджет позволяет, то может лучше взять нормальный покупной датчик типа такого http://zemic.com.ua/catalog/ru/2/19/75/p/1 в модификации на 100 кг и с нужным вариантом крепления.
К нему придется городить простейший тензоусилитель, например на микросхеме INA122.
Это тензодатчики S типа идеальный вариант для датчиков на растягивающее усилие. Лучше конечно датчики немецкого производства фирмы HBM, но дюже дорого.
- - - Добавлено - - -
Нашел ошибку в программее. Исправил.
value=scala-(value*scala/1023*410/360);
(Value=(1023-value)/1023*scala*410/360. неправильные значения, т.к. не учел что делитель обрезает максимальное выходное напряжение с 5 в до 4.39 В )
Знал-бы, что есть такие датчики, не стал-бы городить огород с гидравликой:), но сейчас переделывать уже не вариант - буду доделывать как есть.
serg5791
30.12.2015, 17:03
Знал-бы, что есть такие датчики, не стал-бы городить огород с гидравликой:), но сейчас переделывать уже не вариант - буду доделывать как есть.
Век живи, век учись....
С наступающим Новым Годом!
припаял переменный резистор, покрутил, - работает(скетч отсюда http://www.radio-magic.ru/arduino-projects/123-led-seg), подключено 2 первых разряда индикатора, во втором разряде не индицирует 0, показания просто пропадают - что не так?
С наступающим Новым Годом!
serg5791
31.12.2015, 11:30
припаял переменный резистор, покрутил, - работает(скетч отсюда http://www.radio-magic.ru/arduino-projects/123-led-seg), подключено 2 первых разряда индикатора, во втором разряде не индицирует 0, показания просто пропадают - что не так?
С наступающим Новым Годом!
Пропадают во всех разрядах при выводе 0 или только на 2 м?
Если да, то какие сопротивления резисторов поставили к индикаторам?
И еще при выводе "0" значения в текст программы зачем то выводится на 1 число меньше.
Исходный код
void showNumber( int number)
{
if(number == 0) {
showDigit( 0, nbrDigits-1) ; // display 0 in the rightmost digit
....
Исправить на
void showNumber( int number)
{
if(number == 0) {
showDigit( 0, nbrDigits) ; // display 0 in the rightmost digit
Здравствуйте! С Новым Годом!
Пытался залить эти скетчи
http://forum.modelka.com.ua/images/metro/blue/misc/paperclip.png Вложения
http://forum.modelka.com.ua/images/attach/zip.gif Test1.zip (http://forum.modelka.com.ua/attachment.php?attachmentid=241641&d=1451378598) (1.2 Кб, Просмотров: 1)
http://forum.modelka.com.ua/images/attach/zip.gif izmerenie.zip (http://forum.modelka.com.ua/attachment.php?attachmentid=241642&d=1451378598) (1.1 Кб, Просмотров: 1)
выдаёт такое 241861
serg5791
02.01.2016, 10:52
Привет.
Выдает ошибку переопределение функции Setup ( второй раз объявит функцию Setup).
Закройте Ардуино. И потом заново откройте но только с одним проектом. Или Test или Izmerenie.
У Вас попытка скомпилировать сразу 2 программы.
Выдает ошибку переопределение функции Setup ( второй раз объявит функцию Setup).[/COLOR]
Закройте Ардуино. И потом заново откройте но только с одним проектом. Или Test или Izmerenie.
У Вас попытка скомпилировать сразу 2 программы.]
Спасибо, всё работает. Местами начинаю понимать код:)
Можно написать программу для Ардуино , а прошить в Atmega 8, схема совпадения выходов есть
245601
Powered by vBulletin® Version 4.2.1 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot