élasticité rapsberry pyserial
L'installation Elasticité dynamique agit comme un filtre et génère de nouveaux espaces démultipliés, comme un empilement quasi infini d'horizons. Par principe de réflexion, la pièce absorbe l'image de l'environnement et accumule les points de vue ; le mouvement permanent requalifie continuellement ce qui est regardé et entendu.
Ce post étudie la connection entre le raspberry π (qui fait tourner les simulations) et les arduino (qui commandent les moteurs).
%load_ext autoreload
%autoreload 2
import numpy as np
- sharing internet on the laocal machine
ifconfig
- scanning the local network to find the raspberry π
nmap -T4 -sP 192.168.2.0/24
- what I used to clone the repository on the π
686 pip install pyserial
687 vim .ssh/id_rsa.pub
688 vim .ssh/id_rsa
689 chmod 0600 .ssh/id_rsa
690 git clone git@git.framasoft.org:laurentperrinet/elasticte.git
691 cd elasticte/
692 ls
693 cat scenario_line_contraint.py
694 python scenario_line_contraint.py serial
695 pip install -e .
696 pip install --user -e .
697 python scenario_line_contraint.py serial
- starting
⇒ ssh pi@192.168.2.3
Linux pielastic 3.18.7-v7+ #755 SMP PREEMPT Thu Feb 12 17:20:48 GMT 2015 armv7l
pi@pielastic ~ $ cd elasticte/
pi@pielastic ~/elasticte $ git pull # to update the code
Already up-to-date.
pi@pielastic ~/elasticte $ python scenario_line_contraint.py serial
coordonées absolues¶
Prenons un cas simple avec 12 pas possible et calculons en fonction de la position actuelle et de la position désirée la commande à envoyer aux moteurs
nb_pas = 12
position_present = 6
position_desired = 4
d_position = (position_desired - position_present + nb_pas//2 ) % nb_pas - nb_pas//2
print (d_position)
position_present = (position_present + d_position ) % nb_pas
print (position_present)
on vérifie que ça marche pour toute une série de positions désirées et qu'on évite le demi tour:
nb_pas = 12
position_present = 2
position_desired = np.arange(nb_pas)
d_position = (position_desired - position_present + nb_pas//2 ) % nb_pas - nb_pas//2
print (d_position)
position_present = (position_present + d_position ) % nb_pas
print (position_present)
on vérifie aussi que ça marche pour toute une série de positions initiales et qu'on évite le demi tour:
nb_pas = 12
position_present = np.arange(nb_pas)
position_desired = 8
d_position = (position_desired - position_present + nb_pas//2 ) % nb_pas - nb_pas//2
print (d_position)
position_present = (position_present + d_position ) % nb_pas
print (position_present)
arduino¶
coordonnées moteur + engrenage:
- 1.8 deg par pas (soit 200 pas par tour) x 32 divisions de pas =
- demultiplication : pignon1= 14 dents, pignon2 = 60 dents
n_pas = 200. * 32. * 60 / 14
print(n_pas)
Donc, on a un nombre même pas entier mais c'est pas grave. C'est le nombre de pas à faire pour le moteur pour faire faire un tour à la lame. Dans un premier temps, on va considérer ce cercle comme des entiers entre 0 et n_pas. ça devrait pouvoir être envoyé sans probleme a chaque arduino comme un int16 (à vérifier - si on a de la marge, on peut faire un truc plus précis):
2**16
L'algo sur le arduino doit donc avoir cette partie pour convertir une donnée absolue reçue en donnée relative à envoyer aux moteurs:
nb_pas = 27428
position_present = 27424
position_desired = 4 # recu avec la lecture sur le port série
# quand on reçoit une valeur absolue on calcule
d_position = (position_desired - position_present + nb_pas//2 ) % nb_pas - nb_pas//2
# on envoie d_position aux moteurs
# on met à jour la position du moteur
position_present = (position_present + d_position ) % nb_pas
print(d_position, position_present)
git¶
!git s
#!git add 2015-10-27\ élasticité\ r*
!git commit -am' on connecte le π + coordonnées absolues'
! git push