Tabla de contenido:

Rastreador de tareas TOYL: 3 pasos (con imágenes)
Rastreador de tareas TOYL: 3 pasos (con imágenes)

Video: Rastreador de tareas TOYL: 3 pasos (con imágenes)

Video: Rastreador de tareas TOYL: 3 pasos (con imágenes)
Video: Mood Trackers 🌟💗 2024, Mes de julio
Anonim
Image
Image
Rastreador de tareas TOYL
Rastreador de tareas TOYL
Rastreador de tareas TOYL
Rastreador de tareas TOYL

No lo odie cuando está planeando trabajar o peor aún, está en medio de una sesión de trabajo y recibe una notificación en su teléfono; una "verificación rápida" se convierte horas después. Además, ¿sabe cuánto tiempo trabaja en determinadas tareas en relación con el tiempo que ha destinado a trabajar por semana?

Ingrese al Rastreador de tareas TOYL. Le permite apagar su teléfono y concentrarse en el trabajo, al mismo tiempo que le permite configurar la cantidad de tiempo que le gustaría trabajar por semana, digamos 60 horas, y las tareas que le gustaría hacer. Cuando te sientas para una sesión, tienes una idea de cuánto tiempo te queda para tu trabajo en general. El Rastreador tiene dos modos: Temporizador, donde preestableces cuánto tiempo te gustaría dedicar por tarea por semana, y Cronómetro, donde puedes simplemente iniciar y detener el temporizador después de seleccionar una tarea.

Suministros

Circuito

  • Pluma de Adafruit Huzzah
  • Pluma de AdafruitAla
  • Pines de cabezal macho
  • Pines de cabecera hembra
  • Batería de 500mAh
  • Resistencias de 100K ohmios x2
  • Cinta aislante
  • Alambre trenzado
  • Pelacables
  • Ventilador de soldadura

Caja

  • Lámina acrílica opaca de 24 "x18"
  • Cinta de dos lados
  • Acceso a una cortadora láser
  • Software de vectores

Paso 1: suelde su circuito

Suelde su circuito
Suelde su circuito
Suelde su circuito
Suelde su circuito
Suelde su circuito
Suelde su circuito

Suelde las clavijas del cabezal hembra al Feather Huzzah. Este tutorial es útil para la configuración del hardware Feather Huzzah. Luego, suelde los pines del cabezal macho al FeatherWing. Soldarlos de esta manera le permite unir y separar el Feather Wing del Feather Huzzah cuando sea necesario. Esto es especialmente útil cuando necesita agregar resistencias a su FeatherWing, que es el siguiente paso. Conecte resistencias de 100K ohmios de cada pin 0 y 2, conectados a 3V.

Configure su hardware Feather Huzzah

Configure su hardware Feather Wing

Paso 2: agregue su código

Agrega tu código
Agrega tu código
Agrega tu código
Agrega tu código

Este código es una adaptación del código de Internet de las cosas de la lección 5. Si el tiempo lo permite, me gustaría reemplazar el servicio Preceptitaton por uno que rastrea las tareas que se agregan a través del subprograma ToDosit IFTTT. Por el momento, tendría que ingresar manualmente un conjunto de tareas y usar el Botón A para recorrerlas. Además, me hubiera gustado haber codificado el temporizador para que cuente en minutos y se detenga al pasar a la siguiente tarea. Un gran agradecimiento a Becky Stern por crear el código base para el temporizador y recorrer las tareas. Si está interesado en conectar el proyecto a Internet, le recomiendo encarecidamente que siga este conjunto de clases.

// Instructables Código de muestra de la clase de Internet de las cosas // El circuito muestra los datos de Internet // Los datos meteorológicos se recopilan en una fuente // Varios NeoPixels visualizan las condiciones meteorológicas // // Modificado por Becky Stern 2017 // basado en el ejemplo de suscripción de Adafruit IO

// Adafruit invierte tiempo y recursos en proporcionar este código fuente abierto.

// ¡Apoye Adafruit y el hardware de código abierto comprando // productos de Adafruit! // // Escrito por Todd Treece para Adafruit Industries // Copyright (c) 2016 Adafruit Industries // Con licencia de MIT. // // Todo el texto anterior debe incluirse en cualquier redistribución.

/ ************************ Configuración IO de Adafruit ********************* *********

/ visite io.adafruit.com si necesita crear una cuenta, // o si necesita su clave Adafruit IO. #define IO_USERNAME "YourUsernameHere" #define IO_KEY "YourIOKeyHere"

/ ******************************* Configuración WIFI *************** ********************** /

#define WIFI_SSID "WifiName"

#define WIFI_PASS "WifiPassword"

#include "AdafruitIO_WiFi.h"

AdafruitIO_WiFi io (IO_USERNAME, IO_KEY, WIFI_SSID, WIFI_PASS);

/ ************************ El programa principal comienza aquí ******************** ********** /

#incluir #incluir #incluir #incluir

#incluir

#incluir #incluir #incluir

#define OLED_RESET 3

Pantalla Adafruit_SSD1306 (128, 32, & Wire, OLED_RESET);

// esta constante no cambiará:

const int buttonPinA = 0; // los pines a los que se adjuntan los botones pulsadores const int buttonPinB = 16; // este ya tiene una resistencia pullup, los otros dos necesitan uno const int buttonPinC = 2;

// Las variables cambiarán:

int buttonAPushCounter = 0; // contador del número de pulsaciones de botón int buttonAState = 0; // estado actual del botón int lastButtonAState = 0; // estado anterior del botón

// Las variables cambiarán:

int buttonBPushCounter = 0; // contador del número de pulsaciones de botón int buttonBState = 0; // estado actual del botón int lastButtonBState = 0; // estado anterior del botón

// Las variables cambiarán:

int buttonCPushCounter = 0; // contador del número de pulsaciones de botones int buttonCState = 0; // estado actual del botón int lastButtonCState = 0; // estado anterior del botón

String displayForecast = "desconocido";

int timerVal = 0;

unsigned long lastStartTime = 0; bool timerEnabled = 0;

AdafruitIO_Feed * precipitación = io.feed ("precipitación"); // configurar el feed de 'precipitación'

// AdafruitIO_Feed * taskmanager = io.feed ("taskmanager"); // configurar el feed del 'administrador de tareas'

configuración vacía () {

pinMode (buttonPinA, INPUT); pinMode (buttonPinB, INPUT_PULLUP); pinMode (buttonPinC, INPUT);

// SSD1306_SWITCHCAPVCC = generar voltaje de pantalla desde 3.3V internamente

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // Dirección 0x3C para 128x32

// Muestra el contenido del búfer de visualización inicial en la pantalla -

// la biblioteca inicializa esto con una pantalla de bienvenida de Adafruit. display.display (); retraso (2000); // Pausa por 2 segundos

// Limpia el búfer.

display.clearDisplay ();

// inicia la conexión en serie

Serial.begin (115200);

// conectarse a io.adafruit.com

Serial.print ("Conexión a Adafruit IO"); io.connect (); // configurar un gestor de mensajes para el feed de 'precipitación'. // la función handleMessage (definida a continuación) // será llamada siempre que se reciba un // mensaje de adafruit io. precipitación-> onMessage (handleMessage);

// espera una conexión

while (io.status () <AIO_CONNECTED) {Serial.print ("."); retraso (500); }

// Estamos conectados

Serial.println (); Serial.println (io.statusText ());

}

bucle vacío () {

// io.run (); es obligatorio para todos los bocetos.

// siempre debe estar presente en la parte superior de su función de ciclo //. mantiene al cliente conectado a // io.adafruit.com y procesa cualquier dato entrante. io.run ();

// lee el pin de entrada del botón pulsador:

buttonAState = digitalRead (buttonPinA); buttonBState = digitalRead (buttonPinB); buttonCState = digitalRead (buttonPinC);

// compara el buttonState con su estado anterior

if (buttonAState! = lastButtonAState || buttonBState! = lastButtonBState || buttonCState! = lastButtonCState) {// si el estado ha cambiado, incrementa el contador if (buttonAState == LOW) {// si el estado actual es BAJO, entonces el botón se presionó buttonAPushCounter ++; Serial.print ("número de pulsaciones del botón A:"); Serial.println (buttonAPushCounter); } if (buttonBState == LOW) {// si el estado actual es LOW, entonces se presionó el botón buttonBPushCounter ++; Serial.print ("número de pulsaciones del botón B:"); Serial.println (buttonBPushCounter); Serial.println ("Temporizador de inicio"); timerEnabled = 1; lastStartTime = millis (); } if (buttonCState == LOW) {// si el estado actual es BAJO, entonces se presionó el botón buttonCPushCounter ++; Serial.print ("número de pulsaciones del botón C:"); Serial.println (buttonCPushCounter); Serial.println ("Detener temporizador"); timerEnabled = 0; }} if (timerEnabled == 1) {// incrementa el temporizador solo cuando se ha iniciado timerVal = (millis () - lastStartTime) / 1000; }

// mostrar posición 1 - pronóstico

// if (buttonAPushCounter% 3 == 0) {// display.clearDisplay (); // display.setTextSize (1); // display.setTextColor (WHITE); // display.setCursor (0, 0); // display.print ("Pronóstico:"); // display.println (displayForecast); // display.setCursor (0, 16); // display.println ("segunda línea"); // display.println ("contenido de ejemplo"); // display.display (); // // retraso (2000); //}

// mostrar posición 1 - Tarea 1

if (buttonAPushCounter% 3 == 0) {display.setTextSize (1); display.setTextColor (BLANCO); display.clearDisplay (); display.setCursor (0, 0); display.println ("Investigación - Entrevistas"); display.println (); display.print ("Temporizador:"); display.println (timerVal); display.display (); }

// mostrar posición 2 - Tarea 2

if (buttonAPushCounter% 3 == 1) {display.clearDisplay (); display.setCursor (0, 0); display.println ("Creación de código de estudio"); display.println (); display.print ("Temporizador:"); display.println (timerVal); display.display (); }

// mostrar la posición 3 - Tarea 3

if (buttonAPushCounter% 3 == 2) {display.clearDisplay (); display.setCursor (0, 0); display.println ("DSV - Croquizado"); display.println (); display.print ("Temporizador:"); display.println (timerVal); display.display (); }

// guarda el estado actual como el último estado, // para la próxima vez a través del bucle lastButtonAState = buttonAState; lastButtonBState = buttonBState; lastButtonCState = buttonCState;

}

// esta función se llama siempre que un mensaje

// se recibe de Adafruit IO. se adjuntó a // el feed en la función setup () anterior. void handleMessage (AdafruitIO_Data * datos) {

Pronóstico de cadena = datos-> toString (); // almacena los datos meteorológicos entrantes en una cadena

Serial.print ("recibido <-"); Serial.println (pronóstico); displayForecast = pronóstico; // las siguientes cadenas almacenan las distintas palabras del informe meteorológico IFTTT que he descubierto hasta ahora String task1 = String ("Task 1"); String rain = String ("Lluvia"); String lightrain = String ("Lluvia ligera"); String rainshower = String ("Ducha de lluvia"); String AMshowers = String ("AM Duchas"); String rainandsnow = String ("Lluvia y nieve"); Cadena de nieve = Cadena ("Nieve"); String snowshower = String ("Lluvia de nieve"); String nublado = String ("Nublado"); String mostcloudy = String ("Mayormente nublado"); Cadena parcialmente nublado = Cadena ("Parcialmente nublado"); String clearsky = String ("Limpiar"); String fair = String ("Aceptable"); Cadena soleado = Cadena ("Soleado");

// Estas declaraciones if comparan la variable meteorológica entrante con las condiciones almacenadas y controlan los NeoPixels en consecuencia.

// si hay lluvia en el pronóstico if (forecast.equalsIgnoreCase (lluvia) || forecast.equalsIgnoreCase (lightrain) || forecast.equalsIgnoreCase (rainshower) || forecast.equalsIgnoreCase (AMshowers)) {Serial.println ("precipitación en el pronóstico de hoy ");

}

// si hay nieve en el pronóstico if (Forecast.equalsIgnoreCase (nieve) || Forecast.equalsIgnoreCase (rainandsnow) || Forecast.equalsIgnoreCase (snowshower)) {Serial.println ("precipitación en el pronóstico de hoy");

}

// si hay sol en el pronóstico if (pronóstico.equalsIgnoreCase (cielo claro) || pronóstico.equalsIgnoreCase (justo) || pronóstico.equalsIgnoreCase (soleado)) {Serial.println ("algún tipo de sol en el pronóstico de hoy");

}

// si hay nubes en el pronóstico if (pronóstico.equalsIgnoreCase (nublado) || pronóstico.equalsIgnoreCase (principalmente nublado) || pronóstico.equalsIgnoreCase (parcialmente nublado)) {Serial.println ("cielo nublado en el pronóstico de hoy");

}

}

Paso 3: crear el contenedor / shell

Crear el contenedor / shell
Crear el contenedor / shell
Crear el contenedor / shell
Crear el contenedor / shell
Crear el contenedor / shell
Crear el contenedor / shell
Crear el contenedor / shell
Crear el contenedor / shell

Para el caparazón, comience por determinar el tamaño que le gustaría que tenga su marco, o puede descargar mi archivo. Una vez que determine el tamaño, puede usar MakerCase para crear el diseño del archivo vectorial.

Ejecute el archivo a través del cortador láser; debería tardar unos 5 minutos. A partir de entonces, junte el caparazón.

No tomé en cuenta el ancho del material que hace que mis botones sean difíciles de alcanzar. Todavía necesito encontrar una manera de adjuntarlos. También son muy pequeños, lo que dificulta trabajar con ellos.

Recomendado: