Der smarte Handschuh für Radfahrer





Übersetzt von instructables.com, Autor des Projekts: Matlek



In diesem Artikel werde ich den Herstellungsprozess eines "intelligenten Handschuhs" und seines LED-Panels detailliert beschreiben, um die Sicherheit von Radfahrern und anderen Personen, die auf der Straße unterwegs sind, zu erhöhen. Zunächst sehen Sie eine kleine Demonstration der Funktionsweise:





Wie es funktioniert



Der Handschuh enthält ein Arduino-Board, das Daten vom Gyroskop und Beschleunigungsmesser sammelt. Der Code verwendet das tinyML-Modell des "winzigen maschinellen Lernens" und erkennt Gesten: Jede Bewegung der Hand wird analysiert und in ein Signal umgewandelt (Hand neigt sich nach links, rechts, vorwärts, rückwärts usw.). Das Signal wird über Bluetooth (BLE) an einen anderen Mikrocontroller gesendet, an den eine LED-Matrix angeschlossen ist (die beispielsweise an einem Rucksack befestigt werden kann). Entsprechend dem empfangenen Signal gibt die Matrix bestimmte Zeichenfolgen aus, damit andere Fahrer und Radfahrer verstehen können, was der Radfahrer tun wird (z. B. Pfeile nach links, rechts oder Text).



















Ursprung des Projekts



Erstens fahre ich mit dem Fahrrad zur Arbeit und verbringe mehr als eine Stunde am Tag im Sattel (ca. 22 km). Es ist immer interessant, aber ich lebe in einer der bevölkerungsreichsten Städte Frankreichs, in der es häufig zu Unfällen mit Autos und Radfahrern kommt. Auch Marseille ist die schlechteste Stadt für Radfahrer in Frankreich - es gibt einen verzweifelten Mangel an Radwegen . Daher widmet sich dieses Projekt sowohl der Erhöhung der Sicherheit von Radfahrern als auch dem Versuch, die Stadtbehörden auf dieses Problem aufmerksam zu machen.



Zweitens wird dieses Projekt allen Mitgliedern der Bewegung helfen, miteinander zu kommunizieren und sich besser zu verstehen. Aus meiner Sicht sind die meisten Probleme, die auf der Straße auftreten, auf die Tatsache zurückzuführen, dass einige Verkehrsteilnehmer andere missverstanden haben, was zu Angst und dann zu Aggression führte. Ich möchte, dass ein solches Gerät den Verkehrsteilnehmern hilft, sich besser zu verstehen. Die Pfeile zeigen die Richtung an, und Sie können den Text auch buchstabenweise anzeigen (ich befürworte jedoch höflich und konstruktiv Inschriften, um Konflikte zu vermeiden).



Warum Smart Glove?



Ich begann im Winter mit der Arbeit an dem Projekt und das kalte Wetter motivierte mich, das Gerät an meinem Handschuh zu befestigen. Aber mir wurde schnell klar, dass die Idee nicht sehr gut war, weil es in unserer Gegend im Sommer ziemlich heiß ist. Also entschied ich, dass es am besten ist, das Gerät in eine Box zu legen und es an meinem Arm zu befestigen. Da ich aber nicht wusste, wie ich es anders benennen sollte, beschloss ich, das Wort „Handschuh“ im Titel zu belassen.



"Smart" stammt aus der maschinellen Lerntechnik, die ich in diesem Projekt verwendet habe.



Inspiration



Das Projekt ist im Grunde eine Mischung aus zwei anderen Projekten. Ich habe nicht bei Null angefangen, sondern ihre Best Practices verwendet, die ich dann weiterentwickelt habe. Folgendes hat mich bei der Entwicklung inspiriert:



  • Gestenerkennung mit Arduino Nano 33 BLE SENSE.
  • kein spezifisches Projekt, sondern das Konzept der Verwendung von LED-Arrays für Radfahrer. Es gibt viele solcher Projekte - einige verwenden Rucksäcke mit integrierten Paneelen, andere bieten lediglich eine vorgefertigte Matrix, die überall platziert werden kann. In jedem Fall werden diese LED-Matrizen eher von einer Fernbedienung als von einer Gestenerkennung gesteuert.


Komponenten



Für den 3D-Druck - ein 3D-Drucker oder Zugriff auf einen.



Elektronik



  • Arduino Nano 33 BLE SENSE;
  • Ein weiterer MI mit BLE (Arduino Nano 33 BLE, Arduino 33 BLE SENSE, Arduino Nano 33 IOT, ESP32 usw.). Ich habe mich für ein ESP32-Board entschieden.
  • LED-Streifen (WS2812B). Ich habe 160 LEDs verwendet, um eine 20x8-Matrix zu erstellen.
  • 4-Stufen-Puffer von 3 V bis 5 V: 74AHCT125.
  • Kondensator 1000 uF.
  • SPST-Schalter, 3 Stk.
  • Brotbrett.
  • Drähte.
  • Batterie 9 V.
  • Externe Batterie.




  • 3.
  • -.


1: (, )











Nachdem ich einen Artikel über Arduino und maschinelles Lernen gelesen hatte , beschloss ich, es auch auszuprobieren. Da es in letzter Zeit mehrere neue Arduino Nano-Boards gab, habe ich vor dem Kauf eine Vergleichsplatte erstellt, um die beste Wahl zu treffen.







Alle Boards sind interessant, aber ich konnte nur eines für die Gestenerkennung verwenden - Arduino Nano 33 BLE SENSE. Nur sie hat die richtigen Sensoren und Tensorflow Lite-Unterstützung. Ein weiterer interessanter Punkt ist, dass die Arduino Nano 33 IOT-, BLE- und BLE SENSE-Karten über ein eigenes Bluetooth verfügen, sodass jede dieser Karten auf der LED-Matrix zum Empfangen von BLE-Signalen verwendet werden kann.



Der in das Board geladene Code basiert auf vielen verschiedenen Arduino-Programmen, die ich während der Entwicklung gefunden habe. Daher habe ich mich vor Arbeitsbeginn entschlossen, sie anhand der gefundenen Beispiele zu testen.



Lass uns mit BLE spielen



In diesem Projekt ist die Bluetooth-Kommunikation von entscheidender Bedeutung, da auf diese Weise das Signal von den Sensoren an das LED-Array gesendet wird. Vorher hatte ich noch nie zwei Arduino-Boards über BLE verbunden. Also habe ich mit den folgenden Beispielen aus der ArduinoBLE-Bibliothek geübt :



  • Die LedControl-Skizze, die mit der Arduino Nano 33 BLE Sense-Karte und einem Knopf mit einem an Pin 2 angeschlossenen Pull-up-Widerstand verwendet wird. Im Beispiel werden die BLE-Peripheriegeräte abgefragt, bis ein Dienst mit der UUID 19b10000-e8f2-537e-4f6c-d104768a1214 gefunden wird. Nach dem Erkennen und Herstellen einer Verbindung wird die BLE-LED des Peripheriegeräts per Knopfdruck ferngesteuert.
  • Skizze für LED und Arduino Nano 33 IoT.


Leider hatte ich viele Probleme mit der Skizze für die LED-3-Platinen, die beim Laden "kaputt" waren. Ich habe keine Ahnung, was das Problem war, aber ich habe beschlossen, das Arduino-Board durch ein anderes MI mit BLE zu ersetzen - das ESP32-Board. Mit dem neuen Board habe ich Folgendes verwendet:



  • BLE_write-Skizze aus der BLE ESP32 ARDUINO-Bibliothek. Ich habe einige Änderungen hinzugefügt, damit es mit dem Arduino Nano 33 BLE SENSE Board funktioniert. In Schritt 10 können Sie die BLE_write-Skizze und die Smartglove_BLE_LED-Matrix-Skizze vergleichen, die ich geschrieben und hochgeladen habe.


Spielen wir mit den eingebauten RGB-LEDs



Wussten Sie, dass das Arduino Nano 33 BLE SENSE-Board über integrierte RGB-LEDs verfügt? In diesem Projekt sind sie nützlich, um den korrekten Betrieb der Gestenerkennung zu überprüfen. Wir müssen überprüfen, ob das Signal an das LED-Array gesendet wurde. Da sich das Panel jedoch höchstwahrscheinlich auf der Rückseite des Radfahrers befindet, ist es für ihn schwierig zu verstehen, dass die Gestenerkennung funktioniert hat und das Signal gesendet wurde.



Hier war nichts kompliziertes, ich habe nur das Blink-Beispiel ein wenig optimiert . Der Code zeigt an, dass die rote LED an Pin 22, die grüne an Pin 23 und die blaue an Pin 24 leuchtet. Das Eingangssignal LOW schaltet die LED ein, HIGH - schaltet sie aus.



const int LED_BUILTIN_RED = 22;
const int LED_BUILTIN_GREEN = 23;
const int LED_BUILTIN_BLUE = 24;

//  setup        
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN_RED, OUTPUT);
  pinMode(LED_BUILTIN_GREEN, OUTPUT);
  pinMode(LED_BUILTIN_BLUE, OUTPUT);
}

//  loop  
void loop() {
  digitalWrite(LED_BUILTIN_RED, LOW);   //  LED (HIGH –  )
  delay(1000);                       //  
  digitalWrite(LED_BUILTIN_RED, HIGH);    //  LED,    LOW
  delay(1000);                       //   

digitalWrite(LED_BUILTIN_GREEN, LOW);   //  LED (HIGH –  )
  delay(1000);                       //  
  digitalWrite(LED_BUILTIN_GREEN, HIGH);    //  LED,    LOW
  delay(1000);   //  
  
  digitalWrite(LED_BUILTIN_BLUE, LOW);   //  LED (HIGH –  )
  delay(1000);                       //  
  digitalWrite(LED_BUILTIN_BLUE, HIGH);    //  LED,    LOW
  delay(1000);                       //  
}


Spielen wir mit Gestenerkennung und tinyML



Schließlich habe ich das Tutorial zur Verwendung von maschinellem Lernen auf Arduino studiert und anhand eines Beispiels für die Gestenerkennung geübt. Das Beispiel ist in drei Hauptteile unterteilt:





Schritt 2: Handschuh 1/6 (Elektronik)























In den Schritten 2 bis 7 stelle ich dasselbe Diagramm zur Verfügung, in dem die Schritte angegeben sind, damit Sie den Herstellungsprozess eines Handschuhs leichter verstehen können.



Die Elektronikschaltung für den Handschuh ist sehr einfach:



  • Arduino Board.
  • 9V Batterie (ich benutze eine wiederaufladbare Batterie).
  • SPST-Schalter.


Schritt 3: Handschuh 2/6 - Körper











































Der Fall ist einfach und besteht aus nur zwei Teilen, die auf einem 3D-Drucker gedruckt werden:



  • Der gelbe Teil enthält die Arduino-Platine, den Akku und den Schalter. Durch die Löcher im Gehäuse können Sie den Akku aufladen und das Arduino-Board neu programmieren, ohne das Gehäuse zerlegen zu müssen.
  • Der schwarze Teil ist die Abdeckung, die den Akku und die Platine schützt.


Ich befestige es mit einem Klettverschluss an meiner Hand.



Ich habe auch ein Logo gezeichnet, das ich dann auf den Deckel geklebt habe. Es stellt einen Radfahrer dar, der von oben betrachtet wird, und hat drei Pfeile - geradeaus, links und rechts. Der vierte Pfeil ist von den anderen drei getrennt, da die Fahrräder nicht rückwärts fahren.



Dateien



content.instructables.com/ORIG/FS2/L3M3/K9N93ZYW/FS2L3M3K9N93ZYW.stl



content.instructables.com/ORIG/F72/21NG/K9N93ZZG/F7221NGK9N93ZZG.stl



content.instructables.com/NORIG9SZFD3. stl



Schritt 4: Handschuh 3/6: Datenaufzeichnung































Nach dem Zusammenbau des Geräts ist es Zeit, Daten zu schreiben. Ziel ist es, jede Geste mehrmals aufzuzeichnen. Ich habe den Schwellenwert für das Gyroskop festgelegt, und wenn dieser Wert überschritten wird, gibt der Arduino die aufgezeichneten Daten an den Monitor aus.



Ich habe folgende Gesten aufgezeichnet:



  • Die Hand zeigt nach links (eine normale Geste des Radfahrers, um nach links abzubiegen).
  • Bremsen (Geste mit den Fingern, die nach dem Bremshebel greifen).
  • Die Hand lehnt sich zurück.
  • Die Hand beugt sich vor.
  • Die Hand neigt sich nach links.
  • Die Hand neigt sich nach rechts.


Natürlich können Sie Ihre Gesten aufzeichnen.



Um die Daten aufzuzeichnen, habe ich ein Programm geschrieben, das alle 20 Striche die Farben der LED wechselt. Es half mir zu verstehen, wann ich zu einer anderen Geste übergehen sollte. Ich habe den Arduino an meinen Computer angeschlossen, das Port-Tracking-Programm geöffnet und den Laptop in meinen Rucksack gesteckt.



Nachdem ich alle Gesten aufgezeichnet hatte, ging ich zur letzten Stufe über - ich kopierte die Datenausgabe in das Programm und speicherte sie im CSV-Format.



content.instructables.com/ORIG/FC7/B0JT/K9UEA78V/FC7B0JTK9UEA78V.ino



Schritt 5: Handschuh 4/6: Training















Für das Training habe ich das folgende Beispiel verwendet und nur einige Zeilen darin korrigiert. Vor dem Training sollten Sie überprüfen, ob Sie für jede Geste eine eigene CSV-Datei haben und die Daten in jeder Datei auf diese bestimmte Geste verweisen.



Verwenden Sie auf der Google Colab-Website den Link im Abschnitt "Daten hochladen", um Ihre Daten hochzuladen.



Fügen Sie im Abschnitt "Diagrammdaten (optional)" den Namen einer der Dateien hinzu.



filename = "Arm_left.csv"



Korrigieren Sie dann diese Zeile, um nur die Gyroskopdaten auszugeben:



#index = range(1, len(df['aX']) + 1)
index = range(1, len(df['gX']) + 1)


Kommentieren Sie die folgenden Zeilen aus - wir verwenden keine Beschleunigungsmesserdaten:



#plt.plot(index, df['aX'], 'g.', label='x', linestyle='solid', marker=',')
#plt.plot(index, df['aY'], 'b.', label='y', linestyle='solid', marker=',')
#plt.plot(index, df['aZ'], 'r.', label='z', linestyle='solid', marker=',')
#plt.title("Acceleration")
#plt.xlabel("Sample #")
#plt.ylabel("Acceleration (G)")
#plt.legend()
#plt.show()


Fügen Sie im Abschnitt "Analysieren und Vorbereiten der Daten" alle Dateinamen hinzu:



#GESTURES = ["punch", "flex",]
GESTURES = ["Arm_left", "Brake", "Hand_back-tilt", "Hand_front-tilt", "Hand_left-tilt", "Hand_right-tilt"]


Ändern Sie die Anzahl der Samples mit einer Geste, wenn Sie sie im Arduino-Code geändert haben:



#SAMPLES_PER_GESTURE = 119
SAMPLES_PER_GESTURE = 64


Es bleibt nur die Beschleunigung zu kommentieren:



# normalize the input data, between 0 to 1:
# - acceleration is between: -4 to +4
# - gyroscope is between: -2000 to +2000
      tensor += [
          #(df['aX'][index] + 4) / 8,
          #(df['aY'][index] + 4) / 8,
          #(df['aZ'][index] + 4) / 8,
          (df['gX'][index] + 2000) / 4000,
          (df['gY'][index] + 2000) / 4000,
          (df['gZ'][index] + 2000) / 4000
      ]


Nachdem Sie das gesamte Programm durchlaufen haben, können Sie das trainierte Modell herunterladen.



Dateien



content.instructables.com/ORIG/F7A/GLEK/K9UEA8Z5/F7AGLEKK9UEA8Z5.csv



content.instructables.com/ORIG/FV1/853G/K9UEA8Z6/FV1853GK9UEA8Z6.csv



content.instructables.com/ORIG8/FQKD9. csv



content.instructables.com/ORIG/F7N/P7AG/K9UEA8Z9/F7NP7AGK9UEA8Z9.csv



content.instructables.com/ORIG/FD4/WZRM/K9UEA8ZA/FD4WZRMK9UEA8ZA.csv



content.in7EA8Fstru2 .csv



Schritt 6: Handschuh 5/6: Arduino-







Code Mein endgültiger Smart-Handschuh-Code ist eine Mischung aus folgenden Programmen:



  • ein Beispiel "LED" aus der Bibliothek "ArduinoBLE" (Peripherie> LED).
  • "IMU_Classifier" von hier .


Ich werde hier nicht näher darauf eingehen. Ich empfehle nur, die Originalprogramme zu lesen, um besser zu verstehen, was passiert.



Fügen Sie Ihr Modell dem Code hinzu und Sie können es testen!



Dateien



content.instructables.com/ORIG/F9N/4SBK/K9UEA98M/F9N4SBKK9UEA98M.h



content.instructables.com/ORIG/FKZ/ODO9/KB52VXZK/FKZODO9KB52VXZK.ino



Schritt 7: Handschuh 6/6: Tests



















Wie Sie dem Video entnehmen können, leuchtet die LED je nach erkannter Geste unterschiedlich auf:





Schritt 8: 1/4 LED Matrix: Elektronik























Wie bereits erwähnt, sind beim Hochladen einer Skizze aus der ArduinoBLE-Bibliothek für eine LED auf dem Arduino Nano 33 BLE SENSE einige Probleme aufgetreten. Deshalb habe ich mich für ESP32 anstelle dieses Boards entschieden. Daher können Sie auf den obigen Fotos beide Boards sehen.



Da sowohl die Arduino Nano 33 BLE SENSE- als auch die ESP32-Karte mit 3,3 V-Logik arbeiten, habe ich einen 4-Pegel-Puffer von 3 V bis 5 V (74AHCT125) hinzugefügt, wie in den Anweisungen von Adafruit empfohlen .



Ich habe auch einen 100uF-Kondensator hinzugefügt, um die LED vor plötzlichen Spannungsspitzen zu schützen.



Ich habe die gesamte Strecke auf einem Steckbrett zusammengebaut.



Es ist zu sehen, dass ich beide Anschlüsse des externen Netzteils verwendet habe, weil ich befürchtet hatte, dass die LED-Matrix zu viel Strom benötigen würde. Daher werden die Matrix und der MI über verschiedene Anschlüsse einer externen Stromquelle mit Strom versorgt.



Schritt 9: LED Array 2/4: Körper























































Ich brauchte ein vorgefertigtes LED-Matrixgehäuse. Daher besteht es aus mehreren Teilen (und auch, weil mein 3D-Drucker sehr klein ist), und ich habe Löcher für die Schrauben in ihnen vorgesehen.



Ich habe wieder Klettverschluss verwendet, um das Panel zu befestigen.



Dateien



content.instructables.com/ORIG/FH6/TB4H/K9N93ZZJ/FH6TB4HK9N93ZZJ.stl



content.instructables.com/ORIG/FK3/BZPC/K9N93ZZK/FK3BZPCK9N93ZZK.stl



content.instructFLUK9NZZ stl



content.instructables.com/ORIG/F38/BF1P/K9N93ZZM/F38BF1PK9N93ZZM.stl



content.instructables.com/ORIG/FJC/DQMY/K9N93ZZN/FJCDQMYK9N93ZZN.stl



content.inelqvf9qfr / .stl



content.instructables.com/ORIG/FJE/C5FG/K9N93ZZR/FJEC5FGK9N93ZZR.stl



content.instructables.com/ORIG/F55/1X43/K9N93ZZS/F551X43K9N93ZZS.stl



Schritt 10: 3/4 LED Matrix: Arduino Code



























Der resultierende Code ist eine Mischung aus den folgenden Codes (und deren Änderung):

  • BLE_Write-Beispiel aus der BLE ESP32 ARDUINO-Bibliothek.
  • MatrixGFXDemo64-Beispiel aus der FastLED NeoMatrix-Bibliothek.




Ich werde hier nicht näher darauf eingehen. Ich empfehle nur, die Originalprogramme zu lesen, um besser zu verstehen, was passiert.



content.instructables.com/ORIG/FIR/RETZ/KB52VXP4/FIRRETZKB52VXP4.ino



Schritt 11: LED-Matrix 4/4: Testen











Es ist Zeit, alles zu überprüfen! Nach dem Erkennen jeder Geste wird ein Signal an die LED-Matrix gesendet, das ein bestimmtes Muster zeigt. Es ist zu sehen, dass die LEDs am Handschuh entsprechend der erkannten Geste aufleuchten.







Schritt 12: Abschlusstests und Abschluss











So sieht es live aus:







Ich bin sehr zufrieden mit dem resultierenden Gerät. Dank des Projekts fühle ich mich mit tinyML und BLE viel sicherer. Seitdem habe ich ein weiteres Arduino Nano 33 IOT gekauft und bin jetzt mit einem sehr interessanten Projekt beschäftigt, über das ich später schreiben werde. Was würde ich in der zweiten Version des von mir beschriebenen Geräts ändern:



  • «». , . - - , . .
  • . , USB . , . .
  • . , . , ( 20 ). – , .


Ich habe mehrere Monate gebraucht, um das Projekt abzuschließen und diesen Text zu schreiben. Wenn etwas unklar ist oder eine Datei fehlt, schreiben Sie in die Kommentare zum Originalartikel .



Siehe auch:






All Articles