IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Création d'un "appareil" personnalisé, macOS + Raspberry Pi
Options
Jaypee
posté 16 Aug 2017, 10:08
Message #1


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 486
Inscrit : 29 Aug 2002
Membre no 3 340



Hello les amis bidouilleurs,

Voici exactement un cas d'école : A partir d'un besoin perso, je souhaite concevoir et construire mécaniquement un dispositif simple pour piloter un moteur pas-à-pas. Même si le Raspberry Pi permet de piloter de vrais boutons poussoirs mécaniques, j' ai préféré l'option REST APIs et interface web depuis un smartphone ou n'importe quel navigateur web distant.

Il me faut donc identifier :
- Une solution mécanique pour monter et utiliser le moteur pas-à-pas. Mon application est une "poursuite astronomique", un dispositif qui permet de faire des photos astro en pause très longue, obligeant à suivre la course des étoiles pendant le temps d'exposition. En fait, c'est bien connu, voire même théorisé et optimisé par des astronome amateurs tels que Dave Trott (Il a une chaine YouTube où on voit son dispositif), j'ai suivi la géométrie proposée par ce blog La précision pourra venir plus tard, par exemple en imprimant les pièces en 3D. Mais un peu de menuiserie soignée permet de le faire. J'avais pratiqué une solution manuelle il y a longtemps, et elle ne m'avait pas découragé.
- Une solution électronique pour piloter le moteur. Là encore, c'est facile, il existe un "H-bridge" tout en un, le circuit L293D. Une plaquette sans soudure fait l'affaire pour mon expérience.
- Une solution logicielle pour commander le moteur. Là encore, c'est bien connu, et même depuis le shell on peut contrôler les pins d'E/S (GPIO) qui commandent ensuite les entrées de l'interface moteur, et si possible dans la même technologie, un framework pour créer facilement des REST APIs. Au final, c'est une techno "full-stack" que je recherche. Il me faut par ailleurs, travailler la partie "métier", pour bien associer les commandes, les séquences programmées de niveaux haut et bas, qui permettent de faire tourner rond le moteur.

J'ai essayé avec l'esprit aussi ouvert que possible les options diverses qui sont disponibles.

Expérience avec Swift
Presque concluante, il existe une bibliothèque SwiftyGPIO. Il existe un framework web léger Vapor qui vient de passer en v2.0, et c'est là que le bât blesse, elle est encore un peu verte, les exemples du manuel ne fonctionnent pas bien, mais comme la partie routage des requêtes fonctionne déjà, j'aurais dû, à court terme, coder ma logique dans le module de routage... pas propre, pas viable.

Expérience avec Erlang (Elixir et Phoenix pour le Web)
Quelle idée saugrenue ! Ma motivation est que je dois me familiariser avec ce langage, qui apparaît dans mon environnement pro, en dépendance d'autres composants. ça pourrait marcher, mais la "pente d'apprentissage" est rude. Par exemple, Erlang n'as pas de type String, pas d'objets (mais des modules), et qu'il est purement fonctionnel. Rien d'insurmontable, mais demande trop de temps avant un résultat exploitable. Elixir et Phoenix sont pourtant souvent décrits comme les vrais successeurs de Ruby-On-Rails pour la productivité.

Et le gagnant est...
Python. Honnêtement, j'étais plutôt fan de Ruby que de Python, mais il faut reconnaître l'importance croissante de Python comme langage à tout faire, avec des performances satisfaisantes. Je déteste le principes des deux-points et des tabs pour changer de niveau syntaxique ( l 'équivalent des accolades ) mais au final, mon projet a atteint un niveau testable et Python n'a pas été en reste, en apportant l'aide, et parfois des crises de nerfs comme l'obligation d'ajouter self comme premier argument des méthodes dans les classes, pour finalement subvenir à tous mes besoins.
RPi.GPIO + Flask pour les REST APIs, c'est top. Je me suis même heurté à un problème simple avec l'API /start pour démarrer le moteur... Il fallait qu'elle soit asynchrone, laissant le soin de continuer à activer le moteur à une tâche de fond. Il existe une bibliothèque standard de threading, qui permet sans gros effort de créer une tâche de fond à qui on confie une responsabilité. Et donc la commande /start et /stop fonctionnent comme prévu, depuis un navigateur web distant.

Que reste-t-il à faire? une page web en HTML5 pour consommer ces REST APIs et vraiment piloter au toucher ce moteur smile.gif

Je publierai le code sur mon GitHub.

Voilà,
J-P

Ce message a été modifié par Jaypee - 16 Aug 2017, 10:23.
Go to the top of the page
 
+Quote Post
yponomeute
posté 16 Aug 2017, 14:50
Message #2


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 4 969
Inscrit : 26 Jan 2011
Lieu : Pollachius virens
Membre no 164 083



Salut,

j'ai un peu de mal à saisir l'intérêt d'une interface web dans le cas de la photo astro. Pour prendre des photos il faut bien que tu sois à côté de ton dispositif non ?

Tu connais sans doute, mais en moins "moderne" que le web il y a toujours l'excellent livre de Pierre Bourge (régulièrement réédité) "à l'affut des étoiles" une véritable mine de conseils pour l'astronome amateur qui veut construire ses propres montures.

Ce message a été modifié par yponomeute - 16 Aug 2017, 14:57.


--------------------
MBP 2017 15" avec clavier pourri et touchbar inutile
Go to the top of the page
 
+Quote Post
Jaypee
posté 16 Aug 2017, 16:21
Message #3


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 486
Inscrit : 29 Aug 2002
Membre no 3 340



L'interface depuis un smartphone :
- Pas de contact physique donc pas de vibrations transmisses, même si sur une pose longue, la vibration aura le temps de s'atténuer.
- Possibilité de voir sans apport de lumière, un thème vision de nuit peut-être utile (Rouge et noir)
- Par ailleurs, je pourrais aussi faire une deuxième connexion, vers l'appareil photo, un Lumix, qui en mode connecté, peut facilement se contrôler à distance via son propre serveur HTTP embarqué.
- Par une longue nuit d'hiver, l'APN et le bidule ne craignent pas le froid, et on peut rester au chaud pour les accompagner, de loin.

Et oui, j'ai un Pierre Bourge dans ma bibliothèque, mais plus fort encore, La NASA a des fac-similé d'articles français anciens sur ce thème comme celui-ci : http://articles.adsabs.harvard.edu/cgi-bin...p;filetype=.pdf souvent cité mais introuvable. smile.gif

J-P
Go to the top of the page
 
+Quote Post
yponomeute
posté 16 Aug 2017, 16:52
Message #4


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 4 969
Inscrit : 26 Jan 2011
Lieu : Pollachius virens
Membre no 164 083



Je comprends mieux smile.gif j'avais mal interprété l'utilisation d'une interface html

Citation (Jaypee @ 16 Aug 2017, 17:21) *
Et oui, j'ai un Pierre Bourge dans ma bibliothèque, mais plus fort encore, La NASA a des fac-similé d'articles français anciens sur ce thème comme celui-ci : http://articles.adsabs.harvard.edu/cgi-bin...p;filetype=.pdf souvent cité mais introuvable. smile.gif

Whouah ! Merci pour cette info smile.gif
C'est une mine d'or cette base de données de la NASA, je viens de trouver des anciens articles de "Ciel et Terre".

Ce message a été modifié par yponomeute - 16 Aug 2017, 16:57.


--------------------
MBP 2017 15" avec clavier pourri et touchbar inutile
Go to the top of the page
 
+Quote Post
Jaypee
posté 16 Aug 2017, 18:26
Message #5


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 486
Inscrit : 29 Aug 2002
Membre no 3 340



De rien smile.gif

Mon GitHub: https://github.com/jaypeeds/StarTracker

Finalement, plutôt que de faire une GUI exécutable dans un navigateur web, j'ai opté pour l'appli SSH oneShot, une appli qui permet d'ouvrir un shell sécurisé, puis de lancer une commande et se déconnecter immédiatement
- Une commande pour lancer ou arrêter le service (l'appli)
- Une commande pour lancer et arrêter le moteur ( curl localhost:5000/start) ou pour l'arrêter
- Une commande pour inverser le sens de marche.

Au final cinq boutons gérés par l'appli "SSH one shot", et je peux avec ça refermer la sécurité en ne permettant que les accès HTTP locaux App.run(host="0.0.0.0.0") -> App.run()

Dernier point: On peut éviter l'alimentation externe par pile de 9v, en utilisant le 5v disponible sur la pin 2 (1 à droite) du Raspberry Pi

J-P

Ce message a été modifié par Jaypee - 18 Aug 2017, 15:24.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 19th March 2024 - 04:17