Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Tragbarer Reichweitendetektor

Komponenten und Verbrauchsmaterialien

Arduino Nano R3
× 1
Ultraschallsensor - HC-SR04 (Generic)
× 1
18650 Zelle
× 1
TP4056 Lithium-Ionen-Ladegerät
× 1
DC-DC-5V-Aufwärtswandler
× 1
Summer
× 1
Drehpotentiometer (allgemein)
× 1
Schiebeschalter
× 1
LED (generisch)
Rot (2), Grün (1), Blau (1)
× 4
Widerstand 330 Ohm
× 2
OpenBuilds M3-Kopfschrauben
10 mm M3-Schrauben (4)
× 1
Drähte
18 AWG
× 1
3D-gedruckte Teile
3 Teile für das Gehäuse
× 1
Gewindeadapter
× 1

Notwendige Werkzeuge und Maschinen

3D-Drucker (generisch)
Ich habe einen Anet A8 verwendet
Lötkolben (generisch)
Heißklebepistole (generisch)
Dremel
Oder ein beliebiges Drehwerkzeug

Apps und Onlinedienste

Arduino-IDE
Müssen die NewPing-Bibliothek herunterladen
Simplify3D
Oder jeder beliebige Slicer

Über dieses Projekt

Einführung

Das Institut für Sportwissenschaft des Lehman College führte Studien zum Thema Krafttraining durch. Bei Wiederholungen traten Inkonsistenzen im Bewegungsumfang auf, die die Daten erheblich beeinflussen konnten. Ich wurde gebeten, ein Gerät zu entwickeln, das den vollen Bewegungsumfang für Übungen mit Maschinen oder größeren Gewichten erkennt.

Das Gerät muss die folgenden Bedingungen erfüllen :

  • Einstellbarer Abstand
  • Nicht dauerhaft an Maschinen befestigt.
  • Stativ kompatibel
  • Keine Kabel

Video

Teile

Die meisten Teile werden unten gezeigt, aber eine vollständige Liste finden Sie in der Stückliste oben. Die verwendeten Teile werden nicht ausgewählt, weil sie optimal sind; damit musste ich arbeiten. Der Platzbedarf könnte mit kundenspezifischen PCBs, SMT-Komponenten oder einem LiPo-Akku stark reduziert werden.

Code

Die NewPing-Bibliothek ist erforderlich, damit der Code (unten bereitgestellt) kompiliert werden kann.

Die Summerfrequenz und die oberen/unteren Grenzen sind globale Variablen, die geändert werden können. Die oberen/unteren Grenzen beziehen sich auf den minimalen und maximalen Abstand, den der Sensor liest, der auf den analogen Wert [0,5]V vom Potentiometer abgebildet wird.

int-Frequenz =700; //Frequenz in Hz
int lower_bound =60; //Abstand in mm
int upper_bound =200; //Abstand in mm

Beim Einschalten ertönen 3 Pieptöne, um anzuzeigen, dass der Bootvorgang erfolgreich war (siehe setup() Schleife). Als nächstes loop() fordert kontinuierlich Daten vom Ultraschallsensor an und vergleicht sie mit dem vom Potentiometer eingestellten Schwellenwert.

3D-Druck

Alle Dateien wurden auf thingiverse hochgeladen, oder eine komprimierte Datei befindet sich am Ende der Seite. Die Verwendung von CAD wird hier nicht behandelt. Das Modell wurde unter Berücksichtigung der Einschränkungen des 3D-Drucks erstellt. Überhänge wurden durch die Verwendung von 45-Grad-Fasen minimiert, was das Trägermaterial reduziert. Die Abstände waren großzügig, sodass die Teile passen sollten, obwohl sie auf unterschiedlich kalibrierten Druckern gedruckt wurden.

Die Druckzeiten variieren, aber meine Druckzeiten waren wie folgt:

  • Top Piece:2 Stunden 40 Minuten
  • Unteres Stück:2 Stunden 20 Minuten
  • Knopf:20 Minuten

Montage

Die Schaltpläne finden Sie unten der Seite. Teile werden ohne Verkabelung eingesetzt, um die Passungen zu bestätigen.

Geborgene IDE-Kabel lieferten alle Drähte. Gruppen von Drähten können abgezogen werden, während sie aneinander befestigt bleiben, was für eine gewisse Ordnung sorgt.

Der Großteil der Elektronik ist an einem der gedruckten Teile montiert, daher müssen einige Überlegungen zur Kabelführung und -verwaltung angestellt werden.

Die SMD-Anzeige-LEDs auf der TP4056-Platine wurden entlötet. An ihrer Stelle wurden Verlängerungsdrähte und 3mm THT-LEDs angelötet. Strombegrenzungswiderstände sind noch in die Platine integriert. Es gibt ein Video von jemandem, der diesen Umzug durchführt.

Der Arduino Nano hatte nur 2 zugängliche Erdungspads, daher wurde ein Stripboard verwendet, um die Anzahl der Erdungspads zu erweitern. Das gleiche wurde mit der 5V-Leitung gemacht, die im Bild unten zu sehen ist.

Das Unterbrechen der Verbindung auf der Leiste ist erforderlich, damit 5 V nicht mit Masse kurzgeschlossen werden. Das rote „X“ zeigt die Stelle des Bruchs. Es muss nur das oberste Kupfer unterbrochen werden, nicht die gesamte Glasfaserplatte.

Komponenten wurden außerhalb des Gehäuses verdrahtet. Sie wurden gelegentlich in das Gehäuse eingebaut, um die Drahtlänge zu messen und auf Drahtstörungen zu prüfen.

Das Potentiometer wurde um 6 mm getrimmt, damit es nicht so weit herausragt.

Die Verbindung zum 18650 wurde direkt angelötet, was schlechte Praxis ist. Eine Überhitzung der Zelle beschädigt sie und kann mit der Zeit ausfallen. Das Punktschweißen eines Aluminiumbandes ist die richtige Art, 18650er zu verbinden.

Heißkleber wurde schändlicherweise verwendet, um die Elektronik zu befestigen. Vermeiden Sie nach Möglichkeit die Verwendung von Heißkleber. Korrekte mechanische Konstruktion und Befestigungselemente überdauern Heißkleber. Es wird mit der Zeit versagen. Für Prototypen ist es verständlich, aber für Produktionsteile wird niemals Heißkleber verwendet.

Zusammenfassung

Im Nachhinein hätte ich lieber einen IR-Sensor als den Ultraschall verwendet, aber das hätte ich nie wissen können, bis ich anfing, mit dem Ultraschallsensor zu experimentieren. IR-Sensoren haben ein schmaleres Sichtfeld mit einem Kompromiss aus einer viel geringeren maximalen Entfernung (~ 3 Fuß).

Gäbe es eine zweite Version, würde ein LiPo den 18650 ersetzen. Die große Rändelmutter ist schwer und braucht Platz. Das Standardgewinde für Stativhalterungen ist 1/4", es reicht also eine einfache 1/4" Mutter aus dem Baumarkt. Kundenspezifische PCBs würden das Volumen um die Hälfte reduzieren.

Mit einem Prototyp, der vom Konzept bis zur Übergabe innerhalb von 2 Wochen konzipiert wurde, bin ich zufrieden.

Zukunft des Projekts

Als ich mit dem Ultraschallsensor experimentierte, lernte ich mehr über seine Grenzen. Der erste ist, dass sein Sichtfeld einen Winkel von ~±15° (insgesamt 30°) hat. Das bedeutet, dass ein Objekt den Summer auslösen kann, bevor es sich direkt über dem Sensor befindet. Dies führt zu Ungenauigkeiten und unerwünschten Messwerten. Wenn die Objektebene nicht senkrecht (oder innerhalb des Toleranzwinkels) zur gesendeten Schallwelle ist, empfängt der Sensor keine reflektierte Welle und kann keinen Abstandswert verarbeiten.

Mein ursprünglicher Plan war es, das Gerät auf dem Boden ruhen zu lassen und es den Platten einer Hantelstange zu ermöglichen, den Summer auszulösen, wenn sie über die Schwelle abgesenkt wurden. Dieses System bestand aus einem festen Sensor und einem beweglichen Auslöser. Mein Ingenieurskollege hatte eine alternative Lösung vorgeschlagen, bei der das System invertiert wurde. Er schlug vor, den Sensor an der beweglichen Stange zu montieren und ihn dabei auf den Boden zu richten. So wurde der Boden zum Auslöser. Es beseitigte auch Ungenauigkeiten aufgrund eines breiten Sichtfelds, wie bereits erwähnt.

Der Vorschlag war nicht nur eine großartige Lösung für die gegebenen Probleme, sondern er ist auch sehr einfach zu implementieren. Die Bestellung des 1/4" Stativmutternadapters kam mit einem 1/4" -> 3/8" Adapter UND einem 3/8" -> 1/4" Adapter. Der zweite wird tatsächlich zum Einsatz kommen!

Da ich keinen Zugriff auf meinen Dremel hatte, als ich zum ersten Mal mit dem 3D-Modellieren begann, musste ich den gesamten Stativadapter berücksichtigen. Dies in Kombination mit einer 18650er Zelle erhöhte das Gewicht deutlich. Ich möchte nicht mehr Gewicht hinzufügen als nötig, deshalb kürze ich den zweiten Stativadapter, bevor ich die Montierung modelliere. Ich werde in einer Woche auf das Projekt zurückkommen, um diese alternative Montagelösung abzuschließen. Bis dahin funktioniert es trotzdem!

Code

  • RangeDetectionDevice.ino
RangeDetectionDevice.inoArduino
/** Viktor Silivanov 22.03.2018 Tragbares Distanzmessgerät mit Ultraschallsensor HC-SR04 mit Distanzeinstellung zum Auslösen des Summers.**///**************** ****** Bibliotheken ****************************************** ************************************************* ************************************************* ************************************************* ****************#include //******************** Pins **** ************************************************* ************************************************* ************************************************* ************************************************* ********//Analoge Pins#Define Wischer A5//Digital Pins#Define Echo 2#Define Trig 3#Define ON_LED 7#Define Summer 8#Define Summer_LED 9//******** ************ Globale Variablen ************************************ ************************************************* ************************************************* ************************************** ************************** // Benutzermodifikation erlaubtint Frequenz =700; // Frequenz in Hzint lower_bound =60; //Abstand in mmint upper_bound =200; //Abstand in mm // Nicht ändernint Buzz_time =250; // Zeit in Millisekunden für Summer direkt beim Startint Buzz_delay =280; // Zeit in Millisekunden für Summerverzögerung direkt beim Startint max_distance =400; //Argument für Objekt in der NewPing-Bibliothekint i =0;int distance;intthreshold; NewPing-Sonar (trig, echo, max_distance); //Instanz des Objekts "sonar"//******************** Setup ******************** ************************************************* ************************************************* ************************************************* ****************************************** // Diese Funktion wird nur einmal ausgeführtvoid setup () { Serial.begin (9600); // Ermöglicht die Verwendung eines seriellen Monitors mit einer Baudrate von 9600 // Pin I/O Type Deklaration pinMode (trig, OUTPUT); pinMode (Echo, EINGANG); pinMode (Summer, AUSGANG); pinMode (Summer_LED, AUSGANG); pinMode (ON_LED, AUSGANG); digitalWrite (ON_LED, HIGH); // Schaltet grüne LED ein; Bleibt an, während das Gerät eingeschaltet ist // Summer piept 3 Mal beim Einschalten des Geräts während (i <3) {digitalWrite (buzzer_LED, HIGH); Ton (Summer, Frequenz, Summen_Zeit); Verzögerung (buzz_delay); i++; } digitalWrite(buzzer_LED, LOW);} //******************** Läuft endlos ***************** ************************************************* ************************************************* ************************************************* **********************************void loop () { Abstand =sonar.ping_cm (); //Objekt "sonar" verwendet die Funktion ping_cm() aus der Bibliothek, die einen Wert in cm zurückgibt. Abstand dann diesen Wert annehmen Schwelle =analogRead (Wischer); // Analogwert vom Schleifer des Potentiometers erhalten Threshold =map(threshold, 0, 1023, lower_bound, upper_bound); // Analoge Messwerte in Triggerbereich übersetzen. Werte des Schwellenwerts aktualisieren if (Abstand! =0 &&Abstand  

Kundenspezifische Teile und Gehäuse

Alle 3 Teile werden in einer Datei gespeichert

Schaltpläne


Herstellungsprozess

  1. TinyML-Spracherkennung basierend auf Edge Impulse &Arduino
  2. Arduino-Gyroskop-Spiel mit MPU-6050
  3. Arduino Digital Dice
  4. DIY 37 LED-Roulette-Spiel
  5. ATtiny85 Mini Arcade:Schlange
  6. Arduino Audio Reactive Desk Light
  7. Smart Face Tracking Roboterauto
  8. Galvanisieren mit Kupfer
  9. NeoMatrix Arduino Pong
  10. Tragbare Temperaturstation