Бугор, старая привычка Т.к. знаю что еще 100500 раз буду переделывать и сам же что-то забуду. В студенческие годы много программировал для себя.
kazu
Кандидат наук
Харьков
374 74
Отв.41 12 Сент. 15, 01:50 (через 1 мин)
аффтар! пажалуста!! переименуй тему!!! ардВино уж очень режет слух. она ведь ардУино!! Хотя... Ард и Вино... ну может быть. Но все равно неблагозвучно.
Бугор
Магистр
Город Герой Магадан, St. Louis
211 103
Отв.42 12 Сент. 15, 01:56 (через 7 мин)
webserge, Смотрю ты приложение DallasTemperature пользуешь Щуп сам делал или готовый на DS18** покупал?
Бугор
Магистр
Город Герой Магадан, St. Louis
211 103
Отв.43 12 Сент. 15, 01:59 (через 3 мин)
уж очень режет слухkazu, 12 Сент. 15, 01:50
Ты вслух читаешь? яб поменял, но чертивознает как оно меняется
webserge
Доцент
Саратов
1.7K 468
Отв.44 12 Сент. 15, 02:10 (через 12 мин)
Бугор, брал у китайцев готовые в нержовой гильзе. Такого плана - http://ru.aliexpress.com/...2233096288.html К ним на концы подпаивал резистор и удлинял кабелем микрофонным, на видео синий такой. Очень уж он мне понравился, 2 жилы в нем внутри в изоляции и +1 жила как оплетка по внешнему слою, ее на землю подпаиваю. При длине от разъема до датчика не более 2м каких либо глюков при съеме показаний Т не испытывал. Хотя по инету пишут что такое возможно при длинных кабелях или плохой защиты от помех. На конец кабеля DIN разъем такой - http://www.ebay.com/...K%3AMEBIDX%3AIT Но сейчас хочу эту связку переделать на разъемные соединения. Был случай как один датчик оторвал с провода, сука вылезать из штуцера не хотел. Так вот имея съемные датчики я бы на его место просто поставил бы запасной, а так пришлось все разбирать и перепаивать. Сейчас делаю на таких колодочках - http://www.ebay.com/...K%3AMEBIDX%3AIT . Промаркировал датчики сразу разными цветами термоусадкой, вот так будет выглядеть. Датчиков будет уже не два как сейчас, а три. Третий в ТСА дефлегматора для отслеживания аварийного перегрева.
2015-09-12 02-07-45.JPG Arduino или дешевая автоматика. Автоматика.
Бугор
Магистр
Город Герой Магадан, St. Louis
211 103
Отв.45 12 Сент. 15, 02:15 (через 6 мин)
, старая привыwebserge, 12 Сент. 15, 01:50
отовые в нержовой гильзеwebserge, 12 Сент. 15, 02:10
Бугор, разъем зачетный, понравился) У меня если код посмотреть поподробнее есть раздел в меню называется "Temp Calibr". Как раз это и есть для калибровки датчиков. Пробовал калибровать в кружке с кипящей водой, получалась херня какая-то, чуть по другому датчик положил и уже другие значения. Потом придумал калибровать в перегонном кубе с кипящей водой. Все стало как нужно, после многократного перетыкивание датчиков все показания такие же как и были с первого раза. В скетче в самом начале есть переменные в которые вписываю поправочные значения для датчиков, можно конечно в eeprom памяти сохранять, но чето мне лень было так делать))
Бугор
Магистр
Город Герой Магадан, St. Louis
211 103
Отв.47 12 Сент. 15, 02:50 (через 13 мин)
возвращаясь к вопросу управлением плавно открывающегося моторизированного крана не сложно и надежно, можно открывать постепенно можно и сразу как в этом моем видео
/* подробнее читать тут http://tronixlabs.com/...2a-and-arduino/ * Эксперимент , регулировка открытия/закрытия моторизированного клапана с заданым интервалом * Motor Controller - Stepper Motor Drive Controller Board Module L298N Dual H Bridge DC For Arduino */
//Motorized Valve int myMotorSpeed = 9; int Direction_01 = 8; int Direction_02 = 7; int valveOpen = 6; int ValveClosed = 5; int vOpen = 1; int vClosed = 1;
void setup() { Serial.begin(9600); // set the motor control pins to outputs pinMode(myMotorSpeed, OUTPUT); pinMode(Direction_01, OUTPUT); pinMode(Direction_02, OUTPUT); }
void ValveController() { // open and close the valve //Open start=millis(); //начало цикла digitalWrite(Direction_01, HIGH); digitalWrite(Direction_02, LOW); delay(2500); // интервал finished=millis(); //окончание цикла elapsed=finished-start; //затраченное время в милисекундах Serial.print ("Valve Open = " ); //vOpen считает сколко раз кран был открыт Serial.print(vOpen); Serial.print("\t Time to open = "); //интересно было посмотреть, на самом ли деле тратится 2,5 секунды Serial.println(elapsed); vOpen = vOpen + 1; // плюс один к счетчику
// скорость с которой наш мотор будет вращаться = 250 из возможного диапозона 0~255 //тут можно повозится созначением. Так же можно написать модуль для плавного зауска/остановки мотора //это будет хорошо видно с мотором без понижающего редуктора analogWrite(myMotorSpeed, 250); delay(500); // now change motor directions //Close start=millis(); digitalWrite(Direction_01, LOW); digitalWrite(Direction_02, HIGH); delay(2500); // интервал finished=millis(); elapsed=finished-start; Serial.print ("Valve Closed = " ); //vClosed считает сколко раз кран был закрыт Serial.print(vClosed); Serial.print("\t Time to close = "); Serial.println(elapsed); vClosed = vClosed + 1; // плюс один к счетчику
и если С++ вас напрягает, то для Arduino можно запросто писать в VB.NetБугор, 12 Сент. 15, 03:56
Вот тут промашка, приведенная ссылка показывает как написать на VB.Net консольное приложение которое через serial порт подключится к ардуине и считает инфу. Писать ПО для самой ардуины все же нужно на C++, документацию по IDE для VS изучаю, предварительно мне нравится что смогу снова работать с VS.
slony
Магистр
Сочи
246 63
Отв.56 12 Сент. 15, 23:08 (через 8 мин)Автор был выпивший
Бугор
Магистр
Город Герой Магадан, St. Louis
211 103
Отв.57 13 Сент. 15, 01:18
Вот тут промашкаwebserge, 12 Сент. 15, 23:01
возможно, я для Ардуино в VB.Net писать не пробовал
Добавлено через 2мин.:
стандартной ide пока хваталоslony, 12 Сент. 15, 23:08
кому как, стандартный меня с первого дня не впечатлил VS 2015 я на работе пользуюсь, как-то привычнее
Бугор
Магистр
Город Герой Магадан, St. Louis
211 103
Отв.58 22 Сент. 15, 22:25
Не большие доработки, и код немного почистил, видео выложу чуть позже, сейчас времени совсем ни на что не хвататет. В общих чертах - механизм работает без каких либо нареканий кроме того, что не очень мне нравится то, что значение температуры контролирующее открывание/закрывание крана закодировано, хотелось бы такое значение вносить в ручную. По совету webserge заказал LCD shield с кнопачками, жду когда прилетит. Так же, я посчитал сколько пульсов нужно для того, что-бы открыть/закрыть мой кран и прибавляю или вычитаю единичку в зависимости от направления движения мотора.
/* reference http://tronixlabs.com/...2a-and-arduino/ * An experiment to make motorized valve opend and close on demand * the idea is to have valve position controlled with respect to a preset temperature * Temperature controller - MAX6675 Module For K Type Thermocouple Sensor * Motor Controller - Stepper Motor Drive Controller Board Module L298N Dual H Bridge DC For Arduino */ #include "max6675.h"
//Temperature int thermo_vcc_pin = 13; int ktcSO = 12; int ktcCS = 11; int ktcCLK = 10;
//Motorized Valve int myMotorSpeed = 9; int Direction_01 = 8; int Direction_02 = 7; int valveOpen = 6; float onePercent = 2.631578947; int percentOpen = 0; float thresholdTemp = 27.75; //значение температуры контролирующее открывание/закрывание крана float currentTakeOutTemp = -1;
//ToDo: connect and code for limit switches int valveOpenValue = 0; // Valve Open Limit Switch
MAX6675 ktc(ktcCLK, ktcCS, ktcSO);
void setup() { Serial.begin(9600); // немного времени на стабилизацию delay(500); pinMode(thermo_vcc_pin, OUTPUT); digitalWrite(thermo_vcc_pin, HIGH); // set the motor control pins to outputs pinMode(myMotorSpeed, OUTPUT); pinMode(Direction_01, OUTPUT); pinMode(Direction_02, OUTPUT); analogWrite(myMotorSpeed, 255); delay(500); //закрываем кран digitalWrite(Direction_01, LOW); digitalWrite(Direction_02, HIGH); delay(2500); }
void ValveController() { //открываем кран если температура поднялась выше заданной currentTakeOutTemp = ktc.readCelsius(); if (currentTakeOutTemp > thresholdTemp and valveOpenValue < 39){ digitalWrite(Direction_01, HIGH); digitalWrite(Direction_02, LOW); delay(50); //интервал (пульс), кран открывается valveOpenValue++; //gradually open the valve, takes 38 steps to open the valve 100% percentOpen = onePercent * valveOpenValue; //считаем на сколько % кран отрыт // turn the motor off digitalWrite(Direction_01, LOW); digitalWrite(Direction_02, LOW); } else if (currentTakeOutTemp <= thresholdTemp and valveOpenValue > 0) { // меняем полярность и закрываем кран digitalWrite(Direction_01, LOW); digitalWrite(Direction_02, HIGH); delay(50); //интервал (пульс), кран закрывается valveOpenValue--; //постепенно закрываем кран, для польного закрытия необходимо 38 пульсов percentOpen = onePercent * valveOpenValue; //считаем на сколько % кран отрыт // turn the motor off digitalWrite(Direction_01, LOW); digitalWrite(Direction_02, LOW); } Serial.print("Deg C = "); Serial.print(currentTakeOutTemp); Serial.print("\t Valve Open = "); Serial.print(percentOpen); Serial.println("%"); }