Ответы пользователя по тегу Arduino
  • Почему не работает программа Ардуино?

    Ocelot
    @Ocelot
    Похоже, вы в trLight() запихнули всю последовательность переключений, только заменив delay() на опрос таймеров. А должна быть логика немного другая: trLight() вызывается каждую (условно) миллисекунду, она должна один раз считать millis(), понять, какая сейчас фаза светофорного цикла, и в зависимости от этого погасить или зажечь нужные светодиоды. Сделайте функцию, у которой на входе текущее время, а на выходе — три бита состояния светодиодов.

    И в debounce() осталась delay(), её тоже хорошо бы на таймерах сделать
    Ответ написан
  • Сколько датчиков на "замыкание-размыкание" типа геркона можно подключить на ардуино?

    Ocelot
    @Ocelot
    Для начала - столько, сколько есть свободных GPIO пинов. Всякие извращения вроде чарлиплексинга даже не буду рассматримать. Нужно больше? Ставим мультиплексор или сдвиговый регистр, опрашиваем линии по очереди. Нужно ещё больше? Несколько мультиплексоров/регистров. Так можно увеличивать число линий почти до бесконечности ценой понижения частоты опроса.
    Ответ написан
    Комментировать
  • Отключение устройства при попадании воды?

    Ocelot
    @Ocelot
    12В не считается опасным для человека, но защита лишней не будет. Можно по сигналу с датчика закрывать мосфет в цепи питания. Но под напряжением останется всё до этого мосфета, и есть вероятность, что он откроется снова через утечку на затвор через воду.

    Если хотите упороться по безопасности, поставьте управляемый предохранитель (triggerable fuse, self-control fuse, https://www.eaton.com.cn/cn/en-us/catalog/electron...). В идеале он должен находиться прямо в аккумуляторной сборке.
    Ответ написан
    Комментировать
  • Как выключить ардуино, а потом включить кнопкой?

    Ocelot
    @Ocelot
    Про сон уже написали. Если нужно именно полное отключение - поставить в разрыв питания транзистор, управление им завести на один из пинов ардуины, а параллельно этому пину - кнопку без фиксации.
    Нажимаем кнопку, транзистор открывается, контроллер первым делом подхватывает управление питанием, после отпускания кнопки транзистор остаётся открытым. Когда нужно программно выключиться, просто отключаем пин.

    Если нужно во включённом состоянии следить за нажатиями кнопки, нужно отвязать её от транзистора через диод и завести сигнал непосредственно с кнопки на другой пин.
    620cc840390a7254469197.png
    Ответ написан
  • Как поменять SDA и SCL местами?

    Ocelot
    @Ocelot
    Ответ в первом приближении: нет, нельзя. Все стандартные библиотеки используют аппаратный i2c, он висит на определённых пинах, которые не переназначаются.

    Более глубокий ответ: если очень хочется, то можно. Ищите библиотеку software i2c. Коммуникация будет жрать больше CPU, зато пины сможете назначить любые.
    Ответ написан
    Комментировать
  • Как можно сделать так чтобы сделать оплату через qr код и отправить данные об облате на ардуино?

    Ocelot
    @Ocelot
    Подключить ардуину к интернету (гуглить Ethernet-shield и WiFi-shield), заставить её ходить на сервер. На сервере крутится биллинг, который принимает сканы qr-кодов от приложения на телефоне, проводит оплату и выдаёт команды на ардуино.
    Ответ написан
    5 комментариев
  • Как исправить ошибку обращения к DHT?

    Ocelot
    @Ocelot
    Внимательно разберитесь здесь:
    DHT11 DHT(DHT11);

    что у вас - имя класса, что - имя экземпляра, а что - константа, которая задефайнена в библиотеке.
    Ответ написан
    Комментировать
  • При попытке объединить два скетчи двух датчиков в один прерывается работа одного из датчиков?

    Ocelot
    @Ocelot
    Возможно, эти датчики используют какие-то общие ресурсы (интерфейсы, таймеры, прерывания). Не видя кода, наверняка сказать сложно.
    Ответ написан
  • Что будет если замкнуть два цифровых порта Arduino на друг-друге?

    Ocelot
    @Ocelot
    Если упрощенно, цифровой порт - это два ключа: один ("верхний") замыкает пин на 5V, второй ("нижний") - на землю. Если открыт верхний ключ, на порт выводится 1, если нижний, то 0. Закрыты оба ключа - порт работает как вход, т.н. Z-состояние.

    Что будет если замкнуть два цифровых порта на друг-друге?
    Если на один порт вывести 1, а на второй 0, будет короткое замыкание через верхний ключ первого порта и нижний ключ второго.

    Возможны ли исключения?
    Да, если вы гарантируете, что состояния портов всегда будут одинаковыми (00 или 11), ничего не сгорит.

    А если только один на выход с высоким сигналом, а второй на вход?
    Всё ок, вход прочитает единицу, ничего не сгорит.

    А если оба на выход высокого сигнала?
    Как уже было сказано, кз не будет. Но переключать оба порта нужно строго одновременно, за один такт.

    А если оба на вход?
    Не сгорит, но если больше ничего к этим портам не подключено, вход будет читать всякий случайный мусор.

    Можно ли соединять пин 5V и читающий цифровой пин?
    Можно ли соединять землю и читающий цифровой пин?
    В обоих случаях можно. Но если случайно переключить пин на выход, будет кз. Поэтому замыкать входы на питание и на землю лучше не напрямую, а через резистор.

    Можно ли соединять пин земли и 5V?
    Будет короткое замыкание источника 5V. Ну хотя бы контроллер от этого не сгорит =)
    Ответ написан
    Комментировать
  • Не хватает портов arduino или как сделать драйвер LCD?

    Ocelot
    @Ocelot
    Вам нужно искать микросхемы 'Dot-matrix LCD driver'. Но что-то я сомневаюсь, что получится впихнуться в 15x15 мм без BGA. Один только корпус QFN100 столько занимает, а нужна еще обвязка и место для разводки проводников.
    Ответ написан
    Комментировать
  • Подключение max485 к ардуино?

    Ocelot
    @Ocelot
    Продолжаем ликбез =)
    Скорее всего, вы будете использовать аппаратный USART. Значит, ноги DI и RO нужно подключить к TX и RX соответственно. На картинке у вас они перепутаны - исправьте. Ноги DE/RE отвечают за выбор направления потока, 1=передача, 0=приём. Поскольку в атмеге у USART нет аппаратного контроля потока, то этой ногой придётся дёргать программно. Смело вешайте DE/RE на любой свободный выход, куда удобнее. В момент начала передачи нужно будет поднять этот выход в 1, а после окончания передачи (по прерыванию USART Tx Complete) - сбросить в 0
    Ответ написан
    5 комментариев
  • Подключение датчика к ардуино?

    Ocelot
    @Ocelot
    VCC - на +5В
    GND - соответственно, на землю
    OUTPUT - на любой вход Arduino, и через резистор 10к подтянуть к 5В
    Такой тип выхода называется "открытый коллектор". Когда датчик срабатывает, в нём открывается транзистор и замыкает выход на землю, на ноге контроллера будет лог.0. Всё остальное время через подтяжку поступает напряжение питания, и будет лог.1.
    Ответ написан
    1 комментарий
  • Как передать данные через монитор порта в этот скетч?

    Ocelot
    @Ocelot
    for (i = 0; i < 32; i = i + 1)
    {
    b[i] = Serial.read();
    }
    Direction_of_Motor[0]=b[8];
    Direction_of_Motor[1]=b[11];
    Direction_of_Motor[2]=b[14];
    Movement_of_Motor[0]=b[9]*256;
    Movement_of_Motor[1]=b[12]*256;
    Movement_of_Motor[2]=b[15]*256;
    Movement_of_Motor[0]=Movement_of_Motor[0]+b[10];
    Movement_of_Motor[1]=Movement_of_Motor[1]+b[13];
    Movement_of_Motor[2]=Movement_of_Motor[2]+b[16];
    period=b[30]*256;
    period=period+b[31];


    Принимает 32 байта, нумерация с 0 по 31.
    Байт 8 - направление оси X ('+' или '-'). Байты 9 (старшая часть) и 10 (младшая часть) - перемещение по оси X.
    Байты 11, 12, 13 - то же для оси Y.
    Байты 14, 15, 16 - то же для оси Z.
    Байты 30 (старшая часть) и 31 (младшая часть) - период между шагами. Единица периода == 20 мкс, вроде так.
    Ответ написан
  • Как реализовать разные действия на разные промежутки времени?

    Ocelot
    @Ocelot
    флаг = 0;
    время_старта = 0;
    
    по_таймеру()	// например, каждые 100 мс
    {
    	опросить_считыватель();
    	if (карточка_есть)
    	{
    		if (флаг == 0)	// карточку поднесли
    		{
    			флаг = 1;
    			время_старта = текущее_время();
    		}
    	}
    	else
    	{
    		if (флаг == 1)	// карточку убрали
    		{
    			флаг = 0;
    			if (текущее_время() - время_старта < 5сек)
    			{
    				 делать_одно();
    			}
    			else
    			{
    				 делать_другое();
    			}
    		}
    	}
    }
    Ответ написан
    Комментировать
  • Как распознавать звуки на разной частоте в Arduino?

    Ocelot
    @Ocelot
    Ответ написан
    Комментировать
  • Arduino Радиосеть?

    Ocelot
    @Ocelot
    4) Вы про какую библиотеку говорите? Для RF24 вот есть описание с примерами: nrf24l01.pp.ua/nrf24l01/2-4ghz-rf-biblioteka-rf24
    Но лучше ориентироваться на родные доки, ничего сложного там нет: tmrh20.github.io/RF24/classRF24.html

    3) К сожалению, nrf24l01 не умеет измерять уровень сигнала.

    1, 2) Если нужно уменьшить габариты, возьмите какой-нибудь SoC типа СС2530, где в одном корпусе и проц, и радиочасть. Проблему п.3 это тоже решает.
    Ответ написан
    2 комментария
  • Как посчитать потребляемую мощность сконструированного прибора?

    Ocelot
    @Ocelot
    4. 40 мА - это максимально допустимый ток, который может отдавать выход. В реальных интерфейсах такого тока, конечно, не будет.
    5. Наоборот, потребляемый ток зависит от частоты опроса. Как именно зависит - заранее сказать нельзя. Если в datasheet нет на этот случай графика или формулы для расчета, единственный способ узнать - собрать схему и измерить.
    Ответ написан
    Комментировать
  • Какие комплектующие подойдут для DIY погружного глубиномера?

    Ocelot
    @Ocelot
    >какие датчики посоветуете для измерения давления воды?
    Такие: www.bdsensors.ru/products/sensors.php
    Подберите на нужный вам диапазон давления, и с мембраной из нержавейки (морское исполнение).

    >Способ крепления к корпусу?
    Через втулку с уплотнительными кольцами. Понадобится немного токарных работ.

    >Из чего сделать водонепронецаемый корпус?
    Самое простое - отрезок прозрачной поликарбонатной трубы с заглушками на торцах. В одной заглушке датчик, в другой - контакты для зарядки и подключения к компу (под завинчивающейся крышкой).

    >Или может не ардуино вовсе?
    Для прототипа - можно и ардуино (микро или нано). Если хотите компактное устройство, то лучше развести плату, на которой будет сразу всё: МК, дисплей, усилитель для датчика, контроллер батареи.
    Ответ написан
    1 комментарий
  • Как связать библиотеки adafruit_neopixel и VirtualWire в arduino?

    Ocelot
    @Ocelot
    Переучить VirtualWire на использование Timer2? Учтите, что Timer2 8-разрядный, его может не хватить. В теории, нужно заменить все регистры, относящиеся к таймеру, в функции vw_setup(), заменить обработчик прерывания SIGNAL(TIMER1_COMPA_vect) и поправить функцию _timer_calc(), т.к. для разных таймеров значения предделителя разные.

    Ещё можно поискать другую библиотеку для WS2812. Вот эта, кажется, вообще не использует таймеры, только ассемблерную магию:
    https://github.com/cpldcpu/light_ws2812
    Ответ написан