Git Product home page Git Product logo

arduinoscratch's Introduction

ArduinoScratch

L'idée de ce projet est de disposer d'un moyen simple d'utiliser des extension scratch 2.0 couplée à un arduino :

  • coté ordinateur : un service, écrit en nodejs, permet de charger des extensions scratch
  • coté arduino : un code spécifique à l'extension permet de dialoguer avec du matériel
  • coté scratch : on charge une extension et on dialogue alors avec l'arduino via des briques supplémentaires

Pour ça, le nodejs sert un fichier js qui peut dialoguer avec l'arduino de 3 façon différentes :

  • un mode "mock" pour faire de la simulation, sans arduino. L'utilisateur doit alors simuler le dialogue via des commandes dans la console javascript du browser
  • un mode "serial", ou le browser dialogue directement avec le port série (uniquement sous mac et windows, avec le plugin dédié)
  • un mode websocket, ou le nodejs fait le pont entre l'extension scratch et le port série

Ce dernier mode permet en plus de discuter avec un ordinateur distant (celui où a été chargé l'extension). Par exemple dans une salle de classe, chaque poste peut tester son programme en dialogant avec un unique arduino branché sur un poste à part, et faisant tourner le code nodejs.

Exemple "basic" :

coté Arduino :

  • cabler un bouton poussoir entre les pattes 12 et GND
  • compiler le code extensions/basic/basic.ino et l'uploader
  • le code a été écrit pour Arduino Uno, pour un autre modèle, il faut peut être adapter la gestion d'interruption pour le bouton.

coté ordinateur :

lancer : node node/server.js

coté Scratch :

charger ou remixer le projet "test extension" : http://scratch.mit.edu/projects/26016195/#editor comme les extensions ne sont plus "chargeables" depuis les menus de Scratch, il faut appeler une commande javascript spécifique pour les charger : ScratchExtensions.loadExternalJS("http://localhost:8000/extensions/basic/basic.js") si vous lancez Scratch sur un autre ordinateur que celui où tourne le serveur node, il faut préciser le nom ou l'IP de ce serveur, au lieu de "localhost"

A ce moment, des blocs qui étaient marqué "undefined" dans le programme deviennent "set led", "when button is pressed" ... Si vous lancer le programme (drapeau vert), la led de l'arduino (sur la broche 13) doit clignoter et si vous appuyez sur le bouton poussoir, le chat doit annoncer l'état de la LED à ce moment là

Organisation du code :

  • /node : la partie nodejs

    • /client : une page de test de la partie serveur (plus maintenue)
    • /server.js : le programme node à lancer pour faire le pont entre Scratch et Arduino
  • /extensions : chaque extension est placée ici, dans un répertoire

    • lib : un dossier contenant des fichiers inclus par les autres. Notamment la couche "communication" se cache là dedans
    • basic : le code arduino et js de l'exemple ci-dessus
    • ledStrip : pilotage d'une bande de LED adressables depuis Scratch
  • /data : des fichiers de test et de données

  • /scratch2c : en chantier ... L'idée est de convertir un bout de programme Scratch en code Arduino, pour pouvoir l'embarquer sur l'arduino Mais ça, c'est pas encore au point ...

Code des extensions :

Une extension est chargée dans Scratch via le serveur node, qui y injecte en passant un fichier (extensions/lib/autoPrepend.js) Ce fichier contient quelques méthodes pour charger des dépendances (version simplifiée de require.js) et défini des variables MY_URL et ROOT_URL qui permettent aux extensions de savoir de où elles ont été chargées.

Pour le détail du fonctionnement d'une extension, voir le code de basic.js, qui est commenté

TODO :

  • D'autres extensions ! moteurs pas à pas ? potentiomètres ? capteurs (de lumière, de mouvement ...)
  • Mettre en place un moyen d'uploader le code Arduino associé à une extension, le tout après appel de la compilation, si nécessaire, par la ligne de commande de l'IDE Arduino

arduinoscratch's People

Contributors

piif avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.