Начать новую тему 
Ответить на тему 
Сообщение
СообщениеДобавлено: 07.02.17 03:11
Заголовок сообщения: Re: Тумбокс 2: тумбочка + Orange PI One
Аватара пользователя

Регистрация: 20.06.2016
Сообщения: 1628
Бро, молодец! Ставлю палец вверх. Понимаю, что ты пытаешься замутить. Сам работаю уже двано с PLC. Но, себе в бокс не стал мутить серьёзную автоматику. И на это было несколько причин:
1) Надёжность. Тут нужно понимать, на какой элементной базе всё это дело замутить... у меня на работе почти всё на siemens PLC, но и тут бывают сбои, которые сложно отловить... что там говорить о Китае.
2) Модульность конструкции. Если всё завязать на один контроллер, то при выходе из строя последнего встанет всё! А растению это не понравится. Есть у тебя запасной модуль (с залитым софтом и готовый к plug&play для быстрой замены, пока растишка не стрессанула?
3) Часто приходится ездить по работе, дома не бываю неделями. Гров поставить на паузу невозможно. За процессом следит надёжный человек по образованию... психолог. Каков шанс, что при выходе из строя какого-то компонента он (психолог) сможет решить проблему. Правильный ответ: нулевой шанс (даже со связью по телефону и пошаговым направлением психолога по диагностике проблемы. Пройденный этап для меня).
4) Сколько уйдёт времени на отладку программного кода и вылавливания всех багов? Возможны конфликты в оборудовании и отсюда ворох нерешённых проблем.
Но, как говорится: зубов бояться - в рот не давать. Так что допили свой проект и докажи мне, скептику, что я не прав :friend: .

_________________
Светильник на базе Cree СХВ3590,Светильник на базе плат от Castaman,Создание шкафа с максимальным КПД,Модернизация фильтровентиляционной системы шкафа (плоский фильтр, вентиляторы 12В, реобас),Устройство для круговой резки отверстий,Создание LED лампы с эффектом от ИК ,Создание канального вентилятора на базе компьютерного,Модернизация Quasar Board от Нуба,Организация подогрева тента на балконе 2.0,212 граммов с автомата,Экстрактор янтаря бутаном,Модернизация Quasar board 100 Elite V2 UV,Продление автономной работы вапорайзера


 Профиль Найти сообщения пользователя Галерея  
Ответить с цитатой
СообщениеДобавлено: 07.02.17 03:16
Заголовок сообщения: Re: Тумбокс 2: тумбочка + Orange PI One
Аватара пользователя

Регистрация: 09.02.2010
Сообщения: 245
:thumbs: нехатает большущего шредера и подвода канализасьона, чтоп при "аларма мусора!" все быренько утекло восвояси. + кармический тибе

_________________
фсе здрасте!


 Профиль Найти сообщения пользователя Галерея  
Ответить с цитатой
СообщениеДобавлено: 09.02.17 13:32
Заголовок сообщения: Re: Тумбокс 2: тумбочка + Orange PI One
Аватара пользователя

Регистрация: 08.01.2015
Сообщения: 48
Ronaldin4ik
Надёжность. Сначала соберу рабочий минимум на оранже без дополнительных контоллеров. Если говоришь, что даже Сименс зависает... да, можно сделать дублирующие модули, это когда уже будет общая шина данных (связи) для всех модулей.
Конфликты оборудования. Модуль строится индивидуально под исполнительное устройство, если новое устройство не будет подходить под старый модуль, тогда, конечно, надо будет переделывать/новый делать. Шина связи будет стандарта(!) SPI или I2C - тут конфликтов возникнуть не должно.


 Профиль Найти сообщения пользователя Галерея  
Ответить с цитатой
СообщениеДобавлено: 10.02.17 01:30
Заголовок сообщения: Re: Тумбокс 2: тумбочка + Orange PI One
Аватара пользователя

Регистрация: 20.06.2016
Сообщения: 1628
аКустик,
Бро, слежу за темой твоей. Интересно.
Прям сегодня две обесточки на работе выхватил, первая была, потому что навернулся один модуль... долго искали причину и оказалось, что у этого модуля нет никакого feedbacka, поэтому не показала система никакого алярма и он себя никак не проявил. Долго рылись в истории сработавших сигнализаций после обесточки, но ничего не могли найти. Потом связались с коллегами по работе, у них похожая хрень была, они нам и подсказали на кого пенять :smile: . А по второй обесточке так и не разобрались что к чему. Непостоянную проблему очень сложно отловить. И это всё на топовых системах от именитых производителей. Такие дела.

_________________
Светильник на базе Cree СХВ3590,Светильник на базе плат от Castaman,Создание шкафа с максимальным КПД,Модернизация фильтровентиляционной системы шкафа (плоский фильтр, вентиляторы 12В, реобас),Устройство для круговой резки отверстий,Создание LED лампы с эффектом от ИК ,Создание канального вентилятора на базе компьютерного,Модернизация Quasar Board от Нуба,Организация подогрева тента на балконе 2.0,212 граммов с автомата,Экстрактор янтаря бутаном,Модернизация Quasar board 100 Elite V2 UV,Продление автономной работы вапорайзера


 Профиль Найти сообщения пользователя Галерея  
Ответить с цитатой
СообщениеДобавлено: 24.02.17 21:18
Заголовок сообщения: Re: Тумбокс 2: тумбочка + Orange PI One
Аватара пользователя

Регистрация: 08.01.2015
Сообщения: 48
Выявились некоторые недостатки системы:
-блютуз-соединение почему-то часто обрывается, после обрыва не возможно установить новое. Вероятно будет заменён на вайфай. Блютуз - он для работы в одном помещении (строении), а мне нужно между строениями.
-использовать два блока питания неудобно, это усложнит код программ в будущем.

Модуль с двумя реле. Теория.
Одно реле будет включать лампочку на 220В. Второе на запас. Реле б/у нашёл дома. Катушки реле на 12 вольт. Та-же задача: тремя вольтами включать 12-вольтовые реле. Замерял рабочие токи реле:
20,7 мА и 30,3 мА. Да-да… реле неодинаковые :) Токи маленькие – достаточно поставить по одному транзистору КТ315А. Минимальный коэф. усиления 20, вычислил резисторы 3К3 и 2К2 соответственно.
Некоторые могут спросить: почему я ориентируюсь не на максимальный 90. В таком случае худшем вариантом будет недостаток тока – реле не будут срабатывать. При расчёте на минимальный коэф. реле будут всегда срабатывать. Если транзистор откроется на бОльший ток чем расчитано - реле не сгорит, реле не пропустит тока больше чем ему нужно. Т.е. максимальный ток зависит от нагрузки (реле), а минимальный от транзистора.

Модуль с двумя реле. Схема.
Каскады на транзисторах - классика.
339549

Модуль с двумя реле. Программа.
Как и с БП ATX: на каждое действие по программе. Не забываем что питаться реле будет от БП АТХ, значит его надо включать своими программами (atx_on.py/atx_off.py).
Реле 1 включить.
Создаём файл:
Код:
nano /tumbox/rele1_on.py

Вставляем код:
Код:
#!/usr/bin/env python

from pyA20.gpio import gpio
from pyA20.gpio import port

gpio.init()

OperPort = port.PC4

gpio.setcfg(OperPort, gpio.OUTPUT)
gpio.output(OperPort, gpio.HIGH)

Делаем файл исполняемым:
Код:
chmod +x /tumbox/rele1_on.py

Реле 1 выключить.
Создаём файл:
Код:
nano /tumbox/rele1_off.py

Вставляем код:
Код:
#!/usr/bin/env python

from pyA20.gpio import gpio
from pyA20.gpio import port

gpio.init()

OperPort = port.PC4

gpio.setcfg(OperPort, gpio.OUTPUT)
gpio.output(OperPort, gpio.LOW)

Делаем файл исполняемым:
Код:
chmod +x /tumbox/rele1_off.py

Реле2 включить.
Создаём файл:
Код:
nano /tumbox/rele2_on.py

Вставляем код:
Код:
#!/usr/bin/env python

from pyA20.gpio import gpio
from pyA20.gpio import port

gpio.init()

OperPort = port.PC7

gpio.setcfg(OperPort, gpio.OUTPUT)
gpio.output(OperPort, gpio.HIGH)

Делаем файл исполняемым:
Код:
chmod +x /tumbox/rele2_on.py

Реле 2 выключить.
Создаём файл:
Код:
nano /tumbox/rele2_off.py

Вставляем код:
Код:
#!/usr/bin/env python

from pyA20.gpio import gpio
from pyA20.gpio import port

gpio.init()

OperPort = port.PC7

gpio.setcfg(OperPort, gpio.OUTPUT)
gpio.output(OperPort, gpio.LOW)

Делаем файл исполняемым:
Код:
chmod +x /tumbox/rele2_off.py



 Профиль Найти сообщения пользователя Галерея  
Ответить с цитатой
СообщениеДобавлено: 03.03.17 17:57
Заголовок сообщения: Re: Тумбокс 2: тумбочка + Orange PI One
Аватара пользователя

Регистрация: 20.01.2017
Сообщения: 92
Отсутствие USB лечится USB хабом, часов ntp. Стабильность watchdog+возможно Monit, а баги никак не лечаться, они ловятся ;)
Ronaldin4ik, надежность системы определяется надежностью ее самого не надежного элемента, так ? Мониторинга нет что-ли у вас какого-нибудь ?

PS тут еще посмотри http://www.raspiviv.com/ не в курсе открытости сырцов, но что-то скачать можно. Много всего гуглится raspberry pi greenhouse automation

_________________
Обход блокировки. Личный бесплатный прокси


 Профиль Найти сообщения пользователя Галерея  
Ответить с цитатой
СообщениеДобавлено: 03.03.17 22:24
Заголовок сообщения: Re: Тумбокс 2: тумбочка + Orange PI One
Аватара пользователя

Регистрация: 08.01.2015
Сообщения: 48
kanoplev, raspiviv.com - там распбери, не оранж.
У меня минуса температуры почти прошли, боюсь не успеть, начинаю вживлять оранж в тумбочку. Блютуз выкинул, подключил Wi-Fi - сигнал слабый но соединение не рвётся. Датчик температуры работает, но подробности позже.
Есть старые фотки тумбокса - версии 1.0.
341395341388341389341390341391341392341393341394
Модуль датчиков. Теория.
Состоит из нескольких «органов»:
1. Датчик температуры и влажности DHT11.
2. Датчик открытой двери в помещение. Если кто-то зашёл без предупреждения – переход в бесшумный режим.
3. Кнопка RESET и OFF. Изначально никаких кнопок не планировал, но подумал, что могут понадобиться кнопки для отладки некоторых процессов при непосредственном присутствии возле тумбочки.
4. Светодиод – тоже для отладки воочию.
5. Датчик света (пока только в теории) – чтобы определять реальное наличие внутрибоксового освещения.

Модуль датчиков. Схема.
На плате только резисторы и разъёмы.
344932
Пока ничего не подключал кроме DHT11.

Модуль датчиков. Библиотека для DHT11.
Копируем библиотеку для датчика под питон:
Код:
cd /tumbox
git clone https://github.com/szazo/DHT11_Python.git

Проблема в том, что библиотека написана для RapsberyPI. Я перевёл её для OrangePI.
Удаляем старый файл:
Код:
rm /tumbox/DHT11_Python/dht11.py

Создаём новый:
Код:
nano /tumbox/DHT11_Python/dht11.py

Копируем туда следующий текст:
Код:
import time
from pyA20.gpio import gpio


class DHT11Result:
    'DHT11 sensor result returned by DHT11.read() method'

    ERR_NO_ERROR = 0
    ERR_MISSING_DATA = 1
    ERR_CRC = 2

    error_code = ERR_NO_ERROR
    temperature = -1
    humidity = -1

    def __init__(self, error_code, temperature, humidity):
        self.error_code = error_code
        self.temperature = temperature
        self.humidity = humidity

    def is_valid(self):
        return self.error_code == DHT11Result.ERR_NO_ERROR


class DHT11:
    'DHT11 sensor reader class for Raspberry'

    __pin = 0

    def __init__(self, pin):
        self.__pin = pin

    def read(self):
   gpio.setcfg(self.__pin, gpio.OUTPUT)

        # send initial high
        self.__send_and_sleep(gpio.HIGH, 0.05)

        # pull down to low
        self.__send_and_sleep(gpio.LOW, 0.02)

        # change to input using pull up
   gpio.setcfg(self.__pin, gpio.INPUT)
   gpio.pullup(self.__pin, gpio.PULLUP)

        # collect data into an array
        data = self.__collect_input()

        # parse lengths of all data pull up periods
        pull_up_lengths = self.__parse_data_pull_up_lengths(data)

        # if bit count mismatch, return error (4 byte data + 1 byte checksum)
        if len(pull_up_lengths) != 40:
            return DHT11Result(DHT11Result.ERR_MISSING_DATA, 0, 0)

        # calculate bits from lengths of the pull up periods
        bits = self.__calculate_bits(pull_up_lengths)

        # we have the bits, calculate bytes
        the_bytes = self.__bits_to_bytes(bits)

        # calculate checksum and check
        checksum = self.__calculate_checksum(the_bytes)
        if the_bytes[4] != checksum:
            return DHT11Result(DHT11Result.ERR_CRC, 0, 0)

        # ok, we have valid data, return it
        return DHT11Result(DHT11Result.ERR_NO_ERROR, the_bytes[2], the_bytes[0])

    def __send_and_sleep(self, output, sleep):
   gpio.output(self.__pin, output)
        time.sleep(sleep)

    def __collect_input(self):
        # collect the data while unchanged found
        unchanged_count = 0

        # this is used to determine where is the end of the data
        max_unchanged_count = 100

        last = -1
        data = []
        while True:
            #current = RPi.GPIO.input(self.__pin)
       current = gpio.input(self.__pin)
            data.append(current)
            if last != current:
                unchanged_count = 0
                last = current
            else:
                unchanged_count += 1
                if unchanged_count > max_unchanged_count:
                    break

        return data

    def __parse_data_pull_up_lengths(self, data):
        STATE_INIT_PULL_DOWN = 1
        STATE_INIT_PULL_UP = 2
        STATE_DATA_FIRST_PULL_DOWN = 3
        STATE_DATA_PULL_UP = 4
        STATE_DATA_PULL_DOWN = 5

        state = STATE_INIT_PULL_DOWN

        lengths = [] # will contain the lengths of data pull up periods
        current_length = 0 # will contain the length of the previous period

        for i in range(len(data)):

            current = data[i]
            current_length += 1

            if state == STATE_INIT_PULL_DOWN:
                if current == gpio.LOW:
                    # ok, we got the initial pull down
                    state = STATE_INIT_PULL_UP
                    continue
                else:
                    continue
            if state == STATE_INIT_PULL_UP:
                if current == gpio.HIGH:
                    # ok, we got the initial pull up
                    state = STATE_DATA_FIRST_PULL_DOWN
                    continue
                else:
                    continue
            if state == STATE_DATA_FIRST_PULL_DOWN:
                if current == gpio.LOW:
                    # we have the initial pull down, the next will be the data pull up
                    state = STATE_DATA_PULL_UP
                    continue
                else:
                    continue
            if state == STATE_DATA_PULL_UP:
                if current == gpio.HIGH:
                    # data pulled up, the length of this pull up will determine whether it is 0 or 1
                    current_length = 0
                    state = STATE_DATA_PULL_DOWN
                    continue
                else:
                    continue
            if state == STATE_DATA_PULL_DOWN:
                if current == gpio.LOW:
                    # pulled down, we store the length of the previous pull up period
                    lengths.append(current_length)
                    state = STATE_DATA_PULL_UP
                    continue
                else:
                    continue

        return lengths

    def __calculate_bits(self, pull_up_lengths):
        # find shortest and longest period
        shortest_pull_up = 1000
        longest_pull_up = 0

        for i in range(0, len(pull_up_lengths)):
            length = pull_up_lengths[i]
            if length < shortest_pull_up:
                shortest_pull_up = length
            if length > longest_pull_up:
                longest_pull_up = length

        # use the halfway to determine whether the period it is long or short
        halfway = shortest_pull_up + (longest_pull_up - shortest_pull_up) / 2
        bits = []

        for i in range(0, len(pull_up_lengths)):
            bit = False
            if pull_up_lengths[i] > halfway:
                bit = True
            bits.append(bit)

        return bits

    def __bits_to_bytes(self, bits):
        the_bytes = []
        byte = 0

        for i in range(0, len(bits)):
            byte = byte << 1
            if (bits[i]):
                byte = byte | 1
            else:
                byte = byte | 0
            if ((i + 1) % 8 == 0):
                the_bytes.append(byte)
                byte = 0

        return the_bytes

    def __calculate_checksum(self, the_bytes):
        return the_bytes[0] + the_bytes[1] + the_bytes[2] + the_bytes[3] & 255

Модуль датчиков. Программа для DHT11.
Создаём программу:
Код:
nano /tumbox/tem.py

Текст программы:
Код:
#!/usr/bin/env python

from pyA20.gpio import gpio
from pyA20.gpio import port
import sys
sys.path.append("/tumbox/DHT11_Python")
import dht11

gpio.init()

instance = dht11.DHT11(pin = port.PA1)
result = instance.read()

if result.is_valid():
    print("Temperature: %d C" % result.temperature)
    print("Humidity: %d %%" % result.humidity)
else:
    print("Error: %d" % result.error_code)

Делаем файл исполняемым:
Код:
chmod +x /tumbox/tem.py

В работе:
341397
Час назад ошибок было меньше. Но в принципе работает.


Последний раз редактировалось аКустик 16.03.17 22:39, всего редактировалось 2 раз(а).

 Профиль Найти сообщения пользователя Галерея  
Ответить с цитатой
СообщениеДобавлено: 03.03.17 22:43
Заголовок сообщения: Re: Тумбокс 2: тумбочка + Orange PI One

Регистрация: 20.01.2006
Сообщения: 6592
А в каких условяих эксплуатируется бокс? Может быть все это ненужные свистелки-перделки, которые кроме поедания времени и денег ничего не дадут? :hmmm:
Сколько кстати денег на всю автоматику ушло? И почему Питон, а не С++?

_________________
-- In Code We Trust --


 Профиль Найти сообщения пользователя Галерея  
Ответить с цитатой
СообщениеДобавлено: 04.03.17 23:29
Заголовок сообщения: Re: Тумбокс 2: тумбочка + Orange PI One
Аватара пользователя

Регистрация: 08.01.2015
Сообщения: 48
madjikshit
Бокс в нежилом неотапливаемом ветропродуваемом помещении, скрываю его от некоторых домашних и всех соседей(!).
Тумбокс 2.0 сожрал 1800грн, и это при том что некоторые запчасти были свои (б/у). Если бы всё новое/заводское, ещё +1000грн можно спокойно накинуть. Возможно ещё придёться докупить: видеокамеру, антенну Wi-Fi, длинный шнур к антенне Wi-Fi. И больше трат на электронику не запланировано (в данной версии).
Для GPIO сразу нашёл библиотеку на питоне, потому и питон. C++ не смотря на свою скорость имеет много заморочек, хочется простоты.

Из самодельного осталось проверить и описать вентилляцию. Потом в основном программировать :smoke: .


 Профиль Найти сообщения пользователя Галерея  
Ответить с цитатой
СообщениеДобавлено: 05.03.17 15:19
Заголовок сообщения: Re: Тумбокс 2: тумбочка + Orange PI One
Аватара пользователя

Регистрация: 20.01.2017
Сообщения: 92
аКустик, Там то же линукс.

_________________
Обход блокировки. Личный бесплатный прокси


 Профиль Найти сообщения пользователя Галерея  
Ответить с цитатой
СообщениеДобавлено: 06.03.17 02:17
Заголовок сообщения: Re: Тумбокс 2: тумбочка + Orange PI One
Аватара пользователя

Регистрация: 08.01.2015
Сообщения: 48
kanoplev Доступ к GPIO разный, т.к. разные процессоры. Хотя есть шанс приспособить к оранжу, если вы программист. Примеры на питоне к распбери у меня на оранже не работают т.к. библиотеки GPIO по разному называются: RPi и A20 (в оранже проц H3, но с A20 совместим).

raspiviv.com Посмотрел Getting started:
-да... вебинтерфейс есть
-графики красивые
-автоматизация... тот-же код, только php вместо python'а
-запуск программ по расписанию через cron
-база данных mysql

В принципе к этому и иду, изобретаю велосипед :) Cron'а не будет, будет одна программа (сервис) для всего оборудования, которая будет постоянно включена - так будет более внимательный контроль.


 Профиль Найти сообщения пользователя Галерея  
Ответить с цитатой
СообщениеДобавлено: 06.03.17 17:03
Заголовок сообщения: Re: Тумбокс 2: тумбочка + Orange PI One
Аватара пользователя

Регистрация: 20.01.2017
Сообщения: 92
аКустик [06.03.17 02:17] писал(а):
которая будет постоянно включена

Которая остановиться по причине бага и все умрет. Cron -это дело, его не дураки придумали, советую. Как и это
kanoplev [03.03.17 17:57] писал(а):
Стабильность watchdog+возможно Monit

_________________
Обход блокировки. Личный бесплатный прокси


 Профиль Найти сообщения пользователя Галерея  
Ответить с цитатой
СообщениеДобавлено: 06.03.17 17:21
Заголовок сообщения: Re: Тумбокс 2: тумбочка + Orange PI One
Аватара пользователя

Регистрация: 04.06.2015
Сообщения: 2187
ТС, красавчик! Слежу с интересом!

kanoplev, просто кроном тут не очень, тем более частота раз в минуту всего - обычно делается демон, который висит и в бесконечном цикле обрабатывает задачи. и раз в минуту по крону происходит запуск скрипта который проверяет, что демон работает и если нет (упал по какой-то причине) запускает его.
И вместо мускуля настоятельно советую sqlite - производительности на pi лучше в разы.
В ближ время выложу свой код для raspberry. Стек технологий таков: php7-fpm, nginx, sqlite. Написано на Yii2, обработчики для датчиков на Си и питоне.

З.Ы.
аКустик, сам использую DHT22, и он периодически отдает мне некорректные значения (например в 2 раз больше чем есть по факту), пришлось на уровне приложения делать логику, которая не сохраняет значения статистически сильно выделяющиеся (тройной опрос с валидацией по среднему +- некая дельта). Не было подобной проблемы?

_________________
Клубника / 142Вт LED / минвата / капля / соли


 Профиль Найти сообщения пользователя Галерея  
Ответить с цитатой
СообщениеДобавлено: 06.03.17 18:32
Заголовок сообщения: Re: Тумбокс 2: тумбочка + Orange PI One
Аватара пользователя

Регистрация: 20.01.2017
Сообщения: 92
Strawberry [06.03.17 17:21] писал(а):
просто кроном тут не очень


Не вникал в архитектуру, первое что в голову пришло предлагаю, благо вещи крайне хорошие.
Strawberry [06.03.17 17:21] писал(а):
php7-fpm, nginx, sqlite. Написано на Yii2, обработчики для датчиков на Си и питоне.

Нравится. Такое на любой unix скороварке завести можно :angree:

_________________
Обход блокировки. Личный бесплатный прокси


 Профиль Найти сообщения пользователя Галерея  
Ответить с цитатой
СообщениеДобавлено: 08.03.17 23:17
Заголовок сообщения: Re: Тумбокс 2: тумбочка + Orange PI One
Аватара пользователя

Регистрация: 08.01.2015
Сообщения: 48
kanoplev
"Которая остановиться по причине бага и все умрет."
В питоне есть механизм исключений который должен перехватывать ошибки(исключения) - т.е. программа может перехватить собственную ошибку, записать сведения о ней, а потом попробовать возобновить работу.

Strawberry
"сам использую DHT22, и он периодически отдает мне некорректные значения (например в 2 раз больше чем есть по факту), пришлось на уровне приложения делать логику, которая не сохраняет значения статистически сильно выделяющиеся (тройной опрос с валидацией по среднему +- некая дельта). Не было подобной проблемы?"
Вчера лампой немного нагрел бокс, проверил температуру: 14 градусов.
Сегодня меряю 5 раз подряд: 14, 8, 8, 8, 8. Выходит что первый показатель вчерашний :)
А так 1-2 градуса разбежность замеров подряд. Бывает и 8 раз подряд ошибка замера :)
Да, стоит среднее значение вычислять из нескольких замеров. Sqlite тоже возьму на заметку.

Вентиляция. Теория.
Из старой версии тумбокса осталось два кулера на вдув/выдув, их и оставил. На внутренний ветер будет кулер поменьше – из охлаждения винчестера от ПК.
Обычно для цифровой регулировки вентиляции используют ШИМ (PWM), так можно регулировать скорость с точностью до долей процента. В оранже есть только один контакт доступный для ШИМ, но он используется в UART разъёме, через который я впервые (в начале темы) заходил в командную строку. Отключать «последний шанс войти» ради вентиляции показалось неразумным.
Придумал потратить 4 обычных контактов GPIO для ступенчатого управления скоростью вентиляторов. Но скоростей будет не 4, а 15 – так называемый ЦАП(DAC) - Цифрово-Аналоговый Преобразователь. На сколько я понял, в оранже нет такой встроенной функции.

Вентиляция. Схема.
Изначально думалось сделать модуль на отдельном микроконтроллере: ШИМ, отслеживание наличия вращения, разные принципы управления скоростью в зависимости от типа кулера, подключение к шине данных (которой сейчас и нет вовсе). Потому оставил 5-ти разъёмную проводку к двум кулерам.
342895
Предохранители для солидности нарисовал :brow:. Расчёты как всегда начал с нагрузки. Кулер вентиляции потребляет 0,15А. Два кулера: 0,15 * 2 = 0,3А. Для них поставил уже знакомый транзистор КТ815. Через коэфициент усиления (40) вычислил максимальный ток базы транзистора: 0,3А / 40 = 0,0075А. Этот ток надо разбить на 4 ступеньки так, чтобы следующая ступенька пропускала в два раза меньше тока чем предыдущая. Т.е. цифровая система: 1, 2, 4, 8 частей тока соответственно каждой ступеньке. Предполагается набор некой комбинации из включеных/выключеных ступенек. Одна часть тока будет: 0,0075А / (1+2+4+8) = 0,0075А / 15 = 0,0005А.
Вычисляем токи для каждой ступени:
I1 = 0,0005А * 8 = 0,004А
I2 = 0,0005А * 4 = 0,002А
I3 = 0,0005А * 2 = 0,002А
I4 = 0,0005А * 1 = 0,0005А
Вычисляем резисторы для каждой ступени по закону Ома:
U = 3,3В
R1(R27) = U/I1 = 3,3В / 0,004А = 825 Ом
R2(R26) = U/I2 = 3,3В / 0,002А = 1650 Ом
R3(R25) = U/I3 = 3,3В / 0,004А = 3300 Ом
R4(R10) = U/I4 = 3,3В / 0,004А = 6600 Ом
Номиналы резисторов в схеме немного отличаются. Расчёты на внутренний ветер описывать не буду – там ещё проще, он односкоростной :smile:.
Вышел у меня 4-х битный ЦАП, но... может и 4-х скоростей было бы достаточно? :hmmm:
В схеме есть небольшой недостаток: если один кулер сломается, то другой будет крутиться до двух раз быстрее. Т.е. ток рассчитанный для двух кулеров достанется одному. Зато программно можно ограничить вентиляцию до 7-й скорости. Хотя если вентиляция «на автомате» будет зависеть от температуры, то ничего перенастраивать не придётся (теоретически).

Вентиляция. Программа.
Создаём программу:
Код:
nano /tumbox/vent.py

Текст программы:
Код:
#!/usr/bin/env python

from pyA20.gpio import gpio
from pyA20.gpio import port
import sys

gpio.init()

WentPort1 = port.PG8
WentPort2 = port.PG9
WentPort3 = port.PG6
WentPort4 = port.PG7

gpio.setcfg(WentPort1, gpio.OUTPUT)
gpio.setcfg(WentPort2, gpio.OUTPUT)
gpio.setcfg(WentPort3, gpio.OUTPUT)
gpio.setcfg(WentPort4, gpio.OUTPUT)

Command = 0

if len(sys.argv) >= 2:
        Command = int(sys.argv[1])
        if Command < 0 or Command > 15:
                print('ERROR: Need speed >= 0 and <= 15')
        else:
                # WentPort1
                if Command & 1 == 1:
                        gpio.output(WentPort1, gpio.HIGH)
                else:
                        gpio.output(WentPort1, gpio.LOW)

                # WentPort2
                if Command & 2 == 2:
                        gpio.output(WentPort2, gpio.HIGH)
                else:
                        gpio.output(WentPort2, gpio.LOW)

                # WentPort3
                if Command & 4 == 4:
                        gpio.output(WentPort3, gpio.HIGH)
                else:
                        gpio.output(WentPort3, gpio.LOW)

                # WentPort4
                if Command & 8 == 8:
                        gpio.output(WentPort4, gpio.HIGH)
                else:
                        gpio.output(WentPort4, gpio.LOW)
else:
        if gpio.input(WentPort1):
                Command += 1
        if gpio.input(WentPort2):
                Command += 2
        if gpio.input(WentPort3):
                Command += 4
        if gpio.input(WentPort4):
                Command += 8
        print("Current speed: %d" % Command)

Делаем файл исполняемый:
Код:
chmod +x /tumbox/vent.py

"gpio.input()" - функция чтения состояния порта (0 или 1/ Нет или Да/True или False).
Если просто запустить программу, она покажет текущую скорость от 0 до 15. (0 - выключено).
Если запустить программу с номером скорости, она выдаст её на наши четыре порта GPIO.


Последние тесты.
На реле1 подключил лампу КЛЛ/220В/непомню сколько ватт - работает.
Вентилляция: проверил скорости 0 и 15 - работает, остальные не успел. Алгоритм проверки: удалённо из ПК изменил скорость, побежал к боксу проверил, потом назад побежал, а скоростей то 15... :facepalm:. Неудобно проверять, надо кнопки к модулю датчиков всё-таки подключить, и скоростя на месте ими переключать при проверке.
БП АТХ после загрузки оранжа может быть включённым. И вообще: чуть его подвинул - выключился, ещё чуток - включился :elk: Проблема с выключением частично осталась, пофик :rasta: .


Последний раз редактировалось аКустик 09.03.17 20:04, всего редактировалось 1 раз.

 Профиль Найти сообщения пользователя Галерея  
Ответить с цитатой
СообщениеДобавлено: 09.03.17 19:39
Заголовок сообщения: Re: Тумбокс 2: тумбочка + Orange PI One
Аватара пользователя

Регистрация: 08.01.2015
Сообщения: 48
Тесты 9.3.2017
Протестировал переключение скоростей от верхней к нижней:
-обнаружил ошибку в программе, исправил её также и в теме;
-от 4-й скорости к 0-ой кулеры уже не крутятся - 5-ю можно считать минимальной;
Датчик температуры DHT11 спустя неделю перестал работать. :cry:


 Профиль Найти сообщения пользователя Галерея  
Ответить с цитатой
СообщениеДобавлено: 10.03.17 01:12
Заголовок сообщения: Re: Тумбокс 2: тумбочка + Orange PI One
Аватара пользователя

Регистрация: 04.06.2015
Сообщения: 2187
Цитата:
Датчик температуры DHT11 спустя неделю перестал работать.

Загубил один 22й чрезмерными опросами. Рамки разумного определил опытным путем - опрашиваю одной сессией раз в минуту: 5 обращений с промежутками в 2 секунды - 2й год пошел полет нормальный. Пережил жару 250го дната и многочисленные души в т.ч. с мин удобрениями.

_________________
Клубника / 142Вт LED / минвата / капля / соли


 Профиль Найти сообщения пользователя Галерея  
Ответить с цитатой
СообщениеДобавлено: 10.03.17 14:03
Заголовок сообщения: Re: Тумбокс 2: тумбочка + Orange PI One
Аватара пользователя

Регистрация: 13.11.2009
Сообщения: 159
аКустик [09.03.17 19:39] писал(а):
Тесты 9.3.2017
Протестировал переключение скоростей от верхней к нижней:
-обнаружил ошибку в программе, исправил её также и в теме;
-от 4-й скорости к 0-ой кулеры уже не крутятся - 5-ю можно считать минимальной;
Датчик температуры DHT11 спустя неделю перестал работать. :cry:


Скорей всего просто брак. Уже год как опрашивается со скоростью микроконтроллера и всё гуд, считаю самым адекватным и точным датчиком! :pray: И как правило китайцы шлют не 22 , а какой-нибудь AM2302...
И еще вопросик у тебя сигнальный провод подключен к плюсу через резистор 10к(если не ошибаюсь)?

_________________
И, пожалуйста, помните: мы - не юристы, правила - не УК, наказания раздают не святые. :facepalm:


 Профиль Найти сообщения пользователя Галерея  
Ответить с цитатой
СообщениеДобавлено: 11.03.17 12:00
Заголовок сообщения:
Аватара пользователя

Регистрация: 08.01.2015
Сообщения: 48
Да... датчик оказался без резистора :) В последний момент пришлось перестроиться под библиотеку на питоне, ей необходимы только контакты со встроенной функцией pull-up. Рекомендуемый резистор 5-10кОм - он тоже есть pull-up. Т.е. два pull-up’а будет? Вобщем, надо разбираться. А сейчас о камере:)

Вебкамера.Тест
Родная камера для оранжа имеет очень короткую длину провода (может 20см.), что очень не практично. Подключил старую вебкамеру iLook300, работала пару дней и сдохла. Она глючила и раньше, потому был принято решение купить дешевую новую: Defender C-090 (640x480, микрофон, длина провода 1,4м). В описании сказано "не нужны драйверы", т.е. они стандартные, максимальная вероятность что она подойдёт оранжу.
Подключил её через USB-сервер VirtualHere, т.е. как-бы "пробросил" USB-вебкамеру через сеть (WiFi) к домашнему ПК, где и появилось устройство (подобрались драйвера). Бесплатная версия VirtualHere позволяет "пробрасывать" только одно устройство, чего мне сейчас предостаточно.
343348
Таким образом можно узнать температуру без датчика DHT11 :) Просмотр камеры осуществлялся плеером MediaPlayerClassic. Как показывает утилита WiFi, usb/видеопоток имеет скорость 20-30 мегабит/сек.
Не знаю, стоит ли описывать настройку USB-сервера? Видеотрансляция в принципе и не нужна (что там будет меняться так быстро?), будет 1-2 раза в день делаться фотка в автоматическом режиме, которая будет доступна в будущем веб-интерфейсе.


 Профиль Найти сообщения пользователя Галерея  
Ответить с цитатой
СообщениеДобавлено: 11.03.17 13:40
Заголовок сообщения: Re:
Аватара пользователя

Регистрация: 13.11.2009
Сообщения: 159
аКустик [11.03.17 12:00] писал(а):
Да... датчик оказался без резистора :) В последний момент пришлось перестроиться под библиотеку на питоне, ей необходимы только контакты со встроенной функцией pull-up. Рекомендуемый резистор 5-10кОм - он тоже есть pull-up. Т.е. два pull-up’а будет? Вобщем, надо разбираться. А сейчас о камере:)

Вебкамера.Тест
Родная камера для оранжа имеет очень короткую длину провода (может 20см.), что очень не практично. Подключил старую вебкамеру iLook300, работала пару дней и сдохла. Она глючила и раньше, потому был принято решение купить дешевую новую: Defender C-090 (640x480, микрофон, длина провода 1,4м). В описании сказано "не нужны драйверы", т.е. они стандартные, максимальная вероятность что она подойдёт оранжу.
Подключил её через USB-сервер VirtualHere, т.е. как-бы "пробросил" USB-вебкамеру через сеть (WiFi) к домашнему ПК, где и появилось устройство (подобрались драйвера). Бесплатная версия VirtualHere позволяет "пробрасывать" только одно устройство, чего мне сейчас предостаточно.
343348
Таким образом можно узнать температуру без датчика DHT11 :) Просмотр камеры осуществлялся плеером MediaPlayerClassic. Как показывает утилита WiFi, usb/видеопоток имеет скорость 20-30 мегабит/сек.
Не знаю, стоит ли описывать настройку USB-сервера? Видеотрансляция в принципе и не нужна (что там будет меняться так быстро?), будет 1-2 раза в день делаться фотка в автоматическом режиме, которая будет доступна в будущем веб-интерфейсе.


Да, нужен подтягивающий резистор! Либо от ардуинки что-то кардинально отличается! У меня провод метра 2.5, поставил 10к, полет шикарный.

_________________
И, пожалуйста, помните: мы - не юристы, правила - не УК, наказания раздают не святые. :facepalm:


 Профиль Найти сообщения пользователя Галерея  
Ответить с цитатой
СообщениеДобавлено: 12.03.17 00:10
Заголовок сообщения: Re: Тумбокс 2: тумбочка + Orange PI One
Аватара пользователя

Регистрация: 08.01.2015
Сообщения: 48
Долго откладывал описание часов, недавно перестали сбиваться.

Часы.Теория
В гроубоксе для автоматизации напр. освещения используют таймеры (реле времени): розетка-таймер/на ДИН-рейку, механические/электронные. Оранж (вместе с усилительными каскадами) легко может справиться с этой задачей. Но требует понимания некоторых процессов.
В Armbian(Linux) главное время (время и дата) – это системное время. Отсчёт этого времени вычисляется процессором (?) – программно. Просмотреть это время можно с помощью команды:
Код:
date

Это время имеет один недостаток – при перезагрузке или выключении процессор обесточивается и время сбивается. При загрузке Armbian должен возобновлять системное время – получить из достоверного источника: пользователь, интернет или внешние часы реального времени (RTC).

Навести системное время из командной строки:
Дата:
Код:
date +%Y%m%d -s "20170119"

Время:
Код:
date +%T -s "11:14:00"


Навести время из интернета наверное можно, но сейчас интернета на оранже нет, потому...
Я купил модуль часов реального времени на основе чипа DS1307. Связь с модулем осуществляется по протоколу I2C.
В модуль надо вставить аккумулятор-таблетку (напр. LIR2032), чтобы часы не сбивались от потери внешнего питания. Сначала я вставил батарейку - часы сбивались. Видео https://www.youtube.com/watch?v=b8-4o6A7dZs разъяснило этот момент. Недели через две аккумулятор был достаточно заряжен, и время перестало сбиваться.
Интересный момент: процессор Оранжа Allwinner H3 уже имеет RTC модуль, но ему надо подавать питание (от батарейки/аккумулятора) на контакт VCC_RTC.
343535343538
Видим из схемы Orange Pi One, что контакт VCC_RTC подключен к контакту «VCC-RTC». Его (круглого) можно найти на плате и подпаять туда батарейку, но люди на форумах пишут, что к этому контакту много чего подключено кроме часов, батарейки надолго не хватит.
Возвращаемся к DS1307. Первый I2C канал данных в разъёме GPIO – это два контакта: TWI0_SDA/PA12/№3 и TWI0_SCK/PA11/№5. Смотрим инструкцию к DS1307 и видим.
343540
Питание от 4,5 до 5,5В, вход лог. единица от 2,2В до 5,8 (5,5+0,3)В. Питать будем пятью вольтами, а логический сингнал от оранжа не превысит 3.3В – всё ОК. Какого вольтажа лог. сигнал идёт к Оранжу я, честно говоря, не понял, но всё вроде заработало.

Часы. Электрическая схема.
Подключаем модуль часов к GPIO оранжа по следующей схеме.
343544

Часы. Настройка Armbian.
Armbian позаботился о том, чтобы мы не вникали в тонкости протокола I2C.
Используя mc зайдите в папку /dev (или выполните команду ls /dev/rtc* -al), вы там должны увидеть файл устройства rtc0 – это как раз те самые часы, которые встроены в процессор H3.
Что-бы подключить часы ds1307 к системе надо выполнить команду
Код:
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-0/new_device

После этого (если всё правильно сделали) в папке dev появиться устройство rtc1 – это наши часы.
343547
Фактически выходит, что у нас есть трое часов, просмотрим время на всех часах, по очереди выполняя команды:
Код:
date
hwclock --show --rtc=/dev/rtc0
hwclock --show --rtc=/dev/rtc1

343548
Как видим - всё время разное, но Armbian настоящим всегда считает первое т.к. это системное время. Настроим наши часы rtc1:
Код:
hwclock --set --date="1/19/17 22:05:00" --rtc=/dev/rtc1
1 – это месяц, 19 – число, 17 – год, далее время – тут всё просто.
Настроим (скопируем) системное время из наших часов:
Код:
hwclock  -s -f /dev/rtc1

Теперь посмотрим системное время:
Код:
date
Ура - время правильное.
Осталась мелочь, настраивать системное время из наших часов каждый раз при старте системы (автозагрузка). В интернете бегает рецепт: в файле /etc/init.d/hwclock.sh вставить текст перед строкой . /lib/lsb/init-functions
Код:
if [ ! -e /dev/rtc1 ]; then
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-0/new_device
sleep 0.5
if [ -e /dev/rtc1 ]; then
HCTOSYS_DEVICE=rtc1
/sbin/hwclock -s -f /dev/$HCTOSYS_DEVICE
fi
else
HCTOSYS_DEVICE=rtc1
fi

Я поставил «sleep 2» - 2 секунды задержки для верности. Этот скрипт (программа на языке shell), должен выполнять настройку времени при автозагрузке. Должен… но не выполняет, как показала практика. Вероятно автозагрузка просто игнорирует скрипт. Изучать автозагрузку в Armbian мне было лень, потому я поставил его выполнение после бывшего автозапуска Блютуза в нашем файле /tumbox/autostart.sh.
343549
Перезагружаемся, если сразу существуют часы /dev/rtc1, значит скрипт выполняется. Ну и проверить системное время не помешает: date.
Если и после этого время будет сбиваться, значит аккумулятор ещё не зарядился (между контактами модуля BAT и GND должно быть больше 2,3 - 2,4 вольт).

Часы. Использование в Python.
Показать текущее время и дату как строку:
Код:
#!/usr/bin/env python

from datetime import datetime
print(str(datetime.now()))

Вывести отдельно все параметры времени:
Код:
#!/usr/bin/env python

import datetime
now = datetime.datetime.now()
print now.year, now.month, now.day, now.hour, now.minute, now.second

Проверка условия включения освещения (реле1) – из 5:00 до 23:00
Код:
#!/usr/bin/env python

from pyA20.gpio import gpio
from pyA20.gpio import port
import datetime

gpio.init()
now = datetime.datetime.now()

Rele1Port = port.RC4
gpio.setcfg(Rele1Port, gpio.OUTPUT)

if now.hour >=5 and now.hour < 23:
   gpio.output(Rele1Port, gpio.HIGH)
else:
   gpio.output(Rele1Port, gpio.LOW)


Добавлено спустя 9 минут 52 секунды:
Температура процессора
Код:
cat /sys/class/thermal/thermal_zone0/temp


Добавлено спустя 1 час 40 минут 20 секунд:
Связь по Wi-Fi. Теория.
Настраивал блютуз дольше недели, а на вайфай потребовалось пару дней. Задача: организовать законспирированную беспроводную связь между двумя строениями на 10-15м сквозь 2-3 стены. На стороне ПК – USB-WiFi адаптер «360». На стороне Оранжа – WiFi роутер «Huawei HG530». Оранж и роутер соединены обычной витой парой (сетевым шнуром Ethernet). Роутер будет в «скрытом» режиме точки доступа – как это сказать по понятнее… не будет сообщать о своём присутствии, не будет выдавать своё имя (SSID). Точке доступа Wi-Fi надо задать надёжный пароль, я задал длиной 16 буков. Роутер настраивается через веб-интерфейс, там тоже поставил 16-значный пароль.
Кроме того комп, роутер и оранж должны быть в одной подсети TCP/IP: 192.168.137.0.
Оранж как и был: 192.168.137.75
Роутер: 192.168.137.1
Комп: 192.168.137.2.

Связь по Wi-Fi. Схема.
343562

Связь по Wi-Fi. Настройка роутера.
Заходим браузером на роутер по сетевому кабелю. Напр. http://192.168.1.1/ Ввходим: admin/admin
343564343565
Заходим в Basic->LAN Settings, меняем IP адрес роутера согласно плану на 192.168.137.1.
343566
После подтверждения связь может потеряться т.к. изменились настройки сети – проще всего выключить и включить модем, а потом снова зайти по новому адресу http://192.168.137.1/.
Можно проверить автоматическую раздачу IP адресов Basic->DHCP.
343567
Как видим автоматическая раздача включена. Значит наш ПК при подключении автоматически скорее всего будет получать адрес 192.168.137.2 (или больше).
Изменяем пароль к веб-интерфейсу роутера при желании: Tools->System Management. Удаляем пользователя «user». Редактируем админа, изменяем пароль.
343568343569
Настроим Wi-Fi. Basic->Wirless Lan
343570
Access Point: Enable – включена точка доступа WiFi .
SSID – название точки доступа (записать или запомнить).
Broadcast SSID – выдавать своё название всем окружающим. No – не выдавать, делаем точку скрытой.
Authentication Type - метод авторизации входа (шифрование), вариант обязательно должен иметь в названии «WPA2».
Encription: AES – тоже какой-то параметр шифрования.
Pre-Shared Key – пароль к точке доступа (записать или запомнить).
802.11 b/g/n – доступные стандарты связи Wi-Fi
Подтверждаем кнопкой «Submit». Отключамем сетевой кабель от ПК и подключаем к оранжу.

Связь по Wi-Fi. Windows.
Оранж теперь подключен кабелем к роутеру, а с ПК будем входить в сеть по Wi-Fi. Но в скрытую точку доступа просто так не войти. Надо заранее создать беспроводное соединение.
343571
«Имя сети» – введите запомненный SSID точки доступа.
«Тип безопасности» – обязательно «WPA2-Personal».
«Тип шифрования» - «AES».
«Ключ безопасности» - запомненный пароль от точки доступа.
«Подключаться, даже…» - обязательный параметр для скрытых точек доступа.
343573343575
Заходим в список Wi-Fi сетей, наша точка должна быть на первом месте – подключаемся
343577
Через PuTTY проверяем доступ к оранжу - как всегда по адресу 192.168.137.75. Конспиративная связь установлена :sun:

Связь по Wi-Fi. Интернет.
Не удалось настроить трансляцию интернета оранжу через Wi-Fi (такой роутер), только через прокси. Возможно после перепрошивки роутера осью OpenWRT трансляция будет возможна.


Добавлено спустя 58 минут 34 секунды:
Вебкамера.Создание фотки на оранже.
устанавливаем программу FFMPEG.
Код:
apt-get install ffmpeg

Создаём 5 фотографий одной секунды:
Код:
ffmpeg -t 1 -f video4linux2 -s 640x480 -r 10 -i /dev/video0 -f image2 webcam1_%05d.png

Последнюю фотографию можно принимать за нужную. Дело в том первыми идут чёрные кадры – камера не успевает включаться к началу записи. Потому надо снимать целую секунду. Нам надо только последний кадр, то ставим скорость 10 кадров/сек (-r 10). 5 кадров/сек - мало. На выходе в текущей папке будут файлы изображений PNG: webcam1_00001.png, webcam1_00002.png, ...
Просмотреть все доступные режимы камеры:
Код:
v4l2-ctl --list-formats-ext


Последний раз редактировалось аКустик 26.08.17 13:20, всего редактировалось 2 раз(а).

 Профиль Найти сообщения пользователя Галерея  
Ответить с цитатой
СообщениеДобавлено: 12.03.17 14:24
Заголовок сообщения: Re: Тумбокс 2: тумбочка + Orange PI One
Аватара пользователя

Регистрация: 20.01.2017
Сообщения: 92
аКустик [08.03.17 23:17] писал(а):
В питоне есть механизм исключений который должен перехватывать ошибки(исключения)

Если у тебя сам родительский процесс умрет ?

_________________
Обход блокировки. Личный бесплатный прокси


 Профиль Найти сообщения пользователя Галерея  
Ответить с цитатой
СообщениеДобавлено: 12.03.17 14:26
Заголовок сообщения: Re: Тумбокс 2: тумбочка + Orange PI One
Аватара пользователя

Регистрация: 04.06.2015
Сообщения: 2187
аКустик, поставь тор сервис и будешь иметь доступ к Pi через интернет :thumbs:
Самый простой способ пробросить наружу, чем трахаться со статическим айпишником и пробросом портов на роутере ;)

Цитата:
Если у тебя сам родительский процесс умрет ?

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

_________________
Клубника / 142Вт LED / минвата / капля / соли


 Профиль Найти сообщения пользователя Галерея  
Ответить с цитатой
СообщениеДобавлено: 16.03.17 22:45
Заголовок сообщения: Re: Тумбокс 2: тумбочка + Orange PI One
Аватара пользователя

Регистрация: 08.01.2015
Сообщения: 48
Да... резистор помог, DHT11 заработал снова. Приступаю к демону. :twisted:


 Профиль Найти сообщения пользователя Галерея  
Ответить с цитатой
СообщениеДобавлено: 18.03.17 14:35
Заголовок сообщения: Re: Тумбокс 2: тумбочка + Orange PI One
Аватара пользователя

Регистрация: 13.11.2009
Сообщения: 159
аКустик [16.03.17 22:45] писал(а):
Да... резистор помог, DHT11 заработал снова. Приступаю к демону. :twisted:

Рад помочь первопроходцам) Удачи! :rasta:

_________________
И, пожалуйста, помните: мы - не юристы, правила - не УК, наказания раздают не святые. :facepalm:


 Профиль Найти сообщения пользователя Галерея  
Ответить с цитатой
Показать сообщения за:  Сортировать по  

Начать новую тему 
Ответить на тему 
 Страница 2 из 3  [ Сообщений: 62 ]  на страницу...   1  2  3  

   Похожие топики   Автор   Ответы   Просмотры   Последнее сообщение 
В этой теме нет новых непрочитанных сообщений. Тумбочка из хлама | LED ~ 220 watt | ВШГ 60x60x30

в форуме Строй-репорт

pickupbong

7

1367

06.11.19 14:17

pickupbong Перейти к последнему сообщению

В этой теме нет новых непрочитанных сообщений. Damnesia fem, тумбочка, COB 50W, LST, земля, Hesi

в форуме Grow reports

КаннаКот

23

1716

29.08.22 16:45

КаннаКот Перейти к последнему сообщению

В этой теме нет новых непрочитанных сообщений. Auto Amnesia / Тумбочка / Бытовые LED 118w / Земля / GHE

в форуме Grow Autoflowers

plazmogun

24

4034

23.07.21 14:24

olkalone Перейти к последнему сообщению

В этой теме нет новых непрочитанных сообщений. Auto Amnesia / Тумбочка 40х40х70 / Бытовые LED 173w / Земля / GHE

[ на страницу...: 1, 2, 3 ]

в форуме Grow Autoflowers

plazmogun

60

6344

15.11.20 07:01

AndyDance Перейти к последнему сообщению

В этой теме нет новых непрочитанных сообщений. Auto Daiquiri Lime / Тумбочка 40х40х70 / Бытовые LED 104w / Земля / GHE

[ на страницу...: 1, 2, 3 ]

в форуме Grow LED

plazmogun

64

6032

10.02.21 17:12

plazmogun Перейти к последнему сообщению



Журнал вахтёра

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Перейти:  
Powered by phpBB® Forum Software © phpBB Group

M