3d интерфейс ввода на arduino

Шаблон интерфейса для «умного дома» на Ардуино

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

Я опишу, как подключить ардуину к роутеру и как сделать шаблон веб-интерфейса для управления ардуиной, а точнее, для дискретного «дёрганья ножками».
Как это выглядит «вживую», можно посмотреть здесь.

Повествование будет вестись на основе популярного нынче роутера TL-MR3020 и Arduino Nano.

Подключаться ардуина будет к USB, вариант с UARTом хоть и проще, но всё же трудней. Такая вот суперпозиция )

Я предполагаю что у заинтересованных лиц уже есть роутер прошитый OpenWrt и установлен сервер (Lighttpd), поддерживающий PHP. Ну, или просто компьютер

Если то — истина, тогда follow my way

Подключение ардуино

Прошиваем пробный скетчint led = 13; byte descript[5]; void setup() { Serial.begin(57600); pinMode(led, OUTPUT); } void loop() { if (Serial.available()>4) // ждём дескриптор и нужный символ { if (Serial.read()=='Y') // проверяем первый символ, если это 'Y', то продолжаем принимать, если нет, то выходим из цикла чтения { for (byte i=0; i < 5; i++) { descript[i] = Serial.read(); // добавляем символы в массив } if((descript[0] =='+') && (descript[1] =='=') && (descript[2] =='Z')) // проверяем дескриптор { switch (descript[3]) { case 'A': digitalWrite(led, HIGH); Serial.println("OK vkl"); // ответ break; case 'a': digitalWrite(led, LOW); Serial.println("OK otkl"); // ответ break; } } else // если символ был не 'Y', то очищаем буфер { for(byte i=0; i < 255; i++) { Serial.read(); } } } // конец if (Serial.read()=='Y') } // конец чтение порта }
Будем отправлять в ардуину запрос состоящий из дескриптора (Y+=Z) и управляющего символа (например, 'А'- вкл d13). Дескриптор позволит отфильтровать возможный мусор и исключит случайные срабатывания.

Ардуина обрабатывает управляющий символ внутри функции switch (например, включает светодиод) и рапортует о выполнении.

Подключаем ардуину к роутерувключаем в розеткуустанавливаем необходимые пакеты.

Поскольку придётся использовать хаб, то необходимо помнить, что некоторые из них работают некорректно.

Драйвера для всех существующих ардуин, утилиту для настройки порта stty и ser2net (о нём ниже):

Тот, кто разбирается, сам выберет необходимый драйвер.opkg update
opkg install kmod-usb-serial-ftdi kmod-usb-acm kmod-usb-serial-pl2303 kmod-usb-serial-cp210x kmod-usb-serial-ch341 libftdi coreutils-stty ser2net

Если действия производятся на «большом компьютере», то достаточно:apt-get install ser2net
Проверим, как подцепилось устройство: Может быть, придётся перегрузить.ls /dev/tty*
Как-то так…
Настроим порт утилитой stty:stty -F /dev/ttyUSB0 cs8 57600 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts -hupcl
Открываем вторую консоль и пишем в неё:cat /dev/ttyUSB0

Тут будет ответ. В первой консоли испытываем:echo 'Y+=ZA' > /dev/ttyUSB0
D13 загореласьecho 'Y+=Za' > /dev/ttyUSB0
D13 погасла.

Если при посылке пакета ардуина перегружается (диоды моргают, но D13 не горит), тогда нужно поставить электролитический конденсатор5-10мкФ между Reset и GND.

Не забудьте отключать его, когда заливаете скетч.

Существуют трудности у ардуин с мостом ch341

Если всё работает, то идём дальше.

Редактируем файл конфигурации ser2net:

nano /etc/ser2net.conf
Закомментируйте всё строчки в конце и сохраните.

Добавьте stty и ser2net в автозагрузку:

nano /etc/rc.localВот так нужно сделать:stty -F /dev/ttyUSB0 cs8 57600 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts -hupcl ser2net -C “3002:raw:0:/dev/ttyUSB0:57600 NONE 1STOPBIT 8DATABITS -XONXOFF -LOCAL -RTSCTS” exit 0

Обратите внимание. Строки инициализации должны быть записаны одной строкой (без переноса). Перегрузите и проверьте.echo 'Y+=ZA' > /dev/ttyUSB0
echo 'Y+=Za' > /dev/ttyUSB0

Теперь залейте в ардуину новый скетч:byte d2 = 0; // флаги
byte d3 = 0;
byte d4 = 0;
byte d5 = 0;
byte d6 = 0;
byte d7 = 0;
byte d8 = 0;
byte d9 = 0;
byte d10 = 0;
byte d11 = 0;
byte d12 = 0;
byte d13 = 0; byte descript[5]; // массив void setup() { Serial.begin(57600); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT);
} void loop() { if (Serial.available()>4) // ждём дескриптор и нужный символ { if (Serial.read()=='Y') // проверяем первый символ, если это 'Y', то продолжаем принимать, если нет, то выходим из цикла чтения { for (byte i=0; i < 5; i++) { descript[i] = Serial.read(); // добавляем символы в массив } if((descript[0] =='+') && (descript[1] =='=') && (descript[2] =='Z')) // проверяем дескриптор { switch (descript[3]) { case 'o': // обновление glavnaia(); // отправка ответа break; case 'A': // d2 вкл digitalWrite(2, HIGH); // вкл d2 d2 = 1; // ставим флаг в единицу (вкл) glavnaia(); // отправка ответа break; case 'a': // d2 откл digitalWrite(2, LOW); // откл d2 d2 = 0; // ставим флаг в ноль (откл) glavnaia(); // отправка ответа break; case 'B': // d3 digitalWrite(3, HIGH); d3 = 1; glavnaia(); break; case 'b': // d3 digitalWrite(3, LOW); d3 = 0; glavnaia(); break; case 'C': // d4 digitalWrite(4, HIGH); d4 = 1; glavnaia(); break; case 'c': // d4 digitalWrite(4, LOW); d4 = 0; glavnaia(); break; case 'D': // d5 digitalWrite(5, HIGH); d5 = 1; glavnaia(); break; case 'd': // d5 digitalWrite(5, LOW); d5 = 0; glavnaia(); break; case 'E': // d6 digitalWrite(6, HIGH); d6 = 1; glavnaia(); break; case 'e': // d6 digitalWrite(6, LOW); d6 = 0; glavnaia(); break; case 'F': // d7 digitalWrite(7, HIGH); d7 = 1; glavnaia(); break; case 'f': // d7 digitalWrite(7, LOW); d7 = 0; glavnaia(); break; case 'G': // d8 digitalWrite(8, HIGH); d8 = 1; glavnaia(); break; case 'g': // d8 digitalWrite(8, LOW); d8 = 0; glavnaia(); break; case 'H': // d9 digitalWrite(9, HIGH); d9 = 1; glavnaia(); break; case 'h': // d9 digitalWrite(9, LOW); d9 = 0; glavnaia(); break; case 'I': // d10 digitalWrite(10, HIGH); d10 = 1; glavnaia(); break; case 'i': // d10 digitalWrite(10, LOW); d10 = 0; glavnaia(); break; case 'J': // d11 digitalWrite(11, HIGH); d11 = 1; glavnaia(); break; case 'j': // d11 digitalWrite(11, LOW); d11 = 0; glavnaia(); break; case 'K': // d12 digitalWrite(12, HIGH); d12 = 1; glavnaia(); break; case 'k': // d12 digitalWrite(12, LOW); d12 = 0; glavnaia(); break; case 'M': // d13 digitalWrite(13, HIGH); d13 = 1; glavnaia(); break; case 'm': // d13 digitalWrite(13, LOW); d13 = 0; glavnaia(); break; default: glavnaia(); } } else // если дескриптор ложный, то очищаем буфер { for(byte i=0; i < 255; i++) { Serial.read(); } } } // конец if (Serial.read()=='Y') } // конец чтение порта } // конец loop void glavnaia() // отправка данных { Serial.print(d2);//0 Serial.print(","); // по запятой будем парсить Serial.print(d3);//1 Serial.print(","); Serial.print(d4);//2 Serial.print(","); Serial.print(d5);//3 Serial.print(","); Serial.print(d6);//4 Serial.print(","); Serial.print(d7);//5 Serial.print(","); Serial.print(d8);//6 Serial.print(","); Serial.print(d9);//7 Serial.print(","); Serial.print(d10);//8 Serial.print(","); Serial.print(d11);//9 Serial.print(","); Serial.print(d12);//10 Serial.print(","); Serial.println(d13);//11 // отсылается 12 значений разделённых запятой }
Роутер отправляет в ардуину запрос от клиента состоящий из дескриптора (Y+=Z) и управляющего символа (например 'А'- вкл d2).Ардуина обрабатывает управляющий символ и отправляет ответ роутеру, который в свою очередь отдаст его клиенту. Работа с клиентом описана ниже.

Скачайте архив и распакуйте его в рабочую папку сервера (по умолчанию это /var/www), вот так – /var/www/knopki (у вас может быть своя папка).

В браузере зайдите по адресу ваш_роутер/knopki/. Если связь установлена, то вы увидите это:

Нажмите на D13 — загорится светодиод на ардуине и кнопка подсветится.

Суть работы

Обновление страницы:

index.html раз в три секунды (интервал можно изменить) запрашивает данные у ардуины (отправляя ей символ о) с помощью функции ajax (ajax позволяет не перегружать страницу).

/*обновление*/
show();
setInterval(show,3000); /* частота обновления в миллисекундах */ function show(){ /* функция обновления */ $.ajax({ type: “GET”, url: “box2.php?df=o”, /* отправка символа о */ timeout:300, cache: false, success: function(data){ …

Запрос передаётся php-файлу (box2.php) находящемуся на сервере, который в свою очередь обращается к ардуине через сокет ser2net.ser2netser2net — это крохотный прокси-серверок создающий соединение между сокетом и устройством (/dev/tty*). Как показала практика, через сокет php-файл работает лучше, нежели обращаясь к устройству напрямую. То есть, если пхп-файл открывает устройство вот так ( fopen('/dev/tty*', …) ), то через некоторое время (несколько часов) всё зависает, а если так ( fsockopen(«localhost», 3002, $errno, $errstr, 1); ), то никаких проблем.

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

Ардуина получает команду, обрабатывает её и отправляет ответ, который по той же цепочке возвращается html-страничке (index.html)…. switch (descript[3]) { case 'o': // обновление glavnaia(); // отправка ответа break;

void glavnaia() // отправка данных { Serial.print(d2);//0 Serial.print(“,”); Serial.print(d3);//1


Html-страничка разбирает ответ и выводит на экран нужную кнопку.
… success: function(data){ var vars = data.split(“,”); /* разбор строки принятой от ардуино */ if(vars.length == dlina){ /* проверка длины данных (количество блоков разделённых запятой) */ /*d2*/ if(vars[0] == 1) { $(“.d2otkl”).show(); $(“.d2vkl”).hide(); } /* в зависимости от принятого флага скрывает/показывает кнопку вкл или откл */ else if(vars[0] == 0) { $(“.d2otkl”).hide(); $(“.d2vkl”).show(); } …

Если открыть ещё одну страничку (или зайти с другого устройства) и нажать какую-то кнопку, то на первой страничке (в течении 3 сек.) эта кнопка тоже станет включённой. Для этого обновление и нужно.

Нажатие на кнопку:

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

Для лучшего понимания откройте файл index.html из архива и посмотрите комментарии.

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

Подождите минуту и пообновляйте страницу. Если связь не устанавливается, то проверьте настройки роутера.
Проверьте права на файлы, правильность путей и устройств.

Внешний вид

Названия кнопок меняются в конце файла index.html
D2
D2


Позиция и размер кнопок задаются в файле knopki.css
.d2vkl{
top: 20px; /*координаты кнопок*/
left: 20px; /*координаты кнопок*/
box-shadow: 0 0 10px 3px rgba(0,0,0,0.3); /*цвет и размер тени кнопки*/
-webkit-transition-duration: 0.

6s; /*плавность появления*/
-o-transition-duration: 0.6s;
-moz-transition-duration: 0.6s;
transition-duration: 0.6s;
} .d2vkl:hover{ /*наведение мыши на кнопку*/
box-shadow: 0 0 2px 1px rgba(0,0,0,0.3);
}



.

knop {
position: absolute;
width: 200px; /*ширина для всех кнопок*/
height: 100px; /*высота для всех кнопок*/
display: none;
cursor: pointer; font-size: 30px; /*размер текста на кнопках*/
font-weight: 600; /*ширина текста на кнопках*/
font-family: Arial, Helvetica, sans-serif; /*шрифт*/
color: #161616; /*цвет текста на кнопках*/
text-shadow: 0px 1px 2px #7c7c7c; /*цвет и размер тени кнопок*/
text-align: center;
line-height: 3.2;
}

Цвет фона меняется в файле style.cssbody {
background:#202020; /* цвет фона */
}

На этом, пожалуй, стоит закончить. Спасибо тем, кто потратил своё драгоценное. Если где-то допустил неточность, то прошу поправить меня.

«Дизаин» несколько мрачноват, но это пока всего лишь шаблон для демонстрации функций.

Статья писалась под великолепную музыку «Nirvana».

Источник: https://habr.com/post/379023/

Опыт изучения Arduino. Пост второй. Интерфейс Arduino IDE. — DRIVE2

Доброго времени суток!

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

Вот так выглядит окно интерфейса со скетчем Blink из примеров, которые идут в комплекте с Arduino IDE для Windows. В версии для Мас отличия сводятся к расположению меню. Минимализм.

Что мы здесь имеем?

Полный размер

Условно окно среды разработки можно разбить на 3 зоны: Область меню и управления, область текста программы, область информации.

Краткое описание области управления. Всё просто и логично. При наведении курсора на кнопку появляется название этой кнопки.

Полный размер

В области информации тоже нет ничего особенного. Сообщения об ошибках выделяются оранжевым.

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

… и нажать ОК

Так меняется интерфейс при включении нумерации строк. Уже немного веселее)

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

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

Если кликнуть по плюсу, то код раскроется в изначальном виде.

Еще очень полезная и удобная фишка — автоформатирование. Меню Инструменты > Автоформатирование или комбинация клавиш Ctrl + T. Для Мас Comand + T.

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

Помимо этого в окне программы элементы скетча подсвечиваются разными цветами:Команды — зеленым,константы — голубым,блоки комментариев — серым,функции (в том числе встроенные) — оранжевым.Остальные элементы скетча чёрные.

Что ещё очень немаловажно, среда разработки Arduino IDE может работать и с “чистым С++”, понимает некоторые команды ассемблера, и даже знает регистры микропроцессора, установленного на плате Arduino.

То есть если написать не pinMode(13, OUTPUT) , а DDRB |= (1

Источник: https://www.drive2.ru/b/453573836298781551/

3D революция на Arduino

До последнего момента контроллеры (и Ардуино, в частности) работали либо вообще без интерфейса, либо с примитивными интерфейсами, условно говоря, с одной — двумя кнопками. С появлением Arduino Mega Server ситуация кардинально изменилалась и появилась возможность сделать любой интерфейс к вашему проекту на Ардуино.

Сегодня мы пойдём ещё дальше и поговорим о том, как сделать полноценный интерактивный 3D интерфейс для вашего проекта на Ардуино. Все эксперименты будем проводить на новом микроконтроллере Genuino 101 совместного производства Intel и Arduino и любезно предоставленным компанией Intel для портирования на него системы Arduino Mega Server.

Зачем нужно 3D на Ардуино?

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

Сферы применения 3D

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

Визуализация данных

3D технологии могут применяться для наглядной визуализации сложных процессов, происходящих, как внутри системы (состояние частей системы, работа функций, состояние переменных и т. д.), так и снаружи (состояние массивов датчиков, состояние контролируемого параметра или объекта и т. п.).

Прелесть 3D графики заключается в том, что вы одним взглядом можете оценить состояние сложной системы и, при необходимости, предпринять нужные действия.

Эта же 3D модель является универсальным управляющим элементом, когда вы одним движением мышки можете масштабировать модель и изменять состояние её частей (ведь она интерактивна). Это не что иное, как новый тип интерфейса.

3D миры

Под 3D мирами здесь подразумеваются развитые интерактивные 3D модели, которые содержат наборы элементов (объектов) и правила взаимодействия этих объектов в пределах модели («физика» этого мира).

Применительно к контроллерам (своими сенсорами они связаны с реальным миром) эта концепция выливается в представительство реальных объектов и процессов в виртуальном 3D мире. А поскольку виртуальная модель интерактивна, то воздействие на неё в виртуальном мире приводит к изменению состояния объектов в реальном мире (контроллер связан с реальным миром множеством актуаторов).

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

Интерактивное обучение

Эта технология (в совокупности с технологиями Arduino Mega Server и OHAS) позволяет создавать контроллеры, которые содержат внутри себя всё необходимое для взаимодействия с пользователем (интерактивные 3D примеры, документацию, справочники, руководства и т. п.) и построения сложных систем просто, как складывание кубиков Лего.

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

Технологические проблемы

В общем, идея научить контроллеры Ардуино работать с 3D графикой кажется очень привлекательной, но воплощение этой идеи наталкивается на преграду ограничений микроконтроллеров как по объёмам оперативной памяти, так и по вычислительной мощности самого контроллера.

Если вы попытаетесь самостоятельно решить эту проблему, то у вас либо ничего не получится, либо решение отнимет много времени и сил на свою реализацию. Наша же задача значительно упрощается — мы можем воспользоваться готовым движком системы Arduino Mega Server, который возьмёт на себя все сложности работы с файлами и вывода веб-страниц на экран пользователя.

Техническое решение

Прелесть решения заключается в том, что мы можем использовать любые готовые JavaScript библиотеки (вместе с их многочисленными примерами) и на этой основе быстро разрабатывать любые нужные нам 3D решения.

В данных конкретных примерах использовались стандартные библиотеки Processing.js и Three.js. Но, если вы являетесь поклонником какой-либо другой библиотеки, то ничто не мешает вам воспользоваться вашей любимой библиотекой.

Всё, что вам нужно сделать, чтобы начать использовать 3D в своём проекте на Ардуино, это подключить обычным способом соответствующую 3D библиотеку

или

Далее, либо вставляете в страницу код 3D примера, либо вставляете ссылку на файл с 3D примером

И это, собственно, всё, что вам нужно сделать, чтобы на вашей страничке Arduino Mega Server заработал 3D пример. Всё делается точно также, как на обычном сайте в Интернет. А Arduino Mega Server берёт на себя всю черновую работу по обеспечению работоспособности системы.

Интерактивность

Просто запустить 3D модель на Ардуино это, безусловно, здорово, но не забываем, что работа происходит на контроллере, а это устройство, которое связано с реальным миром множеством датчиков на входе и множеством актуаторов на выходе. И было бы неплохо отображать на 3D модели какие-нибудь параметры реальной системы.

Давайте, для примера, рассмотрим визуализацию работы сетевых функций микроконтроллера.

Работу интерфейса Arduino Mega Server обеспечивает непрерывный Ajax обмен между контроллером и браузером пользователя. В качестве 3D модели возьмём гиперкуб, состоящий из шести объектов по каждой из трёх осей координат (всего 216 объектов).

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

В результате, мерная пульсация двух сфер на 3D модели показывает нормальную работу Ajax функций системы и у вас есть ещё 214 объектов для индикации любых других параметров. И практически неограниченное количество веб-страниц для визуализации других 3D моделей.

Взаимодействие системы и 3D модели

Передача значений в 3D модель осуществляется простым изменением JavaScript переменных, аналогично может производиться вывод управляющих воздействий из 3D модели (кликнули по сфере мышкой — включили или выключили, например, какую-либо функцию или датчик и т. п.).

В файле scripts.js объявляется переменная

var dash_marker1 = 0;

А затем расставляются маркеры в нужных местах программы, которые меняют состояние переменной. В данном случае при «входе» и «выходе» из сетевой функции.

dash_marker1 = parseFloat(“1.0”); dash_marker1 = parseFloat(“0.0”);

В скетче на Процессинге объявляются переменные для «ловли» значений из JavaScript

float for_dash_marker1 = 0;

И сам момент «ловли»

try { for_dash_marker1 = float(dash_marker1);
} catch (exception) { for_dash_marker1 = float(“0.0”);
}

А дальше описываются действия с 3D моделью, в зависимости от состояния переменных

if (for_dash_marker1 < 1.0) { ... }

Результат работы этого кода вы можете наблюдать на видео, а ознакомиться со всем дистрибутивом (и запустить его, при наличии контроллера Genuino 101) вы можете на странице Загрузка проекта Arduino Mega Server.

Видео

Видео, демонстрирующее работу 3D графики на Ардуино

Заключение

Теперь 3D графика стала как никогда доступна для ваших проектов на Ардуино, а впереди вас ожидают ещё более захватывающие перспективы: Arduino Mega Server портирован на esp8266 и всё описанное в этой статье может проделывать, работая без проводов по Wi-Fi и находясь в модуле, размером с десятицентовую монету.

И в ближайшее время дистрибутив АМС для esp8266 появится на сайте проекта. Вас ждёт загрузка файлов и перепрошивка контроллера по воздуху, FTP сервер и множество других возможностей, которые предоставляет Arduino Mega Server. И это ещё одна революция на IoT рынке.

Источник: http://www.pvsm.ru/diy/117973

Интерфейс SPI и Arduino

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

  • Arduino;
  • сдвиговый регистр 74HC595;
  • 8 светодиодов;
  • 8 резисторов по 220 Ом;
  • соединительные провода.

SPI – Serial Peripheral Interface или «Последовательный периферийный интерфейс» – это синхронный протокол передачи данных для сопряжения ведущего устройства (Master) с периферийными устройствами (Slave). Ведущим устройством часто является микроконтроллер. Связь между устройствами осуществляется по четырём проводам, поэтому SPI иногда называют «четырёхпроводной интерфейс». Вот эти шины:

НазваниеНазначение шины SPI
MOSI (Master Out Slave In) линия передачи данных от ведущего к ведомым устройствам;
MISO (Master In Slave Out) линия передачи от ведомого к ведущему устройству;
SCLK (Serial Clock) тактовые импульсы синхронизации, генерируемые ведущим устройством;
SS (Slave Select) линия выбора ведомого устройства; когда на линии логический “0”, ведомое устройство «понимает», что сейчас обращаются к нему.

Существует четыре режима передачи данных (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), обусловленные сочетанием полярности тактовых импульсов (работаем по уровню HIGH или LOW), Clock Polarity, CPOL, и фазой тактовых импульсов (синхронизация по переднему или заднему фронту тактового импульса), Clock Phase, CPHA.

РежимПолярность тактовых импульсов (CPOL)Фаза тактовых импульсов (CPHA)
SPI_MODE0
SPI_MODE1 1
SPI_MODE2 1
SPI_MODE3 1 1

Рисунок поясняет данную таблицу.

Четыре режима работы интерфейса SPI

Интерфейс SPI предусматривает несколько вариантов подключения ведомых устройств: независимое и каскадное. При независимом подключении к шине SPI ведущее устройство обращается к каждому ведомому устройству индивидуально. При каскадном подключении ведомые устройства срабатывают поочерёдно, как бы каскадом.

Виды подключения устройств для работы по интерфейсу SPI: независимое и каскадное

2Реализация интерфейса SPI на платах семейства Arduino

В Arduino шины интерфейса SPI находятся на определённых портах. У каждой платы своё соответствие выводов.

Для удобства выводы продублированы и вынесены также на отдельный разъём ICSP (In Circuit Serial Programming, программирование устройства, включённого в цепь, по последовательному протоколу).

Обратите внимание, что на разъёме ICSP отсутствует пин выбора ведомого – SS, т.к. подразумевается, что Arduino будет использоваться как ведущее устройство в сети. Но при необходимости вы можете назначить любой цифровой вывод Ардуино в качестве SS.

На рисунке приведено стандартное соответствие выводов шинам SPI для Arduino UNO и Nano.

Реализация интерфейса SPI на платах Arduino UNO и Arduino Nano

3Библиотека для работы с интерфейсом SPI

Для Arduino написана специальная библиотека, которая реализует протокол SPI. Подключается она так: в начале программы добавляем #include SPI.h.

Чтобы начать работу по протоколу SPI, нужно задать настройки и затем инициализировать протокол с помощью процедуры SPI.beginTransaction(). Можно выполнить это одной инструкцией: SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0))

Это значит, что мы инициализируем протокол SPI на частоте 14 МГц, передача данных идёт, начиная с MSB (наиболее значимого бита), в режиме SPI_MODE0.

После инициализации выбираем ведомое устройство, переводя соответствующий пин SS в состояние LOW.

Затем передаём ведомому устройству данные командой SPI.transfer().

После передачи возвращаем SS в состояние HIGH.

Временная диаграмма работы интерфейса SPI

Работа с протоколом завершается командой SPI.endTransaction().

Желательно минимизировать время выполнения передачи между инструкциями SPI.beginTransaction() и SPI.endTransaction(), чтобы не возникло накладок, если другое устройство попробует инициализировать передачу данных, используя другие настройки.

4Подключение сдвигового регистра к Arduino

Рассмотрим практическое применение интерфейса SPI. Будем зажигать светодиоды, управляя 8-битным сдвиговым регистром по шине SPI. Подключим к Arduino сдвиговый регистр 74HC595. К каждому из 8-ми выходов регистра через ограничительный резистор подключим по светодиоду номиналом 220 Ом. Схема приводится на рисунке.

Схема подключения сдвигового регистра 74HC595 к Arduino

5Скетч для управления сдвиговым регистром по интерфейсу SPI

Напишем такой скетч.

#include const int pinSelect = 8; // пин выбора регистра void setup() { SPI.begin(); // инициализация интерфейса SPI pinMode(pinSelect, OUTPUT); // digitalWrite(pinSelect, LOW); // выбор ведомого устройств (регистра) SPI.transfer(0); // очищаем содержимое регистра digitalWrite(pinSelect, HIGH); // конец передачи Serial.begin(9600); } void loop() { for (int i=0; i

Сначала подключим библиотеку SPI и инициализируем интерфейс SPI. Определим пин 8 как пин выбора ведомого устройства SS. Очистим сдвиговый регистр, послав в него значение “0”. Инициализируем последовательный порт.

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

Например, чтобы загорелся первый светодиод – подаём двоичное число 00000001, чтобы второй – 00000010, чтобы третий – 00000100, и т.д.

Эти двоичные числа при переводе в десятичную систему счисления образуют такую последовательность: 1, 2, 4, 8, 16, 32, 64, 128 и являются степенями двойки от 0 до 7.

Соответственно, в цикле loop() по количеству светодиодов делаем пересчёт от 0 до 7. Функция pow(основание, степень) возводит 2 в степень счётчика цикла.

Микроконтроллеры не очень точно работают с числами типа “double”, поэтому для преобразования результата в целое число используем функцию округления round(). И передаём получившееся число в сдвиговый регистр.

Для наглядности в монитор последовательного порта выводятся значения, которые получаются при этой операции: единичка «бежит» по разрядам – светодиоды загораются волной.

Числа, посылаемые в сдвиговый регистр 74HC595

6«Бегущая волна» из светодиодов

Светодиоды загораются по очереди, и мы наблюдаем бегущую «волну» из огоньков. Управление светодиодами осуществляется с помощью сдвигового регистра, к которому мы подключились по интерфейсу SPI.

В результате для управления 8-ю светодиодами задействованы всего 3 вывода Arduino.

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

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

Источник: https://soltau.ru/index.php/arduino/item/382-interfejs-spi-i-arduino

Наука молодых – page 535

М а т е р и а л ы X В с е р о с с и й с к о й н а у ч н о – п р а к т и ч е с к о й к о н ф е р е н ц и и

П о с в я щ а е т с я 1 0 0 – л е т и ю Р о с т и с л а в а Е в г е н ь е в и ч а А л е к с е е в а

531

2 Кальницкий, А.А. Расчет и конструирование железобетонных

фундаментов гражданских и промышленных зданий и сооружений / А. А.

Кальницкий, Л. М. Пешковский – М.: «Высшая школа», 1974. — 256 с.

В.Ю.Ильин, студент 3 курса

кафедра «Прикладная математика» АПИ НГТУ им. Р.Е. Алексеева,

г. Арзамас

3D ИНТЕРФЕЙС ВВОДА НА ПЛАТФОРМЕ ARDUINO

Предлагается вариант решения проблемы управления создаваемой

трехмерной моделью, ее анимацией или симуляцией путем создания

трехмерного «ручного» интерфейсадля управления устройствами при

помощижестов.

Ключевые

слова:

Arduino,

3D

интерфейсы,

электротехника,

программирование.

С каждым годом все острее чувствуется необходимость в 3D

технологиях. Трехмерные модели наиболее точно отображают реальные

объекты. В процессе моделирования объекта или системы, обычно возникает

проблема управления созданной моделью, ее анимацией или симуляцией.

Для решения данной проблемы было предложено создать трехмерный

ручной интерфейсдля управления устройствами при помощижестов.

Одним из условий было соблюдение баланса между функциональностью

и простотой изготовления. Сам проект представляет из себя 3D интерфейс

взаимодействия с компьютером при помощи руки: движения руки в трех

измерениях, в приемном кубе, переносятся в компьютер и повторяются уже

там, в виртуальном пространстве.

Схема реализующего идею устройства представлена на рисунке 1.

В качестве контроллера управления была выбрана платформа Arduino.

Основными достоинствами ее являются удобный для программирования язык

С++, распространенность самой платформы, а как следствие – множество

документации, а также относительная ее дешевизна, что в настоящее время

является одним из важнейших критериев.

Arduino позволяет компьютеру выйти за рамки виртуального мира в

физический и взаимодействовать с ним. Устройства на базе Arduino могут

получать информацию об окружающей среде посредством различных

SEO Version

Источник: http://cdot-nntu.ru/basebook/sbornik_nauka_molodyh/nauka_molodyh/assets/basic-html/page535.html

Дешевый 3D принтер на Arduino

В статье описана конструкция 3D принтера, стоимость которого составляет около 60-70 долларов (возможно, самый дешевый концепт в мире).

Этот 3D принтер работает с использованием самых дешевых моторов на рынке – 28Byj-48, Электроника – Ramps 1.4 с управлением от Arduino.

Автором проекта является 16-ти летний парень из Германии.

Технические характеристики 3D принтера:

Рабочее пространство: 10x10x10 см;

Скорость: 20 мм/с;

Разрешающая способность (точность): 0.2 мм.

P.S. Под каждым разделом в соответствии с оглавлением статьи в качестве наглядной инструкции выложены фотографии

Плиты МДФ:

-1x 30×34 см (Основание).

-2x 6×4 см.

-1x 34×6 см.

-1x 15×4 см.

Заказываем с Aliexpress:

-12 линейных подшипников в круглом корпусе LM8UU.

-2 шкива GT2 + 1 м зубчатый ремень GT2.

-10 подшипников 624.

-1 шкив Mk8 для привода.

-1 PTFE трубку.

Гладкие стержни для направляющих диаметром 8 мм:

– 2 длиной 22см.

– 4 длиной 17,5 см.

В местном хозяйственном магазине:

-1 вал с резьбой M5, который вы разрежете на 2 части.

-2 шестигранные гайки M5.

-8 винтов M3x16 мм.

-6 винтов M3x 25 мм.

-4 винтаx M4x45 мм.

-2 винта M4x60 мм.

-4 винта M4x20 мм.

-20 шестигранных гаек M4.

-10 шестигранных гаек M3.

-12 маленьких шурупов.

Электроника

-1плата Arduino Mega 2560 + Ramps 1.4 + 4 драйвера шаговых двигателей A4988.

-4 шаговых двигателя 28byj-48.

-3 оптических концевых выключателя.

-1 шаговый двигатель Nema 17 (тоже заказываем с Ali или Ebay. Такие привода стоят около 10 долларов).

Наконечник экструдера:

-1экструдер E3D-V5 Aliexpress

или более дорогой, но с охлажднием

-1экструдер E3D-V6 Aliexpress.

Узлы, которые надо напечатать на 3D принтере

Скачать последние версии 3D моделей узлов, которые надо напечатать можно по ссылке: Thingiverse

.

2 детали “Z-Motor”

2 детали “Y-End”

2 детали “X-End”

1 деталь “X-Carriage”

1 деталь “Motor”

1 деталь “Hotend”

1 деталь “Hotend Clamp”

Механизм для экструдера скачать можно здесь: Thingiverse.

Модификация шагового двигателя 28BYJ-48

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

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

Теперь на другом конце – выход, который вы будете подключать к Ramps, расположите контакты следующим образом:

голубой–желтый–оранжевый–розовый

После такой небольшой модификации вы можете подключать эти моторы непосредственно к контактам, которые предусмотрены на шилде для Arduino Ramps 1.4

Ось Y

Для начала вам надо склеить две деревянные плиты.

После этого установите напечатанные детали ” Motor “, “Z-Motor” на деревянные плиты.

Потом закрепите напечатанные детали с помощью винтов.

Следующий шаг: установите в пазы моторы, а потом – подшипники LM8UU.

Установите на двигателе шкив, а рядом с ним – подшипники 624zz.

Для фиксации подшипников LM8UU используйте пластиковые стяжки.

Дальше – установите две направляющие длиной 17.5 см диаметром 8 мм.

Ну и в конце – натяните ремень через “Y-ends” и установите концевой выключатель.

Ось Х

Для оси Х вам надо:

Установить два болта M4x45 мм в деталь “X-End”.

Подключить двигатель, как это показано на рисунках.

Натянуть ремень и установить концевой выключатель.

Установить экструдер с помощью двух болтов M3x25 и затянуть гайками.

Ось Z

Для того, чтобы собрать ось Z, вам надо:

Установить подшипники LM8UU в “X-Carriage” + ” X-Ends”.

Постом установить “X-Ends” + “X-carriage” на направляющих 17.5 см (Ось X) и 21см (Ось Z).

После этого надо соединить резьбовой вал с мотором

Стол для печати

Сверлим в деревянной плите 20х13 см четыре отверстия диаметром 3 мм.

После этого закручиваем 4 болта M3x25.

Собираем весь 3D принтер

Сборку проводим в соответствии с рисунками ниже. Дополнительные пояснений давать нет смысла. Главное, чтобы предыдущие шаги были корректно реализованы. В таком случае проблем возникнуть не должно.

Подключаем электронику к 3D принтеру

Электронику (в том числе Arduino) подключаем в соответствии с рисунком, который представлен ниже.

Программное обеспечение для Arduino

Загрузить файл конфигурации для Arduino IDE можно по ссылке: www.repetier.com.

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

Фото процесса печати и результаты

После некоторой калибровки, были напечатаны неплохие образцы куба с размерами 1x1x1 см.

Разрешающая способность: 0.2 мм

Скорость: 10 мм/с

Одна из проблем, которая появляется – перегрев двигателей. В результате происходит значительное смещение слоев.

Так что рекомендую устанавливать A4988 на микрошаг 1/16 и настраивать силу тока на минимальное значение.

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

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

Источник: http://arduino-diy.com/arduino-deshevyy-3D-printer

Arduino Tinkercad — лучший онлайн симулятор ардуино на русском

Можно ли заниматься ардуино проектами без самого ардуино? Оказывается, вполне.

Благодаря новому сервису Tinkercad Circuits Arduino можно не только рисовать электронные схемы и запускать эмулятор электрической цепи, но и подключать к проекту виртуальную плату ардуино, в которую можно загрузить настоящие скетчи.

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

Tinkercad для ардуино

Симулятор или эмулятор

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

Это некоторая виртуальная среда, в которой мы просто моделируем другую систему. Эмулятор — это полноценный аналог, способный заменить оригинал.

Tinkercad симулирует работу электронных схем и контроллера, но при этом он является эмулятором ардуино, реализуя практически все базовые функции Arduino IDE — от среды редактирования и компилятора до монитора порта и подключения библиотек.

Что такое Tinkercad?

Tinkercad – это онлайн сервис, который сейчас принадлежит мастодонту мира CAD-систем — компании Autodesk. Тинкеркад уже давно известен многим как простая и бесплатная среда для обучения 3D-моделированию.

С ее помощью можно достаточно легко создавать свои модели и отправлять их на 3D-печать.

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

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

История создания

Tinkercad  был создан в 2011 году, его авторы — Кай Бекман (Kai Backman) и Микко Мононен (Mikko Mononen).

Продукт изначально позиционировался как первая Web-платформа для 3D-проектирования, в которой пользователи могли делиться друг с другом результатами.

В 2013 году сервис был куплен компанией Autodesk и дополнила семейство продуктов 123D. За все это время в рамках сервиса пользователями было создано и опубликовано более 4 млн. проектов (3D-моделей).

В июне 2017 г. Autodesk решил перенести часть функционала другого своего сервиса Electroinics Lab Circuits.

io, после чего Tinkercad получил крайне важные и мощные инструменты, способные существенно облегчить начинающим разработчикам Arduino процессы обучения, проектирования и программирования новых схем. Если вы уже пользовались Circuits.io, то имейте в виду, что все старые проекты  Circuits.

io могут быть экспортированы в Tinkercad без каких-либо проблем (о сервисе Circuits.io от Autodesk Electroinics Lab мы постараемся подробно рассказать в одной из следующих статей).

Возможности симулятора Tinkercad для разработчика Arduino

Список основного функционала и полезных фич Tinkercad Circuits:

  • Онлайн платформа, для работы не нужно ничего кроме браузера и устойчивого интернета.
  • Удобный графический редактор для визуального построения электронных схем.
  • Предустановленный набор моделей большинства популярных электронных компонентов, отсортированный по типам компонентов.
  • Симулятор электронных схем, с помощью которого можно подключить созданное виртуальное устройство к виртуальному источнику питания и проследить, как оно будет работать.
  • Симуляторы датчиков и инструментов внешнего воздействия. Вы можете менять показания датчиков, следя за тем, как на них реагирует система.
  • Встроенный редактор Arduino с монитором порта и возможностью пошаговой отладки.
  • Готовые для развертывания проекты Arduino со схемами и кодом.
  • Визуальный редактор кода Arduio.
  • Возможность интеграции с остальной функциональностью Tinkercad и быстрого создания для вашего устройства корпуса и других конструктивных элементов – отрисованная модель может быть сразу же сброшена на 3D-принтер.
  • Встроенные учебники и огромное сообщество с коллекцией готовых проектов.

Звучит фантастично, не правда ли? Не нужно скачивать Arduino IDE, не нужно искать и скачивать популярные библиотеки и скетчи, не нужно собирать схему и подключать плату  – все, что нам нужно, находится сразу на одной странице.  И, самое главное —  это все действительно работает! Давайте уже перейдем от слов к делу и приступим к практическому знакомству.

Первые шаги в Tinkercad

Регистрация онлайн

Для начала работы необходимо получить эккаунт Autocad. Регистрация в Tinkercad абсолютно бесплатная. Зайдите на сайт и выполните простые шаги.

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

Tinkercad Dashboard — Начальная страница

Преодолев этап регистрации, мы попадем на главную страницу, на которой слева видим список сервисов и под ним – список проектов. Навигация очень проста, хотя некоторые ссылки выглядят не очень заметными, но разобраться, что к чему, можно легко. Выбрав элемент слева мы видим справа список соответствующих объектов. Для раздела  Circuits, этими объектами будут схемы и скетчи.

Создаем и редактируем проект

Для создания проекта просто нажимаем кнопку «Создать проект», расположенную под списком проектов. Будет создан проект с названием типа Project N. Нажав на него, мы перейдем в режим просмотра списка схем, включенных в этот проект. Там же мы сможем изменить свойства проекта (включая название), нажав на соответствующий значок сразу под названием.

Добавляем новую схему Circuits

Создать новую схему в Tinkercad можно двумя способами:

  • В меню слева выбрать Circuits и справа над списком схем выбрать команду Create new Circuit (на момент написания статьи все основные интерфейсные элементы не переведены). Новая схема будет создана вне какого-либо проекта.
  • Создать схему в определенном проекте. Для этого надо сначала перейти в окно проекта, а затем нажать на кнопку «Create» сверху над списком. Появится перечень типов схем, мы выбираем Circuit. Созданная схема будет доступна в этом списке и в списке всех проектов в меню Circuits.

После выполнения команды вы сразу же перейдете в режим редактирования схемы, не вводя названия. Имя для схемы формируется автоматически.

  • Чтобы изменить название схемы и отредактировать ее свойства нужно перейти в режим просмотра списка схем, навести на область с названием схемы и нажать на иконку «Настройки». Откроется окно, в котором вы сможете отредактировать параметры.
  • Для удаления схемы надо в том же режиме выбрать в настройках команду «Удалить».
  • Для просмотра краткой информации о схеме нужно просто щелкнуть на ней
  • Для перехода в режим редактирования нужно навести курсор мышки и выбрать появившуюся команду «Изменить».

Все изменения в процессе редактирования схемы сохраняются автоматически.

Описание интерфейса Тинкеркад в режиме редактирования

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

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

На полосе инструментов в верхней части слева находятся основные команды:

  • Повернуть элемент
  • Удалить
  • Масштабировать по размерам экрана
  • Отмена
  • Повтор

Кнопки в правой части панели:

  • Отобразить панель программирования, и отладки
  • Отобразить панель библиотеки компонентов
  • Запустить симулятор схемы
  • Экспорт в Eagle .brd
  • Поделиться

В целом  интерфейс достаточно прост, не перегружен лишними элементами и интуитивно понятен. Практически любые операции можно выполнить «на ощупь».

Создание схемы в Tinkercad шаг за шагом

В большинстве случае для работы с проектами Arduino выполняется следующий алгоритм действий:

  1. Создаем новую схему или открываем существующую для редактирования.
  2. Используя визуальный редактор, создаем схему (в нашем случае, с включением платы Arduino Uno).
  3. Готовим скетч в редакторе кода и загружаем его в виртуальный контроллер.
  4. Запускаем режим симуляции, при которой плата виртуально подключается к источнику питания и схема начинает работать. Вносим начальные данные для датчиков и наблюдаем реакцию схемы, как визуально, так и на виртуальном мониторе порта внутри самого сервиса.

Давайте рассмотрим каждый из шагов подробнее.

Первый шаг. Создаем схему Circuit

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

Подготовка электронной схемы

Создавая схему, мы выполняем такой порядок действий:

  • Выбираем нужные компоненты из библиотеки компонентов внизу экрана и размещаем их в поле редактора.
  • Соединяем компоненты с помощью виртуальных проводников, рисуя их мышкой.
  • Редактируем параметры компонентов (например, величину сопротивления у резисторов или цвет проводов).

Операция выбора из библиотеки достаточно проста. Список элементов находится внизу. Выбрав элемент, мы кликаем на нем, затем перемещаем в нужное место на схеме и кликаем повторно. Окно со списком компонентов можно скрыть или показать, нажимая на переключатель «Components» в панели инструментов.

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

  • Basic Components. Основные компоненты
  • Allcomponents. Все доступные компоненты
  • Starters. Готовые предустановленные схемы

Самой интересной для нас сейчас является третья закладка – Starters. Создатели сервиса подготовили несколько готовых схем, которые мы можем сразу же подгрузить в проект и редактировать на свое усмотрение.

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

Если схема не влезает в экран – выполните масштабирование (нажмите на кнопку масштаба на панели инструментов).

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

Углы провода красиво скругляются, есть возможность выравнивать провод по вертикали или горизонтали (появлении синих линий подскажет нам вертикаль и горизонт соответственно). Для отмены установки провода нужно нажать на Esc или мышкой нажать на соответствующую иконку на панели инструментов.

Нажав на компонент, мы можем отредактировать его свойства.

Третий шаг. Программируем скетч виртуального Arduino

Все инструменты для редактирования кода становятся доступны после перехода в соответствующий режим при нажатии на кнопку «Code Editor» в верхней панели.

В режиме редактирования кода нам доступны следующие варианты действий:

  • Загрузить скетч в «виртуальный контроллер» и запустить симулятор.
  • Переключение в  визуальный редактор кода типа Scratch.
  • Переключение в текстовый редактор кода.
  • Подключение библиотек.
  • Скачать код на свой компьютер в виде файла с расширением .ino (скетч ардуино).
  • Запустить отладчик с возможностью создания точек остановок и мониторингом состояний переменных.
  • Отобразить или скрыть окно монитора.

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

Четвертый шаг. Запускаем симулятор ардуино

Есть два способа запуска симулятора. Первый – нажать на кнопку «Start Simulation» в верхней панели. Второй – использовать кнопку Upload&Run в режиме редактирования кода.

В обоих случаях для остановки работы симулятора нужно просто еще раз нажать на верхнюю кнопку (в режиме симуляции надпись изменится на «Stop Simulation»).

Что происходит во время симуляции? А практически то же, что и при подключении питания к реальной схеме. Лампочки горят, из пьезоизлучателя издаются звуки, двигатели крутятся. Мы можем отслеживать текущие показатели (напряжение, ток) с помощью инструментов мониторинга.

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

Также прекрасно работают такие элементы как LCD дисплей – мы увидим выводимую информацию прямо на экране визуального компонента.

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

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

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

Подводя итоги

В завершении этой статьи – краткого знакомства с новым интересным сервисом Tinkercad Arduino Circuits, хотелось бы еще раз подчеркнуть его ключевые возможности: визуальный редактор схем, визуальный и текстовые редакторы кода, режим отладки, режим симуляции схем, возможность экспорта полученных скетчей и электрических схем в реальные проекты. Возможно, по отдельности каждая из этих возможностей лучше реализована в других мощных инструментах, но собранные вместе, да еще и в виде удобного, простого для освоения web-сервиса, они делают Tinkercad крайне полезным для любого, особенно начинающего, ардуинщика.

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

Источник: https://ArduinoMaster.ru/program/simulyator-arduino-tinkercad-circuits/

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}