Машинка для ардуино: Arduino. Проект «Робот-машина RoboCar4W» / Хабр
|Содержание
Bluetooth машинка своими руками | AlexGyver
ОБНОВЛЕНИЯ
- v1.1 – улучшена стабильность. Требуется библиотека GyverMotor
05.11.2021 удалена старая версия, оставил только 1.1. Обновлена библиотека GyverMotor в архиве
ОПИСАНИЕ
И вот наконец-то я решился сделать свою собственную машинку на управлении по Bluetooth! Для начала решил сделать всё максимально просто: 4 мотора, 4 колеса, ардуина, блютус модуль, ну и драйвер. Запитаем всё от паурбанка, на него и колёса закрепим. Для Андроид слепил приложеньку GyverJoy, простенький джойстик. Самая главная фишка в том, что в проекте используем FPV камеру и приёмник для смартфона, добавив разделение экрана от новой версии Андроид получим одновременное управление машинкой и вывод видео с камеры! Смотрите видос, проект просто бомбезный!
КОМПОНЕНТЫ
Инструменты, полезное
Каталоги ссылок на Алиэкспресс на этом сайте:
- Всё для пайки: паяльники, приспособления
- Платы Ардуино, модули и датчики
- Модули и датчики для умного дома
- Дешёвые инструменты
- Аккумуляторы, платы защиты, зарядники
- Мультиметры
- Блоки питания, преобразователи
Железки со схемы
Стараюсь оставлять ссылки только на проверенные крупные магазины, из которых заказываю сам. Также по первые ссылки ведут по возможности на минимальное количество магазинов, чтобы минимально платить за доставку. Если какие-то ссылки не работают, можно поискать аналогичную железку в каталоге Ардуино модулей. Также проект можно попробовать собрать из компонентов моего набора GyverKIT.
- Powerbank XiaoMI USBx2 https://ali.ski/WGT1X4
Arduino Nano купить в РФ, aliexpress, aliexpress, искать
Bluetoth HC-06 aliexpress, aliexpress, искать
Драйвер MX1508 aliexpress, aliexpress, искать
- Моторчик и колесо
- https://ali.ski/cr8rh
- https://ali.ski/akKNb0
- 4 мотора и колёса https://ali.ski/WHzSi
Макетная плата aliexpress, aliexpress, искать
- Танковое шасси https://ali.ski/6Mlgo7
FPV:
- Камера 3 в 1 https://ali.ski/CwPX9
- FPV OTG приёмник
- https://ali.ski/dOjdwE
- https://ali.ski/m-t6Jp
- Другие варианты приёма видео:
- FPV часы https://ali. ski/geptr
- Крутой дисплей с приёмником https://ali.ski/YJflI
- FPV шлем как у меня https://ali.ski/36ORh
ПРОШИВКА
ВНИМАНИЕ!
Максимально подробный гайд по началу работы с платой и загрузке прошивки для проекта находится ЗДЕСЬ. Изучи его внимательно, прежде чем писать на форум или в группу ВК!
ИНСТРУКЦИЯ
СКАЧАТЬ
GITHUB
БАГРЕПОРТ
ПОДДЕРЖАТЬ
Вы можете поддержать меня за создание доступных проектов с открытым исходным кодом, полный список реквизитов есть вот здесь.
как сделать радиоуправление своими руками
Это первый роботизированный проект, который я когда-либо делал, и если вы никогда не пробовали собрать робота, то, скорее всего, думаете что это сложно. Но Ардуино и шасси 2WD / 4WD сделают вашу сборку намного проще, и вы соберете своего первого робота с радиоуправлением на Ардуино без каких-либо мучений.
По пути ко мне пришла идея о создании радиоуправляемой машины своими руками, которая бы объезжала препятствия, поэтому я собрал и этот проект, видео и файл программы к которому прикладываю ниже.
Файлы
- Arduino_Obstacle_Avoiding_Rover.ino
- Obstacle Avoiding Robot Arduino Code.pdf
Содержание статьи
Шаг 1: Нужные части и инструмент
Я воспользовался готовыми решениями, и все запчасти и инструменты были приобретены через интернет.
Запчасти:
- Набор шасси 4WD для робота (GearBest)
- Arduino Nano (GearBest)
- Модуль H-моста LM298 (GearBest)
- Модуль bluetooth HC-06 (Amazon)
- Литий-ионные батарейки 2 x 18650 (GearBest)
- Отсек для батареек 2x 18650 (GearBest)
- Небольшая макетная плата (GearBest)
- Провода сечением 0.5 мм2
- Провода с джамперами папа-мама (Amazon)
- Провода с джамперами мама-мама (Amazon)
- Малярная лента, изолента или что-то подобное (Amazon)
Для робота, объезжающего препятствия:
Ультразвуковой модуль измерения расстояния HC — SR04 (GearBest)
Необходимый инструмент :
- Паяльник (Amazon)
- Кусачки (Amazon)
- Стриппер для провод (GearBest)
- Клеевой пистолет (GearBest)
Шаг 2: Что такое робот?
Робот – это электромеханическое устройство, которое способно каким-либо образом реагировать на окружающую обстановку и принимать самостоятельные решения или действия, чтобы достичь определенных целей.
Робот состоит из следующих компонентов:
- Структура / Шасси
- Привод / Мотор
- Контроллер
- Вводные устройства / Датчики
- Источник питания
В следующих шагах я опишу каждый из этих компонентов, и вы всё легко поймёте.
Шаг 3: Структура / Шасси
Структура состоит из физических компонентов. Робот имеет один или несколько физических компонентов, которые каким-либо образом двигаются для выполнения задания. В нашем случае структура робота – это шасси и колёса.
Шаг 4: Приводы
Под приводом можно понимать устройство, которое преобразовывает энергию (в робототехнике под энергией понимается электрическая энергия) в физическое движение. Большинство приводов производят вращательное или линейное движение.
В нашем случае привод – это DC-мотор, скорость которого равна 3000 оборотам в минуту, а вращающий момент 0.002 Н•м. Теперь добавим к нему шестерню с передаточным числом 1:48. Новая скорость уменьшается на коэффициент 48 (в результате давая 3000/44 = 68 оборотов в минуту) и вращающий момент увеличивается на коэффициент 48 (в результате давая 0. 002 x 48 = 0.096 Н•м).
Шаг 5: Подготавливаем клеммы моторчиков
Отрежьте по 4 провода красного и черного цвета длиной примерно 12-15 см. Я использовал провода сечением 0.5 мм2. Оголите концы проводов. Припаяйте провода к клеммам моторчиков.
Вы можете проверить полярность моторчиков, соединив их с отсеком для батареек. Если он движется в прямом направлении (с красным проводом на позитивной и черным на негативной клеммах батареек), то с соединением все в порядке.
Шаг 6: Устанавливаем мотор
Прикрепите две акриловые распорки к каждому мотору при помощи двух длинных болтов и двух гаек. Для наглядности вы можете посмотреть видео.
Возьмите на заметку, что провода на каждом моторе ведут к центру шасси. Соедините оба красных и оба черных провода от моторов с каждой стороны шасси. После соединения у вас будет две клеммы на левой стороне и две на правой.
Шаг 7: Устанавливаем крышу
Послу установки 4 моторов нужно установить крышу. Приладьте 6 медных стоек при помощи гаек, клеммы проводов выведите сквозь отверстие в крыше.
Шаг 8: Контроллер
Теперь у нас установлены шасси и приводы, но нам не хватает контроллера. Шасси без контроллера никуда не поедут. Робот будет оставаться на месте, оставаясь безжизненным. Поэтому, для того чтобы робот перемещался, нам нужен мозг (контроллер).
Контроллер – программируемое устройство, способное работать по заданной программе и отвечающее за все вычисления, принятие решений и коммуникацию. В нашем случае в качестве контроллера мы используем микроконтроллер Ардуино Нано.
Контроллер принимает входные данные (с датчиков, удалённо и т.д.), обрабатывает их и затем даёт команду приводам (моторам) выполнить выбранное задание.
Если вы подключите позитивный провод от батарей на одну строну моторчика, затем подключите негативный провод от батарей на другой контакт моторчика, то он начнёт крутиться вперёд. Если вы поменяете провода местами, то мотор начнёт вращаться в другую сторону.
Микроконтроллер можно использовать, чтобы вращать мотор в одном направлении, но если вам хочется с помощью микроконтроллера вращать мотор и вперёд, и назад, то вам нужна дополнительная схема – H-мост. В следующем шаге я объясню, что это такое.
Шаг 9: Н-мост (модуль LM 298)
Что такое Н-мост?
Термин Н-мост произошел от типичного графического представления этой схемы. Это схема, которая может вращать мотор как в прямом, так и в обратном направлении.
Принцип работы:
Посмотрите приложенную картинку для понимания принципа работы схемы Н-моста. Мост состоит из 4 электронных выключателей S1, S2, S3, S4 (транзисторы / MOSFET/ IGBTS).
Когда выключатели S1 и S4 закрыты, а остальные два открыты, положительное напряжение будет проходить через мотор, и он будет вращаться в прямом направлении. Таким же образом, когда закрыты выключатели S2 и S3, а S1 и S4 открыты, обратное напряжение будет даваться на мотор и он начнёт вращаться в обратном направлении.
Заметка: выключатели на одной руке (то есть S1, S2 или S3, S4) никогда не закрываются одновременно – это создаст короткое замыкание.
Н-мосты доступны в виде интегральных схем, либо можно собрать свой мост при помощи 4 транзисторов или MOSFET. В моём случае используется интегральная схема Н-моста LM298, которая позволяет управлять скоростью и направлением моторов.
Описание распиновки:
Out 1: DC мотор 1 «+» или шаговый двигатель A+
Out 2: DC мотор 1 «-» или шаговый двигатель A-
Out 3: DC мотор 2 «+» или шаговый двигатель B+
Out 4: вывод мотора B
12v: вход 12V, но можно использовать от 7 до 35V
GND: Земля
5v: выход 5V, если джампер 12V стоит на месте, идеально для питания Arduino (и т.п.)
EnA: позволяет получать сигналы PWM для мотора A (Пожалуйста, прочитайте секцию «Arduino Sketch Considerations»)
IN1: включает мотор A
IN2: включает мотор A
IN3: включает мотор B
IN4: включает мотор B
BEnB: позволяет получать сигналы PWM для мотора B (Пожалуйста, прочитайте секцию «Arduino Sketch Considerations»)
Шаг 10: Входы / Датчики
В отличие от людей, роботы не ограничены лишь зрением, звуком, осязанием, обонянием и вкусом. Роботы используют различные датчики для взаимодействия с внешним миром.
Датчик – это устройство, которое выявляет и отвечает на определенные типы входящей информации из окружающего мира. Этой информацией может быть свет, тепло, движение, влажность, давление или любое другое явление окружающей среды.
Входящие сигналы могут идти от датчиков, удалённо, или со смартфона. В этом руководстве я использую смартфон в качестве девайса, отправляющего сигналы, управляющие роботом.
Шаг 11: Источник питания
Чтобы управлять приводами (моторами) и питать контроллер, роботу нужен источник питания. Большинство роботов питается от батарей. Когда мы говорим о батареях, то имеем в виду множество вариантов:
- Алкалиновые батарейки AA (не заряжаются)
- Никель-металгидридные или никель-кадмиевые батарейки AA (заряжаются)
- Литий-ионные батареи
- Литий-полимерные батареи
В зависимости от ваших нужд, нужно выбрать подходящий вид батарей. По-моему мнению, нужно всегда выбирать заряжаемые батареи достаточной ёмкости. Я использовал 2 литий-ионные батареи стандарта 18650 ёмкостью 2600mAh. Если для автономности вам нужно больше мощности, используйте большой комплект батарей, например 5A turnigy.
Отсек для батарей:
Отсек для батарей я заказал в Китае, он не подходил для батарей с плоским верхом, поэтому я использовал два неодимовых магнита для придания батарейкам нужной формы.
Зарядка:
Для зарядки батарей нужен хороший зарядник. По моему опыту, эти зарядники хорошо зарекомендовали себя:
- PowerEx AA Charger-Analyzer (Amazon)
- XTAR LiIon Battery Charger (Amazon)
- Turnigy LiPo Battery Charger (Amazon)
Шаг 12: Установка компонентов
Цельная схема устанавливается на крыше. Отсек для батарей, драйвер двигателей LM 298 и маленькую макетную плату я закрепил горячим клеем, но можно просто прикрутить их. Модуль bluetooth закрепляется скотчем. Ардуино нано вставьте в макетную плату.
Шаг 13: Электропроводка
Для соединения модулей понадобятся провода с джамперами.
Соедините красные провода двух моторов вместе (на каждой стороне) и затем черные провода. В итоге у вас выйдет по две клеммы с каждой стороны.
MOTORA отвечает за два правых мотора, соответственно два левых мотора соединены с MOTORB.
Для соединения всех компонентов следуйте инструкции:
Соединение моторов:
Out1 -> красный провод левостороннего мотора (+ )
Out2 -> черный провод левостороннего мотора ( — )
Out3 -> красный провод правостороннего мотора ( + )
Out4 -> черный провод правостороннего мотора ( — )
LM298 — > Arduino
IN1 -> D5
IN2-> D6
IN2 ->D9
IN2-> D10
Модуль Bluetooth -> Arduino
Rx-> Tx
Tx ->Rx
GND -> GND
Vcc -> 3.3V
Питание
12V — > красный провод батарей
GND -> черный провод батарей и пин GND на Arduino
5V -> соедините с пином 5V Arduino
Шаг 14: Логика управления
Чтобы понять принцип работы, я создал эту логическую таблицу. Она очень пригождается во время написания кода.
Шаг 15: Софт
Часть с фотом очень проста, она не требует никаких библиотек. Если вы поняли таблицу логики из прошлого шага, то сможете написать свой код. Я не тратил на код много времени и просто скопировал чей-то готовый вариант. Чтобы управлять роботом-машиной, я использую смартфон, соединённый с контроллером через модуль Bluetooth (HC-06).
Скачайте приложение. После его установки, свяжите телефон с модулем Bluetooth. Пароль «1234». Код Ардуино прикреплён ниже.
Файлы
- Basic_Robt.ino
- Smartphone Controlled Arduino Robot Code.pdf
Шаг 16: Тестирование
Чтобы проверить робота-машину, я положил её на маленькую картонную коробку. Таким образом, колёса будут крутиться, но машинка будет оставаться на месте. Проверьте работоспособность, нажимая все доступные кнопки. Если всё работает, то можно по-настоящему управлять ей.
Заметка: если моторы вращаются в противоположном направлении, то просто поменяйте местами провода.
Шаг 17: Планы на будущее
В этом руководстве я объяснил, как создать простенькую машинку. Дальше я хочу добавить в неё некоторые улучшения. Вы можете присоединить к ней различные датчики, вот некоторые идеи:
- Добавление ультразвукового датчика для объезда препятствий
- Использование модуля WiFi, например ESP8266 или Node MCU вместо Bluetooth, для удлинения дистанции управления.
- Добавление солнечной панели для зарядки батарей.
Введение в программирование на машинном языке Arduino — Arxterra
Микроконтроллер AVR и встраиваемые системы с использованием ассемблера и C Мухаммад Али Мазиди, Сармад Наими и Сепер Наими
Вот некоторые из источников, которые я использовал для разработки материала, использованного в лекции. ряд.
0010 0111 0000 0000 → 1110 1111 0001 1111 → 1011 1001 0000 0111 → 1011 1001 0001 1000
1011 1001 0000 0100 → 1011 0000 0111 0110 → 1011 1000 0111 0101 → 1100 1111 1111101110 → 1011 1000 0111 → 1100 1111 11111101
1 0101 → 1100 1111 11111101
1 0101. 0002 Напишите программу на ассемблере для включения и выключения света с помощью переключателя. Похожая программа использовалась при разработке The Wake-up Machine.
Важной частью этого курса является понимание дизайна и языка «Компьютера».
Компьютер реализует классический цифровой вентиль , который вы изучили в классе Digital Logic (EE201) в программном обеспечении с такими инструкциями, как and, or, и eor/xor.
Вам также придется плавно переходить от двоичного к шестнадцатеричному и обратно (т. е. Системы счисления ).
Компьютерные программы перемещают данные через регистры, поэтому знание триггеров и регистров также является важной базовой частью этого класса.
Наконец, вместо проектирования с помощью вентилей (EE201) вы будете проектировать с помощью кода. Таким образом, вам нужно будет просмотреть такие концепции Программирование , как: передача данных (выражения присваивания), арифметические и логические операторы, передача управления (ветвление и цикл), а также битовые и битовые тестовые операторы, которые вы использовали в своем классе программирования (CECS174 или CECS100). .
Хорошей новостью является то, что справка по доступна в Главе 0: «Введение в вычислительную технику» вашего учебника, в дополнительных материалах, приведенных в начале этого документа, в Интернете и в Приложении A – Системы счисления.
Числа и их компьютерное представление
Введение
Результат десяти пальцев с основанием 10 символ предшествует другому символу или следует за ним. Бывший. IV = 4 против VI = 6. Это была очень неуклюжая система для арифметических операций.
Позиционная запись (положительные действительные целые числа)
Дробные числа не будут рассматриваться, но следует отметить, что добавление указанного было бы простым и логичным дополнением к представленной теории.
Значение каждой цифры определяется ее позицией. Обратите внимание на произношение 256 «Двести пятьдесят шесть?
Пример. 256 = 2*10 2 + 5*10 1 + 6*10 0
Обобщение по любому основанию или основанию
Основание или основание = количество различных цифр, которые могут встречаться в каждой позиции в системе счисления.
N = A n r n + A n-1 r n-1 + … + A 1 r 1 + A 0 r 0 (or simple A 1 r + A 0 )
Введение в двоичную систему
Работа большинства цифровых устройств по своей природе является двоичной, они либо включены, либо выключены.
Примеры: переключатель, реле, лампа, транзистор и транзисторно-транзисторно-логическая интегральная схема (TTL IC)
Таким образом, для цифрового компьютера вполне логично использовать основание 2.
Примечание. Будущие устройства могут не иметь этой характеристики, и это одна из причин важности основ и теории. Потому что они добавляют гибкости системе.
В двоичной системе допускается только 2 состояния; 0 и 1 (ЛОЖЬ или ИСТИНА, ВЫКЛ или ВКЛ)
Пример: Старший бит
Бит = одна двоичная цифра (0 или 1)
Это уравнение, связанное с позициями, также дает нам инструмент для преобразования заданной системы счисления в основание 10 — в этом примере двоично-десятичный.
Основание восемь и основание шестнадцать
В начале разработки цифрового компьютера фон Нейман осознал полезность работы в промежуточных системах счисления, таких как основание 8 (или восьмеричное)
Путем группировки 3 двоичных цифр или битов формируется одна восьмеричная цифра . Обратите внимание, что 2 3 = 8
Двоина для восьмиугольника Таблица
2 2 2 1 2 0
0 0 = 0
0 0 1 = 1
0,00002 0 0 = 0 200
0 0. 0 = 1
0,0002 0 0 = 0
0 0 = 1
0. = 2
0 1 1 = 3
1 0 0 = 4
1 0 1 = 5
1 1 0 = 6
1 1 1 = 7 Символы (не числа) 8 и 9 не используются в октелале .
Пример: 100 001 010 110
4 1 2 6 8 = 4*8 3 + 1*8 2 + 2*8 1 + 6*8 0 = 2134
Это это еще один эффективный способ перехода от основания 2 к основанию 10
Резюме: Основание 8 позволяет вам работать на языке компьютера, не имея дело с большим количеством единиц и нулей. Это стало возможным благодаря простоте преобразования с основанием 8 в основание 2 и обратно.
В микрокомпьютерах используется группировка из 4 бит (вместо 3 бит) или основание 16 (2 4 ). Первоначально произносившийся шестнадцатеричным, основание 16 было быстро переименовано в шестнадцатеричное (на самом деле это должно быть основание 6).
Двоирный в шестнадцатеричный преобразование Таблица
2 3 2 2 2 1 2 0
0 0 0 = 0
0 0 1 = 1
0 0 0 0 = 0 = 0
0 0 0 = 1
0 0 0 0 0 0 = 0. 2
0 0 1 1 = 3
0 1 0 0 = 4
0 1 0 1 = 5
0 1 1 0 = 6
0 1 1 1 = 7
1 0 0 0 = 8
1 0 0 1 = 9
1 0 1 0 = A
1 0 1 1 = B
1 1 0 0 = C
1 1 0 1 = D
1 1 1 0 = E
1 1 1 1 = F
в HEX Символы для 10-15 из алфавита. Это показывает, насколько относительными являются числа на самом деле, или, другими словами, они действительно являются просто символами.
Пример: 1000 0101 0110
8 5 6 16 = 8*16 2 + 5*16 1 + 6*16 0 = 2134
требует небольшой практики.
Преобразование из базы 10 в заданное основание (или основание)
Последовательное деление лучше всего продемонстрировать на примере
Чтобы получить цифры в правильном порядке, пусть они падают вправо.
Для этого примера: 43 10 = 101011 2 Быстрая проверка (октальная) 101 011 = 5*8 + 3 = 43 10
Другой пример: преобразовать 43 10 от десятичного к октально : 43 10 = 53 8 Быстрая проверка (восьмеричная) 5*8 + 3 = 43 10
Обобщение процедуры ИЛИ Почему это работает ИЛИ Почему это работает ИЛИ = A
0 9 остаток, а n = количество цифр в основании r для числа N. Деление обычно выполняется по основанию 10.
Еще один способ выразить вышеуказанную таблицу:
N = R*N 1 + A 0
N 1 = R*N 2 + A 1
9002 N 2 + A 1
9002 N 2 + A 1
9002 N 2 + A 1 9003 9002 N 2 + A 2 = R*N 3 + A 2
:
N N-1 = R*N N + A N-1
N N = R*0 + A n
или (теперь на рукоприкладство)
N = r*(r*n 2 + A 1 ) + A 0 заменитель N 1
n = R 2 N 2 + RA 1 + A 0 2 + RA 1 + A 0 2 + RA 1 + A 0 2 + RA 1 + A 0 2 + RA 1 + A 0 2 + RA 1 + A 0 2 + R через уравнение
n = R 2 (R*N 3 + A 2 ) + RA 1 + A 0 Заместитель N 2
:
9006
N = N R N + A N-1 R N-1 +… + A 1 R 1 + A 0 R 0
Nomenclat
бит = 1 бинарная цифра
байт = 8 бит
Nibble = один половина байта = 4 бита
слово = компьютерный зависимый
Двоина арифметика
Двонное добавление
Двоичное сложение выполняется аналогично десятичному сложению с использованием следующих правил двоичного сложения:
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10 (0 с переносом 1)
Примеры:
Проблема | 21 10 + 10 10 = 31 10 | 45 10 + 54 10 = 99 10 | 3 10 + 7 10 = 10 10 |
10101 2 + 01010 2 _______________ 11111 2 | 101101 2 + 110110 2 _______________ 1100011 2 | 011 2 + 111 2 _______________ 1010 2 | |
Чек | 1*2 3 + 0*2 2 + 1*2 1 + 0*2 0 = 1*8 + 0*4 + 1*2 + 0*1 = 10 10 |
Восьмеричное сложение
Восьмеричное сложение также выполняется аналогично десятичному сложению, за исключением того, что каждая цифра имеет диапазон от 0 до 7 вместо 0 до 9.
Задача | 21 10 + 10 10 = 31 10 | 45 10 + 54 10 = 99 10 | 3 10 + 7 10 = 10 10 |
25 8 + 12 8 _______________ 37 8 | 55 8 + 66 8 _______________ 143 8 | 3 8 + 7 8 _______________ 12 8 | |
Чек | 3*8 1 + 7*8 0 3*8 + 7*1 = 31 10 | 1*8 2 + 4*8 1 + 3*8 0 64 + 32 + 3 = 99 10 | 1*8 1 + 2*8 0 8 + 2 = 10 10 |
Шестнадцатеричное сложение
Шестнадцатеричное сложение также выполняется аналогично десятичному сложению, за исключением того, что каждая цифра имеет диапазон от 0 до 15 вместо 0 до 9.
Задача | 21 10 + 10 10 = 31 10 | 45 10 + 54 10 = 99 10 | 3 10 + 7 10 = 10 10 |
15 16 + 0A 16 _______________ 1F 16 | 2D 16 + 36 16 _______________ 63 16 | 3 16 + 7 16 _______________ А 16 (не 10) | |
Чек | 1*16 1 + 15*16 0 16 + 15 = 31 10 | 6*16 1 + 3*16 0 96 + 3 = 99 10 | 10*16 0 10 10 |
Двоичное умножение
Десятичное число | Двоичный |
11 10 x 13 10 _______________ 33 10 11 10– _______________ 143 10 | 1011 2 x 1101 2 _______________ 1011 2 0000 2- 1011 2– 1011 2— _______________ 10001111 2 |
Чек | 8*16 1 + 15*16 0 128 + 15 = 143 10 |
Двоичное подразделение
Проверка: 1*16 1 + 5*16 0 = 16 + 5 = 21 10
Практические арифметические операции, подняв проблемы и затем их обратно к основанию 10 через разные основания (например, 2, 8 и 16).
То, как компьютер выполняет арифметические операции, является гораздо более сложной темой и не рассматривается в этом разделе.
Дополнения и отрицательные числа ИЛИ добавление бита знака
Сложение, умножение и деление — это хорошо, но как насчет вычитания и отрицательных чисел? Из начальной школы вы узнали, что вычитание — это просто сложение отрицательного числа. Математики вместе с инженерами использовали этот принцип вместе с арифметикой по модулю — естественным результатом сумматоров конечной длины — чтобы позволить компьютерам работать с отрицательными числами без добавления каких-либо новых аппаратных элементов в арифметико-логическое устройство (АЛУ).
Величина знака
Вот простое решение, просто добавьте бит знака. Чтобы реализовать это решение на аппаратном уровне, вам потребуется создать вычитатель; а значит больше денег.
Знак величина
Пример: — 2 = 1 0010 2
Один комплемент
Вот решение, которое немного более сложное. Добавьте бит знака и инвертируйте каждый бит, составляющий величину — просто измените 1 на 0 и 0 на 1.
Знак величина
Пример: — 2 = 1 1101 2
, чтобы вычесть в комплементе 1, вы просто добавляете знаки и биты величины, позволяя последнему биту (из знака) вмещается в биту . затем добавьте 1 к ответу. Еще раз позвольте последнему биту переноса упасть в ведро с битами. Битовое ведро возможно из-за физического размера сумматора.
0 1010 2 10
+_ 1 1101 2 +(-2)
0 1000 2 8
+______ 1 2 Регулировка
0 1001 2
Несмотря на , теперь вам нужно добавить 1 к ответу. Это снова означает добавление оборудования. Усугубляя эту проблему, дополнение до единицы позволяет двум числам равняться 0 ( шизофренический ноль ).
Двойки Дополнение
Вот решение, которое немного сложнее в настройке, но не требует корректировок в конце добавления. Есть два способа получить дополнение числа до двух.
Метод 1 = Возьмите дополнение до 1 и добавьте 1
__0 0010 2 2
+1 1101 2 1 комплемент (т.е. инверт)
+1 2 Добавить 1
1 1110 2
Метод 2 = Двигайтесь справа налево, пока не встретите 1, затем инвертируйте.
0 0010 2 | начало = 2 10 |
0 2 | без изменений |
10 2 | нет изменений, но встречается одно |
110 2 | инвертировать = изменить 0 на 1 |
1110 2 | инвертировать = изменить 0 на 1 |
1 1110 2 | инвертировать = изменить 0 на 1 |
Вычитание в дополнении до двух аналогично сложению. Никакой корректировки не требуется, и в дополнении до двух нет шизофренического нуля , хотя у него есть дополнительное отрицательное число (см. Как это работает).
0 1010 2 10
+1 1110 2 +(-2)
0 1001 2 8
Примеры:
Проблема | 33 10 – 19 10 = 14 10 | 69 10 – 84 10 = -15 10 |
0 100001 2 + 1 101101 2 _______________ 0 001110 2 | 0 1000101 2 + 1 0101100 2 _______________ 1 1110001 2 | |
Чек | преобразовать в промежуточную базу E 16 = 14 10 | преобразовать обратно в знак величины – 0001111 2 преобразовать в промежуточную базу (16) – F 16 = – 15 10 |
Почему это работает
Реальные сумматоры имеют конечное число битов, что естественным образом приводит к арифметике по модулю — битовому ведру.
Переполнение
Теперь, когда арифметика сводится к хождению по кругу, положительные числа могут суммироваться с отрицательными и наоборот. Два теста позволяют быстро проверить, существует ли состояние «переполнения».
Тест 1 = Если два числа отрицательные, а ответ положительный, произошло переполнение.
Тест 2 = Если два числа положительные, а ответ отрицательный, произошло переполнение.
Если бы компьютеры были калькуляторами, а мир был идеальным местом, мы бы закончили. Но это не так, поэтому мы продолжаем рассматривать несколько реальных проблем и их решения.
Коды символов ИЛИ нечисловая информация
Проблема с десятичными числами
Представление десятичных чисел в двоичном компьютере. Двоичное представление десятичного числа несколько лет назад могло быть «зашито» в арифметико-логическое устройство (АЛУ) компьютера. Сегодня он, скорее всего, просто представляет некоторую информацию, которая естественным образом представлена в базе 10, например, ваш студенческий билет.
Решение
В этой задаче нужно представить десять различных цифр. Использование 4 бит 2 4 или 16 комбинаций могут быть созданы. Используя 3 бита 2 3 или 8 комбинаций, можно создать. Таким образом, для представления одной десятичной цифры потребуется 4 бита. Здесь следует указать, как из 4 битов (0000–1111) можно создать 16 комбинаций, в то время как наибольшее числовое значение, которое может быть представлено, равно 15. Причина, по которой наибольшее числовое значение и количество комбинаций различаются, связана с ноль (0) является одной из комбинаций. Эта разница указывает на необходимость всегда следить за тем, мокрее вы работаете, ноль или один родственник, и что именно вы ищете — двоичное число или комбинации.
Наиболее распространенный способ представления десятичного числа называется двоично-десятичным кодом (BCD). Здесь каждое двоичное число соответствует своему десятичному эквиваленту, а числа больше 9 просто не допускаются. BCD также известен как код 8-4-2-1, поскольку каждое число представляет соответствующий вес двоичных цифр. Напротив, код Excess-3 представляет собой невзвешенный код, использовавшийся в более ранних компьютерах. Его кодовое назначение происходит от соответствующего двоично-десятичного кода плюс 3. Преимущество кода Excess-3 заключалось в том, что, дополняя каждую цифру двоичного кодового представления десятичной цифры (дополнение до 1), 9будет сформировано дополнение этой цифры. В следующей таблице перечислены все десятичные цифры и их эквиваленты в кодах BCD и Excess-3. Я также включил отрицательный эквивалент каждой десятичной цифры, закодированной с использованием кода Excess-3. Например, дополнение 0100 (1 десятичный знак) равно 1011, то есть 8 десятичных знаков. Вы можете найти больше десятичных кодов на странице 18 «Цифрового дизайна» М. Морриса Мано (текст курса).
Двоично-десятичный код (BCD) | Превышение-3 | |||
Десятичная цифра | Двоичный код 8-4-2-1 | Десятичная цифра | Двоичный код | 9 комплиментов |
0 1 2 3 4 5 6 7 8 9 Н/Д Н/Д Н/Д Н/Д Н/Д Н/Д | 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 | н/д Н/Д Н/Д 0 1 2 3 4 5 6 7 8 9 Н/Д Н/Д Н/Д | 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 | 1111 1110 1101 1100 1011 1010 1001 1000 0111 0110 0101 0100 0011 0010 0001 0000 |
Проблема с буквенно-цифровыми символами
Представляет буквенно-цифровые данные (строчные и прописные буквы алфавита (az, A-Z), цифровые числа (0-9) и специальные символы (возврат каретки, перевод строки, точка и т. д.). .).
Решение
Для представления прописных и строчных букв алфавита плюс десять цифр необходимо не менее 62 (2×26+10) уникальных комбинаций. 2 6 или 64 уникальные комбинации будут работать, для специальных символов останется только 2 комбинации. С другой стороны, код, использующий 7 бит, обеспечивает 2 7 или 128 комбинаций, что дает более чем достаточно места для алфавита, цифр и специальных символов. Итак, кто решает, какие бинарные комбинации каким символам соответствуют. Здесь нет «лучшего пути». Около тридцати лет назад IBM выпустила новую серию компьютеров, в которых для хранения одного символа использовалось 8 бит (2 8 = 256 комбинаций), и разработала расширенный двоично-десятичный код обмена (EBCDIC, произносится как ep-su-dec). для этой цели. Поскольку у IBM была почти монополия в области компьютеров, в то время другие производители компьютеров отказались принять EBCDIC, и именно так появился 7-битный американский стандартный код для обмена информацией (ASCII). В настоящее время ASCII принят практически всеми производителями микрокомпьютеров и мини-компьютеров. В таблице ниже показан частичный список кодов ASCII. На странице 23 текста перечислены все 128 кодов с пояснениями к управляющим символам.
ДЕКАБРЬ | ШЕСТИГР. | СИМВОЛ | ДЕКАБРЬ | ШЕСТИГР. | СИМВОЛ |
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | 20 21 22 23 24 25 26 27 28 29 2А 2Б 2С 2D 2Е 2F 30 31 32 33 34 35 36 37 38 39 3А 3Б 3С 3D 3Е 3F | ! » # $ % и ‘ ( ) * + , – * / 0 1 2 3 4 5 6 7 8 9 : ; ? | 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | 40 41 42 43 44 45 46 47 48 49 4А 4Б 4С 4Д 4Е 4F 50 51 52 53 54 55 56 57 58 59 5А 5Б 5С 5Д 5Е 5F | @ А Б С Д Е Ф Г Х я Дж К л М Н О 9 _ |
Слово «строка» обычно используется для описания последовательности символов, хранящихся в виде их числовых кодов (например, ASCII).
Хотя для ASCII требуется только 7 бит, в компьютерах стандартом является использование 8 бит, где крайний левый бит равен 0. Это позволяет вам кодировать еще 128 символов (включая такие символы, как греческие буквы), что дает вам расширенных символов. набор символов , просто заставив крайний левый бит быть 1. Это также может привести к компьютерной версии Вавилонской башни. В качестве альтернативы крайний левый бит может использоваться для обнаружения ошибок при передаче символов по телефонной линии. Что подводит нас к нашей следующей проблеме.
Synthesis
Хотя ASCII решает проблему связи между англоязычными компьютерами, как насчет японских, китайских или русских компьютеров, которые имеют разные, и во всех этих примерах, более крупные алфавиты?
Проблемы со связью
Двоичная информация может передаваться последовательно (по одному биту за раз) через какую-либо форму связи, такую как телефонная линия или радиоволна. Любой внешний шум, внесенный в среду, может изменить битовые значения с 1 на 0 или наоборот.
Решение
Самое простое и наиболее распространенное решение проблемы связи заключается в добавлении к отправляемой информации бита четности . Функция бита четности состоит в том, чтобы сделать общее количество отправляемых единиц либо нечетным (нечетная четность), либо четным (четная четность). Таким образом, если было отправлено любое нечетное количество единиц, но получено четное число единиц, вы знаете, что произошла ошибка. В приведенной ниже таблице показаны соответствующие биты четности (нечетные и четные), которые будут добавлены к 4-битному блоку данных.
Синтез
Что произойдет, если две двоичные цифры изменят значения битов? Можно ли разработать систему не только для обнаружения ошибок, но и для идентификации и исправления измененных битов? Один из наиболее распространенных кодов исправления ошибок был разработан Р. У. Хэммингом. Его решение, известное как код Хэмминга, можно найти в самых разных местах, от схемы оперативной памяти (ОЗУ) до телекоммуникационной линии космического корабля. Дополнительные сведения о кодах исправления ошибок см. на стр. 29.9 к 302 текста.
Хотя обнаружение ошибок — это хорошо, предотвращение их появления — еще лучше. Что, конечно же, подводит нас к нашей следующей проблеме.
Ошибка энкодера вала
Когда вал вращается, вам необходимо преобразовать его радиальное положение в двоично-цифровое число.
Решение
Тип кодера, который будет кратко описан ниже, преобразует положение вала в двоично-кодированное цифровое число. Это преобразование будет выполнено несколькими различными типами устройств; описываемый тип представляет устройства, используемые в настоящее время, и следует понимать, что более сложные кодеры могут обеспечить дополнительную точность. Кроме того, обычно возможно преобразовать физическое положение в электрический сигнал аналогового типа, а затем преобразовать этот сигнал в цифровую систему. Однако в целом можно построить более прямые и точные кодеры, исключив промежуточный этап преобразования физического положения в аналоговый электрический сигнал. На рисунке ниже показан диск с кодированными сегментами, соединенный с валом.
Энкодер может быть физически реализован с использованием электромеханической (щеточной) или электрооптической технологии. Предполагая электрооптическое решение, кодирующий диск состоит из полос, разделенных на прозрачные сегменты (заштрихованные области) и непрозрачные сегменты (незаштрихованные области). С одной стороны диска размещен источник света, а с другой стороны — набор из четырех фотоэлементов, расположенных так, что по одной ячейке находится за каждой полосой диска кодера. Если между источником света и светочувствительной клеткой находится прозрачный сегмент, будет получен результат 1; и если перед фотоэлементом находится непрозрачная область, будет выход O.
Существует одна основная проблема с показанным кодером: если диск находится в позиции, где выходное число меняется с 011 на 100, или в любой позиции, где несколько битов изменяют значение, выходной сигнал может стать неоднозначным. Как и в любом физически реализованном устройстве, как бы тщательно оно ни было изготовлено, кодер будет иметь ошибочные выходы в нескольких позициях. Если это происходит, когда 011 изменяется на 100, возможно несколько ошибок; значение может быть прочитано как 111 или 000, любое из которых является значением со значительными ошибками. Чтобы обойти эту трудность, инженеры используют код «Грей» или «единичное расстояние» для формирования диска кодера (см. предыдущий рисунок). В этом коде 2 бита никогда не меняют значения в последовательных закодированных двоичных числах. При использовании диска с кодировкой Грея 6 может быть прочитано как 7, а 4 как 5, но больших ошибок не будет. В таблице ниже показан список 4-битного кода Грея.
Десятичный | Серый Код |
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 0000 0001 0011 0010 0110 0111 0101 0100 1100 1101 1111 1110 1010 1011 1001 1000 |
Synthesis
Код Грея используется во множестве приложений, кроме энкодеров. Например, КМОП-схемы потребляют наибольший ток при переключении. Если одновременно переключается большое количество цепей, могут возникнуть нежелательные явления, такие как «отскок земли» и «помехи электромагнитных помех». Если транзисторы переключаются из-за каких-то последовательных явлений (например, подсчета), то этих нежелательных посетителей можно свести к минимуму, заменив взвешенный двоичный код кодом Грея.
Если входные данные для двоичной машины поступают от энкодера, использующего код Грея, каждое слово должно быть преобразовано в обычный двоичный или двоично-десятичный битовый эквивалент. Как это может быть сделано? Прежде чем вы сможете ответить на этот вопрос, вам нужно узнать о булевой алгебре — какое совпадение, это тема следующего раздела.
Набор инструкций ATmega328P (стр. 12-14)
Схема Arduino Proto-Shield
Рисунок: Arduino Proto-Shield
Устройство для сортировки и подсчета монет на базе Arduino
Аппаратные компоненты
Arduino Nano 3. 0 (с Atmega328) http://geni.us/ArduinoNanoV3 | х 1 | ||
TCRT5000 http://geni. us/TCRT5000 | х 8 | ||
Макетная мини самоклеящаяся красная | х 1 | ||
. 42 «8-значный Tn Tran http://geni.us/8digit7segmentDisplay | х 1 | ||
Соединительный провод — черный (22 AWG) | х 1 | ||
Кабель USB A/микро — 2 м Для подключения к Ардуино Нано | х 1 | ||
Pla 1,75 мм 1 кг Spl 3d нити серого цвета | х 1 |
Ручные инструменты и станки для изготовления
Паяльник | х 1 | ||
3д принтер | х 1 |
Эта машина предназначена для сортировки монет по их физическому размеру, а затем их подсчета для расчета общей стоимости по мере их сортировки.
После того, как вы составили список деталей (см. спецификацию). Вам нужно начать с печати основного корпуса сортировщика монет.
Я напечатал свой с толщиной слоя 0,15 мм, что привело к печати, которая заняла некоторое время, но с гладкими поверхностями, по которым могли перемещаться монеты.
Теперь мы установим семь чипов TCRT5000 вдоль нижней части отпечатка. Капля термоклея — это все, что требуется, чтобы удержать их на месте. Позиционирование не имеет большого значения.
У нас есть ограниченное количество контактов питания на Arduino Nano, поэтому, чтобы иметь возможность подключить все датчики, мы сначала соединим все контакты VCC TCRT5000, которые мы приклеили к корпусу. То же самое будет сделано и с их заземляющими контактами. Это приводит к тому, что они соединяются параллельно друг другу.
Используйте для этого несколько коротких (около 4 см) отрезков проволоки.
Теперь у нас установлено семь датчиков, нам нужны слайд и корпус датчика для монеты в 2 фунта (это еще одна деталь, которую вам нужно будет распечатать на 3D-принтере).
Перед тем, как приклеить эту деталь к остальной сборке, приклейте к ней дополнительный TCRT5000, но на этот раз он будет «вверх ногами».
Теперь аккуратно согните контакты на сенсорном модуле. Используйте для этого набор плоскогубцев и осторожно перемещайте их. Не перемещайте их назад и в четвертую сторону, так как их можно легко сломать.
Поскольку с контактами этого сенсорного модуля будет сложно работать позже, мы сейчас припаяем провод к его контактам VCC, GND и D0. Когда вы подготовите проволоку, она должна быть примерно на 5 см длиннее, чем длина основной печатной части корпуса.
Добавьте немного клея к основному корпусу и соедините полные направляющие в сборе за 2 фунта стерлингов (тот, к которому мы только что прикрепили сенсорный модуль). Когда вы расположите его, убедитесь, что верхняя сторона хорошо совпадает с траекторией, по которой должна скользить монета. Если он слишком высок, монета может застрять.
После того, как клей просочился, вы можете перевернуть сборку вверх дном и использовать еще немного горячего клея, чтобы закрепить провода в канале от модуля стоимостью 2 фунта стерлингов.
Теперь нам нужно вернуться к нашим первым семи датчикам и припаять провод к каждому из их контактов D0. Это тот, который даст нам ВЫСОКОЕ или НИЗКОЕ значение при обнаружении монет. Припаяйте каждый отдельно и убедитесь, что длина провода достаточна для того, чтобы он шел от датчика к концу с большой пустотой под ним.
Здесь будет наш Arduino, поэтому кабели должны быть достаточно длинными, чтобы добраться до него.
Чтобы все было аккуратно, мы пропустим провода датчиков (зеленые в моем примере) обратно через отверстие и протянем их по каналам.
Для модуля дисплея необходимо припаять 5 проводов к его 5 контактам. Когда модуль установлен в окончательное положение покоя, нам нужно припаять провода к контактам слева (куда я указываю). Затем они будут подаваться через внутренний туннель к макетной плате Arduino.
Теперь мы можем пропустить провода через все место, где будет установлен модуль. Если вы сделали все провода одного цвета, то пропускайте их по одному и маркируйте по мере их прохождения, чтобы вы знали, какой из них какой, когда будете подключать их к макетной плате Arduino.
Прежде, чем мы закончим одевать дисплей в рамку, рекомендую снять защитную полиэтиленовую пленку с дисплея (если она у вас есть).
Распечатайте рамку дисплея, а затем закрепите ее на месте, используя еще немного термоклея.
Осталось припаять два последних провода. На этот раз это к соединениям VCC и GRND самого первого TCRT5000. К ним уже подключены провода ко всем остальным модулям. Эти новые провода будут соединять их все с Arduino. Они должны быть около 10 см в длину.
Сложите эти два новых провода обратно внутрь корпуса, как мы делали это ранее со всеми остальными проводами.
Arduino Nano необходимо расположить на макетной плате так, чтобы у нас было как можно больше свободных контактов на стороне с подключением питания 5 В и 3 В, но при этом оставался один свободный ряд на другой стороне. Взгляните на следующее изображение.
Соединим провода между Arduino и дисплеем через макетную плату:
Arduino —> Модуль дисплея
D13 —> CLK
D10 —> CS
D11 —> DIN
GND -90 -> Земля
5V —> VCC
Затем вы можете взять провода питания и заземления (VCC и GND) от первого TCRT5000 и подключить их к 3,3 В и GRND на Arduino. Подключение питания от нашего датчика стоимостью 2 фунта стерлингов (самого дальнего) также необходимо подключить к тому же набору контактов на Arduino.
И последнее, но не менее важное: нам нужно соединить провода, идущие от контактов D0 наших датчиков, к соответствующим контактам на Arduino Uno:
Значение датчика —> Arduino Pin
5p —> D8
1p —> D6
20p —> D5
£1 —> D4
10p —> D2
2p —> D7
500002 9
£2 —> D12
Загрузите копию кода из этой статьи и подключите Arduino Nano, чтобы загрузить его.
Вы можете загрузить необходимую библиотеку из репозитория GitHub:
https://github. com/HobbyComponents/HCMAX7219
(Библиотека SPI является стандартной и поставляется с Arduino IDE.)
После загрузки кода откройте Serial Monitor. Проверить, что все работает, можно, воткнув какой-либо предмет (например, палец) в прорези для монет. Это должно вызвать отображение, и вы увидите текущий комментарий на последовательном мониторе.
Пока это работает как положено, мы можем закончить сборку. Распечатайте две детали основы и склейте их вместе.
Теперь нанесите немного клея по заднему периметру основания, а затем прикрепите к нему основную часть сборки. Убедитесь, что направляющие для монет совпадают вдоль передней части корпуса. Также рекомендуется сделать это с уже подключенным USB-кабелем, так как может быть сложнее добраться до USB-порта на Nano после того, как все будет собрано.
И все. Работа сделана, молодец!
Надеюсь, вам понравилось. Если да, взгляните на некоторые другие проекты, которые я разместил здесь, на Electromaker.