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.
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
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
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