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

Arduino & Pi

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

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

11

Arduino или RaspberryPi: что лучше?

Старая статья о непростом выборе, вызвавшая много вопросов о корректности сравнения совсем разных плат. Тем временем никто не удивляется вопросам выбора вида транспорта. Самолет или поезд? Лететь или ехать: что лучше? А что думаете вы?


Наверное каждый, кто интересуется робототехникой, DIY-электроникой, слышал о платах Arduino и Raspberry Pi. И то, и то — весьма популярные платы (одноплатные компьютеры). Не удивительно, что часто их воспринимают как аналоги и даже как конкурирующие аппаратные платформы, предназначенные для решения одних и тех же задач. На самом деле, Arduino и Raspberry Pi имеют много отличий.

Первое на что стоит обратить внимание — это то, что Raspberry Pi представляет собой полнофункциональный компьютер, в то время как Arduino назвать компьютером очень сложно. По тактовой частоте Raspberry Pi в 40 раз быстрее, чем Arduino. Еще большее различие в оперативной памяти: Raspberry Pi имеет в 128000 раз больше оперативной памяти чем Arduino. Только не спешите делать выводы по этим двум сильно отличающимся характеристикам. Может показаться, что Raspberry Pi превосходит Arduino. Но это превосходство скорее в программном обеспечении. Для чисто аппаратных проектов намного лучше подходит Arduino. Такое преимущество Arduino имеет за счёт своей простоты.

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


Полный текст сравнительной статьи: http://edurobots.ru/2014/09/arduino-ili-raspberry-pi-kakaya-...

Arduino или RaspberryPi: что лучше?
Показать полностью 1
116

Недорогая STM32 плата + Arduino IDE

Моё новое видео про дешёвую альтернативу Arduino платам.

Данная отладочная плата, основана на базе микроконтроллера STM32F103C8T6.

Сравним основные параметры STM32 платы, и её аналога по цене — Arduino Nano V3.0:


Рабочая частота 72 МГц, против 16 у ардуино;

Объем Flash памяти 64 Кбайта, против 32;

Оперативной памяти, она же RAM(где хранятся переменные), у STM32 целых 20 Кбайт, у ардуинки всего лишь 2;

Быстрый 12-ти битный АЦП, в то время как у Arduino плат, что на базе AVR микроконтроллеров(это как правило большинство) используется 10-ти битный. Это означает, что в случае STM32, функция analogRead(*); будет возвращать 0..4095 против 0..1023, что в первом случае ведёт к более точным измерениям;

16-ти битный аппаратный ШИМ, против 8-ми у Arduino плат, то есть, функция analogWrite(*);pwmWrite(*); может принимать значение 0..65535, против убогих 0..255. Это позволит ещё точнее управлять нашими двигателями, сервами и прочими девайсами, которые рулятся при помощи ШИМ;

Аппаратная работа с USB, чем не может похвастаться не одна Arduino плата стоимостью менее 2 долларов;

Напряжение питания — от 2 до 3.6В(прямо таки заточено под 2 AA батарейки), против 2.7...5В у ардуино плат;

Цены на момент публикации — 1.9 доллара против 1.8(алиэкспресс).

По размерам, STM32 чучуть больше Arduino Nano. На небольшом бредборде смотрится вот так:

Очевидно, что отладочная плата на базе STM32 выигрывает по всём параметрам у Arduino Nano, исключением является разве что стоимость, но согласитесь 10 центов — хорошая цена за большую производительность, а про периферию, которой нафарширован STM32, так я вообще молчу, чего только стоят DMA или интегрированные в микроконтроллер часы реального времени.


Но предупреждаю, пока что оно всё сыровато, есть баги, далеко не все примеры компилируются. Со временем думаю исправят.

Архив к ролику:

https://drive.google.com/file/d/0B3jRYZMczSQsS0w4SG1GRm1IdTA...

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

Прошивка "чистого" микроконтроллера для работы с Arduino, а так же рубрика "Вопросы и ответы"

Всем привет!

Начну с того, что внеплановый выход нашей традиционной рубрики связан с моим скорым отъездом, поэтому воскресенье переносится на сегодня :)

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


Зачастую бывает ситуация когда вам нужно поставить в плату Arduino новый микроконтроллер ATmega328P, купленный, например, в Китае или радиомагазине. Но просто вставить чистый мк в плату нельзя, точнее можно, но пользы от него будет как с козла молока - загрузить какой-нибудь код через Arduino IDE как ни пытайся, не получится. А дело тут в том, что помимо самого мк, для Arduino нужно что бы в этом мк уже был зашит специальный код - так называемая программа-загрузчик (bootloader), более подробно о которой можно почитать, например, здесь: http://easyelectronics.ru/avr-uchebnyj-kurs-ispolzovanie-boo...

И тут встает вопрос прошивки чистого мк этой самой программкой, для последующего использования его в связке с Arduino..


К счастью, сделать это очень просто - вам понадобится сама плата Arduino, заметьте, с уже вставленным в неё "хорошим" оригинальным мк (на картинке отсутствует), кварцевый резонатор на 16МГц, макетная плата, чистый мк и 6-8 проводков.

По сути, плата Arduino будет выполнять роль обычного ISP-программатора.


Далее по пунктам:

1. Выбираем «Файл>>Примеры>>Arduino ISP»

2. Загружаем в нашу Arduino выбранный пример.

3. Далее «Сервис>>Плата» и выбираем тип платы для которой хотим записать загрузчик, в нашем случае — «Arduino UNO»

4. Далее «Сервис>>Программатор>>Arduino as ISP»

5. Подключаем наш ATmega328P согласно пинам из Arduino ISP

// pin name: not-mega: mega(1280 and 2560)
// slave reset: 10: 53
// MOSI: 11: 51
// MISO: 12: 50
// SCK: 13: 52

6. Между ногами 9 и 10, прошиваемого контроллера, подключаем резонатор номиналом 16 MHz


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

7. В меню сервис выбираем «Записать загрузчик».


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


На этом все, надеюсь кому-то эта информация будет полезной, всем добра и удачных компиляций! :)


Материал для поста был взят с сайта http://bigbarrel.ru/

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

Будущее за Arduino pro mini

Заехал на обед домой и включил тв1000. Обедаю, мельком смотрю телевизор. Идет "Патруль времени" и тут герой из будущего открывает пакет с супер секретной микросхемой..

Смотрю, а это Arduino pro mini)

вот такая:

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

Драйвер для CH340G (Arduino Nano)

Обзавёлся я тут своей первой Ардуинкой Nano v3, есстественно, репликой, а не оригиналом.

В нём используется COM <> USB преобразователь CH340G (родина - Китай). Так как на официальный сайт за последним драйвером лезть разбирать иероглифы врядли кто будет, держите ссылку на скачивание с офсайта (под винду):


http://wch.cn/downfile/65


Запускаем, жмём [Install], ждём выскочившего сообщения об успешной установке, выключаем :) Там же можно снести драйвер ( [Uninstall] ).


Держите в довесок моё первое мигание ардуинкой :3

Всем добра и хороших скетчей!

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

Немного о портах и битовых операциях

Многие из вас видели и наверно даже понимают, что такое

DDRB |= (1 << 5);

PORTB |= (1 << 5);

но возможно не всем до конца ясна логика битовых операторов и их предназначения при установке значений в порты.


Основная опасность и в то же время преимущество управления портами напрямую без прослоек типа digitalWrite() - это то, что вы можете управлять сразу 8 портами всего за 1 строчку кода, которая в свою очередь выполняется достаточно быстро, намного быстрее стандартной функции.

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


Например надо настроить на вывод 11, 12, 13 порт уны, а 8, 9, 10 не трогать. Для этого нужен оператор "ИЛИ", который обозначается '|':

DDRB |= B00111000;

или

DDRB |= (B111 << 3);

Оба варианта делают абсолютно одно и то же. Сдвиг влево (<<) задается количеством бит, на которое сдвигается значение. Сдвигая B111 на три бита, получаем B111000. Можно сказать, что мы добавляем определенное количество значащих нулей.


Теперь разберем, почему оператор | так важен. Для этого надо понять, что делает этот оператор:

0101 (decl 5)  

0011 (deс 3)

OR=

0111 (dec 7)

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


Но если надо выставить 0 так, чтобы не прибить остальные биты в 0, нужен оператор "И", обозначающийся &. Так же к нему понадобится оператор "НЕ" - обозначается ~.


Итак, выключаем светодиод на 13 пине:
PORTB &= ~(1 << 5);

или

PORTB &= ~B00100000;

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

Итак, ~ переворачивает все с ног на голову:

~B00100000 = B11011111

А оператор & как раз нолем меняет любую единицу на ноль, а единицей не меняет ничего. В итоге - 1 выключенный бит без беспокойства остальных. "И" в двоичной математике - это умножение: умножаем 1 на 0 - и получим 0, а 1*1=1.


Так же есть исключающее "ИЛИ" или XOR в английском варианте - ^. С помощью него можно поменять значение определенного бита. Например:
B11011111 ^= B00110000;
будет иметь в итоге

B11101111.

Вкратце: с помощью единицы меняем бит на противоположный, ноль ничего не делает.


Теперь можно поговорить о цифровом чтении портов. Перед чтением необходимо установить 0 в нужные биты:
DDRB &= ~B00000001;

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


И благодаря тому, что мы оперируем сразу 8 портами одновременно, можно не городить конструкции типа
if(digitalRead(8) && digitalRead(9) && digitalRead(11) && digitalRead(13)){....}

А сделать небольшую маску сравнения:

if(PINB & B00101011){....}

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



Напоследок расскажу один чит, который подглядел в оригинальных библиотеках для shiftOut, и не сразу смог понять, что же он делает:
!!(val & (1 << i))

Разгадка оказалась на поверхности, но о ней по порядку: '!' - это НЕ в логических операндах, работает так:
!1=0

!255=0

!0=1


В данном случае двойной восклицательный знак позволяет привести 8, 16, 32... битное число с помощью маски в один лишь бит, без всяких нолей, значащих и нет:

0. !!(val & (1 << i))

1. !!(B1110 & (1<<2))

2. !!(B0100)

Поскольку B0100 равно или больше единицы, однократное НЕ приведет к нолю, а двухкратное к единице, переход через 0 позволяет оставить лишь суть:

3. !(0)

4. (1)


Таким нехитрым образом можно разобрать любое число на отдельные биты.

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

ESP8266 - недорогая альтернатива Arduino с Wi-Fi

Всем привет!

Может кому будет интересно из новичков и кто еще не слышал. Китайская компания Expressif еще в 2014 году выпустила модули на своем чипе ESP8266. Платы (модули) на базе этого чипа стоят недорого - от $1.7 на AliExpress и eBay.

Изначально их часто использовали как "шилд" Wi-Fi для ардуино. Оно и понятно - куда дешевле оригинального шилда, библиотека есть, работа через Serial шину и AT+ команды. Однако сам по себе чип вполне себе можно использовать и без классического Arudino:

- 160 MHz 32-bit процессор Tensilica Xtensa LX106.

- IEEE 802.11 b/g/n Wi-Fi. Поддерживается WEP и WPA/WPA2. Режим точки-доступа или клиента.

- 16 портов ввода-вывода, SPI, I²C, I²S, UART, 10-bit АЦП.

Память данных (ПЗУ) - внешняя. На готовых модулях идет от 512 Кб до 4 Мб.

Описание различных модулей тут.

Конечно же такие хар-ки чипа, по сравнению с Atmega'ми на Arduino предоставляют куда больше возможностей. Тут и веб-сервер маленький можно сделать и RTOS поставить. А интегрированный WiFi позволяет избавиться от проводов. Но что самое приятное для нашего сообщества - для всего этого есть порт Arduino IDE.

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

Инструкция по подключению ESP8266 к Arduino IDE тут.

Может кто не знал и зреет идея домашнего проекта IoT, которому зачастую желателен WiFi - чтобы не крутить громоздкие и дорогие шилды к ардуино.

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

Осциллограф своими руками! Супер-компакт!

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

Поиск корпуса


Корпус я искал недолго. Прочитав статью, посмотрев видео я решил, что бейте меня по-рукам, но мне нужен этот прибор. Пока ждал экран от Nokia 5110 с Али, я нашел карту памяти для DreamCast. Даже сам не знаю откуда она у меня, ведь приставки у меня никогда не было). Конечно понимал, что будет трудно все уместить в таком крошечном коробке, но попытаться нужно было.

Сборка затянулась на пару вечеров с одновременным просмотром футбола. Затянулась потому, что корпус очень мал, а впихнуть нужно было немного-немало экран, кусок платы с кнопками, arduino pro micro, выключатель и батареи. Свое варварство я начал с разбора и откусывания платы. Кнопки нужно было оставить и пришлось поступать радикально).Потом началась размахивание горячим жалом и "кривыми" руками пайка.Ардуина, мешала плотно закрыть корпус, поэтому пришлось отказаться от нее в пользу Atmega328 распаянной на макетной плате. Прошивка, проверка — все работает. Я думаю самодельщики знают это чувство, когда, что-то сделанное своими руками вдруг работает) Радость и гордость за себя самого переполняют)) Заработало кстати, с первого раза, я даже удивился. Потыкал, померил, все хорошо, но есть наводки от сети, когда берешься за щуп или за само устройство наводка в 50 герц появляется сразу. Нашел старый, советский, экранированный провод взамен китайскому коннектору. Советский провод тридцатилетней давности кстати, лудится и припаивается намного лучше и приятнее новых поднебесных — прогресс мать его. Экран на землю, провод на пин микроконтроллера и все, наводки пропали! Дальше собрал все в корпус без китайских соплей термоклея конечно же не обошлось, но а как по другому созидать? здесь китайцем нужно сказать спасибо)).

Прибор получился нуууу оооооочень компактным! Осциллограф в треть ладони это круто парни! Пусть характеристиками и не блещет, но для минимальных, простых задач достаточно. Рекомендую для повторения, тем более, что бюджет примерно 250-400 рублей учитывая корпус и мелочевку и даже электричество). Оставляйте комментарии. Спасибо за потраченное время! Ссылка на проект автора.

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