Ви не увійшли.
Напишіть, на якій ардуіні хочете, скільки зубців на диску і який саме у вас датчик Хола.
Реально навіть на ось такій восьминіжці:
Можу запропонувати рішення на основі USB-пристрою + пакета Network UPS Tools, робочу версію схожого проекту можна завантажити і перевірити тут: https://forum.arduino.ua/viewtopic.php?id=2826
Для Вас можу зробити на платі Arduino MH-Tiny, в неї є 8 аналогових входів, які можна довільно розподілити для вимірювання напруг і струмів.
Для MOV A, Rn (де Rn один з регістрів R0, R1,... R7 тобто n одне з чисел 0,1,...7) код операції 11101rrr (де rrr це двійкове представлення числа n: R0 -> n=0 -> rrr=000, R1 -> n=1 -> rrr=001,... R7 -> n=7 -> rrr=111).
Для ADD A,@Ri (де Ri може бути лише R0 або R1 тобто i одне з чисел 0 або 1) код операції 0010011i (де i це двійкове представлення числа i, яке в даному випадку відповідає самому собі: R0 -> i=0, R1 -> i=1).
Без символьного закінчення може бути операція без участі регістрів, або коли в ній допустимий лише один єдиний регістр, наприклад R0.
А плата ХІД УПС потрібна щоб НАС думав що він до УПС підключений і треба знати коли пропадає 220В щоб його вимкнути та він не саджав батарею, бо на ній роутер ще висить.
Єдиний варіант дізнатися - випробувати. Я реалізував випадкову модель UPSа з тих, які підтримує NUT. Які UPSи підтримує Ваш NAS - невідомо, якщо співпаде, матимете безкоштовне готове рішення. Якщо ні - можу реалізувати іншу модель UPSа за Вашим замовленням.
Спасибо за проект. А исходники будут выложены?
Ні, не будуть. Можу реалізувати всі ті побажання, які Ви виклали в листі. Насправді можна дуже багато чого реалізувати, для деяких речей є підтримка в NUT, для інших і її можна доробити. Ось деякі:
* повне вимкнення навантаження після заданого з хоста таймаута (в NUT підтримується);
* робота з зарядним пристроєм від мережі 220, фактично це online-ups (в NUT повна підтримка);
* робота з зарядним пристроєм з прив'язкою до часу доби (в NUT додати кілька нових параметрів);
* робота з кількома акумуляторними батареями (в NUT лише з однією, але можна розширити);
* робота з сонячними панелями (в NUT такого нема взагалі, зробити можна, але вже виходить за межі філософії NUT).
Звичайно, в серйозних проектах не буде використовуватись USBasp з mega8a)
like!
А на отсутствие PZEM'а не будет ругаться? На случай, если высоковольтная часть не планируется.
Так, буде працювати і без PZEM.
Пропоную вдосконалення для популярної на сьгоднішній день схеми резервного живлення:
Прошивку в форматі hex можна скачати звідси.
Для роботи з цим USB-пристроєм знадобиться пакет Network UPS Tools (про настройку і команди буде нижче).
В якості "ардуіни" я використав програматор USBasp, це зручна платка для розробки різних USB-пристроїв, на ній вже розпаяна обв'язка для USB, виведено кілька GPIO, один ADC і один апаратний UART і SPI. У мікроконтролера ATmega8A нема апаратного USB, тому використовується програмна емуляція за допомогою бібліотеки VUSB. До UART підключена плата PZEM-004T, яка працює по протоколу ModBus. Ще знадобиться два резистори зі співвідношенням опорів 1:5 для подільника напруги, краще взяти великі номінали, щоб менше садити батарею. Для прошивки USBasp можна використати іншу USBasp, або заздалегідь прошити бутлоадер.
Після підключення пристрій представляється якимось UPS-ом:
# dmesg
usb 2-1: new low-speed USB device number 91 using uhci_hcd
usb 2-1: New USB device found, idVendor=047c, idProduct=ffff
usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 2-1: Product: PZEM-004T
usb 2-1: Manufacturer: arduino.ua
usb 2-1: SerialNumber: 0001
# lsusb
Bus 002 Device 091: ID 047c:ffff Dell Computer Corp. UPS Tower 500W LV
Для настройки NUT треба змінити наступні файли:
# cat etc/nut.conf
MODE=standalone
# cat etc/ups.conf
[pzem]
driver = usbhid-ups
port = auto
# cat etc/upsd.conf
LISTEN 127.0.0.1 3493
# cat etc/upsd.users
[admin]
password = 123
actions = SET
upsmon primary
# cat etc/upsmon.conf
MONITOR pzem 1 admin 123 primary
SHUTDOWNCMD "/usr/sbin/pm-hibernate"
Якщо все правильно настроєно і запущено, то можемо отримати такий результат:
# upsc pzem
battery.charge.low: 1180
battery.voltage: 12.32
device.mfr: arduino.ua
device.model: PZEM-004T
device.serial: 0001
device.type: ups
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.synchronous: auto
driver.version: 2.8.0
driver.version.data: MGE HID 1.46
driver.version.internal: 0.47
driver.version.usb: libusb-1.0.20 (API: 0x1000104)
outlet.current: 0.00
outlet.powerfactor: 0.00
outlet.realpower: 0
output.frequency: 49.9
output.voltage: 235.6
ups.mfr: arduino.ua
ups.model: PZEM-004T
ups.productid: ffff
ups.serial: 0001
ups.status: OB
ups.vendorid: 047c
Дані output.*,outlet.* пристрій отримує безпосередньо від PZEM-004T, дані battery.voltage від АЦП, а battery.charge.low - це параметр в пам'яті USB-пристрою, який ми можемо змінювати.
Для зміни параметру використовується команда:
# upsrw -s battery.charge.low=1190 pzem
Username (honey): admin
Password: 123
OK
Для перегляду лише одного параметру можна використати:
# upsc pzem battery.charge.low
1190
Що це за параметр? Число 1190 відповідає напрузі 11.90В, з якою мікроконтролер постійно порівнює напругу акумулятора (battery.voltage), і якщо вона виявиться рівною або нижчою за вказаний поріг, то на виході /BATLOW з'явиться низький рівень (додатково для наглядності ще загориться світлодіод на платі). Тобто низький рівень на цьому виході означає "низька напруга батареї".
Кнопка "Shutdown" надсилає до NUT сигнал, який примушує NUT виконати команду, вказану в SHUTDOWNCMD (в даному прикладі - перейти в гібернацію).
А чи можна використовувати пристрій без встановленого пакету NUT? Так, можна. А як же змінити параметр battery.charge.low ? Записом в перші два байти EEPROM. Кнопка Shutdown не буде працювати? Ні, вона обробляється лише в NUT, але є "план Б".
На схемі ще є дві кнопки "Sleep" і "PwrDown", які генерують натискання відповідних кнопок на ПК, в який підключений USB-пристрій. Наприклад в Windows реакцію на ці кнопки можна призначити в розділі "Параметри"->"Система"->"Живлення і режим сну"->"Додаткові параметри живлення"->"Дія кнопки живлення", наприклад, для "PwrDown" можна призначити "Гібернацію".
Ви вже здогадалися, що вихід /BATLOW можна з'єднувати перемичкою або джампером з одним із входів для кнопок "Shutdown", "Sleep" або "PwrDown" ?
З поста #3 я це так зрозумів:
loop {
signal1 = (signal1 + 1) % 1024; // virtual
signal2 = alalogRead(A0); // real
digitalWrite(13, signal1 > signal2 ? HIGH : LOW);
}
Пост ни о чем ...
Пост очень даже содержательный, вот расшифровка:
Есть куча кода от предыдущего программиста, код изначально работал. Пытались сами вносить изменения, но с каждым разом код работает все более и более нестабильно.
Нужен человек с кучей свободного времени, готовый сопровождать код за обещания заплатить, готовы кормить "завтраками" на долговременной основе.
Это не косяк нано. У Вас в UART получается два передатчика (ch340 и блютус) и один приемник (нано). У каждого передатчика выход push-pull, резистором мы значительно ослабляем влияние одного из них, делая второй приоритетнее, это можно считать как хак. Резисторы по 1к в нано не для этого, а чтобы если программист переключит пин nano.RX на выход, то не пошел большой ток и не спалил пин.
Попробуйте тот резистор, который между ch340.TX и Arduino.RX поменять например на 10к
UPD: посмотрел схему нано, придется еще выпаять LED-RX.
А не проще купить pro mini и отдельный usb-uart ?
Вероятно вот эта:
При использовании преобразователей напряжения руководствуйтесь таким соотношением:
Vin * Iin * КПД = Vout * Iout
Возможно павербанк или зарядка не обеспечивают необходимый Iin.
Порівняйте візуально світло (яскравість, діаграму направленості) від обох світлодіодів. Підказка: камера фотоапарата/телефона "бачить" інфрачервоне світло.
Якщо коротко: Вам треба записати рівняння променя зору в координатах x,y,z і рівняння площини екрану, розв'язавши систему цих двох рівнянь, отримаєте координати точки на екрані.
Если все это находится не в радиусе 2-3 метров, то вам понадобится какая-то дальнодействующая шина передачи данных. Рекомендую готовое устройство (картинка кликабельна, там описание):
Такие устройства в вашем случе смогут управлять реле (вентиляторы, полив, свет, окна). Они работают по тому же протоколу 1-wire, что и самые популярные датчики температуры DS18B20, что в вашем случае удешевит кабельные затраты. Дальность 1-wire до 300м (лично проверено).
На PC или Raspberry под Linux можно сделать единый web-интерфейс для управления всей теплицей. Или (в бюджетном варианте) управлять каждым устройством отдельно через вот такой уже готовый web-интерфейс:
Можно также управлять из командной строки, и, соответственно, сможете даже сами писать управляющие сценарии на bash, python...
Есть пример подключения датчика BME680 (температура, влажность, давление, качество воздуха):
Обращайтесть на емейл, готов поучаствовать.
Делал реализацию SNMP протокола с использованием эзернет адаптера ECN28J60. Если подходит, обращайтесь на емейл, сделаю.
Загляньте в код ArduinoISP, на каком пине у него RST. Откуда брали ArduinoISP? Я как-то скачал этот скетч неизвестно откуда под свою переделку, работало, но что-то как-то не так. Взял из Arduino IDE в examples/11.ArduinoISP/ArduinoISP - работает четко.
Гляньте https://forum.arduino.ua/viewtopic.php?id=2741#p35282 там инструкция как шить в Arduino IDE (там более сложное подключение, думаю, разберетесь, что нужно, а что лишнее)
Такое качество устроит?
Пишите в личку.
https://uk.wikipedia.org/wiki/Base64
https://www.arduinolibraries.info/libraries/base64
Приблизно якось так
int8_t sim800l_cmd(char *cmd, char *ok_res, int timeout) {
String res = "";
sim800l.println(cmd);
uint64_t start = millis();
while (millis() - start < timeout) {
if (sim800l.available() > 0)
res += sim800l.readString();
if (res.indexOf(ok_res) >= 0)
return 0;
if (res.indexOf("ERROR") >= 0)
return -1;
}
return -2;
}
if (sim800l_cmd("AT+SMTPSEND", "OK", 5000))
Serial.println("error or timeout");
Додайте рядок
sim800l.println("\"");
перед
sim800l.println("AT+SMTPFT=0");
Зробіть не запит-відповідь індивідуально для кожного пристрою, а відправку всіх запитів одразу, а потім по надходженню відповідей обробляйте їх на протязі лімітованого проміжку часу.