Cabeça humana para cabeça do robô
Componentes e suprimentos
| × | 1 | ||||
| × | 3 | ||||
| × | 1 | ||||
| × | 1 |
Ferramentas e máquinas necessárias
|
Aplicativos e serviços online
|
Sobre este projeto
Planeje fazer algo novo, mas não tão caro. Gosto muito de robótica. Mas devido à exigência de servos e outras peças eu não gosto de fazer isso. Agora eu tenho 4 servo motores custam apenas 13 $. Já tenho uma placa Link it e uma placa Arduino.
Portanto, planeje fazer uma cabeça de robô que se mova como a nossa cabeça em todos os eixos, mas de forma barata. Estude para diferentes sensores e métodos, mas finalmente encontre um jeito com todos os itens em minhas mãos. Muitas coisas eu estudo durante este projeto. Vamos lá eu explico o que estudo. Menciono o que aprendi em negrito.
Use o sensor Smart Mobile Tilt para controlar a cabeça
Etapa 1:materiais necessários
Materiais que usei
1) Arduino uno.
2) Linkit uma placa.
3) 3 servo motores.
4) Aplicativo para Android gratuito SensoDuino Baixe aqui.
5) Placa de alimentação regulada (12 V, 5 V, 3,3 V).
6) PCB simples.
7) Conectores PCB Macho
8) Peça de corte de alimentação de alumínio residual.
9) Pistola de cola quente.
10) Adaptador de 12V e 5V.
11) Mais alguns itens para decorar.
Por que Linkit one board e Arduino uno
Se você tiver Linkit uma placa e servo motor de 3 V, não há necessidade de Arduino UNO porque meu servo de 5 V não funciona bem em Linkit one board.
Se você tiver o Arduino uno e o módulo dente azul, não há necessidade de Linkit one board.
Não tenho protetor de dente azul, então uso o Linkit one board e o Arduino uno.
Etapa 2:possuir escudo servo
1) Faça uma blindagem do servo motor para o Arduino. (Cuidado se você usar servos 3v Linkit, se tiver apenas 2 pinos PWM)
2) Eu faço uma blindagem como PCB para servo motor.
3) Usando esta placa podemos controlar 6 Servo motores do arduino pind (3,5,6,9,10,11).
4) Servos de 3 fios são usados aqui. onde a fonte de alimentação é fornecida a partir da placa de fonte de alimentação do regulador externo de 5 V.
5) Enquanto o servo de controle usa a fonte do adaptador para a placa Arduino. Porque a fonte de alimentação USB do PC causa vibração. Isso causa superaquecimento no servo motor e danifica o Servo motor . (um dos meus danos servo)
Etapa 3:Faça o Linkit uma conexão
1) Linkit quer falar com o arduino para controlar os servos.
2) Para isso conecte o Tx da placa Linkit one ao Rx da placa Arduino e ambos Gnd.
3) sempre que os dados recebidos são enviados para o Arduino.
Observação:-
Se vc tiver o escudo bluetooth Arduino, vc controlar toda a configuração usando uma placa.
Etapa 4:posição do servo
1) Defina todos os servo motores para 90 graus. Para isso, faça upload do programa acima para o arduino ..
2) Conecte a alimentação do servo e do arduino à placa de alimentação do regulador nos pinos de 5 V e 12 V.
3) Conecte o conector servo fêmea ao conector macho se a placa de circuito impresso for feita nos pinos digitais 3,5,6 do Arduino.
3) Conecte o adaptador de 12 V à placa de alimentação do regulador.
4) Ligue o adaptador.
5) Agora todos os motores giram 90 graus conforme o programa.
Agora desconecte os motores para uni-los sem perturbar o rotor.
O código IDE do Arduino de posição é fornecido como Servoposition.ino
Etapa 5:planejar
1) Rotação da cabeça em 3 eixos x, y, z.
2) As rotações são
a) Yaw - Veja à esquerda e à direita.
b) Pitch -Veja para cima e para baixo
c) Roll-Shake lateralmente.
3) Primeiro use uma fita dupla-face para planejar os Servos.
4) Corte a peça divisória de alumínio em forma de L para fixar o servo superior ao segundo.
5) Conecte a buzina do servo motor de acordo com o seu plano ou conforme mostrado na imagem
6) Todo o centro dos servos deve estar reto quando em 90 graus.
7) cole todos os servos e a peça L de alumínio usando fita dupla-face e verifique se o movimento não atrapalha outros servos.
Etapa 6:construção
1) Agora é hora de consertá-lo permanentemente.
2) Remova o adesivo de lado duplo um por um e fixe-o permanentemente com a pistola de cola quente.
3) Tenha cuidado para não danificar os servos.
4) Conecte novamente o conector do servo à placa arduino e ligue a alimentação
5) conformar todos ficarem em linha reta como a última imagem.
Etapa 7:detalhes do aplicativo Android
1) Abra o SensoDuino em seu telefone Android. Possui opções de visualização de toda a leitura do sensor móvel e possibilidade de envio através do dente azul.
2) Todos os sensores mais recentes são listados e só podemos selecionar quais sensores estão disponíveis em nosso telefone.
3) Vá ao menu e selecione conectar Bluetooth.
4) A lista mostra os dispositivos dentais azuis disponíveis.
5) Selecione o linkit one bluetooth.
6) Para o nosso projeto usamos sensor de orientação. Marque a primeira caixa para ativar e a segunda caixa para enviar dados via dente azul.
7) Também definimos o desempenho de cada sensor selecionando a opção de desempenho no menu. Altere o intervalo de tempo para cada leitura.
Etapa 8:codificação
1) Duas codificações estão aqui uma para o Linkit um.
Usando o dente azul, ele obtém dados do celular e os envia para o Arduino usando a porta serial
2) Programa Arduino
Quando os dados são recebidos na porta serial, ele concatena os caracteres como string. E usando indexof e substring, divida um resultado de conjunto completo. Nesse conjunto, use novamente o indexof e a substring para obter cada posição. A partir disso, use o mapa no arduino para controlar o servo de 0 a 180 graus. Se você usar a proteção Bluetooth, altere o programa de acordo com os requisitos.
Como funciona o programa
1) Usando o sensor de orientação, o robô gira a cabeça como nós.
a) Yaw é a rotação de 0 a 360 graus conforme a posição magnética. Para isso usamos 90 a 270 graus, onde 180 é 90 graus para servo. Por isso, queremos olhar 180 graus como um fio quando usar o boné.
b) O pitch é frontal para cima e para baixo. A leitura do sensor é -180 a + 180. Usamos -90 a +90.
c) Rolar é agitado lado a lado é 0 a 90 a 0 a -90 a 0. usamos -90 a 90.
O código Linkit one é fornecido em Linkitonehead.ino
O código do Arduino é fornecido em Arduinohead.ino
Etapa 9:peça as placas
1) conecte as duas placas de blindagem à parte superior de ambos os microcontroladores.
2) Cole tudo com adesivo de dupla face um sobre o outro.
3) Cuidado para não atirar em nenhum terminal.
Etapa 10:trilha com a mão
Agora ligue todo o suprimento e use o celular na mão. Sente-se de frente para a guinada de 180 graus e use o móvel para controlar todos os três servo motores.
Etapa 11:consertar um rosto
1) É hora de Natal, então encontrei muitos bonecos de Papai Noel na loja.
2) Compre uma boneca e fixe a cabeça com um toque duplo no braço servo superior.
Etapa 12:Prepare um chapéu de controle
1) Pegue um chapéu normal.
2) Cole o adesivo de lado duplo na frente da tampa conforme mostrado na figura.
3) Cole seu celular sobre a fita dupla-face.
Etapa 13:Teste de vídeo
Testando baixo desempenho significa taxa de atualização do sensor a cada 250 milissegundos.
Etapa 14:Vídeo final
Veja a ação na taxa de leitura do sensor de uma leitura por 100 milissegundos
Código
- Servoposition.ino
- Linkitonehead.ino
- Arduinohead.ino
Servoposition.ino Arduino
#includeServo leftright; Atualização do servo; Agitação do servo; configuração vazia () {Serial.begin (9600); leftright.attach (3); updown.attach (5); agitar.anexar (6); leftright.write (90); updown.write (90); shake.write (90); } void loop () {}
Linkitonehead.ino Arduino
#include#include int readval; String inputString =""; String outputString =""; int firstpoint =0; int secondpoint =0; void setup () {if (! LBTServer.begin ((uint8_t *) "Sivam_LIO")) {return; } // Serial.begin (9600); Serial1.begin (9600); } void loop () {uint8_t buf [64]; int bytesRead; if (LBTServer.connected ()) {while (true) {bytesRead =LBTServer.readBytes (buf, 32); if (! bytesRead) break; inputString =""; para (int j =0; j <32; j ++) {char inChar =char (buf [j]); // adicione-o ao inputString:inputString + =inChar; } // Serial.println (inputString); Serial1.println (inputString); // firstpoint =inputString.indexOf ('>'); // Serial.println (inputString); // Serial.println (firstpoint); // if (firstpoint> 0) // {/ / secondpoint =inputString.indexOf ('>', firstpoint + 1); // if (secondpoint> 0) // {// outputString =inputString.substring (firstpoint, secondpoint); // inputString =inputString.substring (secondpoint); // Serial.println (outputString); //} //}} delay (100); } else {LBTServer.accept (5); }}
Arduinohead.ino Arduino
#includeServo leftright; Servo updown; Servo shake; String inputString =""; boolean stringComplete =false; String teststr2; String sensorid; String sensorrecid; String sensorval1; String sensorval2; String sensorval3; int S1; int S2; int S3; int startchr =0; int endchr =0; int rot1; int rot2; int rot3; void setup () {Serial.begin (9600); // inputString.reserve (200); leftright.attach (3); updown.attach (5); shake.attach (6);} void loop () {} void serialEvent () {while (Serial.available ()) {char inChar =(char) Serial.read (); if (inChar! ='\ n') {inputString + =inChar; }} startchr =inputString.indexOf ('>'); if (startchr> =0) {endchr =inputString.indexOf ('>', startchr + 1); if (endchr> 0) {teststr2 =inputString.substring (startchr, endchr); inputString =inputString.substring (endchr); startchr =teststr2.indexOf (','); sensorid =teststr2.substring (1, startchr); endchr =teststr2.indexOf (',', startchr + 1); sensorrecid =teststr2.substring (startchr + 1, endchr); startchr =endchr; endchr =teststr2.indexOf (',', startchr + 1); sensorval1 =teststr2.substring (startchr + 1, endchr); startchr =endchr; endchr =teststr2.indexOf (',', startchr + 1); sensorval2 =teststr2.substring (startchr + 1, endchr); startchr =endchr; sensorval3 =teststr2.substring (startchr + 1); S1 =sensorval1.toInt (); S2 =sensorval2.toInt (); S3 =sensorval3.toInt (); rot1 =mapa (S1, 90, 270, 180, 0); if (rot1 <0) rot1 =0; else if (rot1> 180) rot1 =180; rot2 =mapa (S2, -90, 90, 0, 180); if (rot2 <0) rot2 =0; else if (rot2> 180) rot2 =180; rot3 =mapa (S3, 90, -90, 0, 180); if (rot3 <0) rot3 =0; else if (rot3> 180) rot3 =180; if (rot1! =0 &rot1! =180) {leftright.write (rot1); } if (rot1! =0 &rot1! =180) {updown.write (rot2); } if (rot1! =0 &rot1! =180) {shake.write (rot3); } atraso (15); // Serial.print ("Sensor -"); // Serial.println (sensorid); // Serial.print ("Sensor Val1 -"); // Serial.println (rot1); // Serial.print (" Sensor Val2 - "); // Serial.println (rot2); // Serial.print ("Sensor Val3 -"); // Serial.println (rot3); }}}
Processo de manufatura