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 – Arduino Nano DIY Kit met HC-SR04, 18650 Accu en 3D-geprinte Behuizing

Onderdelen en Benodigdheden

OnderdeelAantal
Arduino Nano R31
Ultrasonische Sensor - HC-SR04 (Generiek)1
18650 Accucel1
TP4056 Lithium-Ion Oplader1
DC-DC 5V Step-up Converter1
Buzzer1
Draaipotentiometer (generiek)1
Schuifschakelaar1
LED (generiek) - Rood (2), Groen (1), Blauw (1)4
Weerstand 330 ohm2
OpenBuilds M3 Kapschroef (10mm, 4 stuks)1 set
Draden (18 AWG)1 set
3D-geprinte onderdelen (3 delen voor behuizing)1 set
Draadadapter1

Nodige Tools en Machines

  • 3D-printer (generiek) – gebruikt: Anet A8
  • Solderbout (generiek)
  • Lijm pistool (generiek)
  • Dremel (of enige draaiend gereedschap)

Apps en Online Services

  • Arduino IDE (vereist NewPing bibliotheek)
  • Simplify3D (of elke andere slicer)

Over Dit Project

Inleiding

De Exercise Science-afdeling van Lehman College voerde studies uit rondom gewichtstraining. Er waren inconsistenties in de beweegbereik voor herhalingen, wat de data significant kon beïnvloeden. Ik werd gevraagd een apparaat te maken dat het volledige beweegbereik identificeert voor oefeningen die machines of zwaardere gewichten gebruiken.

Het apparaat moest aan de volgende voorwaarden voldoen:

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

Video

(Video niet beschikbaar in deze tekstversie)

Onderdelen

De meeste onderdelen zijn hieronder getoond; voor een complete lijst zie de BOM bovenaan. De gekozen onderdelen zijn niet per se optimaal; het was wat ik beschikbaar had. De afmetingen zouden aanzienlijk verkleind kunnen worden met custom PCBs, SMD-componenten of een LiPo-accu.

Draagbare Afstandsdetector – Arduino Nano DIY Kit met HC-SR04, 18650 Accu en 3D-geprinte Behuizing
Draagbare Afstandsdetector – Arduino Nano DIY Kit met HC-SR04, 18650 Accu en 3D-geprinte Behuizing

Code

De NewPing bibliotheek is vereist voor de code (onderaan beschikbaar) om te compileren.

De buzzer-frequentie en de boven-/ondergrenzen zijn globale variabelen die aangepast kunnen worden. De boven-/ondergrenzen verwijzen naar de minimale en maximale afstand die de sensor meet, gemapt op de analoge waarde [0,5]V van de potentiometer.

int frequency = 700; // Frequentie in Hz
int lower_bound = 60; // Afstand in mm
int upper_bound = 200; // Afstand in mm

Bij opstarten piept de buzzer 3 keer om een succesvolle boot aan te tonen (zie de setup() lus). Vervolgens vraagt loop() continu data aan de ultrasonische sensor en vergelijkt deze met de drempelwaarde ingesteld door de potentiometer.

3D Printen

Alle bestanden zijn naar Thingiverse geüpload, of als één samengevoegd bestand onderaan de pagina. Het gebruik van CAD wordt hier niet behandeld. Het model is ontworpen met rekening met de beperkingen van 3D-printen. Overhangs zijn geminimaliseerd door 45 graden fasefasen, wat supportmateriaal reduceert. Toleranties zijn ruime, zodat onderdelen moeten passen ondanks verschillende printerkalibraties.

Draagbare Afstandsdetector – Arduino Nano DIY Kit met HC-SR04, 18650 Accu en 3D-geprinte Behuizing
Draagbare Afstandsdetector – Arduino Nano DIY Kit met HC-SR04, 18650 Accu en 3D-geprinte Behuizing

Printtijden (op mijn printer):

  • Bovenstuk: 2 uur 40 minuten
  • Onderstuk: 2 uur 20 minuten
  • Knop: 20 minuten

Montage

De schakelingen zijn onderaan de pagina te vinden. Onderdelen worden eerst zonder bekabeling geplaatst om de pasvorm te controleren.

Draagbare Afstandsdetector – Arduino Nano DIY Kit met HC-SR04, 18650 Accu en 3D-geprinte Behuizing
Draagbare Afstandsdetector – Arduino Nano DIY Kit met HC-SR04, 18650 Accu en 3D-geprinte Behuizing

Gerecycleerde IDE-kabels leverden alle draden. Groepen draden kunnen afgezogen worden terwijl ze aan elkaar blijven hangen, wat orde schept.

Draagbare Afstandsdetector – Arduino Nano DIY Kit met HC-SR04, 18650 Accu en 3D-geprinte Behuizing
Draagbare Afstandsdetector – Arduino Nano DIY Kit met HC-SR04, 18650 Accu en 3D-geprinte Behuizing

De meeste elektronica wordt op een van de geprinte onderdelen gemonteerd, dus er moet nagedacht worden over draadrouting en -beheer.

De SMD-indicatorleds op het TP4056-bord zijn afgesoldeerd. Verlengingsdraden en 3mm THT-leds zijn op hun plaats gesoldeerd. Stroombegrenzende weerstanden zitten nog op het bord. Er is een video beschikbaar van iemand die deze verplaatsing uitvoert.

Draagbare Afstandsdetector – Arduino Nano DIY Kit met HC-SR04, 18650 Accu en 3D-geprinte Behuizing

De Arduino Nano had maar 2 toegankelijke ground-pads, dus een stripprint werd gebruikt om het aantal ground-pads uit te breiden. Hetzelfde werd gedaan met de 5V-lijn, zichtbaar in de foto hieronder.

Draagbare Afstandsdetector – Arduino Nano DIY Kit met HC-SR04, 18650 Accu en 3D-geprinte Behuizing
Draagbare Afstandsdetector – Arduino Nano DIY Kit met HC-SR04, 18650 Accu en 3D-geprinte Behuizing

Het verbreken van de verbinding op de strip is nodig om te voorkomen dat 5V kortgesloten wordt met ground. De rode "X" markeert de locatie van de onderbreking. Alleen het kopperlaagje hoeft onderbroken te worden, niet de hele fiberglasplaat.

Componenten werden buiten de behuizing bekabeld. Ze werden af en toe in de behuizing geplaatst om draadlengte te meten en op interferentie te controleren.

Draagbare Afstandsdetector – Arduino Nano DIY Kit met HC-SR04, 18650 Accu en 3D-geprinte Behuizing

De potentiometer werd 6 mm ingekort zodat hij minder uitsteekt.

Draagbare Afstandsdetector – Arduino Nano DIY Kit met HC-SR04, 18650 Accu en 3D-geprinte Behuizing

De verbinding met de 18650 is direct gesoldeerd, wat slechte praktijk is. Oververhitting van de cel schaadt hem en kan leiden tot uitval. Spotwellen van een aluminiumstrip is de juiste manier om 18650's te verbinden.

Heetlijm is schaamteloos gebruikt om de elektronica te bevestigen. Vermijd heetlijm waar mogelijk. Correct mechanisch ontwerp en bevestigingsmiddelen duren langer. Het zal op den duur falen. Het is begrijpelijk voor prototypes, maar productieonderdelen gebruiken nooit heetlijm.

Draagbare Afstandsdetector – Arduino Nano DIY Kit met HC-SR04, 18650 Accu en 3D-geprinte Behuizing

Samenvatting

In retrospect zou ik een IR-sensor de ultrasonische sensor hebben voorgezogen, maar dat was pas te weten toen ik begon te experimenteren met de ultrasonische sensor. IR-sensoren hebben een smaller zichtsveld met als nadeel een veel lagere maximumafstand (~1 m).

Als er een tweede versie zou zijn, zou een LiPo de 18650 vervangen. De grote geribbelde adaptermoer is zwaar en verbruikt ruimte. De standaard draad voor statiefmontage is 1/4", dus een simpele 1/4" moer uit de bouwmarkt volstaat. Custom PCBs zouden het volume halveren.

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

Toekomst van het Project

Tijdens experimenten met de ultrasoonsensor leerde ik meer over de beperkingen. Ten eerste heeft het zichtsveld een hoek van ~±15° (30° totaal). Dit betekent dat een object de buzzer kan activeren voordat het direct boven de sensor is. Dit levert onnauwkeurigheden en ongewenste metingen. Bovendien, als het vlak van het object niet loodrecht (of binnen de tolerantiehoek) staat op de uitgezonden geluidsgolf, ontvangt de sensor geen gereflecteerde golf en kan geen afstandswaarde verwerken.

Mijn oorspronkelijke plan was om de unit op de grond te laten rusten en de platen op een gewichtstrainingsta te laten de buzzer activeren wanneer ze onder de drempelwaarde zakten. Dit systeem bestond uit een vaste sensor en een bewegende trigger. Mijn mede-ingenieur had een alternatief voorgesteld: het systeem omkeren. Hij stelde voor de sensor op de bewegende sta te monteren, gericht naar de grond. Zo wordt de grond de trigger. Het elimineert ook onnauwkeurigheden door het wijdere zichtsveld.

Het voorstel was niet alleen een geweldige oplossing voor de gegeven problemen, maar ook heel makkelijk te implementeren. De bestelling voor de 1/4" statiefadapter moer kwam met een 1/4" → 3/8" adapter EN een 3/8" → 1/4" adapter. De tweede komt nu van pas!

Omdat ik geen toegang had tot mijn Dremel toen ik begon met 3D-modelleren, was ik gedwongen de hele statiefadapter in rekening te brengen. In combinatie met een 18650-cel nam het gewicht aanzienlijk toe. Ik wil geen extra gewicht toevoegen, dus ik zal de tweede statiefadapter inkorten voordat ik de mount model. Ik kom over een week terug op het project om deze alternatieve montagemethode af te ronden. Tot dan werkt het toch nog!

Code

RangeDetectionDevice.ino (Arduino)
/** Viktor Silivanov 3/22/2018 Draagbare afstandsdetectieapparaat met HC-SR04 ultrasoonsensor en instelbare drempel voor buzzer. **/
//******************** Bibliotheken ****************************************************************************************************************************************************************************************************************
#include <NewPing.h>
//******************** 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 *********************************************************************************************************************************************************************************************************
//Gebruikerswijzigingen toegestaan
int frequency = 700; // Frequentie in Hz
int lower_bound = 60; // Afstand in mm
int upper_bound = 200; // Afstand in mm
//Niet wijzigen
int buzz_time = 250; // Tijd in milliseconden voor buzzer direct na opstart
int buzz_delay = 280; // Tijd in milliseconden voor buzzer vertraging direct na opstart
int max_distance = 400; // Argument voor object in NewPing bibliotheek
int i = 0;
int distance;
int threshold;
NewPing sonar(trig, echo, max_distance); // Instantiëring van object "sonar"
//******************** Setup ********************************************************************************************************************************************************************************************************************
//Deze functie draait maar één keer
void setup() {
  Serial.begin(9600); // Stelt seriële monitor in met baudrate 9600
  //Pin I/O Type Declaratie
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
  pinMode(buzzer, OUTPUT);
  pinMode(buzzer_LED, OUTPUT);
  pinMode(ON_LED, OUTPUT);
  digitalWrite(ON_LED, HIGH); // Zet groene LED aan; blijft aan zolang unit aanstaat
  //Buzzer piept 3 keer bij aanzetten
  while(i < 3){
    digitalWrite(buzzer_LED, HIGH);
    tone(buzzer, frequency, buzz_time);
    delay(buzz_delay);
    i++;
  }
  digitalWrite(buzzer_LED, LOW);
}
//******************** Oneindige Lus ***********************************************************************************************************************************************************************************************************
void loop() {
  distance = sonar.ping_cm(); // Object "sonar" gebruikt ping_cm() functie uit bibliotheek, retourneert waarde in cm. Distance neemt die waarde aan
  threshold = analogRead(wiper); // Haal analoge waarde op van wiper van potentiometer
  threshold = map(threshold, 0, 1023, lower_bound, upper_bound); // Vertaal analoge lezingen naar triggerbereik. Update waarden van threshold
  if(distance != 0 && distance < threshold){
    // Voorwaarde om buzzer te activeren
    tone(buzzer, frequency);
    digitalWrite(buzzer_LED, HIGH);
  } else{
    // Staat van buzzer & LED anders
    noTone(buzzer);
    digitalWrite(buzzer_LED, LOW);
  }
  //serial_test(); // Uncomment dit om data van seriële monitor te bekijken
}
//******************** Test Functie ************************************************************************************************************************************************************************************************************
// Gebruikt seriële monitor om sommige waarden weer te geven. Gebruikt voor testen/debuggen.
void serial_test(){
  Serial.print("Ping: ");
  Serial.print(distance);
  Serial.println("cm");
  Serial.print("Bereik: [");
  Serial.print(lower_bound);
  Serial.print(", ");
  Serial.print(upper_bound);
  Serial.println("] cm");
  Serial.print("Drempel: ");
  Serial.print(threshold);
  Serial.println("cm");
  delay(100);
}

Custom Onderdelen en Behuizingen

Alle 3 delen zijn in één bestand opgeslagen.

Schema's

Draagbare Afstandsdetector – Arduino Nano DIY Kit met HC-SR04, 18650 Accu en 3D-geprinte Behuizing

Productieproces

  1. TinyML Taaldetector met Edge Impulse op Arduino Nano 33 BLE Sense
  2. Bouw een real-time gyroscoop-spel met Arduino Nano & MPU-6050 sensor
  3. Arduino Digitale Dobbelsteen: Bouw Je Eigen LCD-willekeurige Getalgenerator
  4. Bouw Je Eigen 37-LED Roulette-spel met Arduino Nano
  5. ATtiny85 Mini Arcade: Snake – Bouw een Handheld OLED Game Console
  6. Een audio-reactieve bureaulamp bouwen met Arduino Nano
  7. Autonome Gezichtsvolgende Robot Auto met Arduino Nano & OpenCV
  8. Koper Elektrolyseren Project: Bouw een Slim Systeem met Arduino UNO
  9. NeoPixel Matrix Pong op Arduino Nano: Bouw je eigen neon Pong-spel
  10. Draagbare temperatuurmeetstation – Nauwkeurige TMP36 & LCD-display
  11. Indrukwekkende Lichtsequenties Maken met Arduino en Shift Register