Índice:

Plataforma Arduino Robotics simples !: 5 etapas
Plataforma Arduino Robotics simples !: 5 etapas

Vídeo: Plataforma Arduino Robotics simples !: 5 etapas

Vídeo: Plataforma Arduino Robotics simples !: 5 etapas
Vídeo: Arduino project 😎^ Arduino #arduino #2022 #2021 #2023 #dc #arduinoproject #diy #foryou 2024, Julho
Anonim
Plataforma simples de robótica Arduino!
Plataforma simples de robótica Arduino!
Plataforma simples de robótica Arduino!
Plataforma simples de robótica Arduino!

Acabei de comprar um Arduino depois de brincar com alguns microcontroladores AVR durante as reuniões da equipe de robótica. Eu gostei da ideia de um chip programável realmente barato que pudesse rodar qualquer coisa a partir de uma interface simples de computador, então comprei um Arduino porque ele já tem uma bela placa e interface USB. Para meu primeiro projeto Arduino, eu desenterrei um kit Vex Robotics que eu tinha em algumas competições que fiz no colégio. Sempre quis fazer uma plataforma de robótica dirigida por computador, mas o microcontrolador Vex requer um cabo de programação que eu não tinha. Decidi usar meu novo Arduino (e talvez mais tarde um chip AVR vazio, se o fizer funcionar) para conduzir a plataforma. Eventualmente, eu quero obter um netbook e, então, posso dirigir o robô usando WiFi e visualizar sua webcam remotamente.

Consegui um protocolo serial decente e um exemplo simples que dirige o robô usando um controlador Xbox 360 conectado a um PC Linux.

Etapa 1: o que pode fazer …

O que pode fazer …
O que pode fazer …
O que pode fazer …
O que pode fazer …

O Arduino é uma plataforma muito versátil. Meu objetivo básico era apenas fazer com que o Arduino fizesse a interface de dois motores Vex com o PC, mas eu tinha muitos pinos de entrada / saída restantes e decidi adicionar algumas coisas extras. No momento, tenho um LED RGB para o status da porta serial (verde se os pacotes estiverem bons, vermelho se estiverem ruins) e um ventilador de PC acionado por um transistor. Também posso adicionar interruptores e sensores, mas não coloquei nenhum deles ainda. A melhor coisa sobre isso é que você pode adicionar o que quiser a um robô Arduino. Leva apenas um pouco de código de interface para controlar coisas extras e obter dados para o computador.

Etapa 2: peças

Peças
Peças
Peças
Peças
Peças
Peças

Para meu robô, usei algumas peças diferentes. A maioria das peças era de coisas antigas que eu tinha no porão.1) Arduino Duemilanove c / ATMega328Este é o Arduino mais novo e, como acabei de comprá-lo há alguns dias, tenho o mais novo. No entanto, o código é pequeno o suficiente para caber facilmente em qualquer Arduino. Provavelmente poderia até caber em um ATTiny (se eu construir um controlador de robô separado do Arduino, o ATTiny 2313 parece uma boa escolha, é menor e mais barato, mas ainda tem muitas saídas e uma interface UART serial) 2) Vex Robotics PlatformI adquiri um kit Vex alguns anos atrás para construir um robô controlado por rádio para coletar coisas para uma competição de colégio. Construí a base básica do "bot quadrado" que tem 4 rodas acionadas por dois motores. Você pode substituir outras bases de robôs se tiver alguma outra plataforma que queira dirigir. O importante a notar é que os motores Vex são essencialmente servos de rotação contínua, eles usam modulação de largura de pulso para sinalizar quão rápido e em que direção virar. Os motores Vex são bons porque têm uma alta faixa de tensões operacionais, algo entre 5 a 15 volts. Estou usando 12V porque tinha uma bateria de 12V. Para a maioria dos servos padrão de hobby, você precisará de uma voltagem mais baixa (geralmente 6 volts).3) Bateria Um robô é inútil sem uma fonte de alimentação. Para testar, eu uso um adaptador de parede de 9 V padrão da RadioShack, mas para operação sem fio eu encontrei uma bateria NiMH de 12 V em um laptop antigo. Embora não tenha carga suficiente para operar o laptop, ele dirige meu robô Vex muito bem. Ele também pode alimentar o Arduino usando o pino de entrada Vin no conector de alimentação, o Arduino irá regular os 12V para 5 e até mesmo a saída do pino de saída de 5V no conector de alimentação.4) Placa de ensaio básica Estou usando uma placa de ensaio para conecte tudo. Eventualmente, vou conseguir uma placa de prototipagem melhor e soldar algumas conexões mais permanentes, mas por enquanto a placa de ensaio torna mais fácil mudar as coisas. Minha placa de ensaio é a "placa de ensaio básica" do SparkFun, apenas uma placa de ensaio em uma placa de metal com 3 terminais.5) Conversor RS232-TTL baseado em MAX232Se você deseja conduzir seu robô usando uma conexão de porta serial RS-232 (ao contrário do Arduino construído em USB), você pode usar um conversor RS232-TTL. Estou usando um MAX232 porque tinha alguns deles espalhados e o soldei em um pequeno pedaço de placa de prototipagem com os capacitores necessários. Preciso de RS-232 porque meu laptop antigo tem apenas uma porta USB e estou usando-a como controlador de jogo para conduzir o robô.6) Peças extras conforme desejadoPara depuração fácil do protocolo serial, coloquei um LED RGB nele (consegui um com meu pedido do Arduino porque parecia legal). A luz pisca em vermelho, verde, azul em sequência quando o Arduino inicializa para mostrar que o robô foi reinicializado e, em seguida, acende verde quando um pacote de motor é recebido, azul quando um pacote de ventilador é recebido e vermelho quando um pacote de motor ruim ou desconhecido pacote foi recebido. Para acionar a ventoinha, usei um transistor NPN padrão (os mesmos que demonstrei no último Instructable) e um resistor entre o transistor e o Arduino (o transistor estava consumindo muita corrente e esquentando o Arduino, então coloquei uma limitação resistor para pará-lo).

Etapa 3: Arduino e programação de PC

Arduino e programação de PC
Arduino e programação de PC

Para programar o Arduino, você obviamente precisará do software Arduino e de um cabo USB. Você também pode programar o Arduino usando uma porta serial e um conversor de nível TTL se o seu PC tiver uma porta serial. Observe que a interface serial USB não se comunicará com o processador ATMega do Arduino se houver um conversor de nível conectado aos pinos seriais do Arduino (pinos 0 e 1), portanto, desconecte-o antes de usar o USB. No Arduino, precisaremos de uma interface serial que permita o PC para controlar os motores. Também precisaremos de um sistema de servoacionamento PWM para enviar os sinais corretos para os motores Vex e garantir que eles sigam nas direções corretas quando fornecidos os valores corretos. Eu também adicionei alguns LEDs piscando, principalmente para indicação de status, mas também porque parece legal. No PC, precisaremos abrir a porta serial e enviar frames de dados que o programa Arduino irá entender. O PC também precisa fornecer os valores do motor. Uma maneira fácil de fazer isso é usar um controle de jogo ou joystick USB. Estou usando um controlador do Xbox 360. Outra opção é usar um computador em rede (um netbook ou uma pequena placa mini ITX) no próprio robô para operar sem fio. Com um netbook, você pode até usar a webcam integrada para transmitir um feed de vídeo e conduzir seu robô remotamente. Usei o sistema de soquetes do Linux para fazer programação de rede para minha configuração. Um programa (o "servidor joystick") é executado em um PC separado que possui um controlador conectado a ele, e outro programa (o "cliente") é executado no netbook conectado ao Arduino. Isso liga os dois computadores e envia informações do joystick para o netbook, que então envia pacotes seriais para o Arduino que aciona o robô. Para se conectar ao Arduino usando um PC Linux (em C ++), você deve primeiro abrir a porta serial no endereço correto taxa de transmissão e, em seguida, envie os valores usando um protocolo que você também usou no código do Arduino. Meu formato serial é simples e eficaz. Eu uso 4 bytes por "quadro" para enviar as duas velocidades do motor (cada uma tem um único byte). O primeiro e o último bytes são valores embutidos em código que são usados para evitar que o Arduino envie o byte errado para o código PWM e faça com que os motores enlouqueçam. Este é o objetivo principal do LED RGB, ele pisca em vermelho quando o quadro serial está incompleto. Os 4 bytes são os seguintes: 255 (byte "inicial" codificado),,, 200 (byte "final" codificado) Para garantir a recepção confiável dos dados, certifique-se de colocar atraso suficiente entre os loops do programa. Se você executar o código do seu PC muito rápido, ele inundará a porta e o Arduino poderá começar a perder ou mesmo a ler bytes incorretamente. Mesmo que não elimine informações, ele também pode estourar o buffer da porta serial do Arduino. Para os motores Vex, usei a biblioteca Arduino Servo. Como os motores Vex são apenas motores de rotação contínua, eles usam exatamente a mesma sinalização que os servos usam. No entanto, em vez de 90 graus ser o ponto central, é o ponto de parada onde o motor não gira. Abaixar o "ângulo" faz com que o motor comece a girar em uma direção, enquanto aumentar o ângulo o faz girar na outra direção. Quanto mais longe do ponto central você estiver, mais rápido o motor girará. Embora não vá quebrar nada se você enviar valores maiores que 180 graus para os motores, eu aconselho limitar os valores de 0 a 180 graus (que neste caso são incrementos de velocidade). Como eu queria mais controle e menos controle fora do controle do robô, adicionei um software de "limite de velocidade" ao meu programa que não permite que a velocidade aumente acima de 30 "graus" em qualquer direção (a faixa é 90 +/- 30). Pretendo adicionar um comando de porta serial que altera o limite de velocidade, para que o computador possa remover o limite rapidamente se você quiser ir mais rápido (tenho testado em salas pequenas, então não quero acelerar e colidir com a parede, especialmente com um netbook nele). Para obter mais informações, baixe o código em anexo no final deste Instructable.

Etapa 4: adicionar um netbook para explorar mundos desconhecidos à distância

Adicione um netbook para explorar mundos desconhecidos à distância
Adicione um netbook para explorar mundos desconhecidos à distância
Adicione um netbook para explorar mundos desconhecidos à distância
Adicione um netbook para explorar mundos desconhecidos à distância

Com um PC completo a bordo de seu robô Arduino, você é capaz de conduzir seu robô de tão longe quanto seu WiFi pode alcançar, sem cabos para limitar o robô a uma área. Um bom candidato para este trabalho é um netbook, porque os netbooks são minúsculos, leves, têm uma bateria embutida, têm WiFi e muitos até possuem webcams integradas que podem ser usadas para transmitir a visão do robô de volta para um lugar seguro onde você pode controlá-lo. Além disso, se o seu netbook estiver equipado com serviço de banda larga móvel, seu alcance é praticamente ilimitado. Com baterias suficientes, você pode conduzir seu robô até a pizzaria local e fazer um pedido pela webcam (não recomendado, os robôs geralmente não são permitidos em pizzarias, mesmo que sejam pessoas que provavelmente tentarão roubar o robô e talvez até a pizza). Também pode ser uma boa maneira de explorar as profundezas escuras de seu porão do conforto de sua cadeira de escritório, embora a adição de alguns faróis possa ser muito útil neste caso.

Há muitas maneiras de fazer isso funcionar, muitas provavelmente muito mais fáceis do que a minha, embora eu não esteja familiarizado com linguagens de processamento ou baseadas em script, então optei por usar Linux e C ++ para criar um link de controle sem fio entre minha estação base (também conhecido como antigo ThinkPad) e meu novo netbook Lenovo IdeaPad que está conectado à base de unidade do Arduino. Ambos os PCs estão executando o Ubuntu. Meu ThinkPad está conectado à LAN da minha escola e meu IdeaPad está conectado ao meu ponto de acesso Wi-Fi que também está conectado à LAN da escola (não consegui um stream de vídeo confiável do Wi-Fi da escola porque todo mundo está usando, então eu configurei meu próprio roteador para fornecer uma boa conexão). Uma boa conexão é especialmente importante no meu caso, pois não implementei nenhuma verificação de erros ou tempo limite. Se a conexão de rede cair de repente, o robô continua até que bata em algo ou eu corro e paro. Este é o principal fator por trás de minha decisão de desacelerar o trem de força, tanto ao desacelerar os motores quanto implementar um limite de velocidade de software.

Etapa 5: Obtenha um feed de vídeo

Depois que seu explorador robótico puder dirigir sem fio, você provavelmente desejará ter um feed de vídeo do netbook para saber onde seu robô está. Se você estiver usando o Ubuntu (ou mesmo se não estiver!), Eu recomendo usar o VLC Media Player para fazer streaming. Se você não instalou, você realmente está perdendo, então instale-o usando o comando "sudo apt-get install vlc", procure por VLC no Ubuntu Software Center (9.10 apenas) ou baixe o instalador em videolan. org se você estiver no Windows. Você precisará do VLC rodando em ambos os PCs. O VLC é capaz de fazer streaming e também reproduzir streams em uma rede. No netbook (PC robô), primeiro certifique-se de que sua webcam (embutida ou conectada por USB) funciona clicando em Abrir dispositivo de captura e tentando Vídeo para Linux 2 (alguns dispositivos mais antigos podem precisar de Vídeo para Linux em vez da nova versão 2). Você deve ver a visão da câmera na tela do netbook. Para transmiti-lo, selecione Streaming no menu Arquivo e, em seguida, escolha a guia Dispositivo de captura na parte superior da janela que aparece. Lembre-se de que o Ubuntu (e muitas outras distros Linux) permitem que você mantenha pressionado Alt para clicar e arrastar janelas que são muito grandes para sua tela (especialmente útil em netbooks mais antigos, embora até meu IdeaPad tenha uma resolução estranha de 1024x576 sem motivo aparente). Para reduzir o atraso, clique em "Mostrar mais opções" e diminua o valor do cache. O valor que você pode diminuir às vezes depende do dispositivo, ele fica instável se você diminuir demais. A 300ms você pode obter um pequeno atraso, mas não é tão ruim.

Em seguida, clique em Stream para ir para o próximo menu. Clique em Avançar e selecione e adicione HTTP como um novo destino. Agora configure a transcodificação para tornar o fluxo menor. Fiz um perfil personalizado que usa M-JPEG a 60kb / se 8fps. Isso ocorre porque o uso de um codec avançado como MPEG ou Theora consumirá muito tempo de CPU no processador Atom de um netbook e isso pode fazer com que o feed de vídeo pare sem motivo aparente. MJPEG é um codec simples que é fácil de usar com taxas de bits baixas. Depois de iniciar seu stream, abra o VLC em seu outro PC, abra um stream de rede, selecione HTTP e digite o endereço IP do seu netbook (local ou Internet dependendo de como você está se conectando) seguido por ": 8080". Você precisa especificar a porta por algum motivo estranho, caso contrário, ocorrerá erros. Se você tiver uma conexão decente, deverá ver o feed da sua webcam no outro PC, mas terá um pequeno atraso (cerca de um segundo). Não sei exatamente por que esse atraso ocorre, mas não consigo descobrir como me livrar dele. Agora abra o aplicativo de controle e comece a dirigir o robô do netbook. Tenha uma ideia de como funciona o atraso ao dirigir para não bater em nada. Se funcionar, o robô do netbook está pronto.

Recomendado: