Форум русскоязычного сообщества Ubuntu


Автор Тема: Управление arduino  (Прочитано 13648 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: Управление arduino
« Ответ #30 : 14 Февраля 2014, 18:31:37 »
По датчикам - нужно плясать от датчиков.
Некоторые могут 1wire некоторые требуют 2wire, а есть и на SPI.
1wire - самый дальнобойный у 2wi и SPI - с дальностью - беда (емкость линий < 400nF).

Вот когда с датчиками будет определенность - тогда и будет понятно - как делать... В принципе все можно вешать по принципу один контроллер на два помещения - просто вешать его на стену а от него растягивать в два помещения атчики (в одно - через дырку в стене, второе уже внутри помещения).

Xbee мне понравился тем что там (в первой версии) прямо из коропки - COM порт и энергосбережение (по потреблению WiFi и голубозуб - нервно курят в уголке по сравнению с Xbee).
« Последнее редактирование: 14 Февраля 2014, 18:33:48 от Sly_tom_cat »
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн Rasskazow

  • Автор темы
  • Участник
  • *
  • Сообщений: 142
    • Просмотр профиля
Re: Управление arduino
« Ответ #31 : 14 Февраля 2014, 19:30:08 »
Дом - всё таки стационарное устройство, о энергосбережении шибко беспокоиться не стоит.
Хотя мне в любом случае собирать ИБП придется. Ибо живу на даче, а тут летом частенько бывает свет вырубают или напряжение падает до 140 вольт.

Думаю организовать датчики на шине i2c, вроде даже дешевле 1-wire получается.
Правда там какая-то заморока с адресацией, на руках нет ни одного i2c сенсора, чтоб пощупать и разобраться наглядно, из инструкций ни фига не понятно, нужно будет купить парочку для проб.
С i2c ещё что мне нравится - можно самому датчики ваять, очень много не шипко дорогих чипов АЦП, а на 1-wire раз, два и обчелся.

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: Управление arduino
« Ответ #32 : 14 Февраля 2014, 19:45:29 »
Мне самому нравится I2c - по лаконичности и логике заложенной в интерфейс (как с точки зрения электрики, так и с точки зрения протокола). Но там есть ограничение на те самые 400 пФ  :-\ что на практике выливается в то, что витуха или просто "лапша" уже длинной в пару метров - может дать эти пикофарады :( И придется руками занижать скрость (что тоже может не всегда помочь).

зы ... а 140 - на даче - это не так плохо, у нас на даче в холодное время года (газа нет - топится вся деревня ворованным электричеством) 110 - еще очень хорошо (стабилизатор вытягивает до полутора ампер при этом из линии). А меньше - уже и без нагрузки вырубается ... и так бывает не раз за вечер (особенно когда насосная станция стартует).
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн Rasskazow

  • Автор темы
  • Участник
  • *
  • Сообщений: 142
    • Просмотр профиля
Re: Управление arduino
« Ответ #33 : 14 Февраля 2014, 19:47:59 »
Да, есче у меня уже вот такая штука

Вертится на ней ubuntu-server 12.04, сколько же я сил потратил чтоб установить туда ubuntu в слепую без сонитора, имея только клаву и мышку )))
Сейчас управляю им через ssh в локалке, интернет у меня yota - так что нужен dyndns какой-нибудь для доступа из вне, хотя можно и через XMPP попробовать.

Пользователь решил продолжить мысль 14 Февраля 2014, 20:03:17:
Ещё один такой момент - датчик присутствия.
Блин, ну инфра не катит совсем,  если вдруг в туалете замер или душе ? Каждый несколько секунд ногой топать не прикольно.
Или когда фильм смотришь на диване а она настольную лампу вырубит - тоже не гуд.

Смотрю в сторону китайских датчиков на эффекте дропплера.
Но, смущает его функционал, опять же боюсь проблемы возникнут. Да и не до конца понимаю как он работает.
Что будет ели поставить коробку перед ним, не будет ли фонить ? А если что-то более плотное.

Пользователь решил продолжить мысль 14 Февраля 2014, 20:14:28:
Sly_tom_cat,
Что тебе уже удалось организовать ?
Что подключил ? Какие датчики ?
« Последнее редактирование: 14 Февраля 2014, 20:14:29 от Rasskazow »

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: Управление arduino
« Ответ #34 : 17 Февраля 2014, 14:36:04 »
Rasskazow, я датчики всякие (3d акселерометр/магнетометр/гироскоп, температурный датчик, датчик давления) пробовал подключать и снимать с них инфу, но пока ничего не собрал... накопилась уже куча ардуин, датчиков, релющек, и один дисплей и пара Xbee + RF24+ чиповые платки... но что из этого мудрить - пока не придумал... :)
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн Rasskazow

  • Автор темы
  • Участник
  • *
  • Сообщений: 142
    • Просмотр профиля
Re: Управление arduino
« Ответ #35 : 17 Февраля 2014, 16:11:16 »
У меня затык вообще.
Cейчас учусь код писать в arduino ide.
Не знаю как реализовать одновременное выполнение функций в arduino. Чтоб как в bash допустим, было не "&&", а "&" - было бы там такое - проблем было бы у меня гораздо меньше.
В интернете натыкался на какую-то функцию millis - ни фига не пойму что ею делать. Взялся за видеоуроки.

Что делать с оборудованием ?
Ну для начала можно мониторинг температуры в файл писать, с последующим его красивым выводом в график.
Если дом свой - термостат организовать.
У меня вот затык. Куча инструкций как сделать термостат на ds18b20 - а код разобрать не могу, то ли сам индус, то ли кто скетчи писал индус.

Температуру после заливки вот такого скетча:
#include <OneWire.h>
OneWire  ds(13);
void setup(void) {
  Serial.begin(9600);
}
void loop(void) {
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius;
  if ( !ds.search(addr)) {
    ds.reset_search();
    delay(10000);
    return;
  }
  for( i = 0; i < 8; i++) {
    Serial.write(' ');
  }
  if (OneWire::crc8(addr, 7) != addr[7]) {
      Serial.println("CRC is not valid!");
      return;
  }
  Serial.println();
  switch (addr[0]) {
    case 0x10:
      type_s = 1;
      break;
    case 0x28:
      type_s = 0;
      break;
    case 0x22:
      type_s = 0;
      break;
    default:
      Serial.println("Device is not a DS18x20 family device.");
      return;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);        // start conversion, with parasite power on at the end
  delay(750);     // maybe 750ms is enough, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.
  present = ds.reset();
  ds.select(addr);   
  ds.write(0xBE);         // Read Scratchpad
  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
  }
  // Convert the data to actual temperature
  // because the result is a 16 bit signed integer, it should
  // be stored to an "int16_t" type, which is always 16 bits
  // even when compiled on a 32 bit processor.
  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // "count remain" gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    // at lower res, the low bits are undefined, so let's zero them
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
    //// default is 12 bit resolution, 750 ms conversion time
  }
  celsius = (float)raw / 16.0;
  Serial.print(celsius);
}

Можно через serial port получать двумя командами:
stty -f /dev/cu.usbmodemfa121 9600cat /dev/cu.usbmodemfa121
Пользователь решил продолжить мысль 17 Февраля 2014, 16:14:56:
Хотя как вариант мне лично более интересный, для сбора статистики:
cat /dev/cu.usbmodemfa121 >>~/serial.logЕдинственно что сюда ещё хотелось бы - добавить отметки даты и времени.
Как бы это сделать ? cat cu.arduino > date чего-то там >> ~/serial.log ?

Пользователь решил продолжить мысль 17 Февраля 2014, 16:16:47:
Хотя в любом случае нужно как-то экранировать вывод, так сказать, потому что иногда при первом обращении к serial командой cat она захватывает не полностью цифры, а выводит только пробел, или последние 2 цифры.
« Последнее редактирование: 17 Февраля 2014, 16:16:47 от Rasskazow »

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: Управление arduino
« Ответ #36 : 17 Февраля 2014, 16:43:33 »
Ну тут задача бъется на две.
1. снимать тем-ру и слать ее в СОМ. (ардуина)
2. писать из кома в файлы по датам. (баш)

В баше тоже нужно писать "продвинутый" скрипт с чтением порта и записью пока не поменяется дата. Тут можно поступить и иначе - привязаться с шедулеру. Допустим так:
В CRON запускаем скрипт который берет текущуюю дату и по ней пишет лог. В Кроне же убиваем этот процесс в конце суток и запускаем его по-новой в 00:00 новых суток.
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн Rasskazow

  • Автор темы
  • Участник
  • *
  • Сообщений: 142
    • Просмотр профиля
Re: Управление arduino
« Ответ #37 : 17 Февраля 2014, 16:56:40 »
Ну тут задача бъется на две.
1. снимать тем-ру и слать ее в СОМ. (ардуина)
2. писать из кома в файлы по датам. (баш)

В баше тоже нужно писать "продвинутый" скрипт с чтением порта и записью пока не поменяется дата. Тут можно поступить и иначе - привязаться с шедулеру. Допустим так:
В CRON запускаем скрипт который берет текущуюю дату и по ней пишет лог. В Кроне же убиваем этот процесс в конце суток и запускаем его по-новой в 00:00 новых суток.

Не не, делать не так, крон при повторном запуске лог перезапишет, потом эту информацию как статисику по дням, неделям, месяцам использовать можно  будет. Лучше сделать так cp serial.log serial(+1 к каждому слудующему).log
И как бы это уже вторичное, не столь важно.
А если знать статистику допустим, того, какая температура в доме, какая на улице, можно подсчитывать теплопотери дома.

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: Управление arduino
« Ответ #38 : 17 Февраля 2014, 17:01:05 »
Ну для чего использовать данные - это уже дело совсем отдельное.

А если в кроне зашедулить запуск и останов процесса так что бы он всегда пускался в новые сутки, то никакой перезаписи не будет - просто новый процесс создаст новый файл (с новвым именем). Тут только вот вопрос (для меня) в том как корректно загасить процесс что бы последние данные в лог успели скинуться...
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн Rasskazow

  • Автор темы
  • Участник
  • *
  • Сообщений: 142
    • Просмотр профиля
Re: Управление arduino
« Ответ #39 : 17 Февраля 2014, 17:18:39 »
Логичнее не так тогда.
Скрипт мониторинга на атвозагрузке стоять должен.
А крон регулярно проверяет - запущен ли скрипт, если не запущен, запускает.
А алгоритм скрипта такой:
Получение данных от com > добавление даты > сравнение даты с предыдущим выводом если даты совпадают - логируется дальше, если не совпадают > создается новый файл.

Не знаю я как из входящих данных от, допустим выложенного скрипта убрать пробелы, которые идут вместе с цифрами, а потом к этому ещё добавить дату.

Оффлайн golota

  • Участник
  • *
  • Сообщений: 132
    • Просмотр профиля
Re: Управление arduino
« Ответ #40 : 19 Февраля 2014, 21:50:37 »
Логичнее не так тогда.
Читаю и плачу ... за деревьями леса не видно.
Обсуждаются элементарные вещи, и АБСОЛЮТНО игнорируется (по недомыслию) последующие проблемы.
Пишу логи датчиков в MySQL и не парюсь  :P и в придачу на http://openweathermap.org там целее будет  ;)
Цитата: Rasskazow
Куча инструкций как сделать термостат на ds18b20 - а код разобрать не могу, то ли сам индус, то ли кто скетчи писал индус.
Однозначно индус ! Понятие datasheet неведомо (а индус в курсе) !
гугл в помощ
Для начала -
Датчики DS18 - это большой геморой !
Время измерения 750ms (почти секунда !) в вашем варианте, тупо ждём по delay(750)
При увеличении длинны провода вы получите спошные сбои.
Порывшись в инете вы найдёте решение, нужно добавть диод Шоттки.
При данной длинне и сечении провода, проблемы пройдут.
Добввите ещё один датчик и начнёте тибидохаться снова.

Святая простота ! вы думаете, что накупите кучу разных датчиков и используя готовы библиотеки, легко свяжете всё в кучу !
Флаг в руки !

Где-то раньше, были проблемы с финансами и абстрактные рассуждения о i2c,1wire e.t.c.  ;D
Могу вас расстроить. При скудном бюджете вы ТОЧНО не найдёте датчиков, работающих по одному протоколу !
Я это уже всё проходил, чего и вам желаю.
Успехов !
Советую посетить форум http://cyber-place.ru, там много мыслей для малобюджетников.

To Sly_tom_cat
 Что такое 20% ? Это больно ? или наоборот ?
 Если 20% - это хорошо, то требую добавить !, за миои высказывания типа "3.14здец" в предыдущих постах
 Требую полного анализа моих постов и увеличения рейтинга !
 Когда у общества нет цветовой дифференциации штанов, то нет цели!
« Последнее редактирование: 20 Февраля 2014, 01:40:44 от golota »
Я знаю то, что ничего не знаю, но некоторые не знают и этого. Сократ

 

Страница сгенерирована за 0.059 секунд. Запросов: 25.