Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Draagbare afstandsdetector

Componenten en benodigdheden

Arduino Nano R3
× 1
Ultrasone sensor - HC-SR04 (algemeen)
× 1
18650 cel
× 1
TP4056 lithium-ion-oplader
× 1
DC-DC 5V Boost Converter
× 1
Zoemer
× 1
Draaipotentiometer (algemeen)
× 1
Schuifschakelaar
× 1
LED (generiek)
Rood (2), Groen (1), Blauw (1)
× 4
Weerstand 330 ohm
× 2
OpenBuilds M3-kopschroeven
10 mm M3-bouten (4)
× 1
Draden
18 AWG
× 1
3D-geprinte onderdelen
3 onderdelen voor de behuizing
× 1
Draadadapter
× 1

Benodigde gereedschappen en machines

3D-printer (algemeen)
Ik heb een Anet A8 gebruikt
Soldeerbout (algemeen)
Hot lijmpistool (algemeen)
Dremel
Of een ander roterend gereedschap

Apps en online services

Arduino IDE
Moet de NewPing-bibliotheek downloaden
Simplify3D
Of een slicer naar keuze

Over dit project

Inleiding

Het Lehman College Exercise Science Department deed onderzoek naar krachttraining. Er waren inconsistenties in het bewegingsbereik voor herhalingen, wat de gegevens aanzienlijk zou kunnen beïnvloeden. Ik werd benaderd om een ​​apparaat te maken dat het volledige bewegingsbereik zou identificeren voor oefeningen waarbij machines of grotere gewichten werden gebruikt.

Het apparaat moest voldoen aan de volgende voorwaarden :

  • Instelbare afstand
  • Niet permanent aan machines bevestigd.
  • Compatibel met statief
  • Geen draden

Video

Onderdelen

De meeste onderdelen zijn hieronder weergegeven, maar voor een volledige lijst wordt verwezen naar de BoM hierboven. De gebruikte onderdelen zijn niet geselecteerd omdat ze optimaal zijn; daar moest ik mee werken. De voetafdruk kan aanzienlijk worden verminderd met aangepaste PCB's, SMT-componenten of een LiPo-batterij.

Code

De NewPing-bibliotheek is vereist om de code (onderaan verstrekt) te compileren.

De zoemerfrequentie en de boven-/ondergrenzen zijn globale variabelen die kunnen worden gewijzigd. De boven-/ondergrenzen verwijzen naar de min en max afstand die de sensor afleest, die is toegewezen aan de analoge waarde [0,5]V van de potentiometer.

int frequentie =700; //Frequentie in Hz
int ondergrens =60; //Afstand in mm
int upper_bound =200; //Afstand in mm

Er klinken 3 pieptonen bij het opstarten om aan te geven dat het opstarten is gelukt (zie de setup() lus). Vervolgens loop() vraagt ​​continu om gegevens van de ultrasone sensor en vergelijkt deze met de door de potentiometer ingestelde drempel.

3D-printen

Alle bestanden zijn geüpload naar thingiverse, of een gecomprimeerd bestand is onderaan de pagina te vinden. Het gebruik van CAD wordt hier niet behandeld. Bij het maken van het model is rekening gehouden met de beperkingen van 3D-printen. Overhangen werden geminimaliseerd door het gebruik van afschuiningen van 45 graden, waardoor ondersteuningsmateriaal wordt verminderd. Er waren royale spelingen, dus onderdelen zouden moeten passen, ondanks dat ze op verschillend gekalibreerde printers zijn afgedrukt.

Afdruktijden kunnen variëren, maar mijn afdruktijden waren als volgt:

  • Topstuk:2 uur en 40 minuten
  • Onderstuk:2 uur en 20 minuten
  • Knop:20 minuten

Montage

De schema's van de schakelingen staan ​​onderaan van de pagina. Onderdelen worden ingevoegd zonder te worden bedraad om de pasvorm te bevestigen.

Geborgen IDE-kabels leverden alle draden. Groepen draden kunnen worden afgepeld terwijl ze aan elkaar blijven zitten, wat voor enige ordening zorgt.

De meeste elektronica is op een van de geprinte onderdelen gemonteerd, dus er moet goed nagedacht worden over de bedrading en het beheer.

De SMD-indicator-LED's op het TP4056-bord zijn gedesoldeerd. Verlengdraden en 3 mm THT-LED's werden op hun plaats gesoldeerd. Stroombegrenzende weerstanden zijn nog steeds geïntegreerd in het bord. Er is een video van iemand die deze verhuizing uitvoert.

De arduino nano had slechts 2 toegankelijke grondpads, dus een stripboard werd gebruikt om het aantal grondpads uit te breiden. Hetzelfde werd gedaan met de 5V-lijn, die te zien is in de onderstaande afbeelding.

Het verbreken van de verbinding op de strip is nodig zodat 5V niet wordt kortgesloten naar massa. De rode "X" illustreert de locatie van de pauze. Alleen het bovenste koper moet worden verstoord, niet het hele glasvezelbord.

Componenten werden buiten de behuizing bedraad. Ze werden af ​​en toe in de behuizing gemonteerd om de draadlengte te meten en te controleren op draadinterferentie.

De potmeter is 6 mm ingekort, zodat hij niet zo veel uitsteekt.

De verbinding met de 18650 was direct gesoldeerd, wat een slechte gewoonte is. Oververhitting van de cel zal deze beschadigen en kan na verloop van tijd falen. Het puntlassen van een aluminium strip is de juiste manier om 18650's aan te sluiten.

Hete lijm werd schandelijk gebruikt om de elektronica vast te zetten. Vermijd het gebruik van hete lijm indien mogelijk. Correct mechanisch ontwerp en bevestigingsmiddelen gaan langer mee dan hete lijm. Het is gedoemd om na verloop van tijd te mislukken. Het is begrijpelijk voor prototypes, maar productie-onderdelen zullen nooit hete lijm gebruiken.

Samenvatting

Achteraf had ik liever een IR-sensor gebruikt dan de ultrasone, maar ik had dit nooit kunnen weten totdat ik begon te experimenteren met de ultrasone sensor. IR-sensoren hebben een smaller gezichtsveld met een compromis van een veel lagere maximale afstand (~ 3ft).

Als er een tweede versie zou komen, zou een LiPo de 18650 vervangen. De grote gekartelde adapermoer is zwaar en neemt ruimte in beslag. De standaard schroefdraad voor statiefbevestigingen is 1/4", dus een simpele 1/4" moer uit de bouwmarkt is voldoende. Aangepaste PCB's zouden het volume met de helft verminderen.

Voor een prototype dat binnen 2 weken van concept tot oplevering is bedacht, ben ik tevreden.

Toekomst van het project

Toen ik aan het experimenteren was met de ultrasone sensor, leerde ik meer over de beperkingen ervan. De eerste is dat de FOV een hoek heeft van ~±15° (30° totaal). Dit betekende dat een object de zoemer kan activeren voordat het zich direct boven de sensor bevindt. Dit levert onnauwkeurigheden en ongewenste metingen op. Als het vlak van het object bovendien niet loodrecht (of binnen de tolerantiehoek) staat op de uitgezonden geluidsgolf, ontvangt de sensor geen gereflecteerde golf en kan hij geen waarde voor afstand verwerken.

Mijn oorspronkelijke plan was om de eenheid op de grond te laten rusten en de platen op een gewichtstrainingsbalk de zoemer te laten activeren wanneer ze voorbij de drempel werden verlaagd. Dit systeem bestond uit een vaste sensor en een bewegende trigger. Mijn collega-ingenieursmaatje had een alternatieve oplossing voorgesteld, waarbij het systeem werd geïnverteerd. Hij stelde voor om de sensor op de bewegende balk te monteren terwijl hij naar de grond wijst. Zo werd de grond de trekker. Het elimineerde ook onnauwkeurigheden als gevolg van een brede kijkhoek, zoals eerder vermeld.

Het voorstel was niet alleen een geweldige oplossing voor de gegeven problemen, maar het is ook heel gemakkelijk te implementeren. De bestelling voor de 1/4" statiefmoeradapter kwam met een 1/4" -> 3/8" adapter EN een 3/8" -> 1/4" adapter. De tweede zal daadwerkelijk in gebruik worden genomen!

Omdat ik geen toegang had tot mijn dremel toen ik voor het eerst begon met 3D-modelleren, dwong dat me om rekening te houden met de hele statiefadapter. Dit in combinatie met een 18650 cel verhoogde het gewicht aanzienlijk. Ik wil niet meer gewicht toevoegen dan nodig is, dus ik zal de tweede statiefadapter inkorten voordat ik de houder ga modelleren. Ik kom over een week terug op het project om deze alternatieve montageoplossing te voltooien. Tot die tijd werkt het nog steeds!

Code

  • RangeDetectionDevice.ino
RangeDetectionDevice.inoArduino
/** Viktor Silivanov 22-3-2018 Draagbaar afstandsdetectieapparaat met behulp van de HC-SR04 Ultrasone sensor met afstandsaanpassing voor het activeren van de zoemer.**///*********** ****** Bibliotheken ***************************************** ********************************************** ********************************************** ********************************************** ***************#include //******************** Pinnen **** ********************************************** ********************************************** ********************************************** ********************************************** ********//Analoge pinnen#define wiper A5//Digitale pinnen#define echo 2#define trig 3#define ON_LED 7#define buzzer 8#define buzzer_LED 9//******** ************ Globale variabelen ************************************ ********************************************** ********************************************** ************************************ ******************************//Gebruiker Wijziging Toegestane frequentie =700; // Frequentie in Hzint lower_bound =60; //Afstand in mmint upper_bound =200; //Afstand in mm//Niet wijzigen in buzz_time =250; // Tijd in milliseconden voor zoemer direct bij opstartenint buzz_delay =280; // Tijd in milliseconden voor zoemervertraging direct bij opstartenint max_distance =400; //Argument voor object in de NewPing-bibliotheekint i =0;int afstand;int drempel; NewPing-sonar (trig, echo, max_distance); // Instantie van object "sonar"//******************** Setup ******************** ********************************************** ********************************************** ********************************************** *****************************************// Deze functie wordt slechts eenmaal uitgevoerdvoi setup() { Serieel.begin(9600); // Maakt gebruik van seriële monitor met een baudrate van 9600 mogelijk // Pin I/O Type Declaration pinMode (trig, OUTPUT); pinMode (echo, INPUT); pinMode (zoemer, UITGANG); pinMode (zoemer_LED, UITGANG); pinMode (ON_LED, UITGANG); digitalWrite (ON_LED, HOOG); // Schakelt groene LED in; Blijft aan zolang het apparaat aan staat //Buzzer piept 3 keer bij inschakelen apparaat while(i <3){ digitalWrite(buzzer_LED, HIGH); toon (zoemer, frequentie, buzz_time); vertraging (buzz_delay); i++; } digitalWrite(buzzer_LED, LOW);}//******************** Loopt eindeloos **************** ********************************************** ********************************************** ********************************************** *********************************** ongeldige lus() { distance =sonar.ping_cm(); //Object "sonar" gebruikt de functie ping_cm() uit de bibliotheek, die een waarde in cm retourneert. Afstand neemt dan die waardedrempel aan =analogRead (wiper); // Verkrijg analoge waarde van wisser van de potentiometerdrempel =map (threshold, 0, 1023, lower_bound, upper_bound); //Vertaal analoge metingen naar het triggerbereik. Werk de waarden van de drempel bij als (afstand! =0 &&afstand   

Aangepaste onderdelen en behuizingen

Alle 3 delen worden in één bestand opgeslagen

Schema's


Productieproces

  1. TinyML-taaldetector-gebaseerd op Edge Impulse &Arduino
  2. Arduino-gyroscoopspel met MPU-6050
  3. Arduino digitale dobbelstenen
  4. DIY 37 LED Roulette Game
  5. ATtiny85 Mini Arcade:Snake
  6. Arduino Audio Reactive Desk Light
  7. Smart Face Tracking Robot Car
  8. galvaniseren met koper
  9. NeoMatrix Arduino Pong
  10. Draagbaar temperatuurstation
  11. Light Sequence Creator