Een menselijke head ombouwen tot een robothead: Arduino-gestuurd DIY-project
Onderdelen en benodigdheden
| Onderdeel | Aantal | Opmerking |
|---|---|---|
| Arduino UNO | 1 | |
| Servomotor | 3 | |
| Android-apparaat | 1 | |
| Geregelde voedingsprint (12V, 5V, 3,3V) | 1 |
Benodigde tools
- Solderbout
Apps en diensten
- SensoDuino (gratis Android-app)
Over dit project
Ik wilde iets nieuws maken zonder grote kosten. Robotica vind ik geweldig, maar servos en onderdelen waren te duur. Nu had ik 4 servomotoren voor slechts $13, plus een LinkIt ONE-board en een Arduino UNO.
Plan: een robothead die als een menselijke kop beweegt in alle assen, maar goedkoop. Ik onderzocht diverse sensoren en methoden, maar vond een oplossing met wat ik al had. Veel geleerd tijdens dit project – wat ik leer, vet ik dikgedrukt.
Slimme telefoon-hellingssensor (tilt sensor) gebruiken om de kop te sturen.
Stap 1: Benodigde materialen
- Arduino UNO
- LinkIt ONE board
- 3 servomotoren
- SensoDuino (gratis Android-app)
- Geregelde voedingsprint (12V, 5V, 3,3V)
- Gewone PCB
- PCB-mannelijke connectors
- Reststuk aluminium profiel
- Lijmpistool
- 12V en 5V adapter
- Versieringsmateriaal
Waarom LinkIt ONE én Arduino UNO?
- Als je LinkIt ONE hebt en 3V servos → geen Arduino nodig (maar mijn 5V servos werkten niet goed op LinkIt ONE).
- Als je Arduino UNO + Bluetooth-shield hebt → geen LinkIt ONE nodig.
- Ik had geen Bluetooth-shield → dus LinkIt ONE + Arduino UNO.
Stap 2: Eigen servo-shield
- Maak een servo-shield voor Arduino. (Let op: LinkIt ONE heeft maar 2 PWM-pins als je 3V servos gebruikt.)
- PCB voor 6 servos op Arduino-pins 3, 5, 6, 9, 10, 11.
- 3-draads servos; voeding via externe 5V-regelaar op voedingsprint.
- Belangrijk: Gebruik adaptervoeding voor Arduino, niet USB. USB-stroom veroorzaakt trillingen → oververhitting en schade aan servos (één van mijn servos is zo kapotgegaan).
Stap 3: LinkIt ONE verbinding
- LinkIt ONE communiceert met Arduino via seriële poort.
- Tx van LinkIt ONE → Rx van Arduino, beide GND verbinden.
- Ontvangen data wordt doorgestuurd naar Arduino.
- Met Arduino Bluetooth-shield kan alles op één bord.
Stap 4: Servoposities instellen
- Zet alle servos op 90° (upload
Servoposition.ino). - Servovoeding en Arduino-voeding op 5V/12V van regelaar.
- Servo-connectors op PCB (pinnen 3, 5, 6).
- 12V adapter aanvoeren, inschakelen.
- Alle servos draaien naar 90°.
- Ontkoppel servos voor mechanische montage zonder rotor te verplaatsen.
Stap 5: Plannen
Kop roteert in 3 assen:
- Yaw (gieren): links/rechts kijken
- Pitch (stijgen/zakken): omhoog/omlaag kijken
- Roll (rollen): kantelen
Eerst dubbelzijdig tape voor planning. Aluminium L-stuk voor bovenste servo op tweede. Servohorns monteren volgens plan. Alle servocentra recht op 90°. Alles vastzetten met tape en beweging testen.
Stap 6: Constructie
- Dubbelzijdig tape één voor één verwijderen en permanent vastlijmen met lijmpistool.
- Voorzichtig: servos niet beschadigen.
- Servoconnectors weer aan Arduino, voeding aan.
- Controleren of alle servos rechtop staan (90°).
Stap 7: Android-app details (SensoDuino)
- Open SensoDuino. Toont alle mobiele sensoren en kan data via Bluetooth sturen.
- Alleen beschikbare sensoren op je telefoon zijn selecteerbaar.
- Menu → Connect Bluetooth → selecteer LinkIt ONE Bluetooth.
- Voor dit project: Orientatiesensor. Eerste vakje aan (meting aan), tweede vakje aan (data via Bluetooth sturen).
- Menu → Performance → stel meetinterval in (bijv. 100 ms of 250 ms).
Stap 8: Programmeren
LinkIt ONE code (Linkitonehead.ino): Ontvangt Bluetooth-data van telefoon, stuurt via seriële poort naar Arduino.
Arduino code (Arduinohead.ino): Ontvangt seriële data, parseert strings (indexOf, substring), mapt waarden via map() naar 0–180° voor servos. Bij Bluetooth-shield: code aanpassen.
Hoe het werkt:
- Orientatiesensor → robot kopieert hoofdbewegingen.
- Yaw: 0–360° magnetisch. We gebruiken 90–270°; 180° = servo 90°. Telefoon op 180° houden bij opzetten hoed.
- Pitch: -180 tot +180. We gebruiken -90 tot +90.
- Roll: 0→90→0→-90→0. We gebruiken -90 tot +90.
Stap 9: Printplaten stapelen
- Beide shields op microcontrollers.
- Met dubbelzijdig tape op elkaar plakken.
- Geen terminalen kortsluiten!
Stap 10: Test met de hand
Alle voeding aan. Telefoon in hand. Zit met gezicht op 180° yaw. Bestuur alle drie servos met telefoon.
Stap 11: Gezicht monteren
Kerstmanpop gekocht, hoofd vastgelijmd op bovenste servo-arm.
Stap 12: Besturingshoed maken
Normale hoed. Dubbelzijdig tape op voorkant. Telefoon erop plakken.
Stap 13: Testvideo (lage prestaties)
Sensor verversing elke 250 ms.
Stap 14: Finale video (hoge prestaties)
Sensor uitlezing elke 100 ms.
Code
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 (LinkIt ONE)
#include <LBT.h>
#include <LBTServer.h>
int readval;
String inputString = "";
String outputString = "";
int firstpoint = 0, secondpoint = 0;
void setup() {
if (!LBTServer.begin((uint8_t*)"Sivam_LIO")) return;
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]);
inputString += inChar;
}
Serial1.println(inputString);
}
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, sensorid, sensorrecid, sensorval1, sensorval2, sensorval3;
int S1, S2, S3, startchr = 0, endchr = 0, rot1, rot2, rot3;
void setup() {
Serial.begin(9600);
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);
rot1 = constrain(rot1, 0, 180);
rot2 = map(S2, -90, 90, 0, 180);
rot2 = constrain(rot2, 0, 180);
rot3 = map(S3, 90, -90, 0, 180);
rot3 = constrain(rot3, 0, 180);
if (rot1 != 0 && rot1 != 180) leftright.write(rot1);
if (rot2 != 0 && rot2 != 180) updown.write(rot2);
if (rot3 != 0 && rot3 != 180) shake.write(rot3);
delay(15);
}
}
}
Productieproces
- DIY Wall-E Geïnspireerde Raspberry Pi CD-Doos Robot
- Rollende Alarmrobot: Een Slim, Mobiel Wakker-systeem Aangedreven door Raspberry Pi en Google Calendar
- RasPiRobot Board V2: Je Raspberry Pi Uitbreiden tot een Krachtige Robot-controller
- Bouw een gemotoriseerde Minecraft Creeper-robot met Arduino
- Archimedes: De Emotie-Detecterende AI Robot Uil
- Bouw een Spraak-gestuurde Computer Vision Robot op Windows 10 IoT Core
- ROS Robot: Terminal-gecontroleerde Navigatie op Raspberry Pi
- Microsoft Kinect Integreren met Raspberry Pi voor Realtime Mensendetectie op de Sonbi-robot
- Simple Pi Robot – Bouw een 2-WD Autonome Rover met Raspberry Pi
- Het Echte Actief: Humaan Kapitaal in Detailhandeloperaties
- Zachte Robots Detecteren Menselijke Aanraking via Camera en Schaduwen – Goedkope, Contactloze Oplossing