"Вы читаете о роботах и программировании и думаете: «Было бы здорово сделать что-то подобное самому!» Теми, кем эта идея овладевает чуть больше просто мыслей смотрят кто и как делал своего робота. Читают статьи, смотрят видео. На картинках все понятно. В видеороликах тоже обычно показываются уже готовые продукты, а также сжато показываются технологии их изготовления. И вроде бы то же всё понятно: отпилил, прикрутил, припаял, соединил, запрограммировал вон на той программе вот этим кодом."
воскресенье, 27 декабря 2020 г.
суббота, 26 декабря 2020 г.
ТРЕБОВАНИЯ К ДОКЛАДУ ПО ГОСТ
![]() |
| по материалам https://studently.ru/blog/samostojatelnye-raboty/oformlenie-doklada-po-gostu/ |
ИНСТРУКЦИЯ ПО СОЗДАНИЮ ДОКЛАДА
среда, 23 декабря 2020 г.
вторник, 22 декабря 2020 г.
для Дегтярева
https://us04web.zoom.us/j/4489697759?pwd=ZTRPZHJmTkpwMWt4T0trL1kxbEFxdz09 /
ЗАДАНИЕ
1. Зарегистрироваться на сайте DrakonHub
2. Создать ментальную карту сообщения "Крейскр Варяг"
3. Переделать сообщение согласно созданной ментальной карты
4. Ментальную карту переслать через "отчет о проделанной работе" раздела РЕСУРСЫ сайта РОБОТОТЕХНИКА (walwalru-robot,blogspot,com)
воскресенье, 20 декабря 2020 г.
КРУЖОК ОТ 21.12.20
На прошлом занятии мы с Вами успешно поработали с цифровой панелью из восьми светодиодов, смогли написать скетч управления, для последовательной индикации цифр. Освоили операторsы digitalWriter() и pinMode(), а так же узнали про их эффективную замену при работе напрямую с портами микропроцессора. В нашем слчае это порты B, C, D. Тогда установка наппрвления пинов порта DDRB = 0xff, DDRC = 0xff, DDRD = 0xff, (все пины работают на выход) может производиться простым числом. Для подачи уровня сигнала (высокий/низкий) можно использовать обращения к регистрам портов PORTB, PORTC, PORTD.
PORTD = 0b11111111 (PORTB = 0xff);// на всех пинах высокий сигнал
DDRD = 0x11110000 (DDRD = 0xf0);//пины 0,1,2,3 на вход 4,5,6,7 выход
обращение к единичному пину - назначение выборочно уровня сигнала
PORTD |= 1 << (номер бита) установка 1 - высокий уровень
PORTD &= ~(1 << (номер бита)) установка 0 - высокий уровень
PORTD |= (1 << (номер бита))|(1 << (номер бита)) одновременная установка "1" в несколько разрядов регистра порта
PORTD &= ~((1 << (номер бита))|(1 << (номер бита))) одновременная установка "0" в несколько разрядов регистра порта
Пользуясь полученными знаниями и навыками прошлого занятия мы должны создать схему управления двумя цифровыми табло на светодиодах, макет будет представлен ниже. Правая часть табло цифры по порядку от 0 до 9. Левая часть от 0 до 5. Левая часть изменяется на еденицу по возрастанию после показа всех цифр правого табло.
![]() |
| макет для эксперемента |
Для решения поставленной задачи потребуется создать алгоритм работы схемы управления, а по нему создать текст программы. Кстати это задание дано было дано Вам на дом - создать алгоритм управления.
Теперь ваши алгоритмы начнем превращать в программу управления. Для начала необходимо нарисовать схему Вашего алгоритма. Думаю у Вас она получиться примерно такая
![]() |
| примерная схема алгоритма |
А зачем нам рисовать схему алгоритма? Прежде всего схема нужна для наглядности Вашего замысла. Так же схема нужна для проверки логики работы Вашего алгоритма управления. Кроме того на схеме легко определяются "висячие хвосты", "логические петли", дубляж команд.
Прикрепим каждому объекту команду на языке программирования и собирем нашу прогамму. ну приерно так:
int schetchik1, schetchik2;
void setup()
{
DDRB = 0XFF;
DDRD = 0XFF;
}
void loop()
{
// ==================== Шампур
// 3. Заголовок / начало
// 4. Действие / обнуляем счетчик
schetchik1 = 0;
// 5. Действие / левый 0
PORTD &= ~(1<< 7);
PORTB = 0b11000100;
// 6. Цикл Вставка / правый 0 - 9
goto L1_22;
L7: ;
// 7. Действие / счетчик ++
schetchik1 ++;
// 8. Выбор / выбор левой цифры
if (schetchik1 == 1) goto L12; // 11. счетчик = 1
if (schetchik1 == 2) goto L14; // 13. счетчик = 2
if (schetchik1 == 3) goto L16; // 15. счетчик = 3
if (schetchik1 == 4) goto L18; // 17. счетчик = 4
if (schetchik1 == 5) goto L20; // 19. счетчик = 5
// 9. Вариант / счетчик > 5
// 10. Конец / Конец
goto L_end1;
// ==================== Шампур
// 11. Вариант / счетчик = 1
L12: ;
// 12. Действие / левый 1
PORTD &= ~(1 << 7);
PORTB = 0B11011111;
goto L1_22;
// ==================== Шампур
// 13. Вариант / счетчик = 2
L14: ;
// 14. Действие / левый 2
PORTD |=(1 << 7);
PORTB = 0B11001000;
//delay(10000);
goto L1_22;
// ==================== Шампур
// 15. Вариант / счетчик = 3
L16: ;
// 16. Действие / левый 3
PORTD &= ~(1 << 7);
PORTB = 0B11001010;
goto L1_22;
// ==================== Шампур
// 17. Вариант / счетчик = 4
L18: ;
// 18. Действие / левый 4
PORTD &= ~(1 << 7);
PORTB = 0B11010011;
goto L1_22;
// ==================== Шампур
// 19. Вариант / счетчик = 5
L20: ;
// 20. Действие / левый 5
PORTD &= ~(1 << 7);
PORTB = 0B11100010;
// Z:\home\kovi\DRACON\др длкр-20201219T045303Z-001\др длкр\tablo_to.drt
// 2. Схема - вставка, Изменение 20.12.2020 11:49:32, Начало
// ==================== Шампур
// 21. Заголовок / правый 0 - 9
L1_22: ;
// 22. Действие / обнуляем счетчик2
schetchik2 = 0;
L1_23: ;
// 24. Выбор / выбор цифры
if (schetchik2 == 0) goto L1_26; // 66. ?Вариант
if (schetchik2 == 1) goto L1_31; // 30. 1
if (schetchik2 == 2) goto L1_33; // 32. 2
if (schetchik2 == 3) goto L1_35; // 34. 3
if (schetchik2 == 4) goto L1_37; // 36. 4
if (schetchik2 == 5) goto L1_39; // 38. 5
if (schetchik2 == 6) goto L1_41; // 40. 6
if (schetchik2 == 7) goto L1_43; // 42. 7
if (schetchik2 == 8) goto L1_45; // 44. 8
if (schetchik2 == 9) goto L1_47; // 46. 9
// 25. Вариант / 10
L1_27: ;
// 23. Цикл Пауза / 1 с
delay(1000);
// 27. Действие / счетчик2 ++
schetchik2 ++;
// 28. Вопрос / счетчик2 == 10 == Нет
if (!(schetchik2 == 10)) goto L1_23;
// 29. Конец / Конец
goto L7;
// ==================== Шампур
// 66. Вариант / ?Вариант
L1_26: ;
// 26. Действие / правый 0
//PORTD = PORTD + 10000000;
PORTD &= ~((1 << 0)|(1 << 1)|(1 << 2)|(1 << 4)|(1 << 5)|(1 << 6)); //ВКЛЮЧЕНИЕ СВЕТОДИОДА ПО ПИНУ
PORTD |= 1 << 3; //ВКЛЮЧЕНИЕ СВЕТОДИОДА ПО ПИНУ
goto L1_27;
// ==================== Шампур
// 30. Вариант / 1
L1_31: ;
// 31. Действие / правый 1
PORTD &= ~((1 << 0)|(1 << 6));
PORTD |= (1 << 1)|(1 << 2)|(1 << 3)|(1 << 4)|(1 << 5);
goto L1_27;
// ==================== Шампур
// 32. Вариант / 2
L1_33: ;
// 33. Действие / правый 2
PORTD &= ~((1 << 1)|(1 << 2)|(1 << 3)|(1 << 5)|(1 << 6 ));
PORTD |= (1 << 0)|(1 << 4);
goto L1_27;
// ==================== Шампур
// 34. Вариант / 3
L1_35: ;
// 35. Действие / правый 3
PORTD &= ~((1 << 0)|(1 << 1)|(1 << 3)|(1 << 5)|(1 << 6 ));
PORTD |= (1 << 2)|(1 << 4);
goto L1_27;
// ==================== Шампур
// 36. Вариант / 4
L1_37: ;
// 37. Действие / правый 4
PORTD &= ~((1 << 0)|(1 << 3)|(1 << 4)|(1 << 6 ));
PORTD |= (1 << 1)|(1 << 2)|(1 << 5);
goto L1_27;
// ==================== Шампур
// 38. Вариант / 5
L1_39: ;
// 39. Действие / правый 5
PORTD &= ~((1 << 0)|(1 << 1)|(1 << 3)|(1 << 4)|(1 << 5));
PORTD |= (1 << 2)|(1 << 6);
goto L1_27;
// ==================== Шампур
// 40. Вариант / 6
L1_41: ;
// 41. Действие / правый 6
PORTD &= ~((1 << 1)|(1 << 2)|(1 << 3)|(1 << 5)|(1 << 0)|(1 << 4));
PORTD |= 1 << 6;
goto L1_27;
// ==================== Шампур
// 42. Вариант / 7
L1_43: ;
// 43. Действие / правый 7
PORTD &= ~((1 << 0)|(1 << 5)|(1 << 6));
PORTD |= (1 << 1)|(1 << 2)|(1 << 3)|(1 << 4);
goto L1_27;
// ==================== Шампур
// 44. Вариант / 8
L1_45: ;
// 45. Действие / правый 8
PORTD &= ~((1 << 0)|(1 << 1)|(1 << 2)|(1 << 3)|(1 << 4)|(1 << 5)|(1 << 6));
goto L1_27;
// ==================== Шампур
// 46. Вариант / 9
L1_47: ;
// 47. Действие / правый 9
PORTD &= ~((1 << 0)|(1 << 1)|(1 << 3)|(1 << 4)|(1 << 5)|(1 << 6));
PORTD |= 1 << 2;
goto L1_27;
// 1. Схема, Конец
L_end1: ;
//
}
четверг, 17 декабря 2020 г.
КРУЖОК ОТ 18.12.20
И да, светодиодом на прошлом занятии помигали. Получилось. Зто хорошо, теперь усложним задачу. Поработаем с светодиодной цифрой. Соберем сначала в виртуальной лаборотории схему показанную ниже
Порты микроконтроллеров AVR - это устройства ввода/вывода, позволяющие микроконтроллеру передавать или принимать данные. Стандартный порт микроконтроллера AVR содержит восемь разрядов данных, которые могут передаваться или приниматься параллельно. Ножки микроконтроллера также называют пинами, контактами или выводами. Порты обозначаются латинскими буквами А, В, С и т.д. Количество портов зависит от конкретной модели микроконтроллера.
Kонфигурирование каждой линии порта (задание направления передачи данных) может быть произведено программно в любой момент времени. Входные буферы портов построены по схеме триггера Шмитта. Для линий, сконфигурированных как входные, также имеется возможность подключения внутреннего подтягивающего резистора сопротивлением 35…120 кОм между входом и проводом питания. Kроме того, если вывод (вход) с подключенным внутренним подтягивающим резистором подключить к общему проводу, он может служить источником тока.
Обращение к портам производится через регистры ввода/вывода, причем под каждый порт в адресном пространстве ввода/вывода за-резервировано по 3 адреса. По этим адресам размещаются три регистра: регистр данных порта PORTx, регистр направления данных DDRx и регистр выводов порта PINx. Разряды этих регистров имеют названия: Px7…Px0 — для регистров PORTx, DDx7…DDx0 — для регистров DDRx и PINx7…PINx0 — для регистров PINx.
Действительные названия регистров (и их разрядов) получаются подстановкой названия порта вместо символа «x», соответственно для порта A регистры называются PORTA, DDRA, PINA, для порта B - PORTB, DDRB, PINB и т.д.
Следует заметить, что «регистры» PINx на самом деле регистрами не являются, по этим адресам осуществляется доступ к физическим значениям сигналов на выводах порта. Поэтому они доступны только для чтения, тогда как регистры PORTx и DDRx доступны и для чтения, и для записи.
Обратим внимание, что наше устройство подключено к порту D, а значит мы можем обращаться к нему на прямую. На языке С можно задать направление передачи данных сразу для всего порта.
Пример:
DDRB = 0xff;
С помощью этой команды все выводы (контакты) порта B будут сконфигурированы как выходы.
0xff представляет собой шестнадцатиричное представление числа ff, а 0x является префиксом, указывающим на то, что число записано в шестнадцатиричное форме. В десятичном представлении число 0xff будет равно 255, а в двоичном – 11111111. То есть с помощью представленной команды во все биты регистра DDRB будут записаны логические единицы.
В языке Си для микроконтроллеров AVR для представления двоичных чисел применяется префикс 0b. Соответственно, представленную выше команду записи логических единиц во все биты регистра DDRB можно записать и с помощью двоичного вида числа 255:
DDRD = 0b11111111;
Эта запись команды является более наглядной, но все таки правилом "хорошего тона" в программировании для микроконтроллеров считается использование шестнадцатиричного представления чисел.
После того как направление передачи данных у порта будет сконфигурировано, можно присвоить порту значение, которое будет храниться в соответствующем регистре PORTx.
PORTx - регистр порта, где x обозначает имя порта.
Если вывод (контакт) сконфигурирован как выход, то единица в соответствующем бите регистра PORTx формирует на выводе сигнал высокого уровня, а ноль - сигнал низкого уровня.
Если вывод (контакт) сконфигурирован как вход, то единица в бите регистра PORTx подключает к выводу внутренний подтягивающий pull-up резистор, который обеспечивает высокий уровень на входе при отсутствии внешнего сигнала.
Установить "1" на всех выводах (контактах) порта B можно c помощью следующей команды:
PORTB = 0xff.
Аналогично установка "0" на всех выводах порта B выполняется следующим образом:
PORTB = 0x00.
К каждому биту регистров PORTx можно обращаться и по отдельности так же, как и в рассмотренном выше случае с регистрами DDRx. К примеру, команда
PORTB |= 1<<3;
установит "1" (сигнал высокого уровня) на контакте PB3.
Команда
PORTB &= ~(1<<4);
установит "0" (сигнал низкого уровня) на контакте PB4.
В нашем случае мы будем переписывать значение PORTD двоичным числом, создавая сразу нужные комбинации пинов для работы светодиодов. Примерно так:
Данный скетч использует 2% памяти устройства - 776 байтов, что примерно в два раза короче предыдущего скетча и это только начало.
В статье использованы материалы с сайта "Мир микроконтроллеров" - https://microkontroller.ru/programmirovanie-mikrokontrollerov-avr/upravlenie-portami-avr-na-yazyke-c/
суббота, 12 декабря 2020 г.
КРУЖОК 14.12.20
И да, начнем с самого простого. Если в программировании это "Hello Word", то в робототехнике мигаем светодиодом. Для начала о светодиоде. Светодио́д или светоизлучающий диод — полупроводниковый прибор с электронно-дырочным переходом, создающий оптическое излучение при пропускании через него электрического тока в прямом направлении.
![]() |
| светодиод |
Обратим внимание на выше приведенном рисунке показано полярность подключения полупроводникового прибора, при этом сопротивление у него близкое к 0, а значит при подключении к катоду необходимо подключить нагрузку в виде сопротивления.
![]() |
| электрическая схема подключения светодиода |
![]() |
| макет для проведения практической работы |
Ну вот, с макетом схемы мы разобрались, теперь нужно написать программу согласно которой наш светодиод мигал с интервалом в 1 с. Самый простой способ (для тех кто совсем не умеет программировать) это запустить виртуальную лабораторию TinkerCad, создать новую электрическую цепь, перейти в режим кода и с помощью визуального редактора создать алгоритм согласно, которого будет реализована Ваша работа. Как вариант.
![]() |
| пример программного кода |
![]() | ||||
| загрузка программного кода |
При создании алгоритма из блоков команд (режим блоки с текстом) справа от алгоритма мы получаем код программы на языке программирования, который можно скопировать и вставить в среде программирования контроллера - ARDUINO IDE или скачать код и открыть в том же приложении. Проделаем это с использованием выше указанным программным обеспечением.
Теперь нам необходимо загрузить нашу программу в контроллер. Для этого нам потребуется программа ARDUINO IDE.
| интерфейс программы ARDUINO IDE |















