Nivel de burbuja electrónica micro Arduino: 5 pasos (con fotos)

Nivel de burbuja electrónica micro Arduino: 5 pasos (con fotos)

Tabla de contenido:

Anonim

Hace aproximadamente un año construí un indicador de nivel de polo de cámara que usaba L.E.Ds para indicar el ángulo de la torre como ayuda visual. Funcionó bien para lo que pretendía, pero siempre he pensado que podría ser "animado" un poco.

Después de tomar una pequeña pantalla LCD Nokia 5110, decidí volver a visitar mi proyecto de nivel electrónico.

Este simple proyecto es el resultado. ¡Espero que alguien lo encuentre útil!

Suministros:

Paso 1: Piezas necesarias

Para este proyecto necesitarás lo siguiente …

1. Un Arduino. (Utilicé un nano pero cualquier arduino debería funcionar)

2. Un sensor de inclinación. (Regresé al Memsic 2125. Principalmente porque tenía algo a mano).

3. Una pantalla LCD Nokia 5110 (¡económica y fácil de encontrar!)

4. Cables. (Muchos cables coloridos!)

5. Breadboard o perfboard.

Paso 2: ¡El montaje es simple!

El montaje es muy fácil porque es todo punto a punto. No hay componentes separados como resistencias, condensadores y así sucesivamente.

Incluí un pinout simple para el sensor de inclinación Memsic 2125.

Las unidades de pantalla Nokia 5110 tienen las descripciones de los pines serigrafiadas en ellas.

Aquí hay una lista de pin a pin para cada parte del Arduino (nano) en mi caso …

--------------------------------------

Arduino <------> Nokia LCD

GND ------------------- GND

5V -------------------- VCC

D4 --------------------- Luz

D5 --------------------- CLK

D6 --------------------- DIN

D7 --------------------- DC

D8 --------------------- CE

D9 --------------------- RST

Para el Memsic 2125

GND ------------------ GND

5V ------------------ VCC

A4 ------------------ XOut

A5 ------------------- YOut

Paso 3: ¿Cómo funciona?

¿Qué lo hace funcionar?

La respuesta corta es calor. El sensor de inclinación es en realidad una pequeña cámara con 4 termómetros súper diminutos dispuestos alrededor de él. A medida que inclina el sensor, aumenta el calor y los termómetros miden la diferencia de temperatura. ¡Es así de simple! La electrónica del chip convierte las diferencias de temperatura en una medida de X e Y y envía esos datos a los pines de X e Y.

Paso 4: ¡El código para hacerlo funcionar!

El código para este pequeño proyecto es bastante simple también.

Dado que el sensor emite sus señales como valores X e Y. Todo lo que realmente necesitamos hacer es leer los valores y convertirlos en algo "real" que podemos mostrar en nuestro LCD 5110.

El Código configura la pantalla 5110. Dibuja un pequeño ojo de buey y luego comienza a leer los datos x, y del memsic.

luego realiza un par de asignaciones para convertir la salida 3000 a 6000 (ish) en 2 valores.

La etapa uno asigna la salida memsic a una escala para la visualización tanto en x como en y (0-48) y (0-84) para que podamos mostrar y animar la burbuja alrededor de la pantalla.

También hay una salida en serie que envía los datos en bruto al usb. no tienes que usarlo pero está ahí si es necesario.

La asignación de la segunda etapa luego ajusta la escala de la pantalla a -90 a 90 para las etiquetas de texto X ad Y en la pantalla para ángulos. (esta es una visualización de ángulo aproximado) no nos preocupa la precisión sin nivel. ¡Sólo queremos una idea general!

Aquí está el código ……

#incluir // arduino micro led visual level #include #include Adafruit_PCD8544 display = Adafruit_PCD8544 (5, 6, 7, 8, 9); // pin 2 - Salida de reloj en serie (SCLK) 5 // pin 3 - Salida de datos en serie (DIN) 6 // pin 4 - Selección de datos / comando (D / C) 7 // pin 12 - Selección de chip LCD (CS) 8 // pin 11 - LCD reset (RST) 9 const int X = A4; // X pin en m2125 const int Y = A5; // Pin Y en m2125 int i = 0; int dist, inv = 0; booleano stan = 0; void setup () {// configure serial Serial.begin (9600); modo de pin (X, ENTRADA); modo de pin (Y, ENTRADA); display.begin (); display.setContrast (50); display.clearDisplay (); } void loop () {// leído en los datos de pulso int pulseX, pulseY; int angleX, angleY; int aceleraciónX, aceleraciónY; pulseX = pulseIn (X, HIGH); pulseY = pulseIn (Y, ALTO); // mapea los datos para la aceleración de visualización de nokiaX = map (pulseX, 3740, 6286, 48, 0); aceleración Y = mapa (pulseY, 3740, 6370, 84, 0); // mapear datos a ángulos crudos anguloX = mapa (aceleración X, 48,0, -90,90); angleY ​​= mapa (aceleración Y, 0,84, -90,90); display.drawRect (0,0,84,48, NEGRO); display.drawLine (42, 0, 42, 48, NEGRO); display.drawLine (0, 24, 84, 24, NEGRO); display.drawCircle (42,24,10, NEGRO); // display bubble display.fillCircle (accelerationY, (accelerationX), 4, BLACK); display.setCursor (4,4); display.println ("X:" + String (angleX)); display.setCursor (4,38); display.println ("Y:" + String (angleY)); display.display (); display.clearDisplay (); // Envíe los datos a la serie en caso de que nos gustaría ver lo que se informa y // el posible uso de la PC. Serial.print ("X"); Serial.print (pulseX); Serial.print ("Y"); Serial.print (pulseY); Serial.println (""); // retrasar la alimentación de datos para que no excedamos el retardo en serie (90); }

Paso 5: ¿Vamos a ver si funciona como lo esperamos?

Después de todo nuestro trabajo duro. Veamos si hace lo que esperamos.

¡Parece que funciona!

¡Una vez instalado en un estuche a batería, estará listo para la acción!