Добрый день! Есть такая задача: Крыльчатка с прорезями в четырех местах стоит на валу печатной машины, необходимо с помощью щелевых датчиков, либо других от предложений не откажемся, посчитать линейное перемещение этого вала куда прикреплена крыльчатка и передать данные по http. Плата Arduino YUN. Находимся в Москве, для тестов необходимо будет подъехать. Написать скетч можно удаленно, все данные предоставлю необходимые для этого. Жду ценовых предложений Заранее спасибо, Константин
Посещение Москвы в принципе не обязательно, если сможете посоветовать что и где купить для реализации проекта, то мы тут все сами сделаем.
Куда передавать? Посредством чего - есть пожелания? Можно и ESP юзать, и W5100, и GPRS - вариантов есть. Если отвлечься от передачи данных, то для подсчёта кол-ва оборотов (и пересчёта в линейное перемещение чего-то, что стоит на валу) нужен щелевой датчик (выдирается из любого старого сканера/принтера) и свободный пин 2 или 3 ардуины. Остальное - дело техники. Однако, чтобы пересчитать кол-во оборотов в линейное перемещение - надо как минимум знать передаточное отношение - чего у вас там на валу, каретка какая? Слабо понял вот эту фразу: Сам вал, как правило, только крутится, он никуда не перемещается
Посмотрел фото, точно как я и предполагал: надо передаточное отношение знать, там вроде от первичного вала идёт ремень на вторичный, бОльшего диаметра. А то кол-во оборотов в секунду посчитать-то можно, а вот дальше, без знания конкретики - получится в попугаях всё И да - требования к точности расчётов какие? Если уточните по поводу железа, которое планируется юзать для передачи по HTTP - будет сильно понятней и можно будет оценить трудозатраты и предварительную стоимость
Передавать на веб сервис 1C по средствам apache. Щелевые датчики уже стоят, как видно на фотках, и работают. Проблема только в том, что при сборе данных и передаче одновременно на веб сервис ардуина начинает не справляться и пропускает значения. Сейчас идет передача голых данных в 1С, мы хотели там обрабатывать полученную информацию, но есть предположение, что ее лучше обрабатывать на стороне ардуино и передавать уже линейную длину. По поводу вала... По формуле L=2ПR ( И тогда мы заставим его ходить) Он может крутиться, как вперед, так и назад. Для этого установили два датчика рядом, чтобы отслеживать и либо прибавлять, либо вычитать линейное перемещение.
Передаточное отношение не важно, после написания скетча я дам данные или сам их забью, чтобы преобразовать реальные значения. В машине я могу задать длину, на которую прокрутить материал. Например задам 1 метр и получу, что столько то значений - это 1 метр. Если вы под железом имели ввиду способ передачи, то по Wi-fi. Сигнал стабильный, сеть видит без проблем
Так у вас проблема в коде только? Т.е. уже есть, работает, но плохо? Давайте код, глянем, что к чему, возможно, сразу получится найти тонкие моменты.
Код взят из интернета #include <Encoder.h> #include <Bridge.h> #include <HttpClient.h> HttpClient client; int ID = 1; Encoder knobLeft(5, 6); Encoder knobRight(7, 8); void setup() { Serial.begin(9600); Bridge.begin(); } long positionLeft = -999; long positionRight = -999; void loop() { long newLeft, newRight; newLeft = knobLeft.read(); newRight = knobRight.read(); if (newLeft != positionLeft || newRight != positionRight) { Serial.print("Left = "); Serial.print(newLeft); Serial.print(", Right = "); Serial.print(newRight); Serial.println(); client.get("http://apache:apache123!@192.168.1.246/enigma/hs/arduino/data?foto1=" + String(newLeft) + "&foto2=" + String(newRight) + "&arduino=" + String(ID)); positionLeft = newLeft; positionRight = newRight; } } Писали сами, но от тоже тормозил, в идеале датчик с прерыванием, только не из принтера (их можно купить и где), код лучше новый писать, здесь библиотека какая-то прикреплена <Encoder.h>
Дайте ссылку на библиотеку энкодера , а то их как грязи разных. По коду - если подсчёт не на прерываниях сделан - всё печально. Купить щелевой датчик: http://ru.aliexpress.com/af/%D1%89%...3092557&SearchText=щелевой+датчик&blanktest=8 З.Ы. И да, для вставки кода есть кнопочка "code" на панели инструментов редактора
Наши датчики не захотели работать на прерывание, но мы хотели бы на основе прерываний считать. P.S. По этой причине и обратились к специалистам Библиотеку прикрепил.
Библиотека, что вы прикрепили, поддерживает работу по прерываниям, достаточно только обявить Код (C++): #define ENCODER_USE_INTERRUPTS до подключения Код (C++): #include <Encoder.h> И я немного не понял, зачем, собственно, библиотеку для энкодера юзать? У вас стоит задача определять ещё и направление вращения? Для подсчёта кол-ва оборотов в секунду достаточно только считать смену фронтов на пине в прерываниях, код намного проще: Код (C++): #define INTERRUPT_PIN 2 // на каком пине прерывание #define INTERRUPTS_PER_ROTATION 10 // сколько прерываний на один оборот крыльчатки volatile uint16_t revolutions = 0; int rpm = 0; unsigned long lastMillis = 0; void interruptTrigger() { revolutions++; } void setInterrupt() { attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), interruptTrigger, FALLING); } void clearInterrupt() { detachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN)); } void setup() { setInterrupt(); } void loop() { unsigned long curMillis = millis(); if(curMillis - lastMillis > 1000) { lastMillis = curMillis; clearInterrupt(); rpm = revolutions * (60/INTERRUPTS_PER_ROTATION); revolutions = 0; setInterrupt(); Serial.print("RPM =\t"); Serial.println(rpm); } } Вот навскидку код, который изменяет кол-во оборотов в минуту, основываясь на кол-ве прерываний на полный оборот (т.е. кол-ве прорезей на крыльчатке вашей). Можете проверить у себя. Если заработает как надо - продолжим
Да материал может крутиться как вперед, так и назад. Я выше это писал Он может крутиться, как вперед, так и назад. Для этого установили два датчика рядом, чтобы отслеживать и либо прибавлять, либо вычитать линейное перемещение. У нас машины печатают баннеры и для автоматического подсчета длины мы заморочились ардуино. А сама суть сделать порулонный учет, для этого нужно считать длину отпечатанного материала.
Понятно. Вот что значит нечёткое ТЗ. Согласитесь, из первоначального поста совершенно непонятен тот факт, что нужно ещё определять, в какую сторону движется вал. Вот на таких мелочах и горим. А то, что вы позже написали - как-то пропустилось благополучно