Ви не увійшли.
Здравствуйте,
Помогите разобраться. Купил несколько ESP - https://arduino.ua/prod1492-wi-fi-modyl-nodemcu-esp8266 и https://www.aliexpress.com/item/1pcs-No … 4c4dxMGRVE. Заливаю стандартный скетч BasicOTA. Купленные в Украине 2 шт. работают без проблем, а купленные у китайских братьев - работает 1 из 4-х. По симптомам: в сериал сыпят что они стартанули и доступны по такому-то адресу, чип греется. Но сам адрес не пингуется или пингуется с большими потерями и большими задержками. Такое ощущение что что-то вешает систему.
Кто знает что это и как с этим бороться?
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
#ifndef STASSID
#define STASSID "your-ssid"
#define STAPSK "your-password"
#endif
const char* ssid = STASSID;
const char* password = STAPSK;
void setup() {
Serial.begin(115200);
Serial.println("Booting");
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("Connection Failed! Rebooting...");
delay(5000);
ESP.restart();
}
// Port defaults to 8266
// ArduinoOTA.setPort(8266);
// Hostname defaults to esp8266-[ChipID]
// ArduinoOTA.setHostname("myesp8266");
// No authentication by default
// ArduinoOTA.setPassword("admin");
// Password can be set with it's md5 value as well
// MD5(admin) = 21232f297a57a5a743894a0e4a801fc3
// ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3");
ArduinoOTA.onStart([]() {
String type;
if (ArduinoOTA.getCommand() == U_FLASH) {
type = "sketch";
} else { // U_SPIFFS
type = "filesystem";
}
// NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.end()
Serial.println("Start updating " + type);
});
ArduinoOTA.onEnd([]() {
Serial.println("\nEnd");
});
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
});
ArduinoOTA.onError([](ota_error_t error) {
Serial.printf("Error[%u]: ", error);
if (error == OTA_AUTH_ERROR) {
Serial.println("Auth Failed");
} else if (error == OTA_BEGIN_ERROR) {
Serial.println("Begin Failed");
} else if (error == OTA_CONNECT_ERROR) {
Serial.println("Connect Failed");
} else if (error == OTA_RECEIVE_ERROR) {
Serial.println("Receive Failed");
} else if (error == OTA_END_ERROR) {
Serial.println("End Failed");
}
});
ArduinoOTA.begin();
Serial.println("Ready");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
void loop() {
ArduinoOTA.handle();
}
Мне кажется, вам надо считать обороты. А обороты можно считать датчиком холла
Вот развели холивар. А теперь к делу. В общем, немного подумав, поэкспериментировав я пришёл к такому коду:
#include <Stepper.h>
#include <HX711.h>
HX711 scale(4, 5);
String serialData;
int serialDataInt;
int stopWeight = 20;
int scaleWeight;
int steps = 100;
Stepper stepper(steps, 2, 3);
void setup() {
scale.set_scale(-202.13);
scale.tare();
scaleWeight = scale.get_units(1); //Вес без груза, с учётом тары
Serial.begin (115200);
Serial.println("ready!");
}
void loop() {
//scales();
}
void serialEvent(){
while (Serial.available() > 0) {
serialData = Serial.readStringUntil('\n');
serialDataInt = serialData.toInt();
Serial.print ("String :");
Serial.println (serialData);
Serial.print ("Int :");
Serial.println (serialDataInt);
}
serialParsing();
}
void serialParsing(){
if (serialData == "f"){
Serial.println("forward");
while(stopWeight > scaleWeight){
steps = 1;
stepperMotor();
scales();
}
scaleWeight = 0;
stopWeight = 20;
}
if (serialData == "t"){
tareScales();
Serial.println("scales tared");
}
if (serialData == "s"){
Serial.println("stop");
}
if (serialData == "b"){
Serial.println("backward");
stepper.setSpeed(100);
stepper.step(100);
}
if (serialData > "0" && serialData <= "9"){
stopWeight = serialDataInt;
Serial.print("stop weight set to: ");
Serial.println(stopWeight);
}
}
void scales(){
scale.power_up();
scaleWeight = scale.get_units(1);
// scale.power_down();
Serial.print("Current weight: ");
Serial.println(scaleWeight);
}
void tareScales(){
scale.tare();
}
void stepperMotor(){
Serial.println("stepper motor func");
stepper.setSpeed(300);
stepper.step(-100);
}
Это промежуточная, но полностью рабочая версия без тормозов. Может кому-то пригодится.
Последовал Вашему примеру, перебрал всю библиотеку весов. Удалось немного повысить скорость. Но есть одна проблема которую никак не могу решить. Я не могу заставить асинхронно работать и весы и шаговик. Возможно это особенность самой Arduino или я не понимаю как правильно писать код.
Единственное что мне удалось, scales() я запускал не в loop(), а в serialParsing(). Но тогда двигатель останавливается периодически для выполнения кода весов. Может есть другие варианты асинхронного выполнения кода?
#include <Stepper.h>
#include <HX711.h>
HX711 scale(4, 5);
String serialData;
int serialDataInt;
int stopWeight = 20;
int scaleWeight;
int steps = 100;
Stepper stepper(steps, 2, 3);
void setup() {
stepper.setSpeed(300);
scale.set_scale(-202.13);
scale.tare();
scaleWeight = scale.get_units(1); //Вес без груза, с учётом тары
Serial.begin (115200);
Serial.println("ready!");
}
void loop() {
scales();
}
void serialEvent(){
while (Serial.available() > 0) {
serialData = Serial.readStringUntil('\n');
serialDataInt = serialData.toInt();
// Serial.print ("String :");
// Serial.println (serialData);
// Serial.print ("Int :");
// Serial.println (serialDataInt);
}
serialParsing();
}
void serialParsing(){
if (serialData == "f"){
Serial.println("forward");
while(stopWeight > scaleWeight){
stepperMotor();
// scales();
}
stopWeight = 20;
}
if (serialData == "t"){
tareScales();
Serial.println("scales tared");
}
if (serialData == "s"){
Serial.println("stop");
}
if (serialData > "0" && serialData <= "9"){
stopWeight = serialDataInt;
Serial.print("stop weight set to: ");
Serial.println(stopWeight);
}
}
void scales(){
scale.power_up();
scaleWeight = scale.get_units(1);
scale.power_down();
Serial.print("Current weight: ");
Serial.println(scaleWeight);
}
void tareScales(){
scale.tare();
}
void stepperMotor(){
Serial.println("stepper motor func");
stepper.step(steps);
}
Здравствуйте,
Решил автоматизировать взвешивание у себя в мастерской. Для этих целей прикупил тензодатчик и модуль датчика весов + Arduino UNO. Проблема в следующем: когда закомментирована функция scales(); управление шаговым двигателем работает превосходно. Как только я раскомментирую scales(); - шаговый двигатель крутится со скоростью 1 шаг в минуту. Немного подправив scales(); мне удалось добиться вращения шагового двигателя порядка 1 шаг в секунду. Отсюда я сделал вывод что всю систему тормозит именно scales();.
Подскажите, пожалуйста, что я делаю не так? Как ускорить работу системы в целом? Заранее благодарен.
Скетч - с миру по нитке + свои мысли:
#include <HX711.h> // Подключаем библиотеку HX711 для работы с АЦП hx711
#include <Stepper.h> // Подключаем библиотеку шагового двигателя
HX711 scale(A2, A3); // Указываем в какие пины подключен АЦП hx711 (DT(DOUT) - pin A1, SCK - pin A0)
float myScale; // Инициализируем переменную в которой будем хранить текущий вес
boolean stringComplete = false; // whether the string is complete
String serialData = "";
int serialDataInt;
int stopWeight = 400;
const int stepsPerRevolution = 200; // change this to fit the number of steps per revolution for your motorconst int stepsPerRevolution = 200; // change this to fit the number of steps per revolution for your motor
int stepperSpeed = 400;
int stepperDirection = -1;
int Speed;
int Direction;
Stepper myStepper(stepsPerRevolution, 2, 3);
void setup() {
// put your setup code here, to run once:
Serial.begin(115200); // Инициализируем монитор порта, как устройство вывода
Serial.println("Calibration..."); // Выводим надпись
scale.set_scale(-202.13); // Устанавливаем калибровочный коэффициент
scale.tare(); // Сбрасываем весы на 0
myScale = round(scale.get_units(10)); // Запоминаем среднее значение без груза, но с учетом тары
Serial.print("Scale: ");
Serial.println(0.00); // Обнуляем значение веса на мониторе порта
}
void loop() {
if (serialData == "f"){
// Serial.println("forward");
int Speed = 300;
int Direction = -1;
stepperMotor (Speed, Direction);
}
else if (serialData == "b"){
// Serial.println("backward");
int Speed = 300;
int Direction = 1;
stepperMotor (Speed, Direction);
}
else if (serialData == "s"){
// Serial.println("stop");
int Speed = 300;
int Direction = 0;
stepperMotor (Speed, Direction);
}
else if (serialDataInt > 0){
stopWeight = serialDataInt;
Serial.print("stop weight: ");
Serial.println(stopWeight);
}
// }
if (stopWeight < myScale){ // we should stop motor
Serial.println("OVER!!!");
int Speed = 0;
int Direction = 0;
stepperMotor (Speed, Direction);
}
scales();
}
void serialEvent() {
if (Serial.available() > 0) {
serialData = Serial.readStringUntil('\n');
serialDataInt = serialData.toInt();
}
}
void scales() {
scale.power_up(); // Отключаем энергосберегающий режим hx711
if (round(scale.get_units(10)) != myScale) { // Условие выполняется, если округленный до граммов вес отличается от последнего
myScale = scale.get_units(20); // Запоминаем текущий вес
if (myScale > 0.5) { // Если вес не ничтожно мал
Serial.println (myScale); // то выводим его
}
else { // иначе
Serial.println(0.00); // выводим нули
}
myScale = round(myScale);
}
}
void stepperMotor (int stepperSpeed, int stepperDirection) {
myStepper.setSpeed(stepperSpeed);
myStepper.step(stepperDirection);
}
изначально схема классического диммера)
mosfet тут нет, и я думаю что для это задачи он не нужен.я бы делал так , это если управление переменкой,
но перед изготовлением платы, спроси л бы спецов с ТОЭ ( Теоретические Основы Электротехники ) ну или ТЕЦ ) )
Что тогда использовать для управления переменным током вместо mosfet? Как предложил lkj - симистор?
Заранее благодарен.
NoName Спасибо.
1. Теперь схема правильная?
2. "Т1" я так понимаю это и есть MOSFET транзистор? Какой посоветуете?
dimaslviv пише:Хотілося б зробити без реле - без нього можна буде живити ардуіну від крони)
MOSFET транзистор в помощь .
Не могли бы Вы ткнуть носом в статью, с примером? Что-то не могу найти внятного описания как использовать МОП/MOSFET вместо реле. Заранее благодарен.
Я тоже читаю. Всегда мечтал о радио управляемой лодке.
Давайте остановимся, мы действительно из разных сект. В любом случае, спасибо за ссылки и дискуссию.
P.S. Вопрос о проводном подключении большого количества исполнительных устройств остаётся открытым.
Круто, утопия . То что Вы собираетесь делать каменный век, по сравнению с этой "утопией". Масштабируемость и провода . Сейчас установка "мозгов"( и превращение его в IoT) в любое устройство стоит копейки, по сравнению с прокладкой проводов ( и их стоимостью ) и изготовлением исполняющих устройств ( реле и пр. ). Почитайте на досуге : http://homes-smart.ru/index.php/oborudo … arodmon-ru.
Где то на форуме я уже создал топик ESP8266 и IoT но интереса к нему особо не было а зря. По поводу Apple и iOS это может приснится мне только в крутом кошмаре ."Закрытое" железо+ "закрытая" ось + своя концепция "умного" дома . Настроение на целый день iOS и "свой умный дом" . Хотя может быть, если у Вас бабла - камаз с прицепом. То в таком случае зачем огород городить, наняли фирму и фсе .
ESP8266 я купил пару штук год назад, мне они тоже понравились. Потом осенью появилась ваша тема на этом форуме. "но интереса к нему особо не было а зря" - а почему? Вроде классное устройство а люди не разделяют Ваш оптимизм. А потому что его сложнее привести к готовому устройству, потому что оно засирает эфир, а в многоквартирном доме так вообще тоска и такое IoT будет постоянно отваливаться. И когда таких коробочек будет в помещении много - будет беда. А если помещение большое, какой радиус действия WiFi? А особенно в панельном доме или современном "литом" каркасном? И для ESP-8266 тоже необходимо исполняющее устройство. По сути ESP-8266 только убирает провода, добавляет tcp/ip - больше ничего принципиального.
Провода всегда к сожалению будут рулить пока человечество не придумает что-то принципиально новое в передаче информации.
Смотря что Вы понимаете под системой "Умный дом". Если просто "дистанционку", исходя из того что Вы написали ( считаете какие то пины ) то в Вашем представлении "Умный дом" это какой пульт управления, как в телевизоре, только с программой (таймерами), тогда Вам достаточно Атмеги. Если более серьезное типа https://www.youtube.com/watch?v=UR2qXwR2vNE, то забудьте о всяких там пинах, они нафиг не нужны , каждая вещь в доме к которой подведено электричество должна быть IoT . Я приобрел вот такое https://miniboard.com.ua/boards/142-ora … lus-2.html. Пока только запустил систему majordomo, дальше пока ничего не делал (времени катастрофически не хватает ). Да и греется зараза, радиатор который купил ситуацию не спасает .
Очень интересно, спасибо. Из озвученного Вами в ближайшее время хочу реализовать "дистанционку". Примитивные устройства хочу использовать так как их стоимость по сравнению с любым IoT - мизерная. Отсюда и необходимость в большом количестве "пинов". Та "говорилка" с ютуба - утопия. Мне есть с кем поговорить, а вот быстро и незаметно для владельца управлять домом - это то что надо. Конечно было бы круто всем управлять по tcp/ip, но какова будет стоимость этих устройств (термомерты, выключатели/реле/розетки, краны, конечные устройства)?
Плюс у меня частный дом и надо многое автоматизировать: полив, СКД, наружное освещение, видеонаблюдение. Я рассматриваю вариант самостоятельного написания программной части для всех устройств системы.
Хотя голосовое управление я не исключаю. Интересно будет интегрировать Apple Siri с домом. Надо ждать выхода iOS 10, может тогда будет побольше информации. Сейчас всё закрыто по NDA и открывают только юр. лицам/разработчикам.
Здравствуйте,
Прошу помощи в выборе платформы для построения умного дома. Так как я не знаю точное количество элементов, хочу выбрать масштабируемую платформу и наращивать её по мере возможности. Думал над следующими вариантами:
1. Arduino Mega 2560 - 54 выхода (46 полезных), 4 выхода сьест сетевой модуль. Остаётся 42 выхода.
2. Raspberry/Oragne Pi - 40 выходов, сеть встроена (25 полезных).
3. Встречал на Али китайские копии Orange с 80-ю выходами, сеть встроена.
Одного устройства мне не хватит. В любом случае мне надо будет 2 и более штук. Так же хочется обращаться к одной IP для управления всеми устройствами (так проще делать софт под телефон и web страничку). Знаю что можно объединять несколько Arduino, но толковой инструкции в сети не встретил.
Буду благодраен за любой совет.
важна температура )
а пользуюсь станцией , хотя в общем паяю только проводники.
по ловкост паяльникам ничего не скажу, они мне не нравятся, я ими не пользуюсь
Спасибо. Получается я предыдущие сенсоры перегрел используя старый советский паяльник. Хотя мой тесть ним любую электронику ремонтировал.
паяльную станцию, даже китайскую, не пожалеете )
можно с феном, прикольная штука )
Меня больше интересует вольтаж. Он обязательно должен быть 9 или 12 вольт или можно использовать 220?
этот документ почитайте
http://cache.nxp.com/files/sensors/doc/ … AN3863.pdfбольшинство датчиков для пользователей имеют либо логический уровень либо транзистор с открытым стокомб или простенький интерфейс I2C (видел где то )
так что выбирайте микросхему с максимальной чувствительностью, а не с готовыми примерами, они (примеры) как обычно заточены на массовые микросхемы, те что подешевле (
Спасибо большое за ссылку. Что насчёт паяльника посоветуете?
Заранее благодарен.
Прошу совета. Я в электронике даже не чайник, а ближе к сковородке. С программированием немного знаком. Идея сделать сенсорный выключатель с большой площадью срабатывания (в идеале вся поверхность выключателя 80х80 мм.). Материал поверхности сенсора - бетон, дерево с толщинами 3 - 5 - 10 мм. Нашёл в https://www.rcscomponents.kiev.ua, AT42QT1010. За основу возьму его. Примеров в сети много.
1. Можно ли использовать паяльник на 220 вольт или лучше приобрести на 12 вольт? Или какое-то другое устройство?
2. Может посоветуете другой чип для моей задачи?
Заранее благодарен за любую помощь.
нет, только на одной.
Подскажите, пожалуйста. Родной конденсатор развалился, перепаял на 10pF. Включаю модуль, некоторое время он работает (чувствительность немного выше от стандартной), через определённое время работы/бездействия могут быть самостоятельные срабатывания. Потом он вообще перестаёт работать. Выключаю, проходит какое-то время, всё повторяется по кругу. Из-за чего может так себя вести датчик? "Подгорел" контроллер? Что-то не то с конденсатором? Интересно разобраться на будущее.
UPD. Подаскажите хотя бы где читать, что искать по моему вопросу?
каким паяльником?
схему надеюсь не забыли обесточить? ) а то всякое бывает )
Паяльник такой - http://rt21.getbb.ru/viewtopic.php?f=4&t=35511 с тонким жалом. Но режим 220 вольт. Конечно обесточивал
Странно. Припаял конденсатор на 5 пФ - кое-как работало. Припаял на 10 пФ - вообще не работает. Получается или плохо припаял или спалил. Когда подаю питание - срабатывает сенсор как будто я его нажал.
UPD. Может кто посоветует насчёт сенсорного модуля? Мне нужен модуль по приемлемой цене, с хорошей чувствительностью. TTP223B конечно неплох, но для моих нужд у него слабая чувствительность. Мне необходимо прятать модуль за 3-5-7 мм пластик/фанера/фторопласт/плексиглаз. А TTP223B стабильно работает только с материалами не толще 2 мм.
The capacitance Cs can be used to adjust the sensitivity. The value of Cs use smaller, then
the sensitivity will be better. The sensitivity adjustment must according to the practical
application on PCB. The range of Cs value is 0~50pFhttp://www.tontek.com.tw/download.asp?sn=475
http://arduino-ua.com/images/ADC157-22.jpg
для данной схемы Cs -> С1
Спасибо большое за мануал.
Здравствуйте,
Купил сенсорный датчик http://arduino-ua.com/prod1151-sensornii-datchik-knopka. Хочу сделать на его основе обыкновенный выключатель. Rак оказалось он не работает через относительно толстые предметы (порядка 6 мм. пробовал стекло, фанера, акрил). При 1 - 2 мм. реагирует, если толще - тишина. Можно ли как-то модифицировать данный модуль чтобы увеличить его чувствительность?
полный SPI + interrupt
К сожалению, эта фраза мне непонятна, гугл тоже не помог. Не подскажете что это такое или где об этом можно почитать?
https://www.adafruit.com/products/2479 судя по описанию, это очень интересная штука, надо почитать их документацию. Судя из описания, можно получать список МАС-адресов. Это как раз то, что мне надо.
gorenkov, вероятно поддерживается только BT4.X
Теперь я на 100% уверен что там что-то из 4 ревизии ВТ, так как в 4-й появилось внятное энергосбережение. Под ардуино есть только BT2+EDR, что конечно не подходит. Значит остаётся полноценный линукс на orange/rapsberry + bt4 dongle + надо понять взаимодействие bt4 lo устройств.
Вот что говорит по этому поводу Википедия
Bluetooth 4.0[править | править вики-текст]
См. также: Bluetooth с низким энергопотреблением
Bluetooth SIG утвердил спецификацию Bluetooth 4.0 30 июня 2010 года. Bluetooth 4.0 включает в себя протоколы:
Классический Bluetooth,
Высокоскоростной Bluetooth
Bluetooth с низким энергопотреблением.
Высокоскоростной Bluetooth основан на Wi-Fi, а Классический Bluetooth состоит из протоколов предыдущих спецификаций Bluetooth.
Протокол Bluetooth с низким энергопотреблением предназначен, прежде всего, для миниатюрных электронных датчиков (использующихся в спортивной обуви, тренажёрах, миниатюрных сенсорах, размещаемых на теле пациентов и т. д.). Низкое энергопотребление достигается за счёт использования особого алгоритма работы. Передатчик включается только на время отправки данных, что обеспечивает возможность работы от одной батарейки типа CR2032 в течение нескольких лет[8]. Стандарт предоставляет скорость передачи данных в 1 Мбит/с при размере пакета данных 8—27 байт. В новой версии два Bluetooth-устройства смогут устанавливать соединение менее чем за 5 миллисекунд и поддерживать его на расстоянии до 100 м. Для этого используется усовершенствованная коррекция ошибок, а необходимый уровень безопасности обеспечивает 128-битное AES-шифрование.
Датчики температуры, давления, влажности, скорости передвижения и т. д. на базе этого стандарта могут передавать информацию на различные устройства контроля: мобильные телефоны, КПК, ПК и т. п.