Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Робот-помощник AI с Arduino и Python

Компоненты и расходные материалы

Arduino Nano R3
× 1
Микро-серводвигатель SG90
× 1
Ультразвуковой датчик - HC-SR04 (общий)
× 1
PCBWay Custom PCB
https://www.pcbway.com/project/shareproject/Multi_functional_Robot_PCB__Mofiza_.html
× 1

Приложения и онлайн-сервисы

IDE Arduino

Об этом проекте

Введение:

Все мы знакомы с роботом-помощником «Джарвис» из фильмов «Железный человек» и сериала «Марвел». Программисты всегда мечтали сделать что-то самостоятельно. Сегодня я покажу простой способ сделать такого помощника, используя программирование на Python. Более того, я также сделаю физический аватар этого робота, чтобы всякий раз, когда мы разговаривали с роботом, он мог делать некоторые движения. Это будет более удивительно, чем просто программный робот. Потому что, если у него есть тело, это круто. Итак, сегодня мы научимся использовать программирование на Arduino и Python, чтобы создать AIrobot, который сможет управлять вашим компьютером и немного поболтать с вами. Давайте, ребята!

Почему я назвал робота «Желтуха»? Потому что я его покрасила в желтый, очень-очень желтый!

Детали:

Электроника -

  • Arduino Nano - 1x
  • Micro Servo Sg90 - 3x
  • Ультразвуковой датчик HCsr04– 1x

Тело -

  • ПВХ лист (желательно белый, лучше для окраски, я использовала синий)
  • Сервоколесо (для стойки)

Инструменты:

  • Резак
  • Ножницы
  • Горячий клей
  • Аэрозольная краска

Программное обеспечение -

  • Python3
  • Arduino.ide

Принцип:

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

Итак, основной код или AI-часть кода будет выполняться на компьютере, почему? Потому что он поддерживает python и имеет большую вычислительную мощность, чем маленький Arduino, а также, поскольку бот AI будет контролировать / автоматизировать некоторые задачи моего компьютера, он должен запускаться на моем компьютере. Итак, плата Arduinoboard подключена к моему компьютеру с помощью кабеля USB.

Идея состоит в том, чтобы запустить программу на Python, которая будет выполнять часть текста речи, обрабатывать текст, а также преобразовывать текст в речь. Означает, что робот будет слушать, понимать и отвечать. Для движения тела я сохранил некоторые движения (инкапсулированные в функциях) на плате Arduino. Функция для каждого движения выполняется кодом Python.

В качестве примера - если робот должен сказать «Привет / привет», код Python отправит байт «h», Arduino затем выполнит функцию hi (). Вот так просто.

Теперь, когда у вас есть идея, перейдем к следующему процессу.

Схемы и электроника

Схемы - это то, что раздражает большинство производителей. Если что-то пойдет не так, можно сжечь дорогие детали. Для этого я разработал печатную плату, которую можно использовать для создания множества проектов. Он имеет слот для карт Micro SD, слот для модуля Bluetooth, внешний источник питания 5 В, и все это работает от Arduino Nano.

Я разработал печатную плату с помощью EasyEDA и распечатал ее с помощью онлайн-сервиса PCBWay. Их обслуживание потрясающее. Я заказал использование мгновенного расчета стоимости печатной платы, и их система автоматически сделала все за меня. За 3 дня мне доставили доску из Китая в Бангладеш. Качество фантастическое, паяльная маска идеальна, линии / следы, отделка настолько хороша, насколько могла бы быть.

В любом случае, я использовал дорожки диаметром 300 мм, так как он может выдерживать ток 1 А.

Вы можете просто скачать файлы печатной платы отсюда.

Припой и тестовая схема:

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

Я не использую ни модуль Bluetooth, ни модуль TF, поэтому оставил их распаянными. Хорошо то, что я использовал 3 двигателя резервуара и один датчик сонара, все они легко получают питание от USB-кабеля, который мы подключаем для программирования Arduino. Это здорово, поскольку нам не нужно думать о другом источнике энергии.

Однако, если вы по-прежнему хотите использовать внешние батареи, выберите батареи Lipo 2 (7,4 В), и даже больше, и сервопривод сгорит.

Сделайте тело:

Я использовал лист ПВХ для изготовления корпуса, вы также можете использовать картон. Сначала сделал коробку для основной части, там основная плата и серводвигатели. Это похоже на изготовление коробок. Таким же образом проделали голову, проделали две дырочки под датчик (под глазки). Я добавил все нужные вам картинки. Я сделал одну руку как гаечный ключ, а другую как вилку. На самом деле я использовал заглушку и добавил ее к одной руке с помощью горячего клея.

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

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

Итак, после отделки кузова занимаемся покраской, затем ставим всю электронику.

Coding1 (Python):

Загрузите Python с этого сайта, не забудьте добавить python в свой путь при установке.

После установки Pythony вам нужно будет запустить некоторые команды из командной строки / терминала, чтобы установить библиотеки для распознавания речи, поддержки звука, преобразования текста в речь, автоматизации браузера, последовательной связи. Выполните эти команды -

  pip installspeechrecognitionpip установить pyaudiopip установить pyttsx3pip установить pywhatkitpip установить pyserial  

Затем загрузите код Python отсюда или скопируйте снизу. Направление на кодирование2 шага.

  "" "JAUNDICE:робот-помощник AI с Arduino и Pythona Автор:ashraf minhajmail:[email protected] Последнее редактирование:ноябрь 2020 г. Лицензия:Copyright (C) Ashraf Minhaj. Общая общественная лицензия (GPL3 +)" "" import speech_recognition as sr # библиотека распознавания голосаimport random # для выбора случайных слов из списка pyttsx3 # offline Text to Speechimport datetime # для получения даты и времениimport webbrowser # для открытия и выполнения веб-задачимпорт серийного номера # для последовательной связиimport pywhatkit # для дополнительной автоматизации в сети # Объявление имени робота (Пробуждающее слово) robot_name ='желтуха' # случайные слова listhi_words =['привет', 'привет', 'yo baby', 'salam'] bye_words =['пока', 'tata', 'hasta la vista' ] r_u_there =['are you there', 'you there'] # initilize thingsengine =pyttsx3.init () # инициализация текста в речевой движок # voices =engine.getProperty ('voices') # проверка голосов # engine.setProperty ( 'voice', voices [1] .id) # female voicelistener =sr.Recognizer () # инициализировать API распознавания речи # подключиться к NiNi mot или плата драйвера через последовательную связь попробуйте:port =serial.Serial ("COM15", 9600) print ("Физическое тело, подключено.") за исключением:print ("Невозможно подключиться к моему физическому телу") def listen ():"" "послушайте, что говорит пользователь" "" попробуйте:с sr.Microphone () в качестве источника:# получить ввод с микрофона print ("Talk>>) voice =listener.listen (source) # прослушать с микрофона command =listener.recognize_google (voice) .lower () # использовать google API # все слова в нижнем регистре - чтобы мы могли легко обрабатывать #command =command.lower () print (command) # искать слово пробуждения в начале if (command.split (' ') [0] ==robot_name):# если найдено слово пробуждения .... print ("[найдено слово пробуждения]") process (command) # вызов функции процесса для выполнения действия за исключением:passdef process (words) :"" "обработать то, что говорит пользователь, и предпринять действия" "" print (words) # проверить, получила ли он какую-либо команду # разбить слова в word_list =words.split ('') [1:] # разделить пробелом и игнорировать пробуждение -up word if (len (word_list) ==1):if (word_list [0] ==robot_name):talk ("Как можно Я вам помогу? ") # .Write (b'l ') return if word_list [0] ==' play ':" "" if команда для воспроизведения вещей, играть с YouTube "" "talk (" Хорошо, босс, играю " ) extension ='' .join (word_list [1:]) # поиск без командного слова port.write (b'u ') pywhatkit.playonyt (extension) port.write (b'l') return elif word_list [0] =='search':"" "if команда для поиска в Google" "" port.write (b'u ') talk ("Хорошо, босс, поиск") port.write (b'l') extension ='' .join (word_list [1:]) pywhatkit.search (extension) return if (word_list [0] =='get') and (word_list [1] =='info'):"" "if команда для получения информации" "" port.write (b'u ') talk ("Хорошо, я прав") port.write (b'u') extension ='' .join (word_list [2:]) # поиск без командных слов inf =pywhatkit.info (extension) talk (inf) # чтение из результата return elif word_list [0] =='open':"" "if команда для открытия URL-адресов" "" port.write (b'l ') talk (" Открытие, сэр ") url =f" http:// {'' .join (word_list [1:])} "# сделать так, чтобы URL-адрес webbrowser.open (url) возвращал elif word_list [0] =='uppercut':port.write (b'U ') elif word_list [0] ==' smash ':port.write (b's') elif word_list [0] =='punch':port.write (b'p ') # теперь проверьте для совпадений для слова в word_list:if word in hi_words:"" "если пользователь говорит привет / привет, поприветствуйте его соответствующим образом" "" port.write (b'h ') # отправить команду, чтобы помахать рукой talk (random.choice (hi_words) ) elif слово в bye_words:"" "если пользователь говорит до свидания и т. д." "" talk (random.choice (bye_words)) def talk (предложение):"" "поговорить / ответить пользователю" "" engine.say (предложение) engine.runAndWait () # запускаем приложение, пока True:listen () # запускаем прослушивание один раз  

Coding2 (Arduino):

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

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

Загрузите код отсюда скопируйте снизу.

  / ** JAUNDICE:робот-помощник AI с Arduino и Python *** * автор:ashraf minhaj * mail:[email protected]* Последнее редактирование:ноябрь 2020 г. * * Лицензия:Copyright (C) Ashraf Minhaj . * Стандартная общественная лицензия (GPL3 +) * / # include  Servo head; Servo l_hand; Servo r_hand; // определение контакта датчика сонара int trig =4; int echo =5; // получен байт данных val =""; void setup () {// поместите сюда ваш установочный код, чтобы запустить его один раз:head.attach (2); l_hand.attach (3); r_hand.attach (4); Serial.begin (9600); // для связи через последовательный порт с Python} void standby () {// все двигатели на эти позиции head.write (90); int r_pos =30; int l_pos =карта (r_pos, 0, 180, 180, 0); l_hand.write (l_pos); r_hand.write (r_pos);} void hi () {// все моторы в эти позиции head.write (90); int я =0; для (я =30; я <=170; я ++) {r_hand.write (я); задержка (5); } для (я =170; я> =100; я -) {r_hand.write (я); задержка (5); } для (я =100; я <=170; я ++) {r_hand.write (я); задержка (5); } для (я =170; я> =30; я -) {r_hand.write (я); задержка (5); } standby ();} void hands_up () {// делаем это для каждой команды (ничего особенного, просто немного шевелите руками) //head.write(150); // задержка (300); //head.write(90); int я =0; для (я =30; я <=170; я ++) {int r_pos =я; int l_pos =карта (r_pos, 0, 180, 180, 0); l_hand.write (l_pos); r_hand.write (r_pos); задержка (5); } задержка (600); для (я =170; я> =30; я -) {int r_pos =я; int l_pos =карта (r_pos, 0, 180, 180, 0); l_hand.write (l_pos); r_hand.write (r_pos); задержка (5); }} void weight_lift () {// поднимаем вес обеими руками int i =0; для (я =30; я <=170; я ++) {int r_pos =я; int l_pos =карта (r_pos, 0, 180, 180, 0); l_hand.write (l_pos); r_hand.write (r_pos); задержка (5); } for (int count =0; count <=4; count ++) {for (i =170; i> =60; i -) {int r_pos =i; int l_pos =карта (r_pos, 0, 180, 180, 0); l_hand.write (l_pos); r_hand.write (r_pos); задержка (5); } для (я =60; я <=170; я ++) {int r_pos =я; int l_pos =карта (r_pos, 0, 180, 180, 0); l_hand.write (l_pos); r_hand.write (r_pos); задержка (5); }} for (i =170; i> =30; i -) {int r_pos =i; int l_pos =карта (r_pos, 0, 180, 180, 0); l_hand.write (l_pos); r_hand.write (r_pos); задержка (5); }} void excus () {return;} void look_left () {// повернуть хед влево head.write (180);} void confused () {for (int count =0; count <=1; count ++) {head .write (30); r_hand.write (170); задержка (700); r_hand.write (30); head.write (120); l_hand.write (30); задержка (700); l_hand.write (160); } standby ();} void double_punch () {// нанесем удар int i =0; для (я =30; я> =0; я -) {int r_pos =я; int l_pos =карта (r_pos, 0, 180, 180, 0); l_hand.write (l_pos); r_hand.write (r_pos); задержка (5); } задержка (2000); int r_pos =80; int l_pos =карта (r_pos, 0, 180, 180, 0); l_hand.write (l_pos); r_hand.write (r_pos); задержка (500); standby ();} void r_upper_cut () {// делаем правый верхний разрез int i =0; для (я =30; я <=170; я ++) {int r_pos =я; int l_pos =карта (r_pos, 0, 180, 180, 0); l_hand.write (l_pos); r_hand.write (r_pos); задержка (5); } для (int count =0; count <=4; count ++) {int i =0; для (я =170; я> =60; я -) {r_hand.write (я); задержка (1); } для (я =60; я <=170; я ++) {r_hand.write (я); задержка (1); } } поддерживать(); delay (100);} void smash () {// разбиваем вещи int i =0; для (я =30; я <=170; я ++) {int r_pos =я; int l_pos =карта (r_pos, 0, 180, 180, 0); l_hand.write (l_pos); r_hand.write (r_pos); задержка (5); } задержка (2000); для (я =170; я> =0; я -) {int r_pos =я; int l_pos =карта (r_pos, 0, 180, 180, 0); l_hand.write (l_pos); r_hand.write (r_pos); задержка (1); } задержка (300); int r_pos =180; int l_pos =карта (r_pos, 0, 180, 180, 0); l_hand.write (l_pos); r_hand.write (r_pos); задержка (1000); standby ();} void eye_detect () {// что-то делать, если датчик глаза обнаруживает движение return;} void loop () {// помещаем сюда ваш основной код, чтобы запускать его повторно:standby (); while (Serial.available ()> 0) // ищем доступные последовательные данные {val =Serial.read (); // считываем серийное значение if (val =='h') {// делаем привет hi (); } if (val =='p') {// привет double_punch (); } если (val =='u') {hands_up (); задержка (3000); } если (val =='l') {режим ожидания (); посмотри налево(); задержка (2000); } if (val =='U') {// апперкот r_upper_cut (); задержка (2000); } если (val =='s') {smash (); задержка (2000); }}}  

Загрузите код.

Собираем все вместе и готово:

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

Спасибо!

Код

Исходный код
https://github.com/ashraf-minhaj/JAUNDICE-AI-Assistant-Robot

Схема


Производственный процесс

  1. Создание роботов с Raspberry Pi и Python
  2. Создайте своего робота для видеостриминга, управляемого через Интернет, с помощью Arduino и Raspberry Pi
  3. type() и isinstance() в Python с примерами
  4. Система посещаемости с использованием Arduino и RFID с Python
  5. Робот с сервомотором избегает препятствий
  6. Управление роботом Roomba с помощью Arduino и устройства Android
  7. Управление серводвигателем с помощью Arduino и MPU6050
  8. u-blox LEA-6H 02 GPS-модуль с Arduino и Python
  9. Распознавание и синтез речи с помощью Arduino
  10. Автономный домашний робот-помощник