РОБОТ на базе: android, arduino, bluetooth. Рефлексный. Часть 2 / Хабр

РОБОТ на базе: android, arduino, bluetooth. Рефлексный. Часть 2 / Хабр Конструкторы

Android приложение шаг 2 – режим автономного управления роботом

Добавим в основное активити кнопку «b5» (автоуправление). Код приведен ниже:

Таким образом, основное activity примет вид:

РОБОТ на базе: android, arduino, bluetooth. Рефлексный. Часть 2 / Хабр

Объявим переменную b5:

Button b0, b1, b2, b3, b4, b5;


И флаг позволяющий определить включен режим автоуправления или нет:

boolean fl=false;

Находим ее по ID:

b5 = (Button) findViewById(R.id.b5);//Автоуправление

Создадим обработчик ее нажатия:

    b5.setOnClickListener(new OnClickListener() {
        	public void onClick(View v) {
        		Log.d(LOG_TAG, "НАЖАЛИ АВТОУПРАВЛЕНИЕ");
        		if (!fl){
        			Log.d(LOG_TAG, "Если флаг опущен");
        			fl=true;
	        		b1.setEnabled(false);
	        		b2.setEnabled(false);
	        		b3.setEnabled(false);
	        		b4.setEnabled(false);
	        		MyThred.sendData("1");
	        		Log.d(LOG_TAG, "Отправили 1");
        		}
        	}
        });


А также внесем изменения в обработчик кнопки «b0»(Стоп)

   b0.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
             MyThred.sendData("0");
             if (fl) 
             {
            	fl = false;
         		b1.setEnabled(true);
         		b2.setEnabled(true);
         		b3.setEnabled(true);
         		b4.setEnabled(true);
             }
            }
          });

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

 	  byte[] readBuf = (byte[]) msg.obj;	        	  
	              String strIncom = new String(readBuf, 0, msg.arg1);  
	              sb.append(strIncom);// формируем строку
	              int beginOfLineIndex = sb.indexOf("*");//определяем символы начала строки  
	              int endOfLineIndex = sb.indexOf("#");//определяем символы конца строки
	              //Если блок данных соответствует маске *данные# то выполняем код
	              if ((endOfLineIndex > 0) && (beginOfLineIndex == 0)) {                                           	            	  String sbprint = sb.substring(beginOfLineIndex 1, endOfLineIndex-3);               
	                  mytext.setText("Данные от Arduino: "   sbprint);            
	                  if (fl){
	                	  int dist = Integer.parseInt(sbprint);
		                  if (dist<50)
		                  {
		                	  MyThred.sendData("3");
		                	  
		                  }		         		                	
		                  else
		                  {
		                	  MyThred.sendData("1");
		                  }
	                  }
	              }
	              sb.delete(0, sb.length());  

Ниже приведен полный код Activity:

Код приложения Шаг 2
package com.robot.rob_2_3;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.UUID;

import com.robot.rob_2_3.R;

import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.app.Activity;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import android.bluetooth.*;
import android.content.Intent;

public class MainActivity extends Activity {
	private static final int REQUEST_ENABLE_BT = 1;
	final int ArduinoData = 1;        
	final String LOG_TAG = "myLogs";
	private BluetoothAdapter btAdapter = null;
	private BluetoothSocket btSocket = null;
	private static String MacAddress = "20:11:02:47:01:60"; // MAC-адрес БТ модуля
	private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
	private static final long MILLIS_PER_SECOND = 0;
	private ConnectedThred MyThred = null;
	public TextView mytext;
	Button b0, b1, b2, b3, b4, b5;
	boolean fl=false;
	Handler h;
	private StringBuilder sb = new StringBuilder();
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
				
		btAdapter = BluetoothAdapter.getDefaultAdapter();
		mytext = (TextView) findViewById(R.id.txtrobot);     
    	
        if (btAdapter != null){
        	if (btAdapter.isEnabled()){
        		mytext.setText("Bluetooth включен. Все отлично.");			
        	}else
        	{
        		Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        		startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
        	}
        	
        }else
        {
        	MyError("Fatal Error", "Bluetooth ОТСУТСТВУЕТ");
        }
        
        b0 = (Button) findViewById(R.id.b0);//Стоп
        b1 = (Button) findViewById(R.id.b1);//Вперед
        b2 = (Button) findViewById(R.id.b2);//Назад
        b3 = (Button) findViewById(R.id.b3);//Направо
        b4 = (Button) findViewById(R.id.b4);//Налево
        b5 = (Button) findViewById(R.id.b5);//Автоуправление
        
        b0.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
             MyThred.sendData("0");
             if (fl) 
             {
            	fl = false;
         		b1.setEnabled(true);
         		b2.setEnabled(true);
         		b3.setEnabled(true);
         		b4.setEnabled(true);
             }
            }
          });
        
        b1.setOnClickListener(new OnClickListener() {
          public void onClick(View v) {
           MyThred.sendData("1");
          }
        });
      
        b2.setOnClickListener(new OnClickListener() {
          public void onClick(View v) {
           MyThred.sendData("2");
          }
        });
 
        b3.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
             MyThred.sendData("3");
            }
          });
        
        b4.setOnClickListener(new OnClickListener() {
        	public void onClick(View v) {
        		MyThred.sendData("4");
        	}
        });
        
        b5.setOnClickListener(new OnClickListener() {
        	public void onClick(View v) {
        		Log.d(LOG_TAG, "НАЖАЛИ АВТОУПРАВЛЕНИЕ");
        		if (!fl){
        			Log.d(LOG_TAG, "Если флаг опущен");
        			fl=true;
	        		b1.setEnabled(false);
	        		b2.setEnabled(false);
	        		b3.setEnabled(false);
	        		b4.setEnabled(false);
	        		MyThred.sendData("1");
	        		Log.d(LOG_TAG, "Отправили 1");
        		}
        	}
        });
        
        h = new Handler() {
            public void handleMessage(android.os.Message msg) {
              switch (msg.what) {
              case ArduinoData:
	        	  byte[] readBuf = (byte[]) msg.obj;	        	  
	              String strIncom = new String(readBuf, 0, msg.arg1);  
	              sb.append(strIncom);// формируем строку
	              int beginOfLineIndex = sb.indexOf("*");//определяем символы начала строки  
	              int endOfLineIndex = sb.indexOf("#");//определяем символы конца строки
	              //Если блок данных соотвествует маске *данные# то выполняем код
	              if ((endOfLineIndex > 0) && (beginOfLineIndex == 0)) {                                            // если встречаем конец строки,
	            	  String sbprint = sb.substring(beginOfLineIndex 1, endOfLineIndex-3);               // то извлекаем строку
	                  mytext.setText("Данные от Arduino: "   sbprint);            
	                  if (fl){
	                	  int dist = Integer.parseInt(sbprint);
		                  if (dist<50)
		                  {
		                	  MyThred.sendData("3");
		                	  
		                  }		         		                	
		                  else
		                  {
		                	  MyThred.sendData("1");
		                  }
	                  }
	              }
	              sb.delete(0, sb.length());  	                                      
	              break;
              }
            };
          };
        
	}
	

	@Override
	public void onResume() {
	    super.onResume();
        if (btAdapter != null){
        	if (btAdapter.isEnabled()){      	  
			    BluetoothDevice device = btAdapter.getRemoteDevice(MacAddress);
			    Log.d(LOG_TAG, "***Получили удаленный Device***" device.getName());
			      
			    try {
			        btSocket = device.createRfcommSocketToServiceRecord(MY_UUID);
			        Log.d(LOG_TAG, "...Создали сокет...");
			      } catch (IOException e) {
			        MyError("Fatal Error", "В onResume() Не могу создать сокет: "   e.getMessage()   ".");
			      }	 
			    
			    btAdapter.cancelDiscovery();	    
			    Log.d(LOG_TAG, "***Отменили поиск других устройств***");
			    
			    Log.d(LOG_TAG, "***Соединяемся...***");
			    try {
			      btSocket.connect();
			      Log.d(LOG_TAG, "***Соединение успешно установлено***");
			    } catch (IOException e) {
			      try {
			        btSocket.close();
			      } catch (IOException e2) {
			        MyError("Fatal Error", "В onResume() не могу закрыть сокет"   e2.getMessage()   ".");
			      }
			    }
			   	  
			    MyThred = new ConnectedThred(btSocket);	    
			    MyThred.start();
        	}
        }
	  }
	
	  @Override
	  public void onPause() {
	    super.onPause();
	  
	    Log.d(LOG_TAG, "...In onPause()...");
	    
        if (btAdapter != null){
        	if (btAdapter.isEnabled()){       	
			    if (MyThred.status_OutStrem() != null) {
			        MyThred.cancel();
			    }		  
			    try     {
			      btSocket.close();
			    } catch (IOException e2) {
			    	MyError("Fatal Error", "В onPause() Не могу закрыть сокет"   e2.getMessage()   ".");
			    }
        	}
    	}
	  }//OnPause	
	
	private void MyError(String title, String message){
		    Toast.makeText(getBaseContext(), title   " - "   message, Toast.LENGTH_LONG).show();
		    finish();
	}

	  
	 //Отдельный поток для передачи данных  
	 private class ConnectedThred extends Thread{
		 private final BluetoothSocket copyBtSocket;
		 private final OutputStream OutStrem;
		 private final InputStream InStrem;
		 
		 public ConnectedThred(BluetoothSocket socket){
			 copyBtSocket = socket;
			 OutputStream tmpOut = null;
			 InputStream tmpIn = null;
			 try{
				 tmpOut = socket.getOutputStream();
				 tmpIn = socket.getInputStream();
			 } catch (IOException e){}
			 
			 OutStrem = tmpOut;
			 InStrem = tmpIn;
		 }
		 
		 public void run()
		 {
			 byte[] buffer = new byte[1024];
			 int bytes;
			 
			 while(true){
				 try{
					 bytes = InStrem.read(buffer);
					 h.obtainMessage(ArduinoData, bytes, -1, buffer).sendToTarget();
				 }catch(IOException e){break;} 
				 
			 } 
			 
		 }
		 
		 public void sendData(String message) {
			    byte[] msgBuffer = message.getBytes();
			    Log.d(LOG_TAG, "***Отправляем данные: "   message   "***"  );
			  
			    try {
			    	OutStrem.write(msgBuffer);
			    } catch (IOException e) {}
		}
		 
		 public void cancel(){
			 try {
				 copyBtSocket.close();
			 }catch(IOException e){}			 
		 }
		 
		 public Object status_OutStrem(){
			 if (OutStrem == null){return null;		
			 }else{return OutStrem;}
		 }
	 } 
}

Созданное приложение для андроида в связке с представленным скетчем ардуино, позволяет, как удаленно самостоятельно управлять роботом, так и включать режим автономного управление, при котором робот передвигается в прямом направлении и если требуется, объезжает препятствия.

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

ИТОГ: 524,65

В комментариях к предыдущей статье, хабра пользователь commanderxo порекомендовал не изобретать велосипед, а воспользоваться стандартным протоколом Firmata (протокол для обмена данными между ардуино и сервером). К сожалению работоспособной библиотеки, для андроида в связке с БТ, я не нашел.

Абстрагирование среды


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

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

2) Детерминированная. Если следующее состояние среды полностью определяется текущим состоянием и действием, выполненным роботом, то такая среда называется детерминированной; в противном случае она является стохастической.

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

4) Статическая. Если среда может измениться в ходе того, как робот выбирает очередное действие, то такая среда называется динамической для данного робота; в противном случае она является статической.

5) Непрерывная — Различие между дискретными и непрерывными вариантами среды может относиться к состоянию среды, способу учета времени, а также восприятием и действиям агента. В нашем случае считается что состояние среды меняется непрерывно. К примеру игра в шахматы является дискретной, так как имеет конечное количество различных состояний.

6) Одноагентная это среда в которой находится один объект(робот), и другие объекты на него не влияют и не конкурируют с ним.

Курсовая работа найти разработка роботизированного процесса сварки

  • Анализ компоновочной схемы роботизированного технологического комплекса. Расчет геометрических и кинематических параметров. Построение циклограммы технологических средств производства. Особенность определения коэффициентов загрузки оборудования.

    курсовая работа, добавлен 23.12.2023

  • Экономическое обоснование выбора вида и способа сварки. Разработка маршрута сборки и сварки узла. Расчет нормы времени на все операции технологического процесса. Выбор сварочного приспособления, вспомогательного инструментов на операции техпроцесса.

    курсовая работа, добавлен 03.05.2023

  • Тип и форма организации производства, классификация и кодирование деталей. Выбор технологического оборудования, промышленного робота и вспомогательных устройств. Составление циклограммы работы механизмов и организационно-технические разработки.

    курсовая работа, добавлен 17.07.2023

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

    реферат, добавлен 27.04.2023

  • Анализ свариваемости трубы из углеродистой стали. Выбор вида автоматической сварки для изготовления шва с заданными свойствами. Разработка технологического процесса согласно расчетам и операциям по ЕСТД. Выбор оборудования и методов оптимизации сварки.

    дипломная работа, добавлен 27.11.2023

  • Описание сварной конструкции. Выбор способа сварки, сварочных материалов и сварочного оборудования. Нормирование технологического процесса. Химический состав материала Ст3пс. Расчет затрат на проектируемое изделие. Карта технологического процесса сварки.

    курсовая работа, добавлен 26.02.2023

  • Обоснование автоматизации роботизированного технологического комплекса штамповки. Анализ путей автоматизации. Разработка системы и структурной схемы управления РТК. Выбор технических средств. Электромагниты, автоматические выключатели и источники питания.

    курсовая работа, добавлен 23.01.2023

  • Определение свариваемости применяемых материалов, подбор присадочных материалов и оборудования. Узел приварки верхнего днища и верхней обечайки. Расчет режима ручной дуговой сварки. Карта технологического процесса сварки узла А Ar-С17 по ГОСТ 14771-76.

    курсовая работа, добавлен 20.02.2023

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

    курсовая работа, добавлен 09.01.2023

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

    дипломная работа, добавлен 15.02.2023

  • Особенности роботизации сварочного производства в судостроении

    УДК 621.791-529:629.5

    Нгуен Доан Кыонг, В. Н. Лубенко

    ОСОБЕННОСТИ РОБОТИЗАЦИИ СВАРОЧНОГО ПРОИЗВОДСТВА

    В СУДОСТРОЕНИИ

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

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

    При изготовлении стальных судовых корпусных конструкций средний уровень такого (исправимого) брака составляет 1,0—1,5 % по длине вырубленных швов или 5-7 % по количеству у-снимков с недопустимыми дефектами.

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

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

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

    Рис. 1. Состав РТК для сварки

    Задача автоматизации перемещения сварочной дуги по заданной или необходимой траектории может считаться решенной для многих видов сварки, а задача адаптивного управления процессом сварки еще далека от своего разрешения [1].

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

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

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

    – плоскостные, кривые поверхности с большими габаритами (полотнища палуб, платформ второго дна, обшивка бортовой и днищевой секции);

    – листовые типа тел вращения (резервуары, трубы);

    – каркасно-решетчатые (плоские и объемные фермы, каркасы шкафов, лестницы между палубами и другие конструкции, состоящие из стержневых элементов различного профиля);

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

    – корпусные, изготовляемые с использованием заготовок из листа, сортового проката, поковок, отливок, штамповок (станины, пиллерсы между палубами или платформами, корпуса редукторов);

    – различные детали машин (сварные валы, шкивы, шестерни, рукоятки, рычаги управления, мелкие кронштейны).

    Эффективность применения сварочных роботов в значительной степени зависит от рационального выбора сварных конструкций в качестве объектов роботизированной сварки. Среди сварных конструкций, изготовляемых с применением дуговой сварки, которая выполняется с использованием ручного труда, преобладают каркасно-решетчатые; рамные; корпусные; различные детали машин.

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

    Существуют многофункциональные автоматизированные установки для различных видов дуговой сварки: системы Аппрентис фирмы Кемппи для дуговой сварки в защитных газах (рис. 2), система ABW фирмы ESAB для дуговой сварки под флюсом секций котлов [2], сварочный контроллер с использованием сенсора MetaTorck MS900 для сварки неплавящимся электродом в ракетостроении [3]. В то же время подобные системы пока достаточно редки. Основными причинами, сдерживающими их широкое применение, являются значительные трудности при разработке математических моделей и алгоритмов управления процессом формирования сварного шва и отсутствие надежных средств контроля положения и геометрических размеров стыка.

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

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

    Способы сварки плавящимся электродом в защитных газах стальных судовых корпусных конструкций используют в основном для выполнения швов тавровых соединений в любом пространственном положении. В этом случае перспективным является автоматическое управление процессом сварки плавящимся электродом диаметром 1,2—1,4 мм с помощью промышленного сварочного робота, выполняющего в пространстве движения, аналогичные движениям человеческой руки [5].

    Эффективность применения сварочных роботов зависит от технологичности сварных конструкций.

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

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

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

    Указанные обстоятельства требуют решения следующих задач: выбор способа дуговой сварки для робототехнических комплексов дуговой сварки (РТКДС); выбор пространственного положения свариваемых соединений; выбор методов и технических средств надежного зажигания дуги и качественной заварки кратера; оптимизация режима сварки; выбор приемов сварки в разных пространственных положениях.

    Основными требованиями к РТКДС, связанными с особенностями сварочного производства и объектов дуговой сварки, являются:

    – наличие манипуляционной системы со значительным числом степеней подвижности (5—8 и более), обеспечивающей заданные перемещения сварочного инструмента и изделия;

    – необходимость применения в большинстве случаев методов и средств автоматической корректировки траектории движения сварочного инструмента относительно изделия и параметров режима сварки индивидуально для каждого экземпляра сварной конструкции;

    – защита механизмов и средств автоматизации РТКДС от воздействий сварочного процесса и условий сварочного производства;

    – использование в РТКДС наиболее производительных сварочных процессов.

    К манипуляционным системам РТКДС предъявляют следующие основные требования:

    – необходимые размеры зоны обслуживания;

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

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

    – достаточная скорость перемещения или вращения звеньев;

    – необходимая грузоподъемность;

    – обеспечение заданной точности отработки заданных положений или траекторий движения.

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

    – изделие не изменяет своей ориентации в пространстве в течение всей операции (остается неподвижным или равномерно движется по конвейеру), а сварочный инструмент выполняет все перемещения, необходимые для сварки. Данный способ может быть использован, когда все швы доступны для манипулятора (инструмента) или когда переориентация изделия затруднена;

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

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

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

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

    В качестве манипулятора сварочного инструмента в РТКДС, как правило, используют промышленные роботы, имеющие прямоугольную (ПКС) либо антропоморфную (АКС) кинематическую структуру. Основные достоинства и недостатки роботов с ПКС и АКС приведены в таблице.

    Тип робота Достоинства Недостатки

    ПКС Возможность обслуживания большой рабочей зоны Большое число вариантов компоновок при модульной конструкции Большие металлоемкость и занимаемое пространство Наличие механизмов преобразования вращательного движения в поступательное Необходимость защиты направляющих прямолинейного перемещения и передач Малые рабочие скорости перемещения и плохая динамика

    АКС Малая металлоемкость и небольшие собственные габаритные размеры Простота и компактность механизмов привода Отсутствие механизмов и направляющих прямолинейного перемещения Малая рабочая зона Высокие требования к динамическим свойствам привода Повышенные требования к точности передач из-за масштабирования погрешностей длиной зубьев

    Из данных таблицы однозначно следует, что предпочтительнее использовать в составе РТКДС антропоморфные роботы, особенно для сварки малогабаритных изделий. Что же касается манипуляционных структур с ПКС, то их целесообразно использовать совместно с антропоморфными роботами в качестве расширителей рабочей зоны (при сварке протяженных швов) либо позиционеров при сварке крупногабаритных изделий.

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

    Промышленный робот — это манипулятор с программным управлением. Использование предварительно подготовленных программ для РТКДС возможно только в случае, когда точность изготовления деталей и сборки такова, что отклонения программной траектории перемещения горелки от реального положения линий соединения свариваемых деталей, а также зазоры в соединениях будут укладываться в технологические допуски. Такая ситуация возможна только для малогабаритных изделий, точно собранных из прецизионных деталей и с высокой точностью установленных на сварочной позиции. Это достаточно редкий случай использования РТКДС, поэтому для «подгонки» технологической программы РТКДС к каждому конкретному изделию используют обучение и (или) адаптацию.

    В большинстве РТКДС используют программирование роботов методом обучения, обусловленным особенностями конструкции приводных механизмов.

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

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

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

    Средства адаптации оборудования для автоматизированной сварки принято разделять по решаемым задачам на два вида.

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

    Рис. 3. Амплитуда сварочной горелки в зависимости от угла разделки свариваемого соединения: а – при номинальном угле разделки: б – при более узкой разделке; в – при более широкой разделке;

    Ак – амплитуда колебаний; Акн – номинальная амплитуда колебаний; а – угол разделки; ан – номинальный угол разделки

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

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

    При автоматизации любого процесса дуговой сварки перед системой управления стоят еще две задачи:

    – наведение сварочной горелки на стык свариваемых деталей, в том числе нахождение точки окончания сварки предшествующего прохода;

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

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

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

    Указанное обстоятельство обусловливает необходимость поиска и применения простых, недорогих и в то же время типовых технических решений по роботизации сварочных операций. Одним из таких решений является применение агрегатно-модульного принципа создания РТК и их составных частей.

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

    СПИСОК ЛИТЕРА ТУРЫ

    1. Патон Б. Е. Проблемы комплексной автоматизации сварочного производства // Автоматическая сварка. – 1981. – № 1. – С. З-9.

    2. Ekelof B. Adaptiv malti-run submerged-are technology // Svetsaren. – 1998. – N 1. – P. З-6.

    3. Kolbe W. Universal Steam Tracking System for Are Welding and Similar Applications Industrial Robot // Svetsaren. – 1994. – N З. – P. ЗЗ-З5.

    4. Горбач В. Д. Основные положения программно-управляемой технологии электродуговой сварки плоских полотнищ. – М.: ВИМИ, 1999. – Вып. З. – 12 с.

    5. Горбач В. Д. Область применения роботизированной сварки при изготовлении судовых корпусных конструкций. – М.: ВИМИ, 1999. – Вып. З. – 22 с.

    6. Тимченко В. А., Сухомлин А. А. Роботизация сварочного производства. – Киев: Техника, 1988. – 175 с.

    Статья поступила в редакцию З1.01.2008

    PECULIARITIES OF WELDING ENGINEERING ROBOTIZATION IN SHIPBUILDING

    Nguyen Doan Cyong, V. N. Lubenco

    The advantages and disadvantages of arc welding robots with rectangular and anthropomorphic kinematic schemes are described. It is stated that the use of arc welding of anthropomorphic robots in the robot-technical complex is more suitable to the compact piece welding. Manipulation structures with rectangular kinematic scheme should be used together with anthropomorphic robots as a working zone expander (in extensive joint welding) or as a rotary indexing table in large-size article welding. It is noted that the application of aggregate modular approach to robot-technical complex and its parts creation will be effective in welding engineering in shipbuilding.

    Key words: welding, hull, robot, welding mode.

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


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

    Схема подключения показана на рисунке. Плюс тянем к зеленому, остальные протягиваем к минусу. Через резистор, установленный для устранения помех и отсутствия КЗ, подключаем провода к выходам A0-A2. Выбраны они просто из экономии остальных портов.

    Код дан с комментариями. Подключаем пины и опрашиваем их через digitarRead(). Если напряжение есть, вернется значение true. Далее смотрим, если результат означает, что колеса в крайних положениях, запрещаем дальнейший поворот в эту сторону.

    Небольшая хитрость: поскольку выходы на 5В и 3.3В понадобятся в будущем, можно поставить плюс на один из digital-пинов. Перед каждой проверкой угла выдавать ток через digitalWrite(whitePin), потом проверять угол и убирать ток.

    int speedTurn = 180; //скорость поворота, от 0 до 255
    
    //пины для определения поворота
    int pinRed = A0;
    int pinWhite = A1;
    int pinBlack = A2;
    
    int pinAngleStop = 12; //выводит ток на светодиод, если достигнут максимальный угол, нужен 
    //только для отладки 
    
    void setup() {
     //пины поворота на считывание
      pinMode(pinRed, INPUT);
      pinMode(pinBlack, INPUT);
      pinMode(pinWhite, INPUT);
    //светодиод 
      pinMode(pinAngleStop, OUTPUT);
    //пины драйвера двигателя, направление и скорость
      pinMode(angleDirection, OUTPUT);
      pinMode(angleSpeed, OUTPUT);
    
      Serial.begin(9600);
    }
    //функция вызывается из loop(), когда приходит команда с андроида
    void turn(int angle) {
      digitalWrite(pinAngleStop, HIGH); //выдаем ток на провод, подключенный к плюсу
      delay(5); //немного ждем, чтобы ток "успел" дойти
      
      if(angle > 149) {
            if( digitalRead(pinWhite) == HIGH && digitalRead(pinBlack) == LOW && digitalRead(pinBlack) == LOW) { 
              //если достигнуто крайне правое положение, выйти из функции не подавая ток, чтобы не 
              //сжечь мотор
              return;
            }
            //если угол не максимальный, поворачиваем
            digitalWrite(angleDirection, HIGH);
            analogWrite(angleSpeed, speedTurn);
      } else if (angle < 31) { 
            if(digitalRead(pinRed) == HIGH && digitalRead(pinBlack) == HIGH && digitalRead(pinWhite) == HIGH) {
              //если достигнуто крайне левого положение, выйти из функции не подавая ток, чтобы не 
              //сжечь мотор
              return;
            }
            //если угол не максимальный, поворачиваем
            digitalWrite(angleDirection, LOW);
            analogWrite(angleSpeed, speedTurn);
      }
      digitalWrite(pinAngleStop, LOW); //убираем ток с определителя угла
      delay(5);
    }
    

    Робомобиль на базе arduino mega 2560 с bluetooth управлением и автономным движением с объездом препятствий

    Представляю свой проект робомобиля на Arduino. На просторах интернета есть масса подобных статей, наткнувшись на одну из них решил реализовать увиденное со своими изменениями в конструкцию и функционал. Реализованы следующие возможности: управление робомобилем по Bluetooth со смартфона; автономное движение робомобиля с объездом препятствий.

    РОБОТ на базе: android, arduino, bluetooth. Рефлексный. Часть 2 / Хабр

    РОБОТ на базе: android, arduino, bluetooth. Рефлексный. Часть 2 / Хабр

    Для реализации нам понадобится:

    Комплект: рама, моторы, колёса, крепления (Car Chassis Kit for Arduino — фото)
    Arduino Mega 2560
    Motor Control Shield for Arduino L293D
    Сервопривод MG995
    Ультразвуковой дальномер HC-SR04
    Bluetooth модуль HC-05 JY-MCU
    Active High Level Buzzer Alarm / Speaker Buzzer Module
    Диоды для фар
    Соединительные провода
    Держатели для дальномера и Bluetooth модуля (делал сам)
    Блок питания (я взял от кассового аппарата)
    Приложение на Android для управления робомобилем по Bluetooth Arduino Bluetooth RC Car (фото, при подключении к Bluetooth модулю пин-код по умолчанию «1234»)

    Подключение комплектующих
    Процесс сборки

    К моторам припаиваем провода, обратите внимание, на всех нижних контактах у меня чёрные провода, на верхних — красные, не перепутайте полярность при подключении к Motor Shield.

    РОБОТ на базе: android, arduino, bluetooth. Рефлексный. Часть 2 / Хабр

    РОБОТ на базе: android, arduino, bluetooth. Рефлексный. Часть 2 / Хабр

    Крепим сервопривод к верхней части рамы, моторы к нижней, собираем раму, ставим колёса. Устанавливаем Motor Shield сверху Arduino Mega и крепим на раму, подключаем всё по схеме выше, заливаем соответствующий скетч (в конце статьи) — наслаждаемся.

    Управление по Bluetooth — устанавливаете приложение на свой смартфон, запускаете, подключаетесь (Connect) к Bluetooth модулю (при необходимости вводите пин-код); управлять можно классическим способом по стрелкам (Buttons), а так же в меню программы можно выбрать Accelerometer и управлять с помощью наклонов смартфона.

    Автономное движение с объездом препятствий — алгоритм следующий: дальномер измеряет расстояние впереди, если оно > 30 см (в скетче параметр const int vmindistance), то продолжаем двигаться вперед, если < 30 см, то: останавливаем моторы; крутим сервопривод на углы от 0° до 180° с шагом в 15° и измеряем расстояния на этих углах; заносим полученные значения в массив; поворачиваем сервопривод прямо на угол 90°; ищем в массиве позицию с максимальным значением данных; если это значение < 30 см, то едем назад, если > 30 см, то проверяем какому углу поворота сервопривода оно соответствует и в зависимости от этого поворачиваем влево или вправо.

    РОБОТ на базе: android, arduino, bluetooth. Рефлексный. Часть 2 / Хабр

    РОБОТ на базе: android, arduino, bluetooth. Рефлексный. Часть 2 / Хабр

    РОБОТ на базе: android, arduino, bluetooth. Рефлексный. Часть 2 / Хабр

    РОБОТ на базе: android, arduino, bluetooth. Рефлексный. Часть 2 / Хабр

    РОБОТ на базе: android, arduino, bluetooth. Рефлексный. Часть 2 / Хабр

    РОБОТ на базе: android, arduino, bluetooth. Рефлексный. Часть 2 / Хабр

    РОБОТ на базе: android, arduino, bluetooth. Рефлексный. Часть 2 / Хабр

    Небольшое видео

    Управление по Bluetooth:

    Автономное движение с объездом препятствий:

    Ссылки для скачивания:

    → Библиотека AFMotor
    Скетч — управление по Bluetooth
    Скетч — автономное движение с объездом препятствий
    Мануал по Bluetooth модулю HC-05

    Сборка робота и подключение всех модулей

    Собираем платформу (рис.2).

    РОБОТ на базе: android, arduino, bluetooth. Рефлексный. Часть 2 / Хабр

    Рисунок 2

    Подключаем двигатели к драйверу (рис. 3). По два двигателя на один разъем драйвера, т.е. двигатели левой стороны платформы к разъему “Motor B”, двигатели правой стороны — “Motor A”. Управление платформой будет произведено аналогично гусеничной. При движении вперед и назад все двигатели работают синхронно в одном направлении, при повороте направо двигатели правой стороны платформы останавливаются, а левой двигаются синхронно, при повороте налево двигатели левой стороны останавливаются, а правой двигаются синхронно.

    РОБОТ на базе: android, arduino, bluetooth. Рефлексный. Часть 2 / Хабр

    Рисунок 3

    Прикручиваем верхнюю часть платформы. Соединяем драйвер двигателей, ардуино, аккумуляторы, БТ модуль и ультразвуковой сенсор к макетной плате (рис.4)

    РОБОТ на базе: android, arduino, bluetooth. Рефлексный. Часть 2 / Хабр


    Рисунок 4

    Схема подключения представлена на (рис.5). Питание ардуино, ультразвукового сенсора и драйвера двигателей (следовательно и самих двигателей) обеспечивают 4 подключенных последовательно аккумулятора (1,2 В., 2700 мА/ч), на БТ модуль питание подается от выхода ардуино 3,3 В.

    РОБОТ на базе: android, arduino, bluetooth. Рефлексный. Часть 2 / Хабр

    Рисунок 5


    Робот собран, необходимо его заставить выполнять команды, отправленные с андроида.

    Скетч для arduino шаг 1 – удаленное управление роботом

    Загрузим скетч в ардуино, не забыв перед этим отключить питания от БТ модуля (в противном случае загрузить его не удастся):

    Скетч для Arduino ШАГ 1
    //Объявляем переменные
    char incomingbyte; // переменная для приема данных
    //motors A (RIGHT)
    int R_A_IA = 9; // A-IA
    int R_A_IB = 10; // A-IB
    //motors B (LEFT)
    int L_B_IA = 11; // B-IA
    int L_B_IB = 12; // B-IB
    //Инициализация переменных
    void setup() {
      Serial.begin(38400);
      //motors RIGHT
      pinMode(R_A_IA,OUTPUT);
      digitalWrite(R_A_IA, HIGH);
      pinMode(R_A_IB,OUTPUT);
      digitalWrite(R_A_IB, HIGH);
      //motors LEFT
      pinMode(L_B_IA,OUTPUT);
      digitalWrite(L_B_IA, HIGH);  
      pinMode(L_B_IB,OUTPUT);
      digitalWrite(L_B_IB, HIGH); 
    }
    
    void go_forward(){
      //motors LEFT
      digitalWrite(L_B_IA, LOW);  
      digitalWrite(L_B_IB, HIGH); 
      //motors RIGHT
      digitalWrite(R_A_IA, LOW);
      digitalWrite(R_A_IB, HIGH);
    }
    
    void go_back(){
      //motors LEFT
      digitalWrite(L_B_IA, HIGH);  
      digitalWrite(L_B_IB, LOW); 
      //motors RIGHT
      digitalWrite(R_A_IA, HIGH);
      digitalWrite(R_A_IB, LOW);
    }
    
    void go_right(){
      //motors LEFT
      digitalWrite(L_B_IA, LOW);  
      digitalWrite(L_B_IB, HIGH); 
      //motors RIGHT
      digitalWrite(R_A_IA, LOW);
      digitalWrite(R_A_IB, LOW);
    }
    
    void go_left(){
      //motors LEFT
      digitalWrite(L_B_IA, LOW);  
      digitalWrite(L_B_IB, LOW); 
      //motors RIGHT
      digitalWrite(R_A_IA, LOW);
      digitalWrite(R_A_IB, HIGH);
    }
    
    void stop_robot(){
      //motors LEFT
      digitalWrite(L_B_IA, LOW);  
      digitalWrite(L_B_IB, LOW); 
      //motors RIGHT
      digitalWrite(R_A_IA, LOW);
      digitalWrite(R_A_IB, LOW);
    }
    
    //Основной цикл программы
    void loop() {
      if (Serial.available() > 0){
        incomingbyte = Serial.read();
          if (incomingbyte == '1'){
            go_forward();
            Serial.println("FORWARD");
          }
          if (incomingbyte == '2'){
            go_back();
            Serial.println("BACK");
          }   
          if (incomingbyte == '3'){
            go_right(); 
            Serial.println("RIGHT");
          }
          if (incomingbyte == '4'){
            go_left();
            Serial.println("LEFT");
          }         
          if (incomingbyte=='0'){
            stop_robot();
            Serial.println("STOP");
          }
      } 
    }
    

    Объявляем переменные: R_A_IA, R_A_IB – определяют номера выводов управляющих двигателем А (двигатели правой стороны), L_B_IA, L_B_IB — выводы управляющие двигателем B(двигатели левой стороны. Инициируем последовательное соединение и задаем скорость передачи данных в бит/c (бод) – 38400.

    Шаг 1: нужные части и инструмент

    Я воспользовался готовыми решениями, и все запчасти и инструменты были приобретены через интернет.

    Запчасти:

    1. Набор шасси 4WD для робота (GearBest)
    2. Arduino Nano (GearBest)
    3. Модуль H-моста LM298 (GearBest)
    4. Модуль bluetooth HC-06 (Amazon)
    5. Литий-ионные батарейки 2 x 18650 (GearBest)
    6. Отсек для батареек 2x 18650 (GearBest)
    7. Небольшая макетная плата (GearBest)
    8. Провода сечением 0.5 мм2
    9. Провода с джамперами папа-мама (Amazon)
    10. Провода с джамперами мама-мама (Amazon)
    11. Малярная лента, изолента или что-то подобное (Amazon)

    Для робота, объезжающего препятствия:

    Ультразвуковой модуль измерения расстояния HC — SR04 (GearBest)

    Необходимый инструмент :

    1. Паяльник (Amazon)
    2. Кусачки (Amazon)
    3. Стриппер для провод (GearBest)
    4. Клеевой пистолет (GearBest)
    Смотрите про коптеры:  Прошиваем приемники FrSky через полетный контроллер | RCDetails Blog
    Оцените статью
    Радиокоптер.ру
    Добавить комментарий