Transformando uma Cabeça Humana em Cabeça de Robô: Projeto DIY com Arduino
Componentes e Materiais
| Componente | Quantidade | Observações |
|---|---|---|
| Arduino UNO | 1 | |
| Motor servo | 3 | |
| Dispositivo Android | 1 | |
| Placa de fonte regulada | 1 | (12V, 5V, 3.3V) |
Ferramentas e Máquinas Necessárias
- Ferro de solda (genérico)
Aplicativos e Serviços Online
- SensoDuino
Sobre o Projeto
Planejo fazer algo novo mas não tão caro. Gosto muito de robótica. Mas devido à necessidade de servos e outras peças não gostava de fazer. Agora tenho 4 motores servo custando apenas $13. Já tenho placa LinkIt ONE e placa Arduino.
Então planejei fazer uma cabeça de robô que se move como nossa cabeça em todos os eixos mas de forma barata. Estudei diferentes sensores e métodos, mas finalmente encontrei um caminho com todos os itens em mãos. Aprendi muitas coisas durante este projeto. Vamos lá, explico o que aprendi. Menciono o que aprendi em negrito.
Usar sensor de inclinação do celular inteligente para controlar a cabeça
Passo 1: Materiais Necessários







Materiais que usei
- Arduino Uno.
- Placa LinkIt ONE.
- 3 Motores servo.
- App Android gratuito SensoDuino - Baixe aqui.
- Placa de fonte regulada (12V, 5V, 3.3V).
- PCI virgem.
- Conectores macho para PCI.
- Peça de alumínio de corte de alimentação.
- Pistola de cola quente.
- Adaptadores 12V e 5V.
- Mais alguns itens para decorar.
Por que LinkIt ONE e Arduino Uno
Se você tem LinkIt ONE e servo de 3V então não precisa de Arduino UNO porque meu servo de 5V não funciona bem na placa LinkIt ONE.
Se você tem Arduino Uno e módulo Bluetooth então não precisa de placa LinkIt ONE.
Não tenho shield Bluetooth então vou com LinkIt ONE e Arduino Uno.
Passo 2: Shield de Servo Próprio



- Faça um shield de motor servo para Arduino. (Cuidado se usar servos de 3V, LinkIt ONE tem apenas 2 pinos PWM)
- Fiz um shield tipo PCI para motor servo.
- Usando esta placa conseguimos controlar 6 motores servo a partir dos pinos Arduino (3,5,6,9,10,11).
- Servos de 3 fios são usados aqui. Alimentação vem de fonte regulada externa de 5V.
- Ao controlar servo use alimentação do adaptador para placa Arduino. Porque alimentação USB do PC causa vibração. Isso causa superaquecimento no motor servo e danifica o motor servo . (um dos meus servos danificou)
Passo 3: Conexão LinkIt ONE

- LinkIt ONE precisa falar com Arduino para controlar os servos.
- Para isso conecte Tx da placa LinkIt ONE ao Rx da placa Arduino e ambos GND.
- Sempre que dados recebidos, são enviados ao Arduino.
- Nota: Se você tem shield Bluetooth Arduino então controla toda configuração usando uma placa.
Passo 4: Posição dos Servos


- Defina todos os motores servo para 90 graus. Para isso envie o programa acima para o Arduino.
- Conecte alimentação do servo e Arduino à placa de fonte regulada nos pinos 5V e 12V.
- Conecte conector fêmea do servo ao conector macho da PCI que fizemos nos pinos digitais Arduino 3,5,6.
- Conecte adaptador 12V à placa de fonte regulada.
- Ligue o Adaptador.
- Agora todos os motores giram 90 graus conforme programa.
Agora desconecte os motores para uní-los sem perturbar o rotor.
Código da IDE Arduino para Posição está em Servoposition.ino
Passo 5: Planejamento



- Cabeça gira em 3 eixos x,y,z.
- As rotações são:
- a) Yaw - Olhar esquerda e direita.
- b) Pitch - Olhar cima e baixo
- c) Roll - Balançar lateralmente.
- Primeiro use fita dupla face para planejar os servos.
- Corte peça de alumínio em L para fixar servo superior ao segundo.
- Conecte o chifre do motor servo conforme seu plano ou como mostrado na imagem.
- Todos os centros dos servos devem estar retos quando em 90 graus.
- Cole todos os servos e peça de alumínio em L usando fita dupla face e verifique se movimento não perturba outros servos.
Passo 6: Construção





- Agora é hora de fixar permanentemente.
- Remova a fita dupla face uma por uma e fixe permanentemente usando pistola de cola quente.
- Cuidado para não danificar os servos.
- Novamente conecte conector do servo à placa Arduino e ligue a alimentação.
- Confirme que todos ficam retos como na última imagem.
Passo 7: Detalhes do App Android






- Abra SensoDuino no seu celular Android. Tem opções para ver todas leituras de sensores do celular e enviar via Bluetooth.
- Todos sensores mais recentes são listados e só podemos selecionar quais sensores disponíveis no nosso celular.
- Vá ao menu e selecione conectar Bluetooth.
- A lista mostra dispositivos Bluetooth disponíveis.
- Selecione o Bluetooth do LinkIt ONE.
- Para nosso projeto usamos sensor de Orientação. Marque a primeira caixa para ligar e a segunda para enviar dados via Bluetooth.
- Também definimos desempenho de cada sensor selecionando opção de desempenho no menu. Altere intervalo de tempo para cada leitura.
Passo 8: Codificação
1) Dois códigos aqui: um para LinkIt ONE.
Usando Bluetooth obtém dados do celular e envia ao Arduino pela porta serial.
2) Programa Arduino
Quando dados recebidos na porta serial, concatena chars como string. E usando indexOf e substring divide um conjunto completo de resultados. Nesse conjunto novamente usa indexOf e substring para obter cada posição. A partir disso usa map no Arduino para controlar servo de 0 a 180 graus. Se usar shield Bluetooth então mude o programa conforme necessidade.
Como o Programa Funciona
- Usando sensor de Orientação o robô vira cabeça como nós.
- a) Yaw é rotação, vai de 0 a 360 graus conforme posição magnética. Para isso usamos 90 a 270 graus onde 180 é 90 graus para servo. Então queremos enfrentar 180 graus como string quando usar o boné.
- b) Pitch é frente cima e baixo. Leitura do sensor é -180 a +180. Usamos -90 a +90.
- c) Roll é balanço lateral, é 0 a 90 a 0 a -90 a 0. Usamos -90 a 90.
Código LinkIt ONE em Linkitonehead.ino
Código Arduino em Arduinohead.ino
Passo 9: Monte as Placas



- Conecte ambas placas shield no topo de ambos microcontroladores.
- Cole tudo com fita dupla face uma sobre outra.
- Cuidado para não curto-circuitar nenhum terminal.
Passo 10: Teste com a Mão
Agora ligue todas alimentações e use o celular na mão. Sente enfrentando 180 graus no yaw e use o celular para controlar todos os três motores servo.
Passo 11: Fixe um Rosto


- É época de Natal então encontrei muitos bonecos de Papai Noel nas lojas.
- Comprei um boneco e fixei a cabeça usando fita dupla face no braço do servo superior.
Passo 12: Prepare um Chapéu de Controle






- Pegue um boné normal.
- Cole fita dupla face na frente do boné como mostrado na figura.
- Cole seu celular sobre a fita dupla face.
Passo 13: Vídeo de Teste
Teste Baixo Desempenho significa taxa de atualização do sensor a cada 250 milissegundos.
Passo 14: Vídeo Final
Veja a ação com taxa de leitura do sensor de uma leitura por 100 milissegundos
Código
- Servoposition.ino
- Linkitonehead.ino
- Arduinohead.ino
Servoposition.ino Arduino
#include <Servo.h>
Servo leftright;
Servo updown;
Servo shake;
void setup() {
Serial.begin(9600);
leftright.attach(3);
updown.attach(5);
shake.attach(6);
leftright.write(90);
updown.write(90);
shake.write(90);
}
void loop() {
}
Linkitonehead.ino Arduino
#include <LBT.h>
#include <LBTServer.h>
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="";
for(int j=0;j<32;j++) {
char inChar = char(buf[j]);
// adiciona à 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
#include <Servo.h>
Servo 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=map(S1, 90, 270, 180, 0);
if (rot1<0) rot1=0;
else if (rot1>180) rot1=180;
rot2=map(S2, -90, 90, 0, 180);
if (rot2<0) rot2=0;
else if (rot2>180) rot2=180;
rot3=map(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) { // Nota: condição original repetida
updown.write(rot2);
}
if (rot1!=0 & rot1!=180) { // Nota: condição original repetida
shake.write(rot3);
}
delay(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
- Robô DIY Inspirado no Wall‑E com Caixa de CD e Raspberry Pi
- Robô Alarme Rolante: Sistema Móvel Inteligente de Despertar com Raspberry Pi e Google Calendar
- RasPiRobot Board V2: Expanda seu Raspberry Pi em um Controlador de Robô Poderoso
- Construa um Robô Creeper Motorizado do Minecraft com Arduino
- Arquimedes: O Robô Coruja Sensor de Emoções com IA
- Construa Robô de Visão Computacional Controlado por Fala no Windows 10 IoT Core
- Robô ROS: Navegação Controlada por Terminal no Raspberry Pi
- Integrando Microsoft Kinect com Raspberry Pi para Detecção Humana em Tempo Real no Robô Sonbi
- Simple Pi Robot – Construa Rover Autônomo 2-WD com Raspberry Pi
- O Verdadeiro Ativo: Capital Humano nas Operações de Varejo