Controle Remoto Gripper Bot
Componentes e suprimentos
| × | 1 | ||||
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 5 | ||||
| × | 2 | ||||
| × | 8 | ||||
| × | 8 |
Aplicativos e serviços online
![]() |
|
Sobre este projeto
Alguns meses atrás, meu filho me pediu para torná-lo um robô controlado remotamente. Ele me deu uma lista do que ele queria e nós a reduzimos a uma lista gerenciável :) Isso é o que eu acabei construindo para ele ...
- Pegue a blindagem do sensor UNO e V5 e encaixe-os.
- Coloque a placa UNO / Sensor unida no suporte do clipe dentro do centro do bot.
- Pegue a fita dupla-face e coloque o driver do motor na parede interna esquerda e o adaptador bluetooth na parede direita.
Para este projeto você pode fazer seu próprio chassi ou escolher outro, a escolha é sua.
Etapa 1:o software necessário
Coisas que você precisa para fazer o download:
- O IDE Arduino
- Python 2.7 (uma instalação completa com tkinter)
- A biblioteca pySerial
- A biblioteca do controlador de motor L9110S anexado .zip (veja os arquivos nesta etapa)
- O código do robô abaixo ou o .zip anexado (veja os arquivos nesta etapa)
- O aplicativo de controle remoto Python (veja os arquivos nesta etapa)
Etapa 2:lista de materiais de hardware
As peças de que você precisa são as seguintes:
- Chassi Runt Rover de meio pint ou um substituto adequado para 4x4
- Arduino Uno ou placa semelhante com cabo USB
- blindagem do sensor V5
- Motorista L9110S (compre um, pois são baratos)
- MG995 servo ou outro substituto adequado x2
- Adaptador bluetooth HC-05 ou HC-06 x1
- Placa servo padrão B x1
- colchete de 90 graus x1
- Suporte simples x2
- Servo hub leve (525125 para Futaba) x1
- Kit de garras padrão A x1
- Fios de ligação fêmea para fêmea
- 5 pilhas AA recarregáveis (NiMH) e carregador
- Fita adesiva dupla-face e pequenos zíperes
- Uma bateria de 5 slots 'AA' (se você escolher a opção recarregável AA)
- Bateria e carregador 6v NiMH ou 7,4v Li-ion
- 1,250 "6-32 parafusos x2
- espaçadores de náilon de 0,750 "8-32 x2
- parafusos de 0,500 "6-32 com porcas x8
- .3125 "parafusos 6-32 x8
Você pode adquirir muitas das peças do eBay ou de outros fornecedores diretamente, como Sparkfun, Adafruit e ServoCity.
Depois de comprar, coletar e baixar tudo, você está pronto para começar a compilar.
Etapa 3:Montagem - O chassi
Primeiro monte o chassi seguindo as instruções incluídas com o chassi ou vídeo. Depois de terminar, você deve ter algo parecido com a imagem. Ao colocar a placa que segura o controlador no bot, certifique-se de colocá-la nos orifícios do meio. Isso deixará espaço na frente e atrás do bot.
NOTA:Antes de prosseguir, remova todas as 4 rodas, para não danificar os motores ao colocar os outros componentes do robô.
Etapa 4:montagem da garra
Monte a garra seguindo as instruções fornecidas neste vídeo. Depois de terminar, você deve ter algo parecido com a imagem.
Etapa 5:Montagem da garra - Etapa 1
Pegue o suporte de 90 graus, o cubo do servo leve e quatro (4) dos parafusos de 0,3125 "para esta etapa:
Pegue o hub do servo e coloque-o em um lado do suporte e prenda-os juntos com os parafusos de .2125 "como na ilustração e coloque-o de lado Coloque as porcas nos dois parafusos mais curtos e aperte-os Agora conte os dois suportes simples, o 1.250 "parafusos e dois parafusos de 0,500" com porcas, 2 espaçadores de náilon e a placa Servo B. Pegue um único suporte e coloque-o no interior do bot de meio ponto e passe os 2 parafusos de 1,259 "nos orifícios esquerdos (de o interior) e os parafusos de 2,500 "no lado direito. Todas as cabeças dos parafusos estarão no interior do bot, conforme ilustrado. agora coloque o segundo suporte único nos parafusos do lado de fora do bot. Em seguida, pegue o espaçadores de náilon e coloque-os nos mais longos (1,250 ") para fora e, em seguida, aparafuse a placa servo nos parafusos longos. Aperte os parafusos que vão para a placa servo com uma chave hexagonal do tamanho adequado ou chave de fenda se você usou parafusos normais.
Use as imagens para referência, conforme necessário.






Etapa 6:Montagem da garra - Etapa 2
- Em seguida, pegue o servo restante que você tem e coloque-o no suporte do servo com a coluna para cima. Prenda-o com 4 dos parafusos de .3125 ".
- Em seguida, pegue o suporte de 90 graus com o cubo do servo nele e monte a garra nele com os 4 dos parafusos de .500 "usando 2 das porcas 8-32 como espaçadores entre o suporte e a garra, conforme ilustrado. Prenda com outra porca no topo da pinça (embaixo do suporte se você girar os parafusos no sentido contrário)
- Agora pegue o conjunto da garra e coloque-o no servo e use um parafuso servo (do pacote do servo) para prendê-lo no lugar, prendendo-o com firmeza.
Depois de terminar, passe os dois fios do servo através do orifício do suporte plano para o interior do bot.
Veja as fotos para mais detalhes e referências.





Etapa 7:montagem da eletrônica
- Pegue a blindagem do sensor UNO e V5 e encaixe-os.
- Coloque a placa UNO / Sensor unida no suporte do clipe dentro do centro do bot.
- Pegue a fita dupla-face e coloque o driver do motor na parede interna esquerda e o adaptador bluetooth na parede direita.



Etapa 8:Fiação - Os motores
- Pino A-1A no driver do motor ao pino 5 na blindagem do sensor
- Pino A-1B no driver do motor ao pino 6 na blindagem do sensor
- Pino B-1A no driver do motor para pino 3 na blindagem do sensor
- Pino B-1B no driver do motor ao pino 11 na blindagem do sensor
Agora, com os robôs voltados para LONGE de você, pegue os fios do lado ESQUERDO e -
- Conecte os dois fios PRETOS à esquerda ao primeiro terminal de parafuso de saída para o motor A
- Conecte os dois fios VERMELHOS à esquerda ao segundo terminal de parafuso de saída para o motor A
Pegue os fios do lado DIREITO e -
- Conecte os dois fios PRETOS à esquerda ao primeiro terminal de parafuso de saída para o Motor B
- Conecte os dois fios VERMELHOS à esquerda ao segundo terminal de parafuso de saída para o motor B
Os Servos:
- Agora conecte o fio do servo Y à linha do pino 2 na blindagem do sensor. O fio branco ou laranja é sempre o fio de sinal.
- Agora conecte o fio do servo X (garra) à linha do pino 7 na blindagem do sensor. O fio branco ou laranja é sempre o fio de sinal.
Etapa 9:Conectando o Módulo Bluetooth
- Adaptador Bluetooth Tx -> pino de proteção do sensor 0
- Adaptador Bluetooth Rx -> pino de blindagem do sensor 1
Etapa 10:Adicionando energia
Conecte os cabos de alimentação do pacote de bateria 5 'aa' (ou outro pacote de 6 V) ao terminal de parafuso de alimentação da blindagem do sensor:
- Vermelho para Vcc
- Preto para GND
- Em seguida, certifique-se de que o jumper na blindagem do sensor V5 esteja no lugar nos pinos do jumper.
- Conecte o pino GND no driver L9110s a um pino GND na blindagem do sensor.
- Conecte o fio positivo da bateria de 6 V ou 7,2 V ou outra bateria que você escolheu para os motores ao pino Vcc no driver do motor L9110S.
- Conecte o fio negativo (GND) da bateria do motor a um pino GND na blindagem do motor.
Etapa 11:Configurando o Módulo Bluetooth HC05 / HC06
Agora você precisará acessar as configurações do dispositivo bluetooth no seu PC a partir do painel de "Controle" ou "Sistemas" do SO ou usar o Google para ajudar.
Possíveis informações de configuração do Bluetooth do sistema operacional:
- Windows
- Linux (eu uso blueman no Linux Mint, mas veja sua distribuição para mais informações)
- Mac
Você precisará anotar o nome ou número do dispositivo da porta serial que está atribuído a ele.
Etapa 12:Carregando o código
Com a fiação verificada e verificada novamente , É hora de carregar o código. Siga as instruções no site do Arduino sobre como instalar o IDE do Arduino.
Após a instalação do IDE, você pode instalar a biblioteca do driver do motor L9110. Faça isso baixando o arquivo zip incluído na ETAPA 1 chamado L9110Driver.zip e extraindo-o para a pasta de bibliotecas do Arduino ou seguindo estas instruções sobre como adicionar uma biblioteca.
Agora que o IDE e a biblioteca do driver do motor foram instalados, carregue o código do robô no IDE do Arduino a partir do arquivo zip encontrado na ETAPA 1 denominado blue_t_slave.zip. Esses arquivos também estão incluídos nesta etapa.
Conecte seu PC e Arduino com o cabo USB. Agora escolha a placa no menu Ferramentas-> Placa no IDE, Uno para este projeto (escolha a placa que você possui se for diferente do Uno) Agora, no menu Ferramentas-> Porta, escolha sua porta de comunicação. Depois de fazer isso, clique no botão de upload. Se tudo correu bem, o código foi carregado; caso contrário, consulte aqui para obter ajuda sobre o IDE e questões relacionadas.
Etapa 13:executando o aplicativo de controle Python
Para executar o aplicativo de controle remoto Python, baixe o arquivo zip desta etapa e extraia-o para o local de onde deseja executá-lo. Em seguida, abra um shell de comando (ou seja, terminal, cmd.exe, etc ...) e navegue até o diretório para o qual você extraiu o arquivo. Agora digite: python rover.py da linha de comando e uma janela semelhante à da imagem deve aparecer. Caso contrário, procure quaisquer erros do Python e corrija (ou seja, bibliotecas ausentes, etc ...) O site do Python pode ajudar, se necessário.
Assim que o aplicativo estiver em execução, você deve estar pronto para começar.
Agora, ligue o bot. Em seguida, digite a porta de comunicação do seu adaptador e clique no botão "Conectar". Após alguns segundos, você deverá ver os outros controles ativados e o botão de conexão desativado. Isso significa que você está conectado ao robô. Se você não conseguir se conectar ao adaptador bluetooth, terá que usar a magia do Google para ajudá-lo!
O aplicativo de controle é simples de usar e permite controles de mouse ou teclado.
Os controles do teclado são:
- As setas são para frente, reverso, vire à esquerda 90 graus, vire à direita 90 graus
- a - vire à esquerda 45 graus
- s - vire à direita 45 graus
- h - parar (parar)
- y - definir eixo Y da garra
- u - definir a pinça aberta / fechada
- c - casa da garra
Os comandos para frente e para trás são constantes, ou seja, eles mantêm o bot em movimento após a execução até que uma nova direção seja enviada ou um comando de parada.
As curvas de 90 e 45 graus são temporárias, ou seja, após algum atraso, elas param o robô de se mover.
Os controles deslizantes da garra não definem automaticamente a garra no bot. Você tem que apertar o botão ou tecla "Set" correspondente para fazer a execução real do conjunto.
Os valores do Slider variam de 0 a 180.
- Eixo Y da garra:0 é totalmente para cima e 180 é totalmente para baixo.
- Alça aberta / fechada:0 está totalmente fechada e 180 e totalmente aberta.
Use o botão "Desconectar" para parar de usar o programa. Isso enviará comandos para parar o bot e inicializar a garra.

Código
- GUI do driver Python
- Código Rover
GUI do driver Python Python
#! / usr / bin / env python ## Para Linux, BSD ou Mac OSX, você pode executar chmod + x neste script para tornar executável ############### Aplicativo de controle Rover ## Escrito por Scott Beasley - 2015 # Gratuito para usar ou modificar. Aproveite. ######### Import sysimport serialimport timefrom Tkinter import * import tkFontimport tkMessageBox # Crie a janela para o aplicativo applicationclass (Frame):# Faça a janela def createWidgets (self):self.connected =False self.message =StringVar () # Faça uma pequena fonte para os botões do conjunto de garras. helv6 =tkFont.Font (family ='Helvetica', size =6, weight ='normal') self.frame =Frame (self.master) self.frame.pack () self.f1 =Frame (self.frame) self .l1 =Rótulo (self.f1, text ="Comm Port:") self.l1.pack (side =LEFT) self.comm_entry =Entry (self.f1, bd =5, name ="comm_entry") self.comm_entry .pack (side =LEFT) self.connectButton =Button (self.f1, text ="Conectar", command =self.SerialConnect, name ="b_connect") self.connectButton.pack (side =LEFT) self.disconnectButton =Botão (self.f1, text ="Desconectar", comando =self.SerialDisconnect, name ="b_disconnect") self.disconnectButton.pack (side =RIGHT) self.f1.grid (row =0, column =0) self.f2 =LabelFrame (self.frame, bd =3, relief ="groove", text ="Ground Control") self.g_vert_fm =Frame (self.f2) self.grip_vert =Scale (self.g_vert_fm, from_ =0, to =180) self.grip_vert.grid (row =0, column =0, rowspan =4, sticky =W) self.grip_vert_set =Button (self.g_vert_fm, text ="Set", command =self.GripperY, name ="b_grip_vert_set", largura =1, altura =2, fonte =helv6) self.grip_vert_set.grid (row =5, column =0, sticky =W) self.master.bind ("", self.GripperY) self. g_vert_fm.grid (row =0, column =0, rowspan =4, sticky =W) self.leftforwardButton =Button (self.f2, text ="\\", command =self.TurnLeft45, name ="b_left_forward") self .leftforwardButton.grid (row =0, column =1) self.master.bind ("", self.TurnLeft45) self.leftButton =Button (self.f2, text ="<", command =self.TurnLeft, name ="b_left") self.leftButton.grid (row =1, column =1) self.master.bind (" ", self.TurnLeft ) self.rightforwardButton =Button (self.f2, text ="/", command =self.TurnRight45, name ="b_right_forward") self.rightforwardButton.grid (row =0, column =3) self.master.bind (" ", self.TurnRight45) self.haltButton =Botão (self.f2, text =" Halt! ", command =self.Halt, name =" b_halt ") self.haltButton .grid (linha =1, coluna =2) self.master.bind (" ", self.Halt) self.rightButton =Botão (self.f2, text ="> ", command =self.TurnRight, name =" b_right ") self.rightButton.grid ( linha =1, coluna =3) self.master.bind (" ", self.TurnRight) self.upButton =Button (self.f2, text ="^", comando =self.Forward, name ="b_forward") self.upButton.grid (row =0, column =2) self.master.bind (" ", self.Forward) self.leftdownButton =Button (self.f2, text ="/", command =self.TurnRight45, name ="b_left_down") self.leftdownButton.grid (row =2, column =1) self.downButton =Button (self. f2, text ="V", command =self.Reverse, name ="b_reverse") self.downButton.grid (row =2, column =2) self.master.bind (" ", self.Reverse) self.f2.grid (row =1, column =0, pady =25) self.rightdownButton =Button (self.f2, text ="\\", command =self.TurnLeft45, name ="b_right_down") self.rightdownButton.grid (row =2, column =3) self.g_horz_fm =Frame (self.f2) self.grip_horz =Escala (s elf.g_horz_fm, from_ =0, to =180, orient =HORIZONTAL) self.grip_horz.grid (row =0, column =0, columnspan =7, sticky =E) self.grip_horz_set =Button (self.g_horz_fm, text ="Set", command =self.GripperX, name ="b_grip_horz_set", width =1, height =2, font =helv6) self.grip_horz_set.grid (row =0, column =8) self.master.bind (" ", self.GripperX) self.g_horz_fm.grid (row =4, column =0, columnspan =7, sticky =E) self.master.bind (" ", self.GripperHome) self.f3 =Frame (self.frame) self.l2 =Marcador (self.f3, text ="Última ação:") self.l2.pack (side =LEFT) self.l3 =Label (self.f3, text ="", textvariable =self.message) self.l3.pack (side =RIGHT) self.f3.grid (row =3, column =0, pady =8) # Defina o estado dos botões de controle do bot. Habilite quando conectado, # Desabilitado caso contrário. def CtrlButtonsState (self, bstate):self.leftforwardButton.config (state =bstate) self.leftButton.config (state =bstate) self.rightforwardButton.config (state =bstate) self.rightButton.config (state =bstate) self. upButton.config (state =bstate) self.leftdownButton.config (state =bstate) self.downButton.config (state =bstate) self.rightdownButton.config (state =bstate) self.haltButton.config (state =bstate) self. connectButton.config (state =bstate) self.grip_horz.config (state =bstate) self.grip_vert.config (state =bstate) self.grip_horz_set.config (state =bstate) self.grip_vert_set.config (state =bstate) # Set o estado da entrada da porta de comunicação. Habilite quando não conectado, # Desabilitado quando o bot está conectado. def ConnCtrlsState (self, bstate):self.connectButton.config (state =bstate) self.comm_entry.config (state =bstate) # Conecte à porta de comunicação digitada no campo de entrada comm. def SerialConnect (self):try:# Altere a taxa de transmissão aqui se diferente, então 9600 self.ser =serial.Serial (self.comm_entry.get (), 9600) exceto IOError:tkMessageBox.showerror ("Porta de comunicação inválida", " Porta de comunicação não encontrada. ") Return self.ConnCtrlsState (DISABLED) self.CtrlButtonsState (NORMAL) self.message.set (" SerialConnect ") self.connected =True time.sleep (3) # Aguarde um pouco para que a conexão aconteça # Desconecte-se do bot (feche a porta de comunicação). def SerialDisconnect (self):try:# Envie um comando Halt caso o bot ainda esteja se movendo. self.send_cmd ('h', "Halt!") time.sleep (1) self.ser.close () except IOError:print "Não foi possível fechar a porta ..." self.message.set ("SerialDisconnect") self .ConnCtrlsState (NORMAL) self.CtrlButtonsState (DISABLED) self.connected =False time.sleep (2) # Espere um pouco para que a desconexão aconteça # Envie o comando para a porta de comunicação aberta def send_cmd (self, action, msg):if self.connected ==True:para val em ação:self.ser.write (val) self.ser.flush () self.message.set (msg) # Envie ao bot um comando de virar à esquerda. def TurnLeft (self, event =None):self.send_cmd ('a', "Left") # Envia ao bot um comando turn-left-up. def TurnLeft45 (self, event =None):self.send_cmd ('q', "Left45") # Envie ao bot um comando para virar à direita. def TurnRight (self, event =None):self.send_cmd ('s', "Right") # Envia ao bot um comando turn-right-up. def TurnRight45 (self, event =None):self.send_cmd ('e', "Right45") # Envie ao bot um comando Forward. def Forward (self, event =None):self.send_cmd ('w', "Up") # Envia ao bot um comando Reverse. def Reverse (self, event =None):self.send_cmd ('z', "Down") # Envia ao bot um comando Halt. def Halt (self, event =None):self.send_cmd ('h', "Halt!") # Defina a garra (X). def GripperX (self, event =None):# Leia o controle deslizante e envie o valor para o controlador do bot # Observação:0 é totalmente fechado e 180 está totalmente aberto grp_change =('>', chr (self. grip_horz.get ()), chr (255)) self.send_cmd (grp_change, "Gripper X") # Defina a garra Y. def GripperY (self, event =None):# Leia o controle deslizante e envie o valor para o controlador de bot # Nota:0 é totalmente para cima e 180 para baixo grp_change =('^', chr (self.grip_vert.get ()), chr (255)) self.send_cmd (grp_change, "Gripper Y ") # Coloque a garra na posição" inicial ". def GripperHome (self, event =None):self.send_cmd (('c', chr (255)), "Gripper Home") def __init__ (self, master =None):Frame .__ init__ (self, master) self. pack () self.createWidgets () self.CtrlButtonsState (DISABLED) # Inicie a GUI (Tk), dimensione e intitule o aplicativo windowdef main ():root =Tk () root.geometry ("450x350") root.wm_title ( "Rover Control Center (RCC)") app =App (master =root) app.mainloop () if __name__ =='__main__':main ()
Código Rover Arduino
/ * Bluetooth Rover. Objetivo na vida ... Segue seus comandos enviados magicamente pelo ar! Ou de USB :) Escrito por Scott Beasley - 2015 Grátis para usar ou modificar. Aproveite. * // * Usa a biblioteca L9110S. Ele funciona com o L9110S h-bridge. Faça download de https://github.com/jscottb/L9110Driver ou clone o zip de https://github.com para remover o '-master' do nome do arquivo para adicionar a biblioteca * / # include#include #define SERVO_Y 2 // Pin garra Y servo # define SERVO_CLAW 7 // Pin garra Garra servo # define pinAIN1 5 // define I1 interface # define pinAIN2 6 // define I2 interface # define pinBIN1 3 / / define interface I3 # define pinBIN2 11 // define interface I4 // Velocidade define # define MAXFORWARDSPEED 225 // Velocidade máxima que queremos avançar # define MAXBACKWARDSPEED 225 // Velocidade reversa máxima # define TOPSPEED 255 // Usado para ajudar a ligar melhor tapete e superfícies mais ásperas.// Vários atrasos de tempo usados para dirigir e servo # define TURNDELAY 475 # define TURNDELAY45 235 # define BACKUPDELAY 400 # define SERVOMOVEDELAY 200 # define SERVOSEARCHDELAY 85 / * Área global. * /// Cria o motor, objetos servo para fazer interface com L9110_Motor motor_left (pinAIN1, pinAIN2); // Criar objeto motor esquerdoL9110_Motor motor_right (pinBIN1, pinBIN2); // Cria o objeto motor direitoServo grip_y_servo; // Cria um objeto servo para a garra Y axisServo grip_servo; // Crie um objeto servo para a pinça clawvoid setup () {// Altere a taxa de transmissão aqui se for diferente de 9600 Serial.begin (9600); grip_y_servo.attach (SERVO_Y); // Anexe o servo SERVO_LR grip_y_servo.write (90); grip_servo.attach (SERVO_CLAW); // Anexe o servo SERVO_LR grip_servo.write (90); atraso (500);} loop vazio () {comando de byte =0, val =0; if (Serial.available ()> 0) {// ler o byte de comando de entrada command =Serial.read (); } switch (comando) {case 'w':go_forward (); //Serial.println ("Going Forward"); pausa; case 'z':go_backward (); //Serial.println ("Going Backwards"); pausa; case 'a':go_left (); atraso (TURNDELAY); halt (); //Serial.println ("Turning Left"); pausa; case 's':go_right (); atraso (TURNDELAY); halt (); //Serial.println ("Virando à direita"); pausa; case 'q':go_left (); atraso (TURNDELAY45); halt (); //Serial.println ("Turning Left"); pausa; case 'e':go_right (); atraso (TURNDELAY45); halt (); //Serial.println ("Virando à direita"); pausa; case 'h':halt (); //Serial.println ("Halting"); pausa; case '>':// movimento da garra X envia o valor definido do servo val =Serial.read (); // Limitamos o valor aos limites reais de movimento da configuração grip_servo.write (constrain (val, 64, 179)); //Serial.println ("GripperX"); pausa; case '^':// Movimento da garra Y envia o valor definido do servo val =Serial.read (); // Limitamos o valor aos limites reais de movimento da configuração grip_y_servo.write (constrain (val, 53, 179)); //Serial.println ("GripperY"); pausa; case 'c':// Limitamos o valor aos limites reais de movimento da configuração grip_y_servo.write (90); grip_servo.write (90); //Serial.println ("GripperHome"); pausa; case 255:// Enviado após todos os comandos do gripper Serial.flush (); pausa; } Serial.flush (); delay (125);} void go_forward () {//Serial.println ("Indo em frente ..."); // Acelere os motores até a velocidade. // Ajuda a girar em algumas superfícies e ware e tare no ramp_it do GM (MAXFORWARDSPEED, FORWARD, FORWARD); // Defina para toda a velocidade definida apenas no caso de a rampa do último tanque não ter // tudo isso. motor_left.setSpeed (MAXFORWARDSPEED); motor_right.setSpeed (MAXFORWARDSPEED); motor_left.run (FORWARD | RELEASE); motor_right.run (FORWARD | RELEASE);} void go_backward () {//Serial.println ("Indo para trás ..."); // Acelere os motores até a velocidade. // Ajuda a girar em algumas superfícies e ware e tare no ramp_it do GM (MAXBACKWARDSPEED, BACKWARD, BACKWARD); // Defina para toda a velocidade definida apenas no caso de a rampa do último tanque não ter // tudo isso. motor_left.setSpeed (MAXBACKWARDSPEED); motor_right.setSpeed (MAXBACKWARDSPEED); motor_left.run (BACKWARD | RELEASE); motor_right.run (BACKWARD | RELEASE);} void go_left () {//Serial.println ("Indo para a esquerda ..."); // Acelere os motores até a velocidade. // Ajuda a girar em algumas superfícies e ware e tare no ramp_it do GM (TOPSPEED, BACKWARD, FORWARD); // Defina para toda a velocidade definida apenas no caso de a rampa do último tanque não ter // tudo isso. motor_left.setSpeed (TOPSPEED); motor_right.setSpeed (TOPSPEED); motor_left.run (BACKWARD | RELEASE); motor_right.run (FORWARD | RELEASE);} void go_right () {//Serial.println ("Indo para a direita ..."); // Acelere os motores até a velocidade. // Ajuda a girar em algumas superfícies e ware e tare no ramp_it do GM (TOPSPEED, FORWARD, BACKWARD); // Defina para toda a velocidade definida apenas no caso de a rampa do último tanque não ter // tudo isso. motor_left.setSpeed (TOPSPEED); motor_right.setSpeed (TOPSPEED); motor_left.run (FORWARD | RELEASE); motor_right.run (BACKWARD | RELEASE);} void halt () {//Serial.println ("Halt!"); // ramp_it (0, BRAKE, BRAKE); motor_left.setSpeed (0); motor_right.setSpeed (0); motor_left.run (BRAKE); motor_right.run (BRAKE);} void ramp_it (velocidade uint8_t, uint8_t lf_dir, uint8_t rt_dir) {uint8_t ramp_val =0, step_val =0; step_val =abs (velocidade / 4); if (! velocidade) step_val =-step_val; para (uint8_t i =0; i <4; i ++) {rampa_val + =etapa_val; motor_left.setSpeed (ramp_val); motor_right.setSpeed (ramp_val); motor_left.run (lf_dir | RELEASE); motor_right.run (rt_dir | RELEASE); atraso (25); }}
Driver L9110
Driver do motor L9110 para Arduinohttps://github.com/jscottb/L9110DriverPeças personalizadas e gabinetes
4wdgripperbt2.fzzEsquemas

Processo de manufatura
- Sensor de temperatura múltipla
- Controle de ferro de solda DIY para 862D +
- MotionSense
- Impressora 3D Segurança contra incêndio
- Levitação eletromagnética repulsiva Arduino
- Registrador de dados do balão meteorológico Arduino
- ArduFarmBot - Parte 2:Estação Remota e Implementação IoT
- CoroFence - Detector Térmico🖖
- Monitoramento em nuvem, um sistema de controle remoto
- 5 vantagens do controle remoto de produção