Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Detector de Rango Portátil – Kit DIY Arduino Nano con HC-SR04, Batería 18650 y Carcasa Impresa en 3D

Componentes y suministros

Arduino Nano R3 × 1
Sensor ultrasónico HC-SR04 (genérico) × 1
Celda 18650 × 1
Cargador Li-ion TP4056 × 1
Convertidor DC-DC Boost 5V × 1
Zumbador (buzzer) × 1
Potenciómetro rotativo (genérico) × 1
Interruptor deslizante × 1
LED (genérico) × 4 Rojo (2), Verde (1), Azul (1)
Resistencia 330 ohm × 2
Tornillos M3 cabeza allen 10mm (OpenBuilds) × 1 4 unidades
Cables 18 AWG × 1
Piezas impresas en 3D × 1 3 partes para la carcasa
Adaptador de rosca × 1

Herramientas y máquinas necesarias

Aplicaciones y servicios en línea

Sobre este proyecto

Introducción

El departamento de Ciencias del Ejercicio de Lehman College realizaba estudios sobre entrenamiento con pesas. Hubo inconsistencias en el rango de movimiento de las repeticiones, lo que podía influir significativamente en los datos. Me pidieron crear un dispositivo que identificara el rango completo de movimiento para ejercicios con máquinas o pesos grandes.

El dispositivo debía cumplir:

Partes

La mayoría de partes se muestran abajo; para lista completa ver BoM arriba. Las piezas se eligieron por disponibilidad, no por ser óptimas. La huella podría reducirse mucho con PCBs personalizados, componentes SMT o batería LiPo.

Detector de Rango Portátil – Kit DIY Arduino Nano con HC-SR04, Batería 18650 y Carcasa Impresa en 3D
Detector de Rango Portátil – Kit DIY Arduino Nano con HC-SR04, Batería 18650 y Carcasa Impresa en 3D

Código

La librería NewPing es requerida (enlace abajo). La frecuencia del zumbador y los límites superior/inferior son variables globales modificables. Los límites se refieren a la distancia mínima y máxima que lee el sensor, mapeada al valor analógico [0,5]V del potenciómetro.

int frequency = 700; // Frecuencia en Hz
int lower_bound = 60;  // Distancia en mm
int upper_bound = 200; // Distancia en mm

Tres pitidos al encender indican arranque correcto (ver setup()). Luego loop() solicita datos al sensor ultrasónico y los compara con el umbral del potenciómetro.

Impresión 3D

Todos los archivos están en Thingiverse, o un archivo condensado al final. El modelo considera limitaciones de impresión 3D: voladizos minimizados con chaflanes de 45°, reduciendo soportes. Holguras generosas para que encajen en impresoras con distinta calibración.

Detector de Rango Portátil – Kit DIY Arduino Nano con HC-SR04, Batería 18650 y Carcasa Impresa en 3D
Detector de Rango Portátil – Kit DIY Arduino Nano con HC-SR04, Batería 18650 y Carcasa Impresa en 3D

Tiempos de impresión (mi caso):

Montaje

Los esquemáticos están al final. Primero inserte piezas sin cablear para confirmar encajes.

Detector de Rango Portátil – Kit DIY Arduino Nano con HC-SR04, Batería 18650 y Carcasa Impresa en 3D
Detector de Rango Portátil – Kit DIY Arduino Nano con HC-SR04, Batería 18650 y Carcasa Impresa en 3D

Usé cables de cables IDE reciclados. Se pueden pelar grupos manteniéndolos unidos, dando orden.

Detector de Rango Portátil – Kit DIY Arduino Nano con HC-SR04, Batería 18650 y Carcasa Impresa en 3D
Detector de Rango Portátil – Kit DIY Arduino Nano con HC-SR04, Batería 18650 y Carcasa Impresa en 3D

La mayor parte de la electrónica va montada en una pieza impresa, así que requiere planificación de rutas de cables.

Desoldé los LEDs SMD del cargador TP4056 y soldé cables de extensión y LEDs THT de 3mm en su lugar. Las resistencias limitadoras siguen integradas. Hay un video de alguien haciendo esta reubicación.

Detector de Rango Portátil – Kit DIY Arduino Nano con HC-SR04, Batería 18650 y Carcasa Impresa en 3D

El Arduino Nano solo tenía 2 pads de GND accesibles, así que usé una placa de tiras (stripboard) para expandir GND y línea 5V (ver foto).

Detector de Rango Portátil – Kit DIY Arduino Nano con HC-SR04, Batería 18650 y Carcasa Impresa en 3D
Detector de Rango Portátil – Kit DIY Arduino Nano con HC-SR04, Batería 18650 y Carcasa Impresa en 3D

Rompa la pista en la stripboard (marca con X roja) para no cortocircuitar 5V a GND. Solo corte el cobre superior, no toda la fibra.

Cablee componentes fuera de la carcasa, probando encaje y longitudes ocasionalmente.

Detector de Rango Portátil – Kit DIY Arduino Nano con HC-SR04, Batería 18650 y Carcasa Impresa en 3D

Recorté 6mm el potenciómetro para que no sobresalga tanto.

Detector de Rango Portátil – Kit DIY Arduino Nano con HC-SR04, Batería 18650 y Carcasa Impresa en 3D

La conexión a la celda 18650 se soldó directamente (mala práctica: sobrecalentar daña la celda y puede fallar con el tiempo. Lo correcto es soldar por puntos una tira de aluminio).

Usé pegamento caliente para fijar electrónica (vergonzosamente). Evítelo cuando sea posible; diseño mecánico correcto y tornillos duran más. Es entendible para prototipos, pero nunca en producción.

Detector de Rango Portátil – Kit DIY Arduino Nano con HC-SR04, Batería 18650 y Carcasa Impresa en 3D

Resumen

En retrospectiva, preferiría un sensor IR en vez de ultrasónico, pero no lo supe hasta experimentar. Los IR tienen FOV más estrecho pero distancia máxima mucho menor (~1m).

Para una v2: LiPo en vez de 18650 (el adaptador de rosca grande pesa y ocupa espacio). El estándar para trípode es 1/4", una simple tuerca de ferretería basta. PCBs personalizados reducirían volumen a la mitad.

Para un prototipo de concepto a entrega en 2 semanas, estoy contento.

Futuro del proyecto

Experimentando con el sensor ultrasónico, descubrí limitaciones: FOV ~±15° (30° total), así que un objeto puede disparar el zumbador antes de estar justo encima, dando lecturas indeseadas. Además, si el plano del objeto no es perpendicular a la onda sonora, el sensor no recibe reflexión y no mide distancia.

Mi plan inicial era poner la unidad en el suelo y que los discos de una barra de pesas dispararan el zumbador al bajar past el umbral. Un compañero ingeniero propuso invertir: montar el sensor en la barra móvil apuntando al suelo. Así el suelo es el disparador, y elimina inexactitudes por FOV ancho.

La propuesta no solo soluciona los problemas, sino que es fácil de implementar. El pedido de la tuerca adaptadora 1/4" traía adaptador 1/4"→3/8" Y 3/8"→1/4". ¡El segundo sí servirá!

Como no tenía Dremel al modelar, tuve que contabilizar todo el adaptador de trípode. Eso más la celda 18650 aumentaron peso. No quiero añadir más, así que recortaré el segundo adaptador antes de modelar el soporte. Retomaré en una semana para completar esta solución alternativa. Mientras tanto, ¡funciona!

Código

RangeDetectionDevice.ino Arduino
/** Viktor Silivanov 3/22/2018 Portable distance detection device using the HC-SR04 Ultrasonic sensor with distance adjustment for triggering the buzzer. **/ 
//******************** Libraries ****************************************************************************************************************************************************************************************************************
#include <NewPing.h>
//******************** Pins ********************************************************************************************************************************************************************************************************************
//Analog Pins
#define wiper A5
//Digital Pins
#define echo 2
#define trig 3
#define ON_LED 7
#define buzzer 8
#define buzzer_LED 9
//******************** Global Variables *********************************************************************************************************************************************************************************************************
//User Modification Allowed
int frequency = 700; //Frequency in Hz
int lower_bound = 60; //Distance in mm
int upper_bound = 200; //Distance in mm
//Do Not Modify
int buzz_time = 250; //Time in milliseconds for buzzer right upon startup
int buzz_delay = 280; //Time in milliseconds for buzzer delay right upon startup
int max_distance = 400; //Argument for object in the NewPing library
int i = 0;
int distance;
int threshold;
NewPing sonar(trig, echo, max_distance); //Instanciation of object "sonar"
//******************** Setup ********************************************************************************************************************************************************************************************************************
//This function runs only once
void setup() {
  Serial.begin(9600);
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
  pinMode(buzzer, OUTPUT);
  pinMode(buzzer_LED, OUTPUT);
  pinMode(ON_LED, OUTPUT);
  digitalWrite(ON_LED, HIGH); //Turns on green LED; Stays on while unit is on
  //Buzzer beeps 3 times upon turning on device
  while(i < 3){
    digitalWrite(buzzer_LED, HIGH);
    tone(buzzer, frequency, buzz_time);
    delay(buzz_delay);
    i++;
  }
  digitalWrite(buzzer_LED, LOW);
}
//******************** Runs Endlessly ***********************************************************************************************************************************************************************************************************
void loop() {
  distance = sonar.ping_cm(); //Object "sonar" utilizes ping_cm() function from the library, which returns a value in cm.
  threshold = analogRead(wiper); //Obtain analog value from wiper of the potentiometer
  threshold = map(threshold, 0, 1023, lower_bound, upper_bound); //Translate analog readings into trigger range.
  if(distance != 0 && distance < threshold){
    //Condition to trigger the buzzer
    tone(buzzer, frequency);
    digitalWrite(buzzer_LED, HIGH);
  } else{
    //State of buzzer & LED otherwise
    noTone(buzzer);
    digitalWrite(buzzer_LED, LOW);
  }
  //serial_test(); //Uncommment this to view data from the serial monitor
}
//******************** Test Function ************************************************************************************************************************************************************************************************************
//Utilizes serial monitor to display some values. Used for testing/debugging purposes.
void serial_test(){
  Serial.print("Ping: ");
  Serial.print(distance);
  Serial.println("cm");
  Serial.print("Range: [");
  Serial.print(lower_bound);
  Serial.print(", ");
  Serial.print(upper_bound);
  Serial.println("] cm");
  Serial.print("Threshold: ");
  Serial.print(threshold);
  Serial.println("cm");
  delay(100);
}

Piezas personalizadas y envoltorios

Las 3 partes están guardadas en un archivo.

Esquemáticos

Detector de Rango Portátil – Kit DIY Arduino Nano con HC-SR04, Batería 18650 y Carcasa Impresa en 3D

Proceso de manufactura

  1. Detector de idiomas TinyML con Edge Impulse en Arduino Nano 33 BLE Sense
  2. Construye un Juego Giroscópico en Tiempo Real con Arduino Nano y Sensor MPU-6050
  3. Proyecto Dados Digitales Arduino: Construye tu Propio Generador de Números Aleatorios con LCD
  4. Construye tu Propio Juego de Ruleta de 37 LEDs con Arduino Nano
  5. ATtiny85 Mini Arcade: Snake – Construye una Consola Portátil OLED
  6. Construir una lámpara de escritorio reactiva al audio con Arduino Nano
  7. Coche Robot Seguidor de Rostros Autónomo con Arduino Nano y OpenCV
  8. Proyecto de electroplacado de cobre: Construye un sistema inteligente con Arduino UNO
  9. Pong Neón en Matriz NeoPixel con Arduino Nano
  10. Estación Portátil de Temperatura – Sensor TMP36 y Pantalla LCD Precisa
  11. Crea Secuencias de Luz Impactantes con Arduino y Registro de Desplazamiento