Сообщество - Arduino & Pi

Arduino & Pi

1 493 поста 20 825 подписчиков

Популярные теги в сообществе:

28

Еще одна самодельная платформа для робота Ардуно.

Платформа на 2-х колесах, о которой я писал в своих постах ранее, имеет существенный недостаток - ей нужна абсолютно ровная поверхность. Поэтому появилась мысль нарисовать во FreeCad, а затем напечатать на принтере полноприводную четырехколесную. Только не на 4-х моторах, а на 2-х, используя напечатанный редуктор.

Не успев доделать платформу (спереди и сзади должны быть установлены консоли для крепления сенсоров), я очень захотел проверить ее ходовые качества. Взгляд мой упал на мою авиамодельную аппаратуру, которую решено было использовать для управления платформой, чтобы погонять ее в разных режимах.

Быстренько подоткнув на аналоговые входы выходы управлением рулем высоты и элеронами с приемника, я заглянул в монитор порта и понял, что я идиот. Выход с приемника - это ШИМ и все немного сложнее. Пришлось попыхтеть немного, но родился-таки тестовый (но рабочий) вариант кода. Вывод в монитор порта оставил - для настройки/проверки. Ходовые качества еня удовлетворили, можно цеплять датчики.

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

Плата Ардуино-Уно, драйвер моторов - L298n, шилд - самодельный.

Код, который я выложил, для использования без этого шилда, придется немного модифицировать. Конструкция шилда позволяет использовать для управления одним мотором один пин ШИМ Ардуино (скорость) и один пин цифровой (направление). Если использовать без шилда, то просто нужно добавить для управления направлением вращения еще один пин.

Показать полностью 2 1
71

Матричная клавиатура и Arduino Часть I

Привет всем! Сегодня расскажу про матричную клавиатуру, ее подключение к Ардуино и еще рассмотрим несколько интересных схем с ее участием.


Если вам неудобно читать, то можете посмотреть закрепленное видео, я там говорю все то же самое и все показываю:)


Внимание! Warning!  Большая часть текста содержит объяснение программного кода, поэтому напоминаю, что их вы можете скачать вот здесь: https://yadi.sk/d/jYwdwS3U3EZ7bG либо посмотреть полноценное видео, закрепленное под статьей.


Сделать такую клавиатуру можно и самому, для этого понадобится печатная плата, 12 или 16 обычных кнопок и соединительные провода. Я же буду использовать готовую ( на первом фото ) Для чего она нужна? Для примера возьмем обычную кнопку. Как вы знаете, это простейшее электромеханическое устройство. Чтобы подключить ее к плате, нужно использовать стягивающий резистор, а также задействовать по одному контакту питания и "земли". Нажатием такой кнопки можно выполнить определенное действие, например можно управлять светодиодом, различными приводами, механизмами и так далее. А что, если нам необходимо подключить несколько кнопок? Тогда придется задействовать больше контактов и большее число проводов, да и без макетной платы здесь уже не обойтись, плюс еще резисторы придется использовать в большем количестве.


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


Подключать ее к плате следует 8 выводами, каждый из них считывает значения с определенных строк и столбцов. Подключать их следует к выводам на панели Digital. Я подключу например к выводам от 2 до 9 включительно. Нулевой и первый трогать лучше не стоит, поскольку они предназначены для UART интерфейса, например, подключить блютуз модуль, и рациональнее будет их оставить свободными, на всякий случай.


На втором фото можно посмотреть, как выглядит самая простая схема с использованием клавиатуры. Для более удобной работы с ней была написана библиотека Кейпад, скачать ее, а также другие скетчи можно вот здесь: https://yadi.sk/d/jYwdwS3U3EZ7bG


После того, как вы установили в библиотеку, то можно зайти в Ардуино IDE и посмотреть примеры скетчей, которые нам предлагают.


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


Скетч здесь по сути очень простой. Единственное, что стоит отметить, это первые строчки кода. Сначала мы подключаем нашу библиотеку, затем указываем сколько строк и столбцов у нашей клавиатуре, а потом нужно правильно расположить названия наших клавиш, чтобы было удобнее работать. Если вы это сделаете неправильно, то например при нажатии цифры 4, у вас в порт выйдет цифра 6 или любой другой символ. Собственно, это лучше определять опытным путем, что я и сделал и все символы расположил, так как они расположены на моей клавиатуре. Далее нужно также указать к каким выводам на плате мы подключаем управление строками и столбцами. А далее в функции void setup мы указываем скорость последовательного соединения с монитором порта, как 9600 бод, по сути функция нужна только для подачи питания на модули. В функции Void Loop прописываем условие, переменная Char используется для хранения только одного символа, например 1 или А или 5, что соответственно подходит к нашей ситуации, Соответственно, если нажатие было зафиксировано, то происходит вывод символа в монитор порта, с помощью функции Serial Print, в скобках нужно обязательно указывать какую переменную выводим в порт. Если все сделали верно, то в мониторе порта получим тот символ, на который мы нажимали. Также не забудьте в мониторе порта внизу справа указать скорость передачи данных такую же, как в скетче.



Допустим, мы не хотим подключать плату к компьютеру, чтобы видеть эти данные. Давайте выведем тогда их на дисплей. Я использую дисплей, сопряженный с модулем i2c, который также упрощает подключение. Дак вот, для работы с дисплеем с шиной i2c необходимо установить еще одну библиотеку, ссылка на нее тоже вот здесь: https://yadi.sk/d/jYwdwS3U3EZ7bG


Поэтому в скетче мы также указываем ее, далее нужно указать размерность дисплея, у меня дисплей вмещает по 16 символов в каждой из 2х строк, я это и указываю. В функции Void Setup нужно подать питание на дисплей, и включить подсветку. Делается это с помощью двух функций: lcd.begin и lcd.backlight


В функции Voil Loop нужно в самом условии прописать строчку lcd.print для вывода данных на дисплей. И еще нужно предварительно установить положение курсора, здесь в скобках идут 2 цифры, первая это номер символа, а вторая это номер строки. Нужно помнить, что у этого дисплея отсчет строк и столбцов начинается не с единицы, а с нуля. То есть здесь имеются строчки под номерами 0 и 1, а не 1 и 2, как может показаться сначала. Затем загрузим код в плату и посмотрим что будет.


Схема с дисплеем видна на фото 3. Кстати, так как у нас при подключении дисплея используется интерфейс i2c, то подключать будем его к аналоговым выводам. Выходы SDA и SCL соответственно подключаем к А4 и А5, а остальные два это уже питание и "земля".


Как мы видим, нажимая на любой символ, мы увидим его отображение на нашем дисплее.


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


Как мы видим, все отлично получается. Чтобы стереть строчку, вспомним калькулятор. Когда нам нужно было удалить значение, мы нажимали на … кнопку сброса. Нажмем на такую кнопку в плате и можем заново набирать символы:)



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


Попробуем при нажатии определенной клавиши включать светодиод, или выключать. Для этого подключим к нашей плате светодиод. Я буду использовать макетную плату и резистор ( желательно использовать от 150 до 220 вольт), ну и двумя перемычками замкну схему, подключив их к пинам питания и земли на нашей плате Ардуино. Вот так будет работать данная схема: нажимаю на 1 и включается светодиод, нажимаю на 2 и он выключается.

Светодиод  я кстати буду подключать к пину 12 на плате Ардуино.


Схема со светодиодом на фото 4


Теперь давайте разберем скетч.


Мы возьмем наш самый первый скетч и просто его дополним. В начале с помощью очень полезной функции Define присвоим название подключенному к пину 12 светодиоду, как ledpin. В функции Void setup указываем сигнал со светодиода, как выход. Кстати, если бы не наша библиотека Кейпад ( для нашей клавиатуры ), то нам бы пришлось прописывать все то же самое для наших 8 пинов, с которыми связана наша клавиатура. В функции void loop идет условие, здесь нажатие определенной клавиши у нас приравнивается к значению переменной key, Далее мы должны прописать оператор Switch, который будет сравнивать значения переменной key и давать определенные команды в зависимости от этого значения. Состоит он из двух вспомогательных операторов Case и Break. Проще говоря, если будет найдено значение переменной, равное 1 , то будет выполняться действие. Оператор break служит командой выхода из оператора Case.


Соответственно при нажатии на 1, будет выполняться максимальная подача напряжения на светодиод и он будет гореть. При нажатии на 1 , он гореть не будет. Это указывается в функции Digitat write , где в скобках задается название переменной и указание ей. Можно таким образом написать определенные команды для каждой кнопки и управлять большим числом светодиодов или создать одну команду для включения всех светодиодов сразу. На этом скетч заканчивается, он довольно простой.


На сегодня это все, советую также посмотреть видео и подписаться на нас:)


Во второй части статьи будут еще интересные схемы, причем более сложные.

Показать полностью 4
41

Квест в реальности или партия raspberry pi + arduino.

День добрый! Меня занесло строить квест румы, хоть я до этого arduino в глаза ни разу не видел, меня это не остановило. Хочу рассказать о моих решениях принятых при проектировании и о реализации задуманного.


Для начала сочтёмся на том, что же такое квест в реальности или "эскейп рум", по словам вики:

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

Квесты бывают ну очень разными: страшные до мерзости перфомансы, веселые и шумные семейные квесты, для больших и маленьких компаний, основанные на исторических событиях, VR квесты и далее. На любой вкус и цвет как говориться.

Что такое квест для инженера:

* Помещение;

* Много проводов, очень много (освещение, звук, камеры и сами загадки);

* Горстка различных датчиков (щелевые, шумовые, магнитные и т.п.);

* Электромеханические и магнитные замки;

* ПК\raspberry\arduino и т.п.;

* Загадки.



Всё начинается с ТЗ, в идеальном мире.

Квест обязан быть антивандальным. Дети уничтожают любые загадки грубой физической силой, подростки под действием весны забывают о правилах и суют всё подряд туда куда не стоит, взрослые не видя очевидное делают не очевидное. В правилах конечно описывают знаки "СТОП" обозначающие неиграбельность в задачах антуражные предметы - но согласитесь, это не красиво и выбивает из ритма игры.


+ Позаботитесь о том, что бы камеры и колонки стояли как можно дальше друг от друга во избежание "глухоты" камеры. Нам ведь важно слышать игроков, а не саундтрек;

+ Камеры не должны быть рядом с освещением, или светильник не должен быть направлен на камеру;

+ Камеры должны охватывать возможный максимум помещения, т.е. минимум слепых зон. Оператор должен видеть всё что делают игроки в квесте - что бы квест не сломали, или что бы квест не сломал игроков;

+ Прячьте всю проводку, будь то 220 или звук. Всю прятать в ноль по максимуму, где нельзя спрятать - в гофру!;

+ Ведите кабель с запасом: если надо 1 кабель 5 метров, ведите 2-3 кабеля 7 метров. ТЗ в квестах часто бывает динамичным;


Решите до прокладки кабелей будите ли управлять квестом и каким методом: тумблеры в операторской, веб панель, приложение для смартфона. И каким образом будут работать все механизмы: будут ли они независимы друг от друга, или будет единый центр.


Передо мной стала задача в независимых механизмах на arduino. RaspberryPi использовал как центральный мост между всеми ардуинами и операторами. На деле если raspberry вдруг перестанет отвечать - квест будет играть дальше и без неё, но пропадёт возможность из браузера управлять квестом.



Поэтому все элементы заводились в один ящик, получилась дикая каша :) Главное всё подписывать!

Все задачки (arduino) в квесте независимы друг от друга, но все они связаны с raspberry по шине I2C для того что бы сообщать центру о решении задачи. Или же raspberry может сообщить адруинке о том, что задачку считать "решенной" и активировать последствия. На raspberry поднят веб сервер apache для управление квестом через веб панель.



Общение raspberry и веб панели происходит за счёт файла JSON. В качестве общения малины и ардуин я использовал библиотеку WiringPi. Весь код писал на C++, подружил плюсы и JSON с помощью библиотеки JSON for Modern C++. Панель для управления квестом написана на PHP с использованием bootstrap для кроссплатформенной верстки и скорости разрабокти.

Решение не дешёвое и запутанное - зато адская выживаемость. Сломается элемент квеста - не беда, можно выкрутиться и не выводить игроков для ремонта механизма. А поломки в квестах - "это норма".


За время постройки удивительные свойства показали ардуины - настоящие бронетранспортёры! Вот к примеру если подключить df player неправильно, высокий шанс не услышать с него больше музыки :). А вот сама ардуина после плевком в меня сизым дымом работала дальше :D


С++ был выбран т.к. с python или bash я знаком еще хуже, на самом деле ведь совершенно не важно на чём написано.


Пример куска кода С++ для малинки. Для квестов код очень прост, ничего вычурного, справиться и второкурсник.

Буду очень рад критике и вопросам.

Первый пост - судите строго!

Показать полностью 5
801

Схема системы автополива на микроконтроллере в качестве интересного проекта

Схема системы автополива на микроконтроллере в качестве интересного проекта

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

Показать полностью 1
28

Прошу совета у опытных пользователей Raspberry Pi касательно автономного питания устройства.

Здравствуйте, уважаемое сообщество!
Очень прошу вас помочь советами по паре вопросов касательно Raspberry Pi. Всецело полагаюсь на опыт и мудрость коллектива, так как это для меня первая попытка введения в эксплуатацию данного устройства.

Есть следующая задача:
Необходимо включать Raspberry Pi дважды в день, на ~1 час, используя только автономный источник питания, так как электричество на месте размещения отсутствует.
Предполагается, что Малинка будет жить в анти-вандальном ящике, с подключенной CSI камерой и GSM модемом для удаленного мониторинга объекта. Для подачи питания к системе по графику думаю использовать таймер-розетку на батарейке.


Планирую использовать модель Raspberry Pi 2 Model B, у которой декларированы следующие параметры энергопотребления: 5 вольт, 700-1000mA. Модуль камеры добавит плюс ~250mA. Сколько добавит модем мне найти не удалось.


Возник ряд вопросов, касательно работы системы. Возможно кто-то уже имел подобный опыт и может помочь советами?

- Можете ли вы порекомендовать какой то 3G модем, у которого есть четкие ттх по потреблению электроэнергии? Хотел воткнуть девайс от известного оператора(не хочу рекламировать), но у них на сайте написано - "Модем потребляет столько же энергии, сколько любое другое USB устройство", а эти дефолтные параметры мне не известны.


- После определенности с модемом можете ли вы порекомендовать источник автономного питания, которого будет хватать минимум на 10-14 часов(рабочую неделю) работы системы. В выходные дни я буду забирать источник питания для зарядки или вероятно заменять его на дублирующий аналог.


- Подскажите пожалуйста, правильно ли я посчитал, что данная конфигурация(исключая модем) будет потреблять ~5 ватт\час, и соответственно ~11ватт за 2 включения в течении рабочего дня?

- Если не удастся узнать требования по энергопотреблению модема, как вы считаете - достаточно ли будет округлить до 13ватт в день, что бы покрыть его питание?


- Подойдет ли для данной системы, в качестве автономного источника питания, девайс Mean Well NES-200-5?

- Нужно ли переживать если подаваемый вольтаж превышает рекомендуемый на ~0.6 вольта(5.6в)? Возможно стоит использовать DC\DC преобразователь, что бы подавать на систему точные 5 вольт?


Заранее благодарю вас за ваши советы и время!

Показать полностью
38

Проигрыватель на базе Raspberry Pi 3 модель B (часть 2)

Это продолжение, начало здесь.


Теперь прототип выглядит так:

Что нового:

1. Кабель питания Micro USB 0.35 м, 20AWG (LG) заменил на Micro USB 0.35 м, 22AWG, т.к. первый  оказался слишком жёстким.


2. Стандартный кабель от жёсткого диска кабель заменил на кабель с дополнительным разъёмом питания:

3. Жёсткий диск теперь диск закреплён:

4. Установил DVD привод HL-DT-ST DVD+-RW GT32N в корпус для DVD/CD SATA ↔ USB 2.0.

Контроллер определяется так: 13fd:0840 Initio Corporation INIC-1618L SATA

DVD привод тоже закрепил:

Подробная техническая информация доступна на этой странице.


Продолжение следует.

Показать полностью 4
24

Raspberry Pi и ADS1115. Помогите советом.

Всем привет. Прошу совета. Имеется Raspberry Pi 2 Model B+, ADS1115, 4 терморезисторных датчика PT1000 и небольшая задумка с автоматизацией прозводства (DS18B20 не предлагайте, стоит задача именно с PT1000). С выводом в консоль вроде как все понятно - делаем по мануалу от Adafruit. Но возникла задача - отдать данные в WEB, желательно в JSON или XML формате. Подксажите, пожалуйста - в каком направлении копать? Есть ли какие инструменты для этого? Дальше я сам разберусь (надеюсь). Я ни разу не программист, никогда этим не занимался (не надо было), но сейчас вот возникла потребность.
Если нужны какие-либо детали - спрашивайте, уточняйте, отвечу. Критику "Не умеешь - не берись" и подобное прошу оставить при себе - думаю, что многие из Вас через подобное прошли, профи никто из нас не родился, поэтому надеюсь на Вашу помощь.
Заранее спасибо.

52

Делаем умный ночник своими руками

Делаем умный ночник своими руками

Скетч для арудино http://kitsel.ru/archives/bluetooth-lamp-arduino-android/

Приложение Bluetooth Electronics в Google Play скетч и схема так же в нем https://play.google.com/store/apps/details?id=com.keuwl.ardu...

Показать полностью 1
Отличная работа, все прочитано!