Sommario:

TOYL Task Tracker: 3 passaggi (con immagini)
TOYL Task Tracker: 3 passaggi (con immagini)

Video: TOYL Task Tracker: 3 passaggi (con immagini)

Video: TOYL Task Tracker: 3 passaggi (con immagini)
Video: How to Make 3D Hologram Video Projector at Home | DIY 2024, Dicembre
Anonim
Image
Image
Tracker attività TOYL
Tracker attività TOYL
Tracker attività TOYL
Tracker attività TOYL

Non lo odi solo quando hai intenzione di lavorare o peggio, sei nel mezzo di una sessione di lavoro e una notifica arriva sul tuo telefono: un "controllo rapido" diventa ore dopo. Inoltre, sai quanto tempo dedichi a determinate attività in relazione al tempo che hai assegnato per il lavoro a settimana?

Entra in TOYL Task Tracker. Ti consente di spegnere il telefono e concentrarti sul lavoro, mentre contemporaneamente ti consente di impostare la quantità di tempo che desideri lavorare a settimana, ad esempio 60 ore, e le attività che vorresti svolgere. Quando ti siedi per una sessione, hai un'idea di quanto tempo ti rimane per il tuo lavoro complessivo. Il Tracker ha due modalità: Timer, in cui hai preimpostato quanto tempo desideri dedicare a un'attività a settimana e Cronometro, in cui puoi semplicemente avviare e arrestare il timer dopo aver selezionato un'attività.

Forniture

Circuito

  • Piuma di Adafruit Huzzah
  • Adafruit FeatherWing
  • Perni di intestazione maschio
  • Perni di intestazione femmina
  • Batteria da 500 mAh
  • Resistori da 100K ohm x2
  • Nastro isolante
  • Filo intrecciato
  • Spelafili
  • Ventola di saldatura

involucro

  • Foglio acrilico opaco 24”x18”
  • Nastro biadesivo
  • Accesso a un laser cutter
  • Software vettoriale

Passaggio 1: saldare il circuito

Salda il tuo circuito
Salda il tuo circuito
Salda il tuo circuito
Salda il tuo circuito
Salda il tuo circuito
Salda il tuo circuito

Saldare i pin dell'intestazione femminile al Feather Huzzah. Questo tutorial è utile per la configurazione dell'hardware Feather Huzzah. Quindi, saldare i pin dell'intestazione maschio al FeatherWing. Saldarli in questo modo ti consente di unire e separare l'ala della piuma dall'huzza della piuma quando richiesto. Ciò è particolarmente utile quando è necessario aggiungere resistori al FeatherWing, che è il passaggio successivo. Collegare resistori da 100K ohm da ciascun pin 0 e 2, collegati a 3V.

Configura il tuo hardware Feather Huzzah

Configura il tuo hardware Feather Wing

Passaggio 2: aggiungi il tuo codice

Aggiungi il tuo codice
Aggiungi il tuo codice
Aggiungi il tuo codice
Aggiungi il tuo codice

Questo codice è un adattamento del codice Internet of Things della lezione 5, tempo permettendo, vorrei sostituire il servizio Preceptitaton con uno che tenga traccia delle attività aggiunte tramite l'applet IFTTT di ToDosit. Al momento dovresti inserire manualmente una serie di attività e utilizzare il pulsante A per scorrerle. Inoltre, mi sarebbe piaciuto aver codificato il timer per contare in minuti e fermarsi quando si passa all'attività successiva. Un enorme ringraziamento a Becky Stern per aver creato il codice di base per il timer e aver eseguito ciclicamente le attività. Se sei interessato a connettere il progetto a Internet, ti consiglio vivamente di seguire questa serie di lezioni.

// Codice di esempio Instructables Internet of Things Class// Il circuito visualizza i dati Internet // I dati meteorologici vengono raccolti in un feed // Più NeoPixel visualizzano le condizioni meteorologiche // // Modificato da Becky Stern 2017 // basato sull'esempio di abbonamento Adafruit IO

// Adafruit investe tempo e risorse fornendo questo codice open source.

// Supporta Adafruit e l'hardware open source acquistando // prodotti da Adafruit! // // Scritto da Todd Treece per Adafruit Industries // Copyright (c) 2016 Adafruit Industries // Concesso in licenza con licenza MIT. // // Tutto il testo sopra deve essere incluso in qualsiasi ridistribuzione.

/************************* Configurazione I/O di Adafruit ******************** *********

/ visita io.adafruit.com se devi creare un account, // o se hai bisogno della tua chiave IO Adafruit. #define IO_USERNAME "YourUsernameQui" #define IO_KEY "YourIOKeyHere"

/****************************** Configurazione WIFI *************** ********************/

#define WIFI_SSID "NomeWifi"

#define WIFI_PASS "Password Wifi"

#include "AdafruitIO_WiFi.h"

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

/************************* Il programma principale inizia qui ******************** **********/

#include #include #include #include

#includere

#include #include #include

#define OLED_RESET 3

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

// questa costante non cambierà:

const int buttonPinA = 0; // i pin a cui sono attaccati i pulsanti const int buttonPinB = 16; // questo ha già un resistore di pullup, gli altri due ne richiedono uno const int buttonPinC = 2;

// Le variabili cambieranno:

int buttonAPushCounter = 0; // contatore per il numero di pressioni dei pulsanti int buttonAState = 0; // stato attuale del pulsante int lastButtonAState = 0; // stato precedente del pulsante

// Le variabili cambieranno:

int buttonBPushCounter = 0; // contatore per il numero di pressioni dei pulsanti int buttonBState = 0; // stato attuale del pulsante int lastButtonBState = 0; // stato precedente del pulsante

// Le variabili cambieranno:

int buttonCPushCounter = 0; // contatore per il numero di pressioni dei pulsanti int buttonCState = 0; // stato attuale del pulsante int lastButtonCState = 0; // stato precedente del pulsante

String displayForecast = "sconosciuto";

int TimeVal = 0;

unsigned long lastStartTime = 0; bool timerEnabled = 0;

AdafruitIO_Feed *precipitazione = io.feed("precipitazione"); // imposta il feed 'precipitazioni'

//AdafruitIO_Feed *taskmanager = io.feed("taskmanager"); // imposta il feed 'taskmanager'

void setup() {

pinMode(pulsantePinA, INGRESSO); pinMode(buttonPinB, INPUT_PULLUP); pinMode(buttonPinC, INPUT);

// SSD1306_SWITCHCAPVCC = genera la tensione del display da 3,3 V internamente

display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Indirizzo 0x3C per 128x32

// Mostra il contenuto del buffer di visualizzazione iniziale sullo schermo --

// la libreria lo inizializza con una schermata iniziale di Adafruit. display.display(); ritardo (2000); // Pausa per 2 secondi

// Cancella il buffer.

display.clearDisplay();

// avvia la connessione seriale

Serial.begin(115200);

// connettersi a io.adafruit.com

Serial.print("Connessione ad Adafruit IO"); io.connect(); // imposta un gestore di messaggi per il feed 'precipitazione'. // la funzione handleMessage (definita di seguito) // verrà chiamata ogni volta che viene // ricevuto un messaggio da adafruit io. precipitation->onMessage(handleMessage);

// attendo una connessione

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

// siamo connessi

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

}

ciclo vuoto() {

// io.run(); è richiesto per tutti gli schizzi.

// dovrebbe essere sempre presente all'inizio della // funzione del ciclo. mantiene il client connesso a // io.adafruit.com ed elabora tutti i dati in entrata. io.run();

// legge il pin di input del pulsante:

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

// confronta il buttonState con il suo stato precedente

if (buttonAState != lastButtonAState || buttonBState != lastButtonBState || buttonCState != lastButtonCState) { // se lo stato è cambiato, incrementa il contatore if (buttonAState == LOW) { // se lo stato corrente è LOW allora il pulsante è stato premuto buttonAPushCounter++; Serial.print("numero di pressioni del pulsante A: "); Serial.println(buttonAPushCounter); } if (buttonBState == LOW) { // se lo stato corrente è LOW allora il pulsante è stato premuto buttonBPushCounter++; Serial.print("numero di pressioni del pulsante B: "); Serial.println(buttonBPushCounter); Serial.println("Avvio timer"); timerEnabled = 1; lastStartTime = millis(); } if (buttonCState == LOW) { // se lo stato corrente è LOW allora il pulsante è stato premuto buttonCPushCounter++; Serial.print("numero di pressioni del pulsante C: "); Serial.println(buttonCPushCounter); Serial.println("Stop timer"); timerEnabled = 0; } } if (timerEnabled == 1){ // incrementa il timer solo quando è stato avviato timerVal = (millis() - lastStartTime)/1000; }

//visualizza posizione 1 - previsione

// if (buttonAPushCounter % 3 == 0) { // display.clearDisplay(); // display.setTextSize(1); // display.setTextColor(BIANCO); // display.setCursor(0, 0); // display.print("Previsione: "); // display.println(displayForecast); // display.setCursor(0, 16); // display.println("seconda riga"); // display.println("contenuto di esempio"); // display.display(); // //ritardo(2000); // }

//visualizza posizione 1 - Compito 1

if (buttonAPushCounter % 3 == 0) { display.setTextSize(1); display.setTextColor(BIANCO); display.clearDisplay(); display.setCursor(0, 0); display.println("Ricerca - Interviste"); display.println(); display.print("Timer: "); display.println(timerVal); display.display(); }

//visualizza posizione 2 - Compito 2

if (buttonAPushCounter % 3 == 1) { display.clearDisplay(); display.setCursor(0, 0); display.println("Making Studio - Codice"); display.println(); display.print("Timer: "); display.println(timerVal); display.display(); }

//visualizza la posizione 3 - Compito 3

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

// salva lo stato corrente come ultimo stato, //per la prossima volta attraverso il ciclo lastButtonAState = buttonAState; lastButtonBState = buttonBSte; lastButtonCState = buttonCState;

}

// questa funzione viene chiamata ogni volta che un messaggio

// viene ricevuto da Adafruit IO. era allegato // al feed nella funzione setup() sopra. void handleMessage(AdafruitIO_Data *data) {

Previsione stringa = data->toString(); // memorizza i dati meteo in arrivo in una stringa

Serial.print("ricevuto <- "); Serial.println(previsione); displayForecast = previsione; //le seguenti stringhe memorizzano le varie parole del bollettino meteorologico IFTTT che ho scoperto finora String task1 = String("Task 1"); String pioggia = String("Pioggia"); String lightrain = String("Pioggia leggera"); String doccia a pioggia = String ("Doccia a pioggia"); String AMshowers = String ("AM Showers"); String rainandsnow = String("Pioggia e neve"); String neve = String("Neve"); String nevicata = String("Nevicata"); String nuvoloso = String ("Nuvoloso"); String prevalentemente nuvoloso = String("Molto nuvoloso"); String parzialmente nuvoloso = String ("parzialmente nuvoloso"); String clearsky = String("Cancella"); String giusto = String ("Equo"); String soleggiato = String("Soleggiato");

// Queste istruzioni if confrontano la variabile meteo in arrivo con le condizioni memorizzate e controllano i NeoPixel di conseguenza.

// se c'è pioggia nelle previsioni if (forecast.equalsIgnoreCase(rain) || forecast.equalsIgnoreCase(lightrain) || forecast.equalsIgnoreCase(rainshower) || forecast.equalsIgnoreCase(AMshowers)){ Serial.println("precipitazioni nel previsione oggi");

}

// se c'è neve nelle previsioni if (forecast.equalsIgnoreCase(snow) || forecast.equalsIgnoreCase(rainandsnow) || forecast.equalsIgnoreCase(snowshower)){ Serial.println("precipitazioni nelle previsioni di oggi");

}

// se c'è il sole nelle previsioni if (forecast.equalsIgnoreCase(clearsky) || forecast.equalsIgnoreCase(fair) || forecast.equalsIgnoreCase(sunny)){ Serial.println("una specie di sole nelle previsioni di oggi");

}

// se ci sono nuvole nella previsione if (forecast.equalsIgnoreCase(nuvoloso) || forecast.equalsIgnoreCase(per lo più nuvoloso) || forecast.equalsIgnoreCase(parzialmente nuvoloso)){ Serial.println("oggi nuvoloso nella previsione");

}

}

Passaggio 3: creare il contenitore/shell

Crea il contenitore/shell
Crea il contenitore/shell
Crea il contenitore/shell
Crea il contenitore/shell
Crea il contenitore/shell
Crea il contenitore/shell
Crea il contenitore/shell
Crea il contenitore/shell

Per la shell, inizia determinando la dimensione che desideri che sia la cornice, oppure puoi scaricare il mio file. Una volta determinate le dimensioni, è possibile utilizzare MakerCase per creare il layout per il file vettoriale.

Esegui il file attraverso il laser cutter: dovrebbero essere necessari circa 5 minuti. Successivamente unire il guscio.

Non ho tenuto conto della larghezza del materiale che rende i miei bottoni difficili da raggiungere. Devo ancora trovare un modo per allegarli. Sono anche molto piccoli, il che li rende difficili da lavorare.

Consigliato: