Работа схемы
Проектируемый нами робот, управляемый с помощью жестов рук и акселерометра, функционально разделен на две части:
- Передающая часть.
- Приемная часть.
Передающая часть робота состоит из радиочастотного передатчика и акселерометра. Как мы уже отмечали, акселерометр имеет аналоговые выходы – нам будет необходимо конвертировать аналоговые значения с этих выходов в цифровые данные. Для этой цели мы в схеме устройства будем использовать 4-х канальный компаратор вместо использования аналого-цифрового преобразования (АЦП). При помощи установки опорного напряжения компаратора мы получаем на его выходе цифровой сигнал, затем этот сигнал мы подаем на кодер (кодирующее устройство) HT12E чтобы закодировать данные или преобразовать их в последовательную форму и затем передать их с помощью высокочастотного передатчика в окружающую среду.
На приемном конце мы будем использовать радиочастотный приемник для приема этих данных, которые затем мы будем подавать на декодер HT12D. Этот декодер конвертирует полученные данные в последовательной форме в параллельную форму которые потом считываются платой Arduino. В соответствии с принятыми данными мы будем управлять движением робота с помощью двух электромоторов: двигаться вперед, назад, поворачивать вправо и влево, останавливаться.
Робот, управляемый с помощью жестов рук, будет двигаться в соответствии с положением передатчика в наших руках. Когда мы будем наклонять руку вперед робот будет двигаться прямо и будет продолжать двигаться прямо до тех пор пока не получит очередную команду.
Когда мы будем отклонять руку в обратную сторону (назад), робот изменит направление своего движения на противоположное (назад) и будет двигаться в этом направлении пока не получит следующую команду.
Когда мы будем наклонять руку вправо робот тоже будет поворачиваться вправо до получения очередной команды.
Когда мы будем наклонять руку влево робот тоже будет поворачиваться влево до получения очередной команды.
Для остановки робота необходимо удерживать руку в неизменном положении.
Схема передающей части робота и ее внешний вид представлены на следующих рисунках.
Схема приемной части робота представлена на следующем рисунке.
Пара радиочастотных модулей (передатчик и приемник) используются для передачи и приема команд управления роботом. Приемник через декодер подсоединен к Arduino. Управление двумя двигателями постоянного тока производится с помощью драйвера мотора L293D, подсоединенного к Arduino. Соответственно контакты драйвера мотора 2, 7, 10 и 15 подсоединены к цифровым контактам Arduino 6, 5, 4 и 3. Один из двигателей постоянного тока подключен к выходным контактам 3 и 6 драйвера мотора, а другой двигатель – к контактам 11 и 14 драйвера мотора. Для питания драйвера мотора используется батарейка 9 В.
Шаг 6: Сцена «Камера».
Сначала откройте сцену «Камера». Если Вы посмотрите на сценарий сервера ARCamera, то поймёте что принцип работы в том что берется видео-канал от Vuforia и передает его на компьютер через TCP.
Сцена «контроллера» — это то, что получает видеопоток, а также позволяет использовать клавиши со стрелками для управления роботом. Прежде чем Вы сможете использовать это, убедитесь, что ваш телефон и компьютер подключены к одной и той же сети WIFI. Перейдите в игровой объект videoClient и разместите там IP-адрес вашего телефона. Теперь перейдите на объект игры и введите IP-адрес Node MCU в сценарий отправки сообщения.
Инструкция для запуска сцены не простая, для начала нужно запустить сцену «камеры» на вашем телефоне (мы перейдем к этому позже), а затем, когда она уже запущена, нажмите кнопку воспроизведения на сцене контроллера в редакторе и Вы должны получить контроль над управлением робота. Качество картинки является сверхнизким для производительности, но вы можете изменить его в сценарии сервера сцены «камеры», если хотите.
Шаг 7. Программирование Arduino
Вы можете скачать или скопировать код ниже:
# include <Servo.h> //PWM OUTPUT VARIABLES Servo pin2; Servo pin3; Servo pin4; Servo pin5; Servo pin6; //SERIAL USB BUFFER char inData; // Allocate some space for the string char inChar; // Where to store the character read byte index = 0 ; // Index into array; where to store the character void setup () { //START PIN OUTPUT pin2. attach ( 2); // attaches the servo on pin 9 to the servo object pin3. attach ( 3); pin4. attach ( 4); pin5. attach ( 5); pin6. attach ( 6); //SEND MINIMAL VAUE 1000, REGUIRED FOR ESC TO ARM (max is 2000) pin2. writeMicroseconds (1000 ); pin3. writeMicroseconds (1000 ); pin4. writeMicroseconds (1000 ); pin5. writeMicroseconds (1000 ); pin6. writeMicroseconds (1000 ); //INIT SERIAL COMMUNICATION WITH ANDROID Serial. begin (115200 ); } void loop () { if (Serial. available () > 0 ){ //WAIT FOR INCOMMING DATA BUFFER TO FILL if (index < 24){ inChar = Serial. read (); // Read a character inData = inChar; // Store it index ++; // Increment where to write next if (inChar == 'X' ) index = 0 ; inData = '\0' ; // Null terminate the string } } if (index ==24 ){ index = 0; //STRING LOOKS LIKE "A100B96C20D0E" WHERE LETTERS ACT AS DELIMINATOR //STRING CAN CONTAIN SINGLE VALUE LIKE "B96C" String buf = String (inData); int ia = buf. indexOf ( "A", 0); int ib = buf. indexOf ( "B", 0); int ic = buf. indexOf ( "C", 0); int id = buf. indexOf ( "D", 0); int ie = buf. indexOf ( "E", 0); int iff = buf. indexOf ("F" , 0 ); Serial. print ("|" ); //A?B if (ia!=- 1 && ib!=- 1){ //1. CONVERT VALUE TO INTEGER //2. CONVERT 0-100 TO 1000 - 2000 //3. WRITE TO ARDUINO PIN NUMBER 2 pin2. writeMicroseconds (map (buf. substring (ia+ 1, ib). toInt (), 1, 100 , 1000 , 2000 )); //SEND RESPONSE TO ANDROID Serial. print ( "RESPONSE:OK" ); } //B?C if (ib!=- 1 && ic!=- 1){ pin3. writeMicroseconds (map (buf. substring (ib+ 1, ic). toInt (), 1, 100 , 1000 , 2000 )); //Serial.print("PIN3 OK"); } //C?D if (ic!=- 1 && id!=- 1){ pin4. writeMicroseconds (map (buf. substring (ic+ 1, id). toInt (), 1, 100 , 1000 , 2000 )); //Serial.print("PIN4 OK"); } //D?E if (id!=- 1 && ie!=- 1){ pin5. writeMicroseconds (map (buf. substring (id+ 1, ie). toInt (), 1, 100 , 1000 , 2000 )); //Serial.print("PIN5 OK"); } //E?F if (ie!=- 1 && iff!=- 1){ pin5. writeMicroseconds (map (buf. substring (ie+ 1, iff). toInt (), 1 , 100 , 1000 , 2000 )); //Serial.print("PIN6 OK"); } Serial. print ("|00" ); Serial. print ("\n" ); } } void logg (){ }
Conclusion
Out of all the listed robots in our list, ELEGOO Project Smart Robot Car Kit is the best pick. It has great features like the Line tracking, ultrasonic sensors and can be controlled using an IR remote or a mobile phone as well. A great STEM classroom level robo kit to teach kids of the age 12 or above programming, it also comes with a rechargeable battery. Moreover, it has a 1 year manufacturer’s warranty which almost no electronics components come with.
All of these and the high quality of the robot kit make it one of the best DIY robot kits for beginners. While these were our choices, we are interested in hearing from you. Did we miss out on anything? Do you want us to add something? Or do you have any questions related to Arduino kits or any other robot kits? If so, feel free to write to us in the comments section below. Our team will write back to you as soon as possible.
Руководство по покупке комплектов роботов Arduino
Перед выбором комплектов роботов Arduino, которые удовлетворяют вашим требованиям, необходимо учитывать следующие факторы.
1. Стоимость
Цена является наиболее важным фактором, который вы должны учитывать, когда вы решите приобрести наборы роботов Arduino. Вы должны ориентироваться на ту стоимость, которую вы может себе позволить. Кроме того, проверьте лучшие характеристики, которые предлагает приобретаемый продукт.
Если вы не готовы тратить больше денег, вы можете приобрести набор среднего класса, так же представленные в нашем рейтинге.
2. Умная навигация
В настоящее время все электронные устройства оснащены функцией интеллектуальной навигации. Без этой функции ни один производитель не выпускает продукт на рынке. Это стало очень важным, потому что вы можете просто управлять устройством одним касанием даже в сложные моменты.
Когда вы включаете режим интеллектуальной навигации, робот автоматически начинает двигаться в направлениях влево-вправо, вперед-назад. Он может даже ползать и прыгать, чтобы избегать препятствий, используя интеллектуальные технологии. Конечно эта функция увеличит стоимость робота Arduino.
3. Сборка
Пока мы рассматривали только цену и умную навигацию. Но есть и третий существенный фактор — сборка робота. Например, вы приобрели продукт и не можете с ним справиться или не знаете, как собрать комплект робота, и тогда вы быстро потеряете интерес к роботу и просто выкинете ваши деньги.
Лучшее предложение для вас — когда вы решите купить умный гаджет, особенно тот который требует сборки, получите полное представление об этом устройстве.
Если вы хотите приобрести предмет и не знаете, как его использовать, то покупка не имеет смысла.
4. Список деталей
Вы также должны проверить количество компонентов, представленных в комплекте. Потому что иногда в комплекте могут отсутствовать все необходимые для сборки детали.
Необходимые компоненты
- Приводной двигатель постоянного тока желтого цвета (Geared DC motor (Yellow coloured) ) – 2 шт.
- Два колеса.
- Соединительные провода.
- Напечатанный на 3D принтере скелет (остов) робота.
Микроконтроллер: в качестве управляющего микроконтроллера в данном проекте мы выбрали плату Arduino UNO потому что с ней просто работать. Вы можете также использовать платы Arduino Nano или Arduino mini, но мы все таки рекомендовали использовать бы Arduino UNO потому что ее можно программировать без использования внешнего аппаратного обеспечения.
Двигатели: конечно, лучшим выбором для построения самобалансирующегося робота были бы шаговые двигатели, но в целях упрощения проекта мы использовали приводные двигатели (gear motor) постоянного тока желтого цвета – они значительно проще и дешевле чем шаговые.
Колеса: не стоит недооценивать эти элементы конструкции робота. У нас достаточно долго не получалось настроить баланс робота пока мы не поняли что проблема состоит в колесах. Колеса для построения самобалансирующегося робота должны иметь очень хорошее сцепление с полом и ни в коем случае они не должны проскальзывать при движении по полу.
Батарея: для проекта необходима батарея, которая по возможности будет максимально легкой и ее напряжение должно быть больше 5V чтобы мы могли запитать от нее плату Arduino непосредственно, без использования повышающего напряжения модуля. Идеальным выбором в данном случае будет 7.4V Li-polymer (литий-полимерная) батарея. Но в нашем распоряжении была только 7.4V литий-ионная батарея, поэтому мы ее и использовали при создании робота. Но помните о том, что литий-полимерная батарея в данном случае будет все таки лучше чем литий-ионная.
Шасси робота: еще один элемент робота, при создании которого неуместны компромиссы. Для изготовления шасси робота вы можете использовать листы картона, дерево, пластик и т.п. Но помните о том, что шасси должно быть достаточно прочным и не изгибаться когда робот пытается балансировать. Мы для изготовления шасси робота использовали 3D принтер, ссылки на необходимые файлы для него будут приведены далее в статье.
Изготовление корпуса для робота-пылесоса
Мы решили сделать наш робот-пылесос круглой формы как и большинство современных коммерческих моделей роботов-пылесосов. В качестве материала для изготовления корпуса робота мы решили использовать MDF поскольку он достаточно прочный и имеет неплохую влагозащищенность. Разумеется, вы можете выбрать другой материал, какой вам больше по душе.
Для изготовления корпуса робота мы вырезали из MDF круг радиусом 8 см, а в нем отверстие радиусом 4 см – в него будет вставляться наш портативный пылесос. Также мы вырезали соответствующие отверстия под колеса и три небольшие отверстия для установки опорного валика (колеса). Далее мы установили двигатели с помощью кронштейнов, колеса и опорное колесо. Затем мы установили ультразвуковые датчики слева, справа и спереди робота. Также мы закрепили инфракрасный датчик снизу робота. И не забудьте установить в корпус робота выключатель питания. На следующем рисунке вы можете визуально посмотреть описанную последовательность шагов по сборке корпуса робота.
Для изготовления верхней части робота мы вырезали круг радиусом 11 см. Для скрепления верхней и нижней частей робота и обеспечения необходимого промежутка между ними мы использовали три пластиковых трубы длиной 4 см. Всю конструкцию мы скрепили с помощью клея. При желании боковые стенки робота вы можете изготовить из пластика или какого-нибудь другого материала.
SCARA Robot Circuit Diagram
So, we will use an Arduino UNO board in combination with a CNC shield and four A4988 stepper drives.
Although it’s a robot and it seems more complicated, that’s all electronics we need for this project. It’s worth noting that, instead of Arduino UNO, we could also use an Arduino MEGA in combination with a RAMPS 3D printer controller board.
Nevertheless, I 3D printed a case for the Arduino UNO which can be easily attached to the base of the robot. I will use quarter step resolution for driving the steppers, so I placed some jumpers in the appropriate pins. Now we can connect stepper motors and the micro switches to the CNC shield.
Here’s the circuit diagram of this SCARA robot and how everything need to be connected.
You can get the components needed for this project from the links below:
- Stepper Motor – NEMA 17……………… Amazon / Banggood / AliExpress
- A4988 Stepper Driver…………………..… Amazon / Banggood / AliExpress
- Arduino CNC Shield ………………………. Amazon / Banggood / AliExpress
- Arduino Uno………………………………..… Amazon / Banggood / AliExpress
- MG996R Servo Motor………………….…. Amazon / Banggood / AliExpress
- Limit Switch …………………………………. Amazon / Banggood / AliExpress
- DC Power Supply …………………………. Amazon / Banggood / AliExpress
Disclosure: These are affiliate links. As an Amazon Associate I earn from qualifying purchases.
For powering the robot, we need 12V power supply capable of providing minimum of 4A, but I would suggest 12V 6A power supply. Of course, this depends on how the stepper driver’s current limitation is set, and I would suggest to set it at lowest level possible.
At the end, I squeezed all the wires in the case, while trying to leave the drives heat sinks free, and added the cover to it.
Добавляем леску
Добавить леску — это, наверное, самая сложная и ответсвенная часть проекта робо-руки. На сайте InMoov есть инструкция на этот счет. Концепция простая, но реализовать ее практически не так то просто
Обратите внимание, что эта часть проекта требует сосредоточения и терпения. Единственное отличие моего варианта от конструкции на InMoov — использование клея
Благодаря этому мы можем получить возможность более губкой настройки при калибровке серв. Для этого достаточно расплавить клей и подтянуть нужные нам болты. Хотя, конечно же, надежность конструкции падает. В конце-концов, после окончательной настройки и калибровки, мы в любой момент можем использовать другой вариант фиксации.
Для калибровки сервомоторов, проверните роторы так, чтобы пальцы робо-руки лежали на столе. Подключите ваш Arduino и источник питания. Выставьте качалки приводов таким образом, чтобы в полностью «лежащем» состоянии руки натяжение было максимальным.
Объяснить процесс калибровки достаточно сложно. Кроме того, инструкция с InMoov мне, например, не подошла. То есть, при крепеже вам надо проявить фантазию и подстроиться под ваши реалии — как то: тип качалок, тип лески или ниток, погрешности конструкции и сборки, расстояние установки сервомоторов относительно суставов робо-руки.
К счастью — это последний этап проекта!
3D Printing the robot parts
All right, so we can move on with 3D printing the parts. I used my Creality CR-10 3D printer for printing all of the parts, which is really great 3D printer with an affordable price. As I mentioned, the parts are designed to fit on a smaller 3D printer as well, for example the Ender3.
For most of the parts I used PLA+ material, the blue one, as well as normal PLA for the pulleys and the gripper. It took me around 120 hours to print all of the parts at 60mm/s printing speed. The base was the biggest part to print which took around 32 hours. However, if we increase the printing speed, we can definitely print the parts faster.
See Also
Here are all of the 3D printed parts.
Just a quick note here, that I printed all of them with enabled Horizontal expansion of –0.1mm in the slicing software. This enables the parts to have more accurate dimensions, and fit better with the other mechanical parts like the bearings, the rods and the bolts.
3D печать и сборка роботизированной руки
Вначале мы пытались разработать дизайн этой руки самостоятельно, но потом обнаружили что на сервисе Thingiverse есть достаточно много потрясающих дизайнов подобных роботизированных рук и решили «не изобретать заново велосипед». Мы обнаружили, что роботизированная рука Robotic Arm V2.0 by Ashing будет прекрасно работать с сервомоторами MG995, поэтому она отлично подходит для нашего проекта.
Поэтому перейдите по приведенной ссылке на Thingiverse и скачайте там файлы модели этой руки. Всего рука содержит 14 компонентов для 3D печати, STL файлы для всех из них можно скачать по приведенной ссылке. Мы использовали программное обеспечение Cura 3.2.1 от Ultimaker для обработки STL файлов и 3D принтер TEVO tarantula для печати компонентов руки.
Дизайн всех компонентов этой руки достаточно прост, поэтому его можно напечатать практически на любом 3D принтере. У нас на печать всех компонентов руки ушло примерно 4,5 часа. Инструкция по сборке руки приведена на этой странице, поэтому в нашей статье не будем останавливаться на ней подробно.
Единственный момент, на который нам бы хотелось обратить внимание – возможно вам придется вручную подровнять (подшлифовать) края некоторых компонентов чтобы «втиснуть» туда сервомотор — обычно крепления для сервомоторов проектируются с таким расчетом, чтобы запихивать в них сервомоторы приходилось с некоторым усилием, так они будут лучше держаться. Вам понадобится 20 болтов диаметром 3 мм для сборки компонентов этой роботизированной руки
Перед тем как окончательно закрутить болты удостоверьтесь в том, что сервомоторам ничего не мешает вращаться в необходимых направлениях. Провода к трем сервомоторам вам придется тянуть снаружи конструкции руки, при необходимости удлинить эти провода можно использовать соединители папа-мама. Удостоверьтесь в том, что при работе руки эти провода не будут перекручиваться или каким либо другим образом мешать работе руки. После сборки у нас получилась рука следующего вида:
Схема проекта
Схема робота-пылесоса на основе платы Arduino представлена на следующем рисунке.
Для обнаружения препятствий мы в схеме робота используем три ультразвуковых датчика. Их контакты питания подключены к общему питанию схемы, а земля – к общему проводу схемы. Управляющие (trigger) и выходные контакты (echo pins) датчиков подключены к ШИМ (широтно-импульсная модуляция) платы Arduino. Инфракрасный датчик также запитывается от общих VCC и земли (ground) схемы, а его выходной контакт подключен к цифровому контакту D2 платы Arduino. У драйвера двигателя мы два его контакта, разрешающих его работу (enable pins), подключили к 5 В, также контакт подачи питающего напряжения мы подключили к 5 В поскольку мы используем электродвигатели, работающие от напряжения 5 В. Поскольку наш робот-пылесос запитывается от литий-ионной батареи напряжением 7.4 В, а все компоненты схемы питаются от напряжения 5 В, то для преобразования напряжения 7.4 В в напряжение 5 В мы используем регулятор напряжения LM7805.
Входные и выходные контакты
Робот имеет несколько коннекторов, которые устанавливаются на него еще на стадии производства и предназначены для подключения дополнительных компонентов. Определить месторасположение этих портов просто, т.к. рядом с каждым из них есть соответствующая надпись. Управление этими контактами осуществляется при помощи библиотеки Robot. Каждый из этих контактов может давать/принимать не более 40 миллиампер при 5 вольтах.
Некоторые из этих контактов имеют специальные функции:
- От TK0 до TK7 (на контрольной плате): эти контакты объединены в один аналоговый контакт на микропроцессоре контрольной платы. Их можно использовать в качестве входных аналоговых контактов для устройств вроде датчиков расстояния, ультразвуковых аналоговых датчиков или механических переключателей (для определения столкновений).
- От TKD0 до TKD5 (на контрольной плате): эти цифровые I/O контакты подключены напрямую к процессору, и работа с ними выполняется при помощи функций Robot.digitalRead() и Robot.digitalWrite(). Контакты с TKD0 по TKD3 можно также использовать в качестве входных аналоговых контактов при помощи функции функции Robot.analogRead().
Примечание: В ранних версиях Arduino Robot контакты «TKD» обозначены на плате как «TDK». Правильное название – это именно «TKD», и это то, как к этим контактам нужно обращаться в программном коде.
От TK1 до TK4 (на моторной плате): в программном коде эти контакты называются B_TK1, B_TK2 и т.д. Они могут быть и цифровыми, и входными аналоговыми контактами, и работа с ними осуществляется при помощи функций Robot.digitalRead(), Robot.digitalWrite() и функции Robot.analogRead().
- Последовательная коммуникация: Платы «общаются» друг с другом при помощи последовательного порта, и это осуществляется при помощи 10-контактного коннектора. Кроме того, этот коннектор обеспечивает питание и передает дополнительную информацию вроде данных о заряде батареек.
- Интерфейс SPI на контрольной плате: шина SPI используется для управления GTFT-дисплеем и SD-картой. Если вы хотите перезаписать процессор при помощи внешнего программатора, то сначала отключите дисплей.
- Светодиоды на контрольной плате: всего их три. Один сообщает, подается ли на плату питание (PWR), а два других сообщают о коммуникации по USB-соединению (LED1/RX и TX). Кроме того, доступ к LED1 можно получить через код.
- Порты I2C на обеих платах: три на контрольной плате и один на моторной плате.
Шаг 4: измерение угла наклона с помощью гироскопа
Гироскоп в MPU6050 измеряет угловую скорость (скорость вращения) вдоль трех осей. Для нашего самобалансирующегося робота угловая скорость вдоль оси x достаточна для измерения скорости падения робота.
Загрузите скетч Sketch2.ino. В нём считываются данные гироскопа по оси x, преобразуются в градусы в секунду, а затем умножаются на время цикла, чтобы получить изменение угла. Мы добавляем этот полученный угол к предыдущему углу, чтобы получить текущий угол.
Положение, в котором при запуске программы находится MPU6050 — это точка нулевого наклона. Угол наклона будет измеряться относительно этой точки.
Удерживайте робота под фиксированным углом и увидите, что значение угла не будет стабильным, он будет постоянно увеличиваться или уменьшаться. Это связано с дрейфом, который присущ гироскопу.
В приведенном выше коде время цикла вычисляется с помощью функции millis(), встроенной в Arduino IDE. Для более точных интервалов между считыванием данных, позже будет использоваться прерывание таймера. Этот интервал времени между считыванием данных также будет использоваться при в ПИД-регуляторе.
Исходный код программы
В программе мы первым делом инициализируем используемые контакты.
Далее мы устанавливаем режим работы этих контактов (на вывод данных) и инициализируем последовательный порт для работы на скорости 9600 бод/с.
Далее мы считываем информацию из буфера последовательного порта с помощью функции “serial.read()” и сохраняем ее значение во временной переменной. А затем сравниваем значение этой переменной с используемыми инструкциями роботу с помощью оператора “if” и даем соответствующие команды роботу.
Далее представлен полный текст программы.
Arduino
#define m11 3
#define m12 4
#define m21 5
#define m22 6
void setup()
{
// конфигурируем контакты на вывод данных
pinMode(m11, OUTPUT);
pinMode(m12, OUTPUT);
pinMode(m21, OUTPUT);
pinMode(m22, OUTPUT);
Serial.begin(9600); // инициализация последовательного порта
}
void loop()
{
while(Serial.available())
{
char In=Serial.read(); // считываем значение из буфера последовательного порта и сохраняем его в переменной In
if(In==’f’ || In==’F’) // Forward (движение вперед)
{
digitalWrite(m11, HIGH);
digitalWrite(m12, LOW);
digitalWrite(m21, HIGH);
digitalWrite(m22, LOW);
}
else if(In==’b’ || In==’B’) //backward (движение назад)
{
digitalWrite(m11, LOW);
digitalWrite(m12, HIGH);
digitalWrite(m21, LOW);
digitalWrite(m22, HIGH);
}
else if(In==’l’ || In==’L’) // Left (влево)
{
digitalWrite(m11, HIGH);
digitalWrite(m12, LOW);
digitalWrite(m21, LOW);
digitalWrite(m22, LOW);
}
else if(In==’r’ || In==’R’) // Right (вправо)
{
digitalWrite(m11, LOW);
digitalWrite(m12, LOW);
digitalWrite(m21, HIGH);
digitalWrite(m22, LOW);
}
else if(In==’s’ || In==’S’) // stop (остановка)
{
digitalWrite(m11, LOW);
digitalWrite(m12, LOW);
digitalWrite(m21, LOW);
digitalWrite(m22, LOW);
}
else
{
}
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 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 64 65 |
#define m11 3 #define m12 4 #define m21 5 #define m22 6 voidsetup() { // конфигурируем контакты на вывод данных pinMode(m11,OUTPUT); pinMode(m12,OUTPUT); pinMode(m21,OUTPUT); pinMode(m22,OUTPUT); Serial.begin(9600);// инициализация последовательного порта } voidloop() { while(Serial.available()) { charIn=Serial.read();// считываем значение из буфера последовательного порта и сохраняем его в переменной In if(In==’f’||In==’F’)// Forward (движение вперед) { digitalWrite(m11,HIGH); digitalWrite(m12,LOW); digitalWrite(m21,HIGH); digitalWrite(m22,LOW); } elseif(In==’b’||In==’B’)//backward (движение назад) { digitalWrite(m11,LOW); digitalWrite(m12,HIGH); digitalWrite(m21,LOW); digitalWrite(m22,HIGH); } elseif(In==’l’||In==’L’)// Left (влево) { digitalWrite(m11,HIGH); digitalWrite(m12,LOW); digitalWrite(m21,LOW); digitalWrite(m22,LOW); } elseif(In==’r’||In==’R’)// Right (вправо) { digitalWrite(m11,LOW); digitalWrite(m12,LOW); digitalWrite(m21,HIGH); digitalWrite(m22,LOW); } elseif(In==’s’||In==’S’)// stop (остановка) { digitalWrite(m11,LOW); digitalWrite(m12,LOW); digitalWrite(m21,LOW); digitalWrite(m22,LOW); } else { } } } |