DIY Raspberry Car Touch–Screen Joystick (Teil 6)

Christoph Dähne17.01.2020

tl;dr: Ein Software–Joystick mit nippleJS verbessert die Steuerung und die Motoren werden per Powerbank versorgt, was die Mignons überflüssig macht.

...oder wie ich eine mobile Kamera baute (Teil 6)

Die Steuerung von dem Raspberry Pi Auto aus dem letzten Blog–Artikel hat noch einige Wünsche offen gelassen. Außerdem haben mich ein paar Messergebnisse überrascht, weshalb ich den Schaltplan aus Teil 3 ein wenig angepasst habe. In diesem Blog–Artikel geht es darum,

  • die Steuerung auf einem Handy nutzbar zu machen.
  • die Motoren über die Powerbank mit Strom zu versorgen (wegen der interessanten Messergebnisse).
Raspberry Car mit Powerbank

Steuerung per Joystick

Die Buttons auf dem Handy gedrückt halten… das hat nicht so gut geklappt. Auf einem Touch–Screen wollte ich die Steuerung über einen Software–Joystick lösen.  Die Steuerung per Fingerposition macht viel Spaß und der weg ist frei für eine sehr sensible Steuerung anstelle von "vorwärts", "links" und "rechts". In diesem Artikel gibt es allerdings nur diese drei Kommandos, damit der Code aus dem letzten Artikel unverändert verwendet werden kann. Die Verfeinerung der Steuerung oder den Rückwärtsgang würde ich dir überlassen.

Ein einfacher Joystick ist mit der passenden Library schnell eingebunden: nippleJS. Den statischen Joystick habe ich fast unverändert übernommen und es funktioniert super. Danke an die Contributor auf GitHub.

Screenshot von nippleJS Joystick mit Ausrichtung nach oben

Die controller.html, jetzt im Ordner static, hat sich verändert, in der server.js nur die hervorgehobene Zeilen.

<html> <head> <title>Socket.IO Joystick</title> </head> <body style="background-color: #00AEEF;"> <div id="joystick"/> <script src="https://cdn.jsdelivr.net/npm/socket.io-client@2/dist/socket.io.js"></script> <script src="./nipplejs.js"></script> <script> var joystick = nipplejs.create({ zone: document.getElementById('joystick'), mode: 'static', position: {left: '50%', top: '50%'}, color: 'white', size: Math.round(0.5 * Math.min(window.innerWidth, window.innerHeight)) }); var socket = io(); function command(cmd) { socket.emit('command', cmd); } joystick.on('end', function() { command('stop'); }); joystick.on('dir:up', function() { command('foreward'); }); joystick.on('dir:left', function() { command('left'); }); joystick.on('dir:right', function() { command('right'); }); </script> </body> </html>
const express = require('express'); const app = express(); const http = require('http').createServer(app); const io = require('socket.io')(http); app.get('/', (req, res) => { res.sendFile(__dirname + '/static/controller.html'); }); app.use('/', express.static('static')); io.on('connection', socket => { console.log('something connected'); // broadcast commands socket.on('command', cmd => io.emit('command', cmd)); // stop on disconnect socket.on('disconnect', () => io.emit('command', 'stop')); }); http.listen(3000, () => { console.log('listening on *:3000'); });

Den Joystick könnt ihr in der offiziellen Demo ausprobieren.

Verzicht auf Mignons

Im Betrieb habe ich folgenden Stromverbrauch des Autos gemessen:

  • ca 500 mA bei stehenden Rädern (Stromverbrauch des Raspberry Pi)
  • 500 mA + 250 mA im Leerlauf, also 250 mA für die Motoren
  • 500 mA + 500 mA, wenn ich zwei Räder festgehalten habe

Eine einfache Powerbank mit 10.000 mAh sollte also zwischen 10 und 20 Stunden durchhalten. Angenommen hatte ich, dass die Motoren deutlich mehr Strom verbrauchen als der Raspberry Pi, was ein Grund für die Mignons war. Die Geschwindigkeit des Autos bei den 5 V aus der Powerbank sind auch ok. Daher habe ich die Mignons eingespart und das USB–Kabel kümmert sich um die Stromversorgung der Motoren.

Bei der Messung ging zuerst der Raspberry Pi nicht mehr an: die Spannung war zu niedrig. Die zusätzlichen Kabel bei der Messung waren zu dünn. Über den Kabeln sind über 0,4 V abgefallen und dem Raspberry Pi waren knappe 4,6 V einfach zu wenig. Bedenke also bei der Wahl der Kabel unbedingt den Strom bei Betrieb.

Foto: USB-Pins mit Multimeter messen

Um die Motoren mit dem USB–Kabel zu versorgen, muss man es aufschneiden und die Kabel an den richtigen anlöten. Um das richtige Kabel zu finden, kannst du den Widerstand zwischen den Pins von einen USB–Stecker und dem Kabelende messen (verlasse dich lieber nicht auf die Farben). Bei meinem Kabel war alles normal: rot für 5 V und schwarz für Ground. Die Datenleitungen sind in unserem Fall unnötig.

Hoffentlich hast du genauso viel Spaß, das Auto umherfahren zu lassen, wie ich heute. Viel Spaß bei Basteln und immer her mit Feedback.

Dein Besuch auf unserer Website produziert laut der Messung auf websitecarbon.com nur 0,28 g CO₂.