La minuterie Pee : Brancher l’Arduino, la caméra de calcul perceptuelle d’Intel et une pompe à eau Submersible (2 / 4 étapes)

Étape 2: programmation

Dans cette étape, nous allons aborder les aspects de programmation requis pour ce projet. Le programme est divisé en deux parties :

  • Traitement

  • Le côté de la transformation du programme s’exécute dans l’environnement de traitement 32 bits pour Windows.
  • Il se connecte à la caméra de calcul perceptuelle Intel et effectue le suivi lorsque l’utilisateur est assis devant l’ordinateur portable, ou lorsque l’utilisateur a laissé par le biais de la détection de visage, intégrée dans la caméra.
  • Il communique ces changements à l’Arduino via une connexion série.
    • Nous avons utilisé le traitement unidirectionnel à connexion serial Arduino comme on n’avait pas besoin de retirer toute information de l’Arduino. Vous pouvez trouver d’autres exemples de connexions série ici :
    • https://Learn.Sparkfun.com/tutorials/Connecting-AR...
  • Il publie également messages « aléatoires » sur Twitter, en utilisant l’API de Twitter. Ces messages aléatoires sont tirés des collections de messages qui visent des situations ou des événements, a déclenché dans tout le code. Dans notre projet, nous utilisons l’exemple d’un programme qui effectue le suivi combien de fois un utilisateur se lève pour utiliser les toilettes et puis châtie l’utilisateur, si ils sont allés trop longs.
    • Pour travailler par traitement de branchement à Twitter, nous avons utilisé ce guide : http://blog.blprnt.com/blog/blprnt/updated-quick-t...
    • Vous trouverez probablement il utile, car elle vous guide dans le processus de mise en place de l’application sur Twitter, la génération de clés d’authentification, etc..
  • Arduino
    • Le côté Arduino du programme prend l’information de lorsque l’utilisateur quitte et retourne à leur ordinateur portable et l’utilise pour décider du moment mettre en marche la pompe à eau.
    • Il gère également la pompe à eau : la pompe particulière, nous avons effectivement pompes eau trop rapidement pour ce que nous voulons qu’il fasse, donc le programme Arduino stratégiquement allume la pompe à eau et off pour que nous puissions plus facilement contrôlent l’écoulement de l’eau sans avoir besoin de s’inquiéter sur la modification de la pompe submersible elle-même.
      • Puisque nous avons la pompe à eau branchée sur la queue de PowerSwitch, nous passons la pompe à eau sur et en dehors de l’allumer/éteindre la queue PowerSwitch.
  • Le code pour que ces deux demandes est fourni ci-dessous. J’ai inclus des commentaires dans le code pour aider à vous comprendre ce qui se passe pour chaque section, et où vous aurez besoin d’apporter vos propres modifications. À mon avis, le code est assez difficile à lire au format Instructables, autant qu’il veut enlever les cales. Si vous copiez et collez dans le traitement ou l’Arduino, il sera automatiquement code couleur le cas échéant et rendent plus facile à naviguer.

    Traitement
    ------------------------------------------------------------------------------------------------
    ------------------------------------------------------------------------------------------------
    ------------------------------------------------------------------------------------------------
    /**
    PeeTracker32
    Développée par Austin Toombs (Courriel : altoombs indiana edu)
    Concept par Austin Toombs et Shad Gross
    Janvier 2014
    **/

    / ** importer des bibliothèques etc. ** /
    Import intel.pcsdk.* ;
    Import processing.serial.* ;

    / ** Initialiser des variables ** /
    / ** Intel perceptuelle de calcul Variables ** /
    PXCUPipeline session ;
    RgbTex Byte ;

    int [] faceLabels = {PXCMFaceAnalysis.Landmark.LABEL_LEFT_EYE_OUTER_CORNER,
    PXCMFaceAnalysis.Landmark.LABEL_LEFT_EYE_INNER_CORNER,
    PXCMFaceAnalysis.Landmark.LABEL_RIGHT_EYE_OUTER_CORNER,
    PXCMFaceAnalysis.Landmark.LABEL_RIGHT_EYE_INNER_CORNER,
    PXCMFaceAnalysis.Landmark.LABEL_MOUTH_LEFT_CORNER,
    PXCMFaceAnalysis.Landmark.LABEL_MOUTH_RIGHT_CORNER} ;

    ArrayList facePts = new ArrayList() ;
    ArrayList faceBoxes = new ArrayList() ;

    / ** Collections de tweets potentiels pour les situations verious
    Si vous créez vos propres collections de chaînes pour tirer, c’est où vous pouvez initialiser les
    **/
    ArrayList returnTweets = new ArrayList() ;
    ArrayList firstThresholdTweets = new ArrayList() ;
    ArrayList secondThresholdTweets = new ArrayList() ;
    ArrayList thirdThresholdTweets = new ArrayList() ;

    / ** valeurs booléennes pour la logique de l’État au sein du programme ** /
    faceState booléen = false ; Si un visage est vu
    prevFaceState booléen = false ; Si oui ou non un visage a été vu dans le précédent

    / ** variables pour l’intégration avec Twitter ** /
    Twitter twitter ;

    / ** variables pour surveiller combien de temps l’utilisateur a été disparu
    Nous avons mis en place diverses « jalons » pour tandis que l’utilisateur est parti. Nous avons 3 ici, mais vous pouvez
    change facilement en ajoutant plus ici et partout dans le code où ces jalons
    sont référencés
    **/
    long savedTime ;
    int minimumTime = 6000 ; délai minimum avant d’envoyer un message
    int firstMilestone = 30000 ; première étape pour l’envoi de messages de shameing
    firstMilestoneMessageSent booléen = false ; suivi de si nous avons envoyé le premier message de jalon
    int secondMilestone = 60000 ; deuxième étape pour l’envoi de messages de shameing
    secondMilestoneMessageSent booléen = false ; suivi de si nous avons envoyé le deuxième message de jalon
    int thirdMilestone = 90000 ; troisième étape pour envoyer des messages humiliation
    thirdMilestoneMessageSent booléen = false ; suivi de si nous avons envoyé le troisième message de jalon

    / ** variables pour connexion série ** /
    Serial myPort ; l’objet de port série

    void setup()
    {
    définir la taille de la toile
    Size(640,480) ;

    créer image à partir d’informations caméra (pas nécessaire)
    rgbTex = createImage(640,480,RGB) ;

    les informations de session pour la caméra de calcul perceptuelle Intel
    session = new PXCUPipeline(this) ;
    session. Init (PXCUPipeline.COLOR_VGA| PXCUPipeline.FACE_LOCATION| PXCUPipeline.FACE_LANDMARK) ;

    l’initialisation de la connexion à Twitter * complet avec authentification !
    Vous aurez besoin générer votre propre Twitter application clés et les inclure ici
    ConfigurationBuilder cb = new ConfigurationBuilder() ;
    cb.setOAuthConsumerKey("XXXXXXXXXXXXXXXXXXXX") ;
    cb.setOAuthConsumerSecret("YYYYYYYYYYYYYYYYYYYYYY") ;
    cb.setOAuthAccessToken("ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ") ;
    cb.setOAuthAccessTokenSecret("XYZYXYZXYZYXYZXZXYZYXYZYXYZYXYZ") ;

    initialiser objet twitter
    Twitter = new TwitterFactory(cb.build()).getInstance() ;

    Cela ne doit pas être appelée à tout, mais il est amusant de voir
    Commentaires pour l’instant : getPreviousTweets() ;

    initialiser le port série et affectez bauds 9600
    myPort = nouvelle série (ce, Serial.list() [0], 9600) ;

    initialiser les collections de tweets
    initializeTweets() ;
    }

    fonction de tirage au sort par défaut dans chaque programme de traitement
    void draw()
    {
    Obtention de données de l’appareil photo et dessin de la toile / / /
    avant de jouer avec la caméra informatique perceptuelle, il faut s’assurer que
    Il peut en fait voir les choses. Tout dans ce cas énoncé devrait
    rester en tant que-est pour l’instant. Nous l’utilisons pour déterminer si un visage est même à l’intérieur
    vue. Il y a probablement un moyen plus facile de le faire, mais nous aimerions voir le visage
    boîtes, donc nous pouvons dire ce qu’il considère comme un visage et ce qu’il ne fonctionne pas
    if(session. AcquireFrame(false))
    {
    session. QueryRGB(rgbTex) ;
    facePts.clear() ;
    faceBoxes.clear() ;

    pour (int i = 0; ++ J’ai)
    {
    depuis longtemps [] ft = nouvelle longue [2] ;
    if(!session. QueryFaceID(i,ft))
    rupture ;

    Fdata PXCMFaceAnalysis.Detection.Data = new PXCMFaceAnalysis.Detection.Data() ;
    if(session. QueryFaceLocationData ((int) ft [0], fdata))
    {
    faceBoxes.add(fdata.rectangle) ;

    PXCMFaceAnalysis.Landmark.LandmarkData lmark = new PXCMFaceAnalysis.Landmark.LandmarkData() ;
    pour (int f = 0; f {}
    if(session. QueryFaceLandmarkData ((int) ft [0], faceLabels [f], 0, lmark))
    {
    facePts.add(lmark.position) ;
    }
    }
    }
    }
    session. ReleaseFrame() ;
    } //end de détection de visage si Déclaration

    affiche ce que la caméra voit sur la toile
    image(rgbTex,0,0) ;
    pushStyle() ;
    Stroke(255) ;
    noFill() ;

    dessine les zones du visage sur l’écran
    pour (int f = 0; f {}
    PXCMRectU32 faceLoc = (PXCMRectU32)faceBoxes.get(f) ;
    Rect(faceLoc.x,faceLoc.y,faceLoc.w,faceLoc.h) ;
    }
    Fill(0,255,0) ;
    pour (g int = 0; g {}
    PXCMPoint3DF32 facePt = (PXCMPoint3DF32)facePts.get(g) ;
    ellipse(facePt.x,facePt.y,5,5) ;
    }
    popStyle() ;

    C’est la fin du dessin des choses / / /

    Enregistrez l’état antérieur de la face (aux fins de suivi)
    prevFaceState = faceState ;

    Si nous ne pouvons pas voir même un visage à tous les
    {if(faceBoxes.Size()==0)}
    faceState = false ; Nous ne pouvons pas voir le visage, afin que l’utilisateur n’est pas là

    Si ils étaient là il y a un instant et ils ont tout à l’heure à gauche
    if(prevFaceState == true) {}
    sortie que la caméra ne voit plus un visage
    System.out.println ("ne peut pas voir un visage, à partir de minuterie") ;

    commencer le suivi des temps. Millis() mesure le temps en millisecondes
    depuis le début du programme
    savedTime = millis() ;

    Envoyer le signal à série que nous ne pouvons pas voir un visage
    myPort.write('2') ;
    }

    le temps que l’utilisateur a été disparu est le temps courant en millisecondes
    depuis le début du programme moins le temps en millisecondes depuis le
    le début du programme lorsque l’utilisateur a quitté.
    timeAway long = millis() - savedTime ;

    Utilisez les informations de timeAway pour déterminer quand envoyer message
    processAwayAlerts(timeAway) ;
    }
    else {}
    Si nous voyons les visages, nous ne sommes pas leur calendrier
    faceState = true ;

    Si nous voyons un visage où nous n’avons déjà pas, alors nous savons
    ils vient de rentrer
    if(prevFaceState == false) {}
    calculer combien de temps l’utilisateur a été allé total
    timeAway long = millis() - savedTime ;

    processJustReturnedAlerts(timeAway) ;

    resetMessageBooleans() ;
    }
    }
    fin du tirage au sort méthode / / /
    }

    mettre en place chacun des collections de tweets qui peuvent être utilisés pour
    situations particulières
    void initializeTweets() {}
    returnTweets.add ("a été éloigné de son bureau pour XXX secondes") ;
    returnTweets.add ("pipi pour XXX secondes") ;
    returnTweets.add ("était improductif pour XXX secondes") ;
    returnTweets.add ("réussi à remettre à plus tard pour XXX secondes") ;
    returnTweets.add ("relâchiez pour XXX secondes") ;
    returnTweets.add ("était complètement inutile pour XXX secondes") ;

    firstThresholdTweets.add ("est probablement pipi dès maintenant, donc si vous avez besoin de quelque chose revenez bientôt ») ;
    firstThresholdTweets.add ("a été éloigné de son bureau depuis un certain temps. Ne faites pas une habitude de cette") ;
    firstThresholdTweets.add ("sera de retour bientôt. Ou il vaut mieux être.") ;
    firstThresholdTweets.add ("ne peut pas venir au téléphone dès maintenant. À moins qu’il a avec lui. Dans la salle de bain.") ;

    secondThresholdTweets.add ("... où es-tu ? Pourquoi avez-vous été loin pour si longtemps?") ;
    secondThresholdTweets.add ("tout ce que vous faites maintenant mieux être freaking important.") ;
    secondThresholdTweets.add ("si vous n’allez pas au travail aujourd'hui vous pourriez aussi bien juste rentrer à la maison") ;
    secondThresholdTweets.add ("pourrait avoir un problème médical. Il ne devrait pas prendre ce long faire pipi.") ;

    thirdThresholdTweets.add ("il faut toujours faire pipi. Il mieux finir rapide ou risquer dépérir sa vie ») ;
    thirdThresholdTweets.add ("perd son temps. Tout le monde devrait la pression lui de revenir à son bureau") ;
    thirdThresholdTweets.add ("nous envoyons sur le groupe de recherche. Vous avez disparu trop longue.") ;
    thirdThresholdTweets.add ("n’est pas un modèle pour comment vous devez se comporter au travail.") ;
    }

    déterminer les messages à envoyer et quand pendant que l’utilisateur a disparu
    basé sur le temps qu’ils ont été absent
    void processAwayAlerts(long timeAway) {}
    Si le temps qu’ils ont été allés est plus long que le minimum
    temps, nous sommes préoccupés par, puis allumer la LED
    if(timeAway > minimumTime) {}
    myPort.write('1') ;
    }

    Si le temps qu’ils ont été allés est plus long que le premier
    durée de l’étape, puis prendre les mesures voulues
    Si (timeAway > firstMilestone & &! firstMilestoneMessageSent) {}
    Envoyer le message (que ce soit sur twitter ou sur console)
    sendMessage(randomTweet(firstThresholdTweets)) ;

    marquer que le premier message de jalon a été envoyé
    firstMilestoneMessageSent = true ;
    }

    Si le temps qu’ils ont été allés est plus long que la seconde
    durée de l’étape, puis prendre les mesures voulues
    Si (timeAway > secondMilestone & &! secondMilestoneMessageSent) {}
    Envoyer le message (que ce soit sur twitter ou sur console)
    sendMessage(randomTweet(secondThresholdTweets)) ;

    marquer que le deuxième message de jalon a été envoyé
    secondMilestoneMessageSent = true ;
    }

    Si le temps qu’ils ont été allés est plus long que le troisième
    durée de l’étape, puis prendre les mesures voulues
    Si (timeAway > thirdMilestone & &! thirdMilestoneMessageSent) {}
    Envoyer le message (que ce soit sur twitter ou sur console)
    sendMessage(randomTweet(thirdThresholdTweets)) ;

    marquer que le deuxième message de jalon a été envoyé
    thirdMilestoneMessageSent = true ;
    }
    }

    déterminer ce qu’il faut faire lorsque l’utilisateur retourne
    void processJustReturnedAlerts(long timeAway) {}
    seulement afficher message si ils étaient partis le montant minimal de
    temps. Sinon ils étaient probablement juste à la recherche de suite ou grattage
    leur visage ou la fixation de leurs cheveux ou... vous l’obtenez
    if(timeAway > minimumTime) {}
    rapport à la console pendant combien de temps l’utilisateur avait disparu
    System.out.println ("l’utilisateur vient de rentrer après:" + timeAway + « milisecondes. ») ;

    Envoyer message sur twitter ou sur console
    sendMessage (remplacer randomTweet (returnTweets) (« XXX », "" + timeAway/1000)) ;
    }

    Envoyer un signal au cours de la série de dire l’Arduino qui l’utilisateur
    se trouve en face de l’ordinateur
    myPort.write('0') ;
    }

    Choisissez un tweet au hasard dans la collection donnée tweet et
    retourner ce message sous forme de chaîne
    String randomTweet(ArrayList tweetList) {}
    choisir un nombre aléatoire basé sur la longueur de la collection
    int tweetIndex = (int) random(tweetList.size()) ;

    retourne la chaîne à cet endroit
    Return tweetList.get(tweetIndex) ;
    }

    Envoyer un message sur twitter ou sur console
    void sendMessage(String message) {}
    Envoyer le message via twitter (en commentaire lors du test)
    / ** Essayez {}
    twitter.updateStatus(message) ;
    }
    {} catch (TwitterException te)
    println ("Impossible de se connecter:" + te) ;
    };**/

    Envoyer un message à la console
    System.out.println(message) ;
    }

    réinitialiser les valeurs booléennes message. Dans le cas contraire, les messages de seuil pourraient seulement
    envoyée une fois pendant chaque exécution du programme
    void resetMessageBooleans() {}
    firstMilestoneMessageSent = false ;
    secondMilestoneMessageSent = false ;
    thirdMilestoneMessageSent = false ;
    }

    /**
    * Cette méthode recherche seulement les tweets précédentes faites par ce dispositif et
    * les imprime sur la console. Il peut être enlevé et tout simplement pas
    * appelé et ne changera pas d’autres fonctionnalités de ce programme
    **/
    void getPreviousTweets() {}
    Requête de la requête = new Query("#peeTimer") ;
    query.setRpp(100) ; ne fonctionne pas Twitter4j w/plus récent

    Essayez de faire la demande de requête.
    try {}
    la ligne suivante met à jour le statut de twitter
    QueryResult résultat = twitter.search(query) ;
    Tweets de ArrayList = result.getTweets() (ArrayList) ;

    pour (int i = 0; i < tweets.size(); i ++) {}
    Statut t = tweets.get(i) (Status) ;
    L’utilisateur u = t.getUser() (utilisateur) ;
    User String = u.getName() ;
    String msg = t.getText() ;
    println (« Tweet par » + user + ":" + msg) ;
    };
    }
    {} catch (TwitterException te)
    println ("Impossible de se connecter:" + te) ;
    };
    }
    ------------------------------------------------------------------------------------------------
    ------------------------------------------------------------------------------------------------
    ------------------------------------------------------------------------------------------------

    Arduino
    ------------------------------------------------------------------------------------------------
    ------------------------------------------------------------------------------------------------
    ------------------------------------------------------------------------------------------------
    /**
    peetimerArduinoSketch
    Développée par Austin Toombs (Courriel : altoombs indiana edu)
    Concept par Austin Toombs et Shad Gross
    Janvier 2014
    **/

    variables pour la lecture et de série
    char de val ; Données reçues du port série

    affectation des broches
    int ledPin = 13 ; L’axe de la valeur numérique d’e/s 13
    int waterPumpPin = 10 ; Cette broche contrôle effectivement la queue PowerSwitch, tournant sous et hors tension

    temps de suivi pour pompe à eau
    long previousMillis = 0 ;
    offInterval long = 4000 ; Combien de temps nous en avons besoin au large par intervalle
    onInterval long = 2000 ; Combien de temps nous en avons besoin sur par intervalle
    timeStarted booléen = false ;

    suivi de l’état de la pompe à eau
    int waterPumpState = faible ;

    void setup()
    {
    pinMode (ledPin, sortie) ; Mettre la broche en sortie
    pinMode (waterPumpPin, sortie) ; broche la valeur en sortie
    initialiser une communication série à une vitesse de 9600 bauds
    Serial.Begin(9600) ;
    }

    void loop() {}
    Si (Serial.available())
    {/ / Si les données sont disponibles pour lire,
    Val = Serial.read() ; Lisez-le et stockez-la dans le val
    }
    Si (val == « 1 »)
    {/ / Si 1 a été reçu
    digitalWrite (ledPin, HIGH) ; allumer la LED

    Si la minuterie n’a pas encore démarré, démarrez-le
    if(!timeStarted) {timeStarted = true;}

    décider quoi faire avec la pompe à eau, basée sur le temps
    manageWaterPump() ;
    } else {/ / si autre chose qu’un 1 est reçu
    digitalWrite (ledPin, basse) ; éteindre la LED
    digitalWrite (waterPumpPin, basse) ; éteindre la pompe à eau
    timeStarted = false ; désactiver la minuterie
    }
    Delay(10) ; Attendre 10 millisecondes pour la prochaine lecture
    }

    décider comment gérer la pompe à eau
    void manageWaterPump() {}
    le montant actuel du temps qui s’est écoulé depuis que nous avons reçu le 1 en série
    unsigned long currentMillis = millis() ;

    Si la pompe à eau est déjà hors de
    if(waterPumpState == Low) {}
    et il a été éteint assez longtemps, puis le tourner il sur
    Si (currentMillis - previousMillis > offInterval) {}
    enregistrer la dernière fois vous cligna des yeux la LED
    previousMillis = currentMillis ;
    waterPumpState = élevé ;

    Définissez la LED avec la ledState de la variable :
    digitalWrite (waterPumpPin, waterPumpState) ;
    }
    }
    la pompe à eau est déjà sur d’autre {//if
    et il a été assez longtemps, puis tournant il éteint
    Si (currentMillis - previousMillis > onInterval) {}
    enregistrer la dernière fois vous cligna des yeux la LED
    previousMillis = currentMillis ;
    waterPumpState = bas ;

    Définissez la LED avec la ledState de la variable :
    digitalWrite (waterPumpPin, waterPumpState) ;
    }
    }
    }
    ------------------------------------------------------------------------------------------------
    ------------------------------------------------------------------------------------------------
    ------------------------------------------------------------------------------------------------

    Articles Liés

    Voiture RC Arduino avec Camera FPV

    Voiture RC Arduino avec Camera FPV

    Ce Instructable décrit une télécommande de voiture que j'ai mis en place. La voiture n'a aucun véritable but - c'était tout un défi, pour voir ce qui pourrait être fait avec le matériel couramment disponible. Il possède les caractéristiques suivantes
    Arduino Ethernet caméra

    Arduino Ethernet caméra

    Je vais vous présenter un Arduino ethernet caméra.Vous pouvez prendre une photo à l'intérieur de la maison qui ont une cette caméra ethernet arduino par juste ouvrir le site web si vous suivez ce contenu.C'est une façon très facile et simple ne néces
    Brancher l’Arduino Uno de Crystalfontz 16 x 2 OLED avec 4 fils !

    Brancher l’Arduino Uno de Crystalfontz 16 x 2 OLED avec 4 fils !

    Ces modules sont assez agréable. Ils sont la même taille que nos modules CFAH1602C de caractères LCD série 16 x 2 et plus mince comme un bonus. Contraste de l'OLED est fantastique, et ils ont un regard croquant qui est difficile à battre. Une autre b
    Installer une caméra espion infrarouge à l’intérieur d’une cabane d’oiseaux

    Installer une caméra espion infrarouge à l’intérieur d’une cabane d’oiseaux

    mise à jour 11/04/14 : nous avons 4 œufs.Mise à jour 10/04/14 : nous avons 3 oeufs maintenant !Mise à jour 08/04/14 : mon père m'a envoyé cette photo ce matin du premier œuf posé !Mise à jour le 30/03/14 : les merles-bleus ont repris une des maisons.
    CO2 Minuterie de Dragster avec Arduino

    CO2 Minuterie de Dragster avec Arduino

    Ce projet est pour une piste de dragster de co2.Étape 1: Rassembler des matériauxArduino Uno2 écrans LCDFils2 capteurs IR2 LEDs IR1 interrupteur momentanéCourse de Dragster Pitsco CO2Résistances de 2 10 k ohmsEtape 2: Conception du cadre LCD Nous avo
    « Arduino Micro » caméra tour niveau

    « Arduino Micro » caméra tour niveau

    j'ai un appareil photo sur un poteau que j'utilise pour la chasse au météore vidéo. Un seul problème que j'ai eu est de s'assurer de que la tour est le niveau au dessus. Il doit être vraiment niveau pour s'assurer que l'horizon entier est visible à l
    Arduino trousseau caméra modifier Motion détecter la caméra

    Arduino trousseau caméra modifier Motion détecter la caméra

    Mettez votre caméscope trousseau en mouvement détecte la caméra.Lorsqu'un mouvement est détecté par le capteur PIR SR501 HC, caméra allumer, prendre une photo et l'éteindre, attendre pour le prochain mouvement.Étape 1: câblage Le câblage est très sim
    Minuterie de compte à rebours Arduino simple 7 segment

    Minuterie de compte à rebours Arduino simple 7 segment

    Dans ce guide de Instructables, je vais vous montrer comment faire un compte à rebours - à deux chiffres - simple en utilisant la carte de Arduino uno et affichages à 7 segments.Nous serons en mesure de régler la minuterie dans notre esquisse de prog
    Créer propre clavier à Membrane Matrix (et le brancher à l’Arduino)

    Créer propre clavier à Membrane Matrix (et le brancher à l’Arduino)

    si vous voulez créer votre propre clavier à membrane ? Pourquoi ? bien faire votre propre clavier peut être utile pour de nombreuses raisons. Il est bon marché et facile à faire, il peut être placé dans des situations où il peut être vandalisé ou vol
    Calculatrice de minuterie 555 pour RaspberryPi, Arduino ou un PC Linux

    Calculatrice de minuterie 555 pour RaspberryPi, Arduino ou un PC Linux

    Cette instructable est une calculatrice pour déterminer les valeurs de résistance et condensateur à utiliser en commun 555 timer circuits. J'ai inclus les versions pour le RaspberryPi et l'Arduino avec circuits simples à clignoter deux LED comme le 5
    Branchez votre Edison Intel dans une maquette

    Branchez votre Edison Intel dans une maquette

    <<<<<<<<<<<Mention dans Hackday Merci!! >>>>>>>>>>>>>>>Dans ce instructable vous je vais vous apprendre comment faire une maquette de petits groupes de PCB amical pour le Minibr
    Timelapse simple caméra à l’aide de Raspberry Pi et une boîte de café

    Timelapse simple caméra à l’aide de Raspberry Pi et une boîte de café

    tout en développant le BerryCam j'ai pensé qu'il serait assez cool pour créer une caméra timelapse qui pourrait être laissée à l'extérieur sur une période de temps, pour capturer une séquence d'images qui pourraient ensuites être réunies dans un clip
    Appareil bricolage tableau 2: Calcul de recentrage avec juste une caméra

    Appareil bricolage tableau 2: Calcul de recentrage avec juste une caméra

    appareil bricolage tableau 1: Computational Photography Primer.Appareil bricolage tableau 2: Calcul recentrage avec un seul appareil.Vous n'avez pas besoin de s'inscrire pour télécharger le fichier PDF, parce que j'ai fait disponible ici et ici.Ce In
    Branchement fils/fils échoués qu’est trop gros/soudure cosses sur une maquette

    Branchement fils/fils échoués qu’est trop gros/soudure cosses sur une maquette

    j'avais l'habitude d'avoir toujours des problèmes de connexion des choses avec des câbles torsadés, comme les batteries, et avec trop de fil, comme test conduit et avec des cosses de soudure, comme potentiomètres, à ma maquette. Puis j'ai mis des pin