Πίνακας περιεχομένων:

TOYL Task Tracker: 3 βήματα (με εικόνες)
TOYL Task Tracker: 3 βήματα (με εικόνες)

Βίντεο: TOYL Task Tracker: 3 βήματα (με εικόνες)

Βίντεο: TOYL Task Tracker: 3 βήματα (με εικόνες)
Βίντεο: 5 πράγματα που πρέπει να κάνεις στο σεξ για να κολλήσει μαζί σου 2024, Ιούλιος
Anonim
Image
Image
TOYL Task Tracker
TOYL Task Tracker
TOYL Task Tracker
TOYL Task Tracker

Μην το μισείτε απλώς όταν σκοπεύετε να εργαστείτε ή ακόμα χειρότερα, βρίσκεστε στη μέση μιας συνεδρίας εργασίας και έρχεται μια ειδοποίηση στο τηλέφωνό σας-ένας «γρήγορος έλεγχος» γίνεται ώρες αργότερα. Επίσης, γνωρίζετε πόσο χρόνο εργάζεστε σε συγκεκριμένες εργασίες σε σχέση με το χρόνο που έχετε διαθέσει για εργασία την εβδομάδα;

Εισαγάγετε το πρόγραμμα παρακολούθησης εργασιών TOYL. Σας δίνει τη δυνατότητα να απενεργοποιήσετε το τηλέφωνό σας και να επικεντρωθείτε στην εργασία, ενώ ταυτόχρονα σας δίνει τη δυνατότητα να ρυθμίσετε το χρονικό διάστημα που θα θέλατε να εργάζεστε την εβδομάδα-ας πούμε 60 ώρες-και τις εργασίες που θα θέλατε να ολοκληρώσετε. Όταν κάθεστε για μια συνεδρία, παίρνετε μια ιδέα για το πόσο χρόνο σας απομένει για τη συνολική εργασία σας. Το Tracker έχει δύο λειτουργίες: Χρονόμετρο, όπου έχετε προρυθμίσει πόσο χρόνο θα θέλατε να αφιερώσετε ανά εργασία την εβδομάδα και Χρονόμετρο, όπου μπορείτε απλά να ξεκινήσετε-να σταματήσετε το χρονόμετρο μετά την επιλογή μιας εργασίας.

Προμήθειες

Κύκλωμα

  • Adafruit Feather Huzzah
  • Adafruit FeatherWing
  • Καρφίτσες για ανδρικές κεφαλίδες
  • Καρφίτσες γυναικείων κεφαλίδων
  • Μπαταρία 500mAh
  • Αντιστάσεις 100K ohm x2
  • Μονωτική ταινία
  • Κλειδωμένο σύρμα
  • Απογυμνωτές καλωδίων
  • Solder Fan

Θήκη

  • Αδιαφανές ακρυλικό φύλλο 24”x18”
  • Ταινία διπλής όψης
  • Πρόσβαση σε κόφτη λέιζερ
  • Διανυσματικό λογισμικό

Βήμα 1: Συγκολλήστε το κύκλωμά σας

Συγκολλήστε το κύκλωμά σας
Συγκολλήστε το κύκλωμά σας
Συγκολλήστε το κύκλωμά σας
Συγκολλήστε το κύκλωμά σας
Συγκολλήστε το κύκλωμά σας
Συγκολλήστε το κύκλωμά σας

Συγκολλήστε τις καρφίτσες της γυναικείας κεφαλίδας στο Feat Huzzah. Αυτό το σεμινάριο είναι χρήσιμο για τη ρύθμιση υλικού Feather Huzzah. Στη συνέχεια, κολλήστε τις καρφίτσες κεφαλίδας στο FeatherWing. Η συγκόλλησή τους με αυτόν τον τρόπο σας επιτρέπει να ενώσετε και να διαχωρίσετε το Feather Wing από το Feather Huzzah όταν απαιτείται. Αυτό είναι ιδιαίτερα βολικό όταν πρέπει να προσθέσετε αντιστάσεις στο FeatherWing, το οποίο είναι το επόμενο βήμα. Συνδέστε αντιστάσεις 100K ohm από κάθε ακίδα 0 και 2, συνδεδεμένες σε 3V.

Ρυθμίστε το υλικό Feather Huzzah

Ρυθμίστε το υλικό Feather Wing

Βήμα 2: Προσθέστε τον κωδικό σας

Προσθέστε τον κωδικό σας
Προσθέστε τον κωδικό σας
Προσθέστε τον κωδικό σας
Προσθέστε τον κωδικό σας

Αυτός ο κώδικας είναι μια προσαρμογή του κώδικα Μάθημα 5 Διαδίκτυο των πραγμάτων, εφόσον το επιτρέπει ο χρόνος, θα ήθελα να αντικαταστήσω την υπηρεσία Preceptitaton με αυτήν που παρακολουθεί εργασίες που προστίθενται μέσω της μικροεφαρμογής ToDosit IFTTT. Προς το παρόν, θα πρέπει να εισαγάγετε χειροκίνητα ένα σύνολο εργασιών και να χρησιμοποιήσετε το κουμπί Α για να τις περάσετε. Επιπλέον, θα ήθελα να είχα κωδικοποιήσει το χρονόμετρο να μετρά σε λεπτά και να σταματά όταν μεταβαίνω στην επόμενη εργασία. Ένα τεράστιο ευχαριστώ στην Becky Stern για τη δημιουργία βασικού κώδικα για το χρονόμετρο και την ποδηλασία μέσω εργασιών. Εάν ενδιαφέρεστε να συνδέσετε το έργο στο Διαδίκτυο, θα συνιστούσα ιδιαίτερα να περάσετε από αυτό το σύνολο μαθημάτων.

// Instructables Internet of Things Class δείγμα κώδικα // Circuit Display Data Internet // Τα δεδομένα του καιρού συλλέγονται σε μια ροή // Πολλαπλά NeoPixels απεικονίζουν τις καιρικές συνθήκες // // Τροποποιήθηκε από τον Becky Stern 2017 // με βάση το παράδειγμα συνδρομής Adafruit IO

// Η Adafruit επενδύει χρόνο και πόρους παρέχοντας αυτόν τον ανοιχτό κώδικα.

// Υποστηρίξτε το Adafruit και το υλικό ανοιχτού κώδικα αγοράζοντας // προϊόντα από το Adafruit! // // Γράφτηκε από τον Todd Treece για τις βιομηχανίες Adafruit // Πνευματικά δικαιώματα (γ) 2016 Adafruit Industries // Άδεια χρήσης υπό την άδεια MIT. // // Όλο το παραπάνω κείμενο πρέπει να περιλαμβάνεται σε οποιαδήποτε αναδιανομή.

/*********************** Adafruit IO Configuration ********************* *********

/ επισκεφτείτε το io.adafruit.com εάν πρέπει να δημιουργήσετε έναν λογαριασμό, // ή εάν χρειάζεστε το κλειδί IO του Adafruit. #define IO_USERNAME "YourUsernameHere" #define IO_KEY "YourIOKeyHere"

/***************************** Διαμόρφωση WIFI **************** **********************

#define WIFI_SSID "WifiName"

#define WIFI_PASS "WifiPassword"

#include "AdafruitIO_WiFi.h"

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

/*********************** Το κύριο πρόγραμμα ξεκινά εδώ ******************** **********/

#Include #include #include #include

#περιλαμβάνω

#συμπεριλάβω #συμπεριλάβω #συμπεριλάβω

#define OLED_RESET 3

Οθόνη Adafruit_SSD1306 (128, 32, & Wire, OLED_RESET);

// αυτή η σταθερά δεν θα αλλάξει:

const int buttonPinA = 0; // οι ακίδες στις οποίες τα κουμπιά είναι προσαρτημένα στο const int buttonPinB = 16; // αυτό έχει ήδη αντίσταση έλξης, τα άλλα δύο χρειάζονται ένα πλήκτρο const intPinC = 2;

// Οι μεταβλητές θα αλλάξουν:

int buttonAPushCounter = 0; // μετρητής για τον αριθμό των πατημάτων κουμπιών int buttonAState = 0; // τρέχουσα κατάσταση του κουμπιού int lastButtonAState = 0; // προηγούμενη κατάσταση του κουμπιού

// Οι μεταβλητές θα αλλάξουν:

int buttonBPushCounter = 0; // μετρητής για τον αριθμό των πιέσεων κουμπιών int buttonBState = 0; // τρέχουσα κατάσταση του κουμπιού int lastButtonBState = 0; // προηγούμενη κατάσταση του κουμπιού

// Οι μεταβλητές θα αλλάξουν:

int buttonCPushCounter = 0; // μετρητής για τον αριθμό των πιέσεων κουμπιών int buttonCState = 0; // τρέχουσα κατάσταση του κουμπιού int lastButtonCState = 0; // προηγούμενη κατάσταση του κουμπιού

String displayForecast = "άγνωστο";

int timerVal = 0;

unsigned long lastStartTime = 0; bool timerEnabled = 0;

AdafruitIO_Feed *καθίζηση = io.feed ("καθίζηση"); // ρυθμίστε τη ροή "καθίζηση"

// AdafruitIO_Feed *taskmanager = io.feed ("taskmanager"); // ρυθμίστε τη ροή "taskmanager"

void setup () {

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

// SSD1306_SWITCHCAPVCC = δημιουργήστε εσωτερική τάση οθόνης από 3,3V

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // Διεύθυνση 0x3C για 128x32

// Εμφάνιση αρχικών περιεχομένων buffer οθόνης στην οθόνη -

// η βιβλιοθήκη αρχικοποιεί αυτό με μια οθόνη παφλασμού Adafruit. display.display (); καθυστέρηση (2000). // Παύση για 2 δευτερόλεπτα

// Διαγράψτε το buffer.

display.clearDisplay ();

// ξεκινήστε τη σειριακή σύνδεση

Serial.begin (115200);

// συνδεθείτε στο io.adafruit.com

Serial.print ("Σύνδεση στο Adafruit IO"); io.connect (); // ρυθμίστε ένα πρόγραμμα χειρισμού μηνυμάτων για τη ροή "καθίζηση". // η λειτουργία handleMessage (ορίζεται παρακάτω) // θα καλείται κάθε φορά που λαμβάνεται ένα μήνυμα // από το adafruit io. καθίζηση-> onMessage (handleMessage);

// περιμένετε μια σύνδεση

while (io.status () <AIO_CONNECTED) {Serial.print ("."); καθυστέρηση (500)? }

// είμαστε συνδεδεμένοι

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

}

void loop () {

// io.run (); απαιτείται για όλα τα σκίτσα.

// θα πρέπει να υπάρχει πάντα στο επάνω μέρος της λειτουργίας βρόχου σας //. διατηρεί τον πελάτη συνδεδεμένο στο // io.adafruit.com και επεξεργάζεται τυχόν εισερχόμενα δεδομένα. io.run ();

// διαβάστε τον πείρο εισόδου του κουμπιού:

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

// συγκρίνετε το buttonState με την προηγούμενη κατάστασή του

εάν (buttonAState! = lastButtonAState || buttonBState! = lastButtonBState || buttonCState! = lastButtonCState) {// αν η κατάσταση έχει αλλάξει, αυξήστε τον μετρητή εάν (buttonAState == LOW) {// εάν η τρέχουσα κατάσταση είναι LOW τότε το κουμπί πατήθηκε το κουμπίAPushCounter ++; Serial.print ("ο αριθμός του κουμπιού A πιέζει:"); Serial.println (buttonAPushCounter); } if (buttonBState == LOW) {// αν η τρέχουσα κατάσταση είναι LOW τότε το κουμπί πατήθηκε buttonBPushCounter ++; Serial.print ("αριθμός κουμπιών B που πιέζει:"); Serial.println (buttonBPushCounter); Serial.println ("Χρονοδιακόπτης εκκίνησης"); timerEnabled = 1; lastStartTime = millis (); } if (buttonCState == LOW) {// αν η τρέχουσα κατάσταση είναι LOW τότε το κουμπί πατήθηκε buttonCPushCounter ++; Serial.print ("αριθμός κουμπιών C που πιέζει:"); Serial.println (buttonCPushCounter); Serial.println ("Χρονοδιακόπτης διακοπής"); timerEnabled = 0; }} if (timerEnabled == 1) {// αυξήστε το χρονόμετρο μόνο όταν έχει ξεκινήσει timerVal = (millis () - lastStartTime)/1000; }

// θέση εμφάνισης 1 - πρόβλεψη

// if (buttonAPushCounter % 3 == 0) {// display.clearDisplay (); // display.setTextSize (1); // display.setTextColor (ΛΕΥΚΟ); // display.setCursor (0, 0); // display.print ("Πρόβλεψη:"); // display.println (displayForecast); // display.setCursor (0, 16); // display.println ("δεύτερη γραμμή"); // display.println ("παράδειγμα περιεχομένου"); // display.display (); // // καθυστέρηση (2000); //}

// θέση εμφάνισης 1 - Εργασία 1

εάν (buttonAPushCounter % 3 == 0) {display.setTextSize (1); display.setTextColor (ΛΕΥΚΟ); display.clearDisplay (); display.setCursor (0, 0); display.println ("Έρευνα - Συνεντεύξεις"); display.println (); display.print ("Χρονοδιακόπτης:"); display.println (timerVal); display.display (); }

// θέση εμφάνισης 2 - Εργασία 2

if (buttonAPushCounter % 3 == 1) {display.clearDisplay (); display.setCursor (0, 0); display.println ("Making Studio - Code"); display.println (); display.print ("Χρονοδιακόπτης:"); display.println (timerVal); display.display (); }

// θέση εμφάνισης 3 - Εργασία 3

if (buttonAPushCounter % 3 == 2) {display.clearDisplay (); display.setCursor (0, 0); display.println ("DSV - Σκίτσο"); display.println (); display.print ("Χρονοδιακόπτης:"); display.println (timerVal); display.display (); }

// αποθηκεύστε την τρέχουσα κατάσταση ως την τελευταία κατάσταση, // για την επόμενη φορά μέσω του βρόχου lastButtonAState = buttonAState; lastButtonBState = buttonBState; lastButtonCState = buttonCState;

}

// αυτή η συνάρτηση καλείται όποτε ένα μήνυμα

// λαμβάνεται από το Adafruit IO. ήταν προσαρτημένο στη // ροή στην παραπάνω συνάρτηση setup (). void handleMessage (δεδομένα AdafruitIO_Data *) {

String forecast = data-> toString (); // αποθηκεύστε τα εισερχόμενα δεδομένα καιρού σε μια συμβολοσειρά

Serial.print ("ελήφθη <-"); Serial.println (πρόβλεψη); displayForecast = πρόβλεψη. // οι ακόλουθες συμβολοσειρές αποθηκεύουν τις διάφορες λέξεις αναφοράς καιρού IFTTT που έχω ανακαλύψει μέχρι τώρα String task1 = String ("Εργασία 1"). String rain = String ("Rain"); String lightrain = String ("Light Rain"); String rainshower = String ("Rain Shower"); String AMshowers = String ("AM Showers"); String rainandsnow = String ("Βροχή και χιόνι"); String snow = String ("Snow"); String snowshower = String ("Snow Snow"); String cloudy = String ("Cloudy"); String kryesishtcloudy = String ("Κυρίως συννεφιασμένο"); String partlycloudy = String ("Partly Cloudy"); String clearsky = String ("Clear"); String fair = String ("Fair"); String sunny = String ("Sunny");

// Αυτές οι προτάσεις αν συγκρίνουν την εισερχόμενη μεταβλητή καιρού με τις αποθηκευμένες συνθήκες και ελέγχουν ανάλογα τα NeoPixels.

// αν υπάρχει βροχή στην πρόβλεψη εάν (forecast.equalsIgnoreCase (βροχή) || forecast.equalsIgnoreCase (lightrain) || forecast.equalsIgnoreCase (rainshower) || forecast.equalsIgnoreCase (AMshowers)) {Serial.println ("βροχόπτωση στο πρόβλεψη σήμερα ");

}

// εάν υπάρχει χιόνι στην πρόβλεψη εάν (forecast.equalsIgnoreCase (χιόνι) || forecast.equalsIgnoreCase (rainandsnow) || forecast.equalsIgnoreCase (χιονοπτώσεις)) {Serial.println ("βροχόπτωση στην πρόγνωση σήμερα");

}

// αν υπάρχει ήλιος στην πρόβλεψη εάν (forecast.equalsIgnoreCase (clearsky) || forecast.equalsIgnoreCase (δίκαιη) || forecast.equalsIgnoreCase (ηλιόλουστη)) {Serial.println ("κάποιο είδος ήλιου στην πρόγνωση σήμερα");

}

// εάν υπάρχουν σύννεφα στην πρόβλεψη εάν (forecast.equalsIgnoreCase (θολό) || forecast.equalsIgnoreCase (κυρίως συννεφιασμένο) || forecast.equalsIgnoreCase (μερικώς συννεφιασμένο)) {Serial.println ("συννεφιασμένος ουρανός στην πρόγνωση σήμερα");

}

}

Βήμα 3: Δημιουργήστε το Container / Shell

Δημιουργήστε το Container / Shell
Δημιουργήστε το Container / Shell
Δημιουργήστε το Container / Shell
Δημιουργήστε το Container / Shell
Δημιουργήστε το Container / Shell
Δημιουργήστε το Container / Shell
Δημιουργήστε το Container / Shell
Δημιουργήστε το Container / Shell

Για το κέλυφος, ξεκινήστε καθορίζοντας το μέγεθος που θα θέλατε να είναι το πλαίσιο σας, ή μπορείτε να κατεβάσετε το αρχείο μου. Μόλις καθορίσετε το μέγεθος, μπορείτε να χρησιμοποιήσετε το MakerCase για να δημιουργήσετε τη διάταξη για το διανυσματικό αρχείο.

Εκτελέστε το αρχείο μέσω του κόφτη λέιζερ - θα χρειαστεί περίπου 5 λεπτά. Στη συνέχεια, βάλτε το κέλυφος μαζί.

Δεν έδωσα υπόψη το πλάτος του υλικού που κάνει τα κουμπιά μου δύσκολα προσβάσιμα. Πρέπει ακόμα να βρω έναν τρόπο να τα επισυνάψω. Είναι επίσης πολύ μικρά, γεγονός που τους δυσκολεύει να συνεργαστούν.

Συνιστάται: