diakin, не все счетчики это умеют. А те, которые умеют, начинаются от двух тысяч. И полтора десятка счетчиков обойдется в копеечку. А импульсный выход есть у всех.
Но в общем-то считать импульсы ардуиной наверное проще )
Но надо через прерывания, чтобы импульсы не терялись. На DUE можно использовать прерывание с каждого цифрового входа. Там все несложно.
Что-то в таком духе.
#define pin1 1 // номер пина, на который поданы импульсы со сч 1
#define pin2 2 // номер пина,
#define pin3 3 // номер пина,
// итд
static int count1,count2,count3 ; // ну здесь должно быть беззнаковый тип :)
void setup()
{
// pin1 - номер пина
// IntH1 - функция обработчик прерывания для пина pin1
attachInterrupt(pin1, IntH1, FALLING);
attachInterrupt(pin2, IntH2, FALLING);
attachInterrupt(pin3, IntH3, FALLING);
// итд
}
//******************
void IntH1 ()
{count1++; // инкремент счетчика 1
}
void IntH2 ()
{count2++; // инкремент счетчика 2
}
В моем скетче продуман подсчет импульсов из двух светодиодов (активная и реактивная нагрузка), умножение на коефициент транс.тока(в даном случае на 80) из расчета, что на счетчике написано 5000 имп - 1 кВт.... + Передача на сервер. Пример на www.boyanivka.tk
Здравствуйте помогите с программой для ардуинки нано .
Есть счетчик воды в который вставлен дачик хола цифровой
нужно посчитать количество импульсов ,вывести сигнал работы счетчика, перевести в литры ,сохранить результат и привязать результат к реальному времени, данные сохранить на SD c накоплением статистики.
нужно посчитать количество импульсов ,вывести сигнал работы счетчика, перевести в литры ,сохранить результат и привязать результат к реальному времени, данные сохранить на SD c накоплением статистики.
Возвожно ли такое и какова цена программы?
Ошиблись вы разделом. По моему скромному мнению стоимость такой разработки посторонним человеком с SD, RTC и пока что непонятно какой статистикой стартанет от $100.
Здравствуйте помогите с программой для ардуинки нано .
Есть счетчик воды в который вставлен дачик хола цифровой
нужно посчитать количество импульсов ,вывести сигнал работы счетчика, перевести в литры ,сохранить результат и привязать результат к реальному времени, данные сохранить на SD c накоплением статистики.
Возвожно ли такое и какова цена программы?
Зарание спасибо
"вывести сигнал работы счетчика" - куда вывести? В Serial, на Марс, телеграммой в Уфу? По остальному - сделать реально, нижняя планка цены - $50.
Алексей Н, вы не обольщайтесь выводами JasKo, скетч то писать Вам, и сколько процессорного времени у вас уйдёт на побочные расходы - никому сейчас не известно. Информацию нужно читать,хранить, выводить на дисплей, и всё это складывается в единицы и десятки миллисекунд. Может в какой нибудь библе запросто стоять скрытый delay и мешать алгоритму, а то ещё и сами влепите delay, и всей конструкции крышка. А главное когда вы через месяц пользования подобъёте сумму всех счётчикв и она сильно не сойдётся с основным -то искать где у вас идут потери будет просто нереально. А если вы будете читать специализированный счётчик через RS485 то всего этого гарантированно можно избежать :)
Один МК можно выделить специально для подсчета импульсов со стольких счетчиков, сколько у него хватит ног, и добавить ему очень простой коммуникационный протокол, например UART только на TX по внешнему запросу, чтобы гарантировано не было никаких скрытых delay. Хранить все в оперативной памяти и питать от батарейки. При использовании глубокого сна и прерываниях по изменению уровня, батарейки хватит на годы. Вторым МК или ПК по мере необходимости подавать запрос и получать значения всех счетчиков.
diakin, не все счетчики это умеют. А те, которые умеют, начинаются от двух тысяч. И полтора десятка счетчиков обойдется в копеечку. А импульсный выход есть у всех.
Счетчик электроэнергии Энергомера 900 р. RS485
Но в общем-то считать импульсы ардуиной наверное проще )
Но надо через прерывания, чтобы импульсы не терялись. На DUE можно использовать прерывание с каждого цифрового входа. Там все несложно.
Что-то в таком духе.
#define pin1 1 // номер пина, на который поданы импульсы со сч 1 #define pin2 2 // номер пина, #define pin3 3 // номер пина, // итд static int count1,count2,count3 ; // ну здесь должно быть беззнаковый тип :) void setup() { // pin1 - номер пина // IntH1 - функция обработчик прерывания для пина pin1 attachInterrupt(pin1, IntH1, FALLING); attachInterrupt(pin2, IntH2, FALLING); attachInterrupt(pin3, IntH3, FALLING); // итд } //****************** void IntH1 () {count1++; // инкремент счетчика 1 } void IntH2 () {count2++; // инкремент счетчика 2 }Ну а в loop () делать требуемую обработку.
Не по теме
#include <WiServer.h> #include <Bounce.h> #define WIRELESS_MODE_INFRA 1 #define WIRELESS_MODE_ADHOC 2 #include <DS1307.h> #include "Wire.h" unsigned char local_ip[] = {192,168,0,199}; // IP address of WiShield unsigned char gateway_ip[] = {192,168,0,200}; // router or gateway IP address unsigned char subnet_mask[] = {255,255,255,0}; // subnet mask for the local network const prog_char ssid[] PROGMEM = {"camera"}; // max 32 bytes unsigned char security_type = 3; // 0 - open; 1 - WEP; 2 - WPA; 3 - WPA2 const prog_char security_passphrase[] PROGMEM = {"tdboyanivka"}; // max 64 characters prog_uchar wep_keys[] PROGMEM = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, // Key 0 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Key 1 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Key 2 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Key 3 }; unsigned char wireless_mode = WIRELESS_MODE_INFRA; unsigned char ssid_len; unsigned char security_passphrase_len; char* data1; int but_pin = 7; // кнопка int led_pin = 6; // лампочка импульсов //int led1 = 2; // дежурная лампочка Bounce but = Bounce (but_pin, 5); // конпка принудительной отправки на 7 Bounce act_in = Bounce (A1, 5); // фото акт Bounce react_in = Bounce (3, 5); // фото реакт int act_time = 1; int act_imp = 0; int react_imp = 0; int P_act = 0; int P_react = 0; int count_send = 0; //int led2 = A2; int led3 = 4; //long interval = 15000; // 15 секунд //long interval = 5000; // 5 секунд //long interval = 30000; // 30 секунд //long interval = 60000; // 1 минута //long interval = 300000; // 5 минут //long interval = 3600000; // 1 час long interval = 1800000;// 30 мин long currentMillis, previousMillis; String url; char charBuf[130]; int rtc[7]; int hr, mint, sec; //year, month, day, long updateTime = 0; //uint8 ip[] = {54,86,132,254}; // IP адресс data.sparkfun.com uint8 ip[] = {213,186,33,19}; // IP адресс api.pushingbox.com void check_imp(){ if (act_in.update()) { // проверка фото актив. if (act_in.read() == LOW){ digitalWrite(led_pin, HIGH); act_imp++; P_act = act_imp*16; //Serial.println(act_imp); }} if (react_in.update()) { // проверка фото реактив. if (react_in.read() == LOW){ digitalWrite(led_pin, HIGH); react_imp++; P_react = react_imp*16; }} } void rtc_to_int(){ // year = rtc[6]; // month = rtc[5]; // day = rtc[4]; hr = rtc[2]; mint = rtc[1]; sec = rtc[0]; } void get_clock(){ RTC.SetOutput(DS1307_SQW32KHZ); RTC.get(rtc,true); } void setup() { act_time = 3; DDRC|=_BV(2) |_BV(3); // POWER:Vcc Gnd PORTC |=_BV(3); // VCC PINC3 pinMode(but_pin, INPUT);pinMode(led_pin, OUTPUT);//pinMode(led1, OUTPUT);pinMode(led2, OUTPUT); WiServer.init(NULL); Serial.begin(57600); WiServer.enableVerboseMode(true); interval = 1800000;// 30 мин digitalWrite (led3, HIGH); } void printData(char* data, int len) { while (len-- > 0) { Serial.print(*(data++)); } } void set_url(){ /* url = "/input/NJWdNQ74DEiRVZZzMOvG?private_key=5dP8VXwx07CWAKKnDdXV&adate="; url+=String(day); url+="."; url+=String(month); url+="."; url+= String(year); url += "&btime="; url+= String(hr); url+= ":"; url+= String(mint); url+=":"; url+= String(sec); url += "&cactive=";url += String(P_act);//"7777"; url += "&dreactive=";url += String(P_react);//"9876"; */ //url = "/pushingbox?devid=v9142A????8B5A&p1=test&p2=test2&p3=test3"; url = "/pushingbox?devid=v9142A11????18B5A&p1="; url+= String(hr); url+= ":"; url+= String(mint); //url+=":"; url+= String(sec); url += "&p2=";url += String(P_act);//"7777"; url += "&p3=";url += String(P_react);//"9876"; int url_len = url.length() + 1; url.toCharArray(charBuf, url_len) ; } void led_off(){ if (millis() >= updateTime) { digitalWrite(led_pin, LOW); updateTime += 150; } } void loop(){ currentMillis = millis(); get_clock();rtc_to_int();//check_data(); check_imp();led_off(); // set_url(); GETrequest data1(ip, 80, "data.sparkfun.com", charBuf); set_url(); GETrequest data1(ip, 80, "api.pushingbox.com", charBuf); if ((count_send <= 1)&&(currentMillis - previousMillis > 30000)){ // Принудительная отправка запроса при включении previousMillis = currentMillis; count_send++; Serial.println("OK"); Serial.println(charBuf); data1.submit(); data1.setReturnFunc(printData); act_imp = 0; react_imp = 0; } if (currentMillis - previousMillis > interval) { // Отправка запроса по времени Serial.println("OK"); Serial.println(charBuf); data1.submit(); data1.setReturnFunc(printData); act_imp = 0; react_imp = 0; previousMillis = currentMillis; } if (but.update()) { // проверка нажатия кнопки на принудительную отправку if (but.read() == HIGH){ Serial.println("OK"); Serial.println(charBuf); data1.submit(); data1.setReturnFunc(printData); act_imp = 0; react_imp = 0; } } WiServer.server_task(); delay(10); }Датчик тока. В цикле опрашиваем датчики. Все остальное - математика. Это не сильно точно, но не хуже идеи с подсчетом импульсов и точно дешевле.
В моем скетче продуман подсчет импульсов из двух светодиодов (активная и реактивная нагрузка), умножение на коефициент транс.тока(в даном случае на 80) из расчета, что на счетчике написано 5000 имп - 1 кВт.... + Передача на сервер. Пример на www.boyanivka.tk
Здравствуйте помогите с программой для ардуинки нано .
Есть счетчик воды в который вставлен дачик хола цифровой
нужно посчитать количество импульсов ,вывести сигнал работы счетчика, перевести в литры ,сохранить результат и привязать результат к реальному времени, данные сохранить на SD c накоплением статистики.
Возвожно ли такое и какова цена программы?
Зарание спасибо
нужно посчитать количество импульсов ,вывести сигнал работы счетчика, перевести в литры ,сохранить результат и привязать результат к реальному времени, данные сохранить на SD c накоплением статистики.
Возвожно ли такое и какова цена программы?
Ошиблись вы разделом. По моему скромному мнению стоимость такой разработки посторонним человеком с SD, RTC и пока что непонятно какой статистикой стартанет от $100.
Здравствуйте помогите с программой для ардуинки нано .
Есть счетчик воды в который вставлен дачик хола цифровой
нужно посчитать количество импульсов ,вывести сигнал работы счетчика, перевести в литры ,сохранить результат и привязать результат к реальному времени, данные сохранить на SD c накоплением статистики.
Возвожно ли такое и какова цена программы?
Зарание спасибо
"вывести сигнал работы счетчика" - куда вывести? В Serial, на Марс, телеграммой в Уфу? По остальному - сделать реально, нижняя планка цены - $50.
СПАСИБО
Алексей Н, вы не обольщайтесь выводами JasKo, скетч то писать Вам, и сколько процессорного времени у вас уйдёт на побочные расходы - никому сейчас не известно. Информацию нужно читать,хранить, выводить на дисплей, и всё это складывается в единицы и десятки миллисекунд. Может в какой нибудь библе запросто стоять скрытый delay и мешать алгоритму, а то ещё и сами влепите delay, и всей конструкции крышка. А главное когда вы через месяц пользования подобъёте сумму всех счётчикв и она сильно не сойдётся с основным -то искать где у вас идут потери будет просто нереально. А если вы будете читать специализированный счётчик через RS485 то всего этого гарантированно можно избежать :)
Один МК можно выделить специально для подсчета импульсов со стольких счетчиков, сколько у него хватит ног, и добавить ему очень простой коммуникационный протокол, например UART только на TX по внешнему запросу, чтобы гарантировано не было никаких скрытых delay. Хранить все в оперативной памяти и питать от батарейки. При использовании глубокого сна и прерываниях по изменению уровня, батарейки хватит на годы. Вторым МК или ПК по мере необходимости подавать запрос и получать значения всех счетчиков.