Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Een menselijke head ombouwen tot een robothead: Arduino-gestuurd DIY-project

Onderdelen en benodigdheden

OnderdeelAantalOpmerking
Arduino UNO1
Servomotor3
Android-apparaat1
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

  1. Maak een servo-shield voor Arduino. (Let op: LinkIt ONE heeft maar 2 PWM-pins als je 3V servos gebruikt.)
  2. PCB voor 6 servos op Arduino-pins 3, 5, 6, 9, 10, 11.
  3. 3-draads servos; voeding via externe 5V-regelaar op voedingsprint.
  4. 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

  1. LinkIt ONE communiceert met Arduino via seriële poort.
  2. Tx van LinkIt ONE → Rx van Arduino, beide GND verbinden.
  3. Ontvangen data wordt doorgestuurd naar Arduino.
  4. Met Arduino Bluetooth-shield kan alles op één bord.

Stap 4: Servoposities instellen

  1. Zet alle servos op 90° (upload Servoposition.ino).
  2. Servovoeding en Arduino-voeding op 5V/12V van regelaar.
  3. Servo-connectors op PCB (pinnen 3, 5, 6).
  4. 12V adapter aanvoeren, inschakelen.
  5. Alle servos draaien naar 90°.
  6. 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

  1. Dubbelzijdig tape één voor één verwijderen en permanent vastlijmen met lijmpistool.
  2. Voorzichtig: servos niet beschadigen.
  3. Servoconnectors weer aan Arduino, voeding aan.
  4. Controleren of alle servos rechtop staan (90°).

Stap 7: Android-app details (SensoDuino)

  1. Open SensoDuino. Toont alle mobiele sensoren en kan data via Bluetooth sturen.
  2. Alleen beschikbare sensoren op je telefoon zijn selecteerbaar.
  3. Menu → Connect Bluetooth → selecteer LinkIt ONE Bluetooth.
  4. Voor dit project: Orientatiesensor. Eerste vakje aan (meting aan), tweede vakje aan (data via Bluetooth sturen).
  5. 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

  1. Beide shields op microcontrollers.
  2. Met dubbelzijdig tape op elkaar plakken.
  3. 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

  1. DIY Wall-E Geïnspireerde Raspberry Pi CD-Doos Robot
  2. Rollende Alarmrobot: Een Slim, Mobiel Wakker-systeem Aangedreven door Raspberry Pi en Google Calendar
  3. RasPiRobot Board V2: Je Raspberry Pi Uitbreiden tot een Krachtige Robot-controller
  4. Bouw een gemotoriseerde Minecraft Creeper-robot met Arduino
  5. Archimedes: De Emotie-Detecterende AI Robot Uil
  6. Bouw een Spraak-gestuurde Computer Vision Robot op Windows 10 IoT Core
  7. ROS Robot: Terminal-gecontroleerde Navigatie op Raspberry Pi
  8. Microsoft Kinect Integreren met Raspberry Pi voor Realtime Mensendetectie op de Sonbi-robot
  9. Simple Pi Robot – Bouw een 2-WD Autonome Rover met Raspberry Pi
  10. Het Echte Actief: Humaan Kapitaal in Detailhandeloperaties
  11. Zachte Robots Detecteren Menselijke Aanraking via Camera en Schaduwen – Goedkope, Contactloze Oplossing