Alle posts

Een laserturret die je met je muis bestuurt

In deze post leg ik uit hoe ik een laserturret heb gebouwd die ik op afstand met mijn muis bestuur. Leuk speelgoed voor bijvoorbeeld een kat of hond.

Een witte, bolvormige laserturret op een zwarte voet, met een laser aan de voorkant.
De laserturret.

Wat je nodig hebt

  • Een ESP32-bordje (Wemos D1 mini)
  • Een 3V-laser
  • Twee SG90-servomotoren
  • Een paar jumperkabels

Software

Om de turret met je muis te besturen via een socketverbinding, heb je een server en een client nodig. De server is de turret zelf. De client is in dit geval een webpagina met een PHP-script. Alle code zit in de download onderaan deze post.

Firmware

De turret wordt aangestuurd door een kleine microcontroller met wifi. Een ESP8266 kan ook, maar de ESP32 is net wat sneller en heeft ook bluetooth. Ik heb de firmware geschreven in PlatformIO, maar een andere ontwikkelomgeving werkt ook.

Om de turret met je wifi te verbinden, pas je deze regels aan in main.cpp:

const char* ssid     = "SSID";
const char* password = "Password";

Vul hier de naam en het wachtwoord van je wifinetwerk in. Zet je de firmware op de ESP32, dan maakt die verbinding met je wifi en toont hij zijn IP-adres in de seriële monitor. Daarna wacht hij op poort 80 op inkomende socketverbindingen.

Maakt een client verbinding, dan wacht de ESP32 op een commando dat eindigt met een @. Een commando ziet er zo uit:

xCoords/yCoords/Speed/Laser@
  • xCoords: de stand van de horizontale servo (0 tot 180)
  • yCoords: de stand van de verticale servo (0 tot 180)
  • Speed: hoe snel de turret beweegt (0 tot 100)
  • Laser: 1 is aan, 0 is uit

De @ markeert het einde van het commando. Zonder dat teken weet de server niet dat het hele bericht binnen is.

De besturingspagina

De besturingspagina: een groot zwart vlak met een rode rand, met daaronder de x- en y-coördinaten en de status van de laser.
Beweeg je muis over het zwarte vlak en de turret beweegt mee.

Als client heb ik een webpagina gemaakt met JavaScript. Die stuurt de positie van je muis binnen een zwart vlak via een AJAX-verzoek door naar de turret. Er zijn ook andere manieren om met de ESP32 te praten, bijvoorbeeld met een Python-script op een Raspberry Pi.

index.php is de pagina met het zwarte vlak. turretComm.php is het script dat met de ESP32 communiceert. Zet beide bestanden op een webserver; dat kan een echte server zijn, maar ook een lokale WAMP-omgeving op Windows.

Op regel 32 van index.php staat:

var turretCommURL = "URL_TO_TURRET_COMM";

Vervang dit door de URL van turretComm.php op jouw webserver.

In turretComm.php moeten deze regels kloppen met je ESP32:

$port = 80;
$ip = 'IP_ADDRESS_TURRET';

De poort staat standaard op 80; heb je die in de firmware veranderd, pas hem dan hier ook aan. Vervang IP_ADDRESS_TURRET door het IP-adres van de ESP32, en laat de aanhalingstekens staan.

Open daarna index.php en je bestuurt de turret. Elke 25 milliseconden gaat de positie van je muis naar de turret.

Behuizing

3D-ontwerp van de laserturret: een witte bolle kap op twee zwarte servohouders, met de laser aan de zijkant en de voet uit elkaar getrokken.
Het 3D-ontwerp: kap, servohouders en voet.

Ik heb de behuizing in zwart en wit PLA geprint, maar andere materialen kunnen ook. De STL-bestanden zitten in de download.

De ESP32 en de laser heb ik met smeltlijm vastgezet. De servo’s kun je vastschroeven in de schroefgaten, maar ze klemmen ook al vrij stevig in het plastic.

Elektronica

Zo sluit je de servo’s en de laser aan op de ESP32:

  • Horizontale servo: rood → 5V, zwart → GND, oranje → GPIO4
  • Verticale servo: rood → 5V, zwart → GND, oranje → GPIO2
  • Laser: rood → GPIO27, zwart → GND
De achterkant van de laserturret, met de gekleurde draadjes van de servo’s en het bordje in de voet.
Van achteren: de bedrading van de servo’s.

Video en download

Heb jij ook een idee?

Vertel me wat je wilt maken. Een schets of een paar zinnen is genoeg om te beginnen.