Quantcast
Channel: Wiki
Viewing all 1450 articles
Browse latest View live

PureData

$
0
0

PureData

Pure Data (en abrégé pd) est un logiciel de programmation graphique pour la création musicale et multimédia en temps réel. Il permet également de gérer des signaux entrants dans l'ordinateur (signaux de capteurs ou événements réseau par exemple) et de gérer des signaux sortants (par des protocoles de réseau ou protocoles électroniques pour le pilotage de matériels divers). (http://puredata.info)

Initiation

Voir le diaporama : Initation Pure Data

Ressources

À imprimer

Ateliers

Sur le Web

Installation

Il existe deux versions de PureData sur le site officiel :

  • Pd-Vanilla qui contient uniquement la base du logiciel orienté son et musique.
  • Pd-extended qui contient d'autres bibliothèques permettant d'étendre les fonctionnalités, notamment multimedia. Mais celle-ci devient obsolète, il est donc déconseillé de l'utiliser depuis 2016.

Pour une approche plus rapide, nous vous conseillons d'essayer notre logiciel Malinette : http://reso-nance.org/malinette

Premiers pas

Pour commencer à utiliser PureData, nous vous conseillons de lire le flossmanual dédié.

Mode édition :

Mode action :

Petits conseils entre amis...

Pour utiliser PureData l'idéal est :

  • Garder une main sur le clavier pour passer du mode EDITION au mode ACTION : raccourci CTRL + E.
  • Penser à consulter les aides accessibles d'un clic droit sur chaque objet.
  • Comprendre l'ordre des flots de données (entrée chaude et froide, trigger…)
  • Comprendre les variables $1,$2… et objet pack et unpack

Aller plus loin

Pour aller plus loin, nous vous conseillons les tutoriels vidéo de Rafael Hernandez qui a mis en ligne une trentaine de leçons de quelques minutes qui vous permettront de bien comprendre la logique du logiciel. :

Liens utiles

LIENS PRINCIPAUX

TUTORIELS VIDEO


Linux cnc

$
0
0

Linux cnc

Linux cnc est une distribution linux debian pour faire tourner une cnc. http://linuxcnc.org/

Interface

On peut ajouter des fonction à l'interface en utilisant Pyvcp http://linuxcnc.org/docs/2.4/html/hal_pyvcp.html

exemple : http://wiki.linuxcnc.org/cgi-bin/wiki.pl?Adding_Custom_MDI_Buttons

Les fichiers de config du lfo : FIXME

Ajouter un bouton retour à zéro

Dans votre dossier de configuration :

Dans votre fichier .ini

  1. dans la partie [DISPLAY], ajouter PYVCP=panel.xml
  2. dans la section [HALUI] ajouter vos commandes MDI_COMMAND = G0 X0 Y0 Z0
  3. Aussi verifier que dans la section [HAL] que les valeurs suivantes sont bonne : HALUI=halui, POSTGUI_HALFILE = custom_postgui.hal

Creer un fichier panel.xml

<pyvcp>
 <button>
     <halpin>"rapid-to-home"</halpin>
     <text>"Rapid to Home"</text> 
     <font>('Fixed',16)</font>
 </button>  
</pyvcp>

Dans votre fichier custom_postgui.hal

Ajouter les lignes suivantes:

 # set up the rapid to home button
 net remote-rapid-to-home halui.mdi-command-00 <= pyvcp.rapid-to-home

Cura

$
0
0

Cura

Cura est un logiciel opensource qui permet de controler une imprimante 3d de type reprap (Arduino firmware Marlin).
Il permet aussi de générer le GCode pour l'exporter sur une carte SD.
Aussi vous pouvez envoyer vos modeles sur YouImagine (concurrent de Thingiverse )

Utilisation

Plus simple d'utilisation que Répetier-Host (autre solution Open Source) et plus rapide pour produire le Gcode, Cura offre de nombreux avantages pour les débutants.
:!: Néanmoins il ne permet pas certains fin réglages, par exemple il n'est pas possible de régler l'accélération des moteur comme sur Repetier ce qui permet des mouvements plus fluide. Cura est alors moins précis pour imprimer de petit objet que Repetier.

Pas à pas

  1. Ouvrir Cura
  2. Appuyer sur le bouton dossier et charger votre modele 3d (.stl, ou .obj…)
  3. Rêgler les paramètres dans les onglets Basic et Advanced (le gcode est synthetisé à chaque réglage)
  4. Imprimer (Ctrl+P) ou exporter votre Gcode
Logiciel de dessin Generateur de GCODE
3d:(.stl) Blender, OpenScad, SketchUp etc… Cura, Repetier Host, Slicer, Pronterface

Voici le manuel d'utilisation en anglais :

GNU/Linux

$
0
0

GNU/Linux

Un système GNU/Linux est le nom parfois donné à un système d'exploitation associant des éléments essentiels du projet GNU et un noyau Linux. C'est une terminologie créée par le projet Debian et reprise notamment par Richard Stallman, à l'origine du projet collaboratif GNU qui manquait encore d'un noyau pour en faire un système complet à la création du noyau Linux, en 1991. Des systèmes complets prêts à l'emploi, réunissant les deux pièces, sont alors apparus, comme la distribution Debian. Dans le langage courant on trouve souvent l'emploi du terme « Linux » seul pour désigner une distribution du système d'exploitation GNU/Linux, ce qui peut porter à confusion étant donné qu'il existe des systèmes basés sur Linux mais pas GNU (comme Android).

Vidéo

Installations pour Xubuntu 14.04 LTS

Commandes

Initiation

Arduino et Timer

$
0
0

Arduino et Timer

Timers

  • Timer0 used for the timer functions, like delay(), millis() and micros(). If you change timer0 registers, this may influence the Arduino timer function. So you should know what you are doing.
  • Timer1: the Servo library uses timer1 on Arduino Uno (timer5 on Arduino Mega).
  • Timer2: the tone() function uses timer2.

Pins

Arduino UNO :

  • Timer 0 : pins 5 et 6 : 976.5625 Hz (8 bits > 256 values)
  • Timer 1 : pins 9 et 10 : 490.20 Hz (16 bits > 65536 values)
  • Timer 2 : pins 3 et 11 : 490.20 Hz (8 bits)

timer_and_counter_pins.jpg

Arduino MEGA :

  • Timer 0 : pins 4 et 13
  • Timer 1 : pins 11 et 12
  • Timer 2 : pins 9 et 10
  • Timer 3 : pins 2, 3 et 5 (16 bits)
  • Timer 4 : pins 6, 7 et 8 (16 bits)
  • Timer 5 : pins 46, 45 et 44 (16 bits)

Sur une Mega, chaque Tone simultané utilisera les timers dans cet ordre : 2, 3, 4, 5, 1, 0 (source)

Arduino Leonardo (no Timer 2!) : http://provideyourown.com/2012/arduino-leonardo-versus-uno-whats-new/ The Leonardo has 7 PWM pins instead of 6. ATmega32U4 also has a new timer, timer4 which has 10 bits and uses a PLL to count at 64MHz. Their mappings are different as well:

  • Timer 0 : pins 3 et 11 : 8 bits
  • Timer 1 : pins 5, 9, 10 : 16 bits
  • Timer 2 : no
  • Timer 3 : pins 5, 9, 10 : 16 bits
  • Timer 4 : pins 6, 13 (10 bits)

Tone et Leonardo problem :https://code.google.com/p/rogue-code/issues/detail?id=13

PWM Frequency

TCCR0B = TCCR0B & 0b11111000 | <setting>; //Timer 0 (PWM pins 5 & 6)
TCCR1B = TCCR1B & 0b11111000 | <setting>; //Timer 1 (PWM pins 9 & 10)
TCCR2B = TCCR2B & 0b11111000 | <setting>; //Timer 2 (PWM pins 3 & 11)
setting 5 & 6 3,11 & 9,10
0x01 62500 31250
0x02 7812 3906
0x03 976 488
0x04 244 122
0x05 61 30

Tone

When you use analogOut() to create pulsewidth modulation (PWM) on an output pin, you can change the on-off ratio of the output (also known as the duty cycle) but not the frequency. If you have a speaker connected to an output pin running analogOut(), you'll get a changing loudness, but a constant tone. To change the tone, you need to change the frequency. The tone() command does this for you.

tone() function uses at least timer2. You can’t use PWM on Pin 3,11 when you use the tone() function an Arduino and Pin 9,10 on Arduino Mega.

If you used a 16 bit timer (e.g. timer 1, or timers 3,4,5 on '1280), you could generate “tones” down to 1/8 Hz (one cycle every 8 seconds), although the library only accepts integers for frequency.

After all is said and done, because play() only accepts unsigned integers for frequency, the maximum frequency that can be produced is 65535 Hz - which, after rounding, results in a 65573.77 Hz “tone” on a 16 MHz part. Even if play accepted larger values for frequency, you couldn't achieve better than around 80KHz with the Tone library because the pin toggling is done in software. Each toggle, in software, requires AT LEAST 50+ cycles.

PWM

Chaque Timer controle deux sorties PWM.

Since all PWM channels, via the same timer, share the same waveform generator then the only thing that dfferentiates each channel is the 'comparator' value. All timers have associated with them three registers, TOP, BOTTOM and MAX

Par exemple, : analogWrite(pin, 128); Outputs a square wave

is compared against the value in an 8-bit counter. When the counter is less than the PWM value, the pin outputs a HIGH; when the counter is greater than the PWM value, the pin outputs a LOW. In the example above, a square wave is generate because the pin is HIGH from counts 0 to 127, and LOW from counts 128 to 255, so it is HIGH for the same amount of time it is LOW.

C'est pourquoi on ne peut dépasser 255 !

Modes

  • Normal
  • PWM, Phase Correct
  • Fast PWM (ATMega328P datasheet p152-153)
  • CTC (Clear Timer on Compare Match)

Fast PWM

This is useful in many power regulating circuits, or in circuits where small inductive or capacitive components are used. Atmega328 microcontroller is able to generate two types of fast PWM. In one mode Counter counts from 0 to 255 and in second mode counter counts from 0 to value stored in OCR0A.

Registres

  • TCCRx - Timer/Counter Control Register. The prescaler can be configured here.
  • TCNTx - Timer/Counter Register. The actual timer value is stored here.
  • OCRx - Output Compare Register
  • ICRx - Input Capture Register (only for 16bit timer)
  • TIMSKx - Timer/Counter Interrupt Mask Register. To enable/disable timer interrupts.
  • TIFRx - Timer/Counter Interrupt Flag Register. Indicates a pending timer interrupt

The Timer/Counter Control Registers hold several bit groups. These are:

  • WGM - Waveform Generation Mode bits
  • CS - Clock Select bits
  • COMnA & COMnB - Compare Match Output bits

Prescaler

system clock is 16MHz Il s’agit en fait de diviser l’horloge du timer : il s’agit de l’horloge des entrées/sorties (ou I/O clock) et pas de l’horloge système qui est à la fréquence du quartz, soit 16 MHz.

For pins 6 and 5 (OC0A and OC0B): For pins 9, 10, 11 and 3 (OC1A, OC1B, OC2A, OC2B):

TCCR2B = TCCR2B &0b11111000|0x01;

Période minimale : 1 / 16 000 000 = 0,000000062 = 6,2 ns

Target Timer Count = (Input Frequency / (Prescaler * Target Frequency)) - 1

Target Timer Count = (16000000 / 1) -1

Those familiar with C will know that an unsigned eight bit value can store a value from 0 to 28 − 1, or 255, before running out of bits to use and becoming zero again. Similarly, an unsigned 16 bit value may store a value from 0 to 216 − 1, or 65535 before doing the same.

Exemple : 20Khz

// Réglage de la fréquence PWM du Timer 1// vu sur : https://github.com/pololu/zumo-shield/blob/master/ZumoMotors/ZumoMotors.cpp 
int mypwm =200;// réglage de test avec max = 400 ici 
void setup(){// PWM frequency calculation// 16MHz / 1 (prescaler) / 2 (phase-correct) / 400 (top) = 20kHz
  TCCR1A =0b10100000;
  TCCR1B =0b00010001;
  ICR1 =400;// max} 
void loop(){
  OCR1B = mypwm;// 0-400}

Interruptions

The program running on a controller is normally running sequentially instruction by instruction. An interrupt is an external event that interrupts the running program and runs a special interrupt service routine (ISR). After the ISR has been finished, the running program is continued with the next instruction. Instruction means a single machine instruction, not a line of C or C++ code.

Before a pending interrupt will be able to call a ISR the following conditions must be true:

  Interrupts must be generally enabled
  the according Interrupt mask must be enabled

Interrupts can generally (globally) enabled / disabled with the function interrupts() / noInterrupts(). By default in the Arduino firmware interrupts are enabled. Interrupt masks are enabled / disabled by setting / clearing bits in the Interrupt mask register (TIMSKx).

When an interrupt occurs, a flag in the interrupt flag register (TIFRx) is been set. This interrupt will be automatically cleared when entering the ISR or by manually clearing the bit in the interrupt flag register.

The Arduino functions attachInterrupt() and detachInterrupt() can only be used for external interrupt pins. These are different interrupt sources, not discussed here.

Liens

Desk CNC

$
0
0

Desk CNC

Préparation du fichier gcode

Desk CNC peut permettre de dessiner ses fichiers, mais il est vraiment pas tres ergonomique. Nous conseillons donc l'utilisation de CAMBAM pour créer un gcode a partir d'un dessin vectoriel (.dxf) ou 3d.
En alternative gratuite et sur internet, il existe aussi http://www.makercam.com/ qui peut generer du gcode à partir de .svg.

Utilisation rapide

  1. Allumer la machine en tirant le bouton d'arrêt d'urgence rouge, des leds bleues doivent clignoter à l'intérieur.
  2. Ouvrir Desk Cnc , aller dans Mode> Machine
  3. Appuyer sur Reset (colonne de droite), Desk Cnc vous proposera de faire le zero machine (homing), dites oui !
  4. La machine se positionne au zéro machine
    • Vous pouvez déplacer l'outil avec les commandes Jog X+, X-, Y+, Y- , Z+, Z-
    • Vous pouvez définir un zéro logiciel avec les bouton X, Y, Z, All
  5. Charger votre fichier g-code généré avec CamBam
  6. :!: Allumer la défonceuse avec le bouton FLOOD on/off pour ne pas casser la fraise !
  7. Appuyer sur Go pour lancer le travail
  8. A la fin du travail Desk Cnc vous propose le Homing, dites NON!, car il refera le zero machine sinon.

Zéro logiciel

Il n'y a pas y avoir de bouton de retour au zéro logiciel !

  • Notez votre zéro logiciel, avant de le définir, pour éviter de le perdre (copie d'écran).
  • le Bouton Home fait refaire le zéro machine !!
  • Pour faire un retour zéro logiciel, il va falloir écrire G01 X0 Y0 dans la commande MDI en haut en cas de besoin, (attention a bien remonter la fraise par exemple avec une commande G01 Z2 (qui remontera la fraise 2 mm au dessus du zéro logiciel déjà configuré)).

F.A.Q.

Screencast audio/vidéo

$
0
0

Screencast audio/vidéo

Enregistrement audio et vidéo de ce qu'il se passe sur l'ordinateur.

Solutions sur Linux

Essayer avant toute chose avec Kazam ou gtk-recordmydesktop ou http://www.maartenbaert.be/simplescreenrecorder/

Autre ressource sur Screencast your patch.

Installation

Screencast audio/video
(ffmpeg for video, vlc for audio, jack and pulse audio to connect Pure Data to vlc)

ffmpeg

  • sudo add-apt-repository ppa:jon-severinsson/ffmpeg
  • sudo apt-get update
  • sudo apt-get install ffmpeg

qjackctl, jack, pulse

  • sudo apt-get install qjackctl pulseaudio-module-jack jack-rack libnotify-bin ladspa-sdk plugins-swh
  • pacmd suspend true

Dans QJackCtl : Script après le démarrage :

  • pacmd load-module module-jack-source channels=2; pacmd load-module module-jack-sink channels=2;

Script Linux

#!/bin/bash# Script to screencast audio and video (ffmpeg for video, vlc for audio, jack and pulse audio to connect Pure Data to vlc) 
DATE=`date +%Y%m%d`TIME=`date +%Hh%M` 
AUDIO_FILE="/media/data/videos/record/out-$DATE-$TIME.wav"VIDEO_FILE="/media/data/videos/record/out-$DATE-$TIME.avi" 
# Start screencastcp ~/.pdextended_malinette ~/.pdextended
qjackctl -a ~/Softs/jack-patchbay.xml &sleep3
pd-extended -jack-open/media/data/code/malinette/malinette/MALINETTE-en.pd &sleep3ffmpeg-f x11grab -r25-s 946x768 -i :0.0+0,0-vcodec huffyuv -y$VIDEO_FILE&
cvlc jack://channels=2:ports=.*--jack-input-auto-connect--sout="#transcode{acodec=s16l,channels=2,ab=128,samplerate=44100}:standard{access=file,mux=wav,dst="$AUDIO_FILE"}" 
# Killkillall qjackctl
killall pd-extended
killallffmpegkillall cvlc
 
#jack_connect pd_extended_0:output0 "PulseAudio JACK Source:front-left"#jack_connect pd_extended_0:output1 "PulseAudio JACK Source:front-right"#--sout "#transcode{acodec=mp3,ab=128,channels=2,samplerate=44100}:duplicate{dst=std{access=file,mux=mp4,dst=$AUDIO_FILE}}}"

Autres

vidéo + son micro

ffmpeg -f alsa -ac 2 -i pulse -f x11grab -r 30 -s 948x738 -i :0.0+0,24 -acodec pcm_s16le -vcodec libx264  -preset ultrafast -threads 0 -y test-pulse.mkv

pas de son ...

cvlc --jack-input-auto-connect screen:// --screen-fps=25 --input-slave pulse://jack_in --sout "#transcode{venc=x264,quality:100,scale=1,fps=30,acodec=mp3,ab=128,channels=2, samplerate=44100}:duplicate{dst=std{access=file,mux=mp4,dst=nowardev.mp4}}}"

recordmydesktop, kazam

recordmydesktop -x 300 -y 300 -width 480 -height 272 -fps 15 --use-jack system:capture_1 system:capture_2 -o output.ogv

avconv

avconv -f x11grab -show_region 1 -video_size hd720 -framerate 24 -i :0.0 -threads 2 -q 1 test.mkv

VLC convertir/enregistrer jack audio wav

List the current JACK clients. jack_lsp -c, arecord -l

WEBCAM

mplayer -tv driver=v4l2:gain=1:width=640:height=480:device=/dev/video0:fps=10:outfmt=rgb16 tv://

Gif animé

 byzanz-record --duration=15 --x=200 --y=300 --width=700 --height=400 out.gif

Ffmpeg/Jack à essayer

Source : http://lists.puredata.info/pipermail/pd-list/2014-11/108461.html

ffmpeg -f jack -ac 2 -i ffmpeg -f x11grab -r 25 -s 1366x768 -i :0.0 -acodec pcm_s16le -threads 0 output.mkv

Notice that:

  • ffmpeg in my case is the 'original' one compiled by hand. Unfortunately debian now seems to only package avconv and that has always crashed on me with jack as audio input. However ffmpeg is relatively easy to compile on debian following this guide: https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu
  • You should play with the -s and -i parameters to suit your needs.
  • Pulseaudio will be automatically suspended when you run jack (I was forced to install it to use skype with, alas, I'm forced to use for work).
  • Clearly when screen-casting it'll be difficult to get Chuck Norris low latencies without some xruns.
  • The output with that ffmpeg command will be a very good quality mkv video however it will also be very (very!) big and you'll have to factor in the extra time for re-compressing (it's possible to encode on the fly -but I prefer to have a good quality 'original')
  • For encoding I've had rather nice results with using webem, for example (YMMV):
ffmpeg -y -i "$INFILE" -threads 8 -f webm -vcodec libvpx -g 120 -level 216 -profile 0 -qmax 42 -qmin 10 -rc_buf_aggressivity 0.95 -vb 2M -acodec libvorbis -aq 90 -ac 2 $OUTFILE

Liens

Communication série : Arduino et Pure Data

$
0
0

Communication série : Arduino et Pure Data

Pour communiquer entre une carte Arduino et le logiciel Pure Data, il existe plusieurs solutions, listées ici. La plus répandue est d'utiliser l'objet [arduino] dans Pure Data avec le firmware Firmata dans Arduino. Voir aussi la page Arduino et pd sur flossmanuals.

Cependant il peut arriver que nous ayons besoin de plus de fonctionnalités comme l'utilisation des capteurs de distance avec la bibliothèque UltraSonic, des capteurs capacitifs, d'utiliser la bibliothèque Tone pour changer la fréquence PWM, etc. Donc, il faut soit reprendre et donc comprendre les exemples de Firmata, soit comprendre la base de la communication série. Vous l'aurez compris, on va plutôt choisir la deuxième solution.

Téléchargement de tous les codes de cette page : arduino-pd-serial.zip
Un autre tutoriel (en anglais) détaillant la plupart des cas :arduino_for_pders.tar.gz

Prérequis

Si vous n'êtes pas à l'aise avec les notions de liaison série, je vous invite à lire le tutoriel d'openclassrooms.

Une autre notion technique très utilisée ici est celle de String, littéralement “chaîne” en français. Il s'agit d'un type de données comme les nombres entiers (int), nombres à virgule flottante (float) ou caractère (char) que l'on retrouve en programmation. On l'appelle chaîne de caractères, c'est une suite de caractères, l'équivalent d'un tableau de caractères. Par exemple, le mot “BONJOUR” est une String composée de sept caractères 'B', 'O', 'N', 'J', 'O', 'U', 'R' auquel il est parfois ajouté au niveau informatique un caractère de fin, en langage C par exemple.

Avec les Arduino Leonardo, il y a une petite différence, c'est pourquoi les exemples doivent être un peu modifiés. Il faudra peut-être ajouter ajouter un

while(!Serial);

dans le setup. Voir cette page : Différences avec Arduino UNO

Une valeur

L'exemple le plus simple est d'envoyer une valeur avec Pure Data et de la recevoir après être passée par la carte Arduino. Une boucle en somme.

Quand il s'agit d'un nombre pas de problème, mais on peut aussi vouloir envoyer des caractères. Pour ce faire le caractère est converti en nombre entre 0 et 255 soit 8 bits. La conversion suit le standard ASCII que nous utiliserons souvent. Une table permet de visualiser ces correspondances.

// Serial messages (1)// Recevoir un nombre et l'envoyer 
// conteneur (int) pour recevoir la donnée sérieint incomingByte =0; 
void setup(){// ouverture du port série avec un taux de 9600 bauds
  Serial.begin(9600);} 
void loop(){// on reçoit au moins 1 octet dans le buffer (.available())if(Serial.available()>0){// lecture d'un octet et effacement dans le buffer
    incomingByte = Serial.read();// ecriture d'un octet
    Serial.write(incomingByte);}}

Une commande

En utilisant les opérateurs de comparaisons, on peut déclencher une fonction très simplement. Ici, on allume et éteind la LED 13 de la Arduino avec l'envoi d'un chiffre ou d'une lettre.

// Serial messages (2)// Allumer une LED avec un nombre// 72 pour allumer, 76 pour éteindre 
constint ledPin =13;// pin de la LEDint incomingByte;// variable  
void setup(){
  Serial.begin(9600);// port série} 
void loop(){// on reçoit quelque choseif(Serial.available()>0){ 
    incomingByte = Serial.read(); 
    // allumer la LED (H=72 en ASCII)if(incomingByte =='H')  digitalWrite(ledPin, HIGH); 
    // eteindre la LED (L=76 en ASCII)if(incomingByte =='L') digitalWrite(ledPin, LOW);}}

Serial.available()

La fonction Serial.available() est toujours utilisée pour connaître combien d'octets restent dans le buffer. Celui-ci est limité à 63 octets et si il n'y pas de Serial.read() ou de Serial.parseInt() pour enlever petit à petit les octets, alors il atteindra son maximum.

Dans le code Pure Data, il y a un petit algorithme très pratique pour afficher dans Pure Data les données venant de la Arduino. Il consiste à stocker dans un objet [list] toutes les données les unes à la suite des autres ([list prepend]), puis de l'envoyer sous forme de liste quand arrive le chiffre 10 équivalent au retour à la ligne dans Arduino, le ln dans Serial.println(). L'objet [bytes2any] convertit cette liste en caractères courant.

// Serial messages (3) : test available// imprime le nombre de caractères reçus 
int inBytes =0;int lastInBytes =0; 
void setup(){
  Serial.begin(9600);// port série} 
void loop(){// nombre d'octets reçus dans le buffer
  inBytes = Serial.available(); 
  // pour n'imprimer le nombre d'octets reçus// que lorsque ce nombre a changéif(inBytes != lastInBytes && inBytes >0){
    Serial.println(inBytes);}
  lastInBytes = inBytes;
  delay(10);}

Méthodes pour recevoir les caractères ASCII

serialEvent()

C'est l'occasion d'introduire la fonction serialEvent() du langage Arduino qui permet de récupérer les données séries, très pratique pour ne pas avoir du code éparpillé. La méthode pour recevoir un message consiste à concaténer (ajouter les unes à la suite des autres) les données pour former une chaine de caractères (String). On définit un caractère de fin de message pour pouvoir ensuite l'utiliser. Il est souvent convenu que celui-ci soit le caractère de retour de ligne “\n”, équivalent à 10 en ASCII.

L'étape suivante est d'extraire du message la fonction et l'argument à l'aide des méthodes indexOf(' ') et substring().

/*
 * Serial messages (4)
 * Réception des données avec Serial Event et commande avec un argument
 */ 
String inputString ="";// chaine de caractères pour contenir les données
boolean stringComplete =false;// pour savoir si la chaine est complète 
void setup(){
  Serial.begin(9600);// port série
  pinMode(13,OUTPUT);
  pinMode(9,OUTPUT);} 
void loop(){// 2 - Utilisation du messageif(stringComplete){//Serial.println(inputString); 
    // on récupère la position du séparateur (l'espace " ")int index = inputString.indexOf(' '); 
    // on coupe la chaine en deux : la fonction d'un côté et l'argument de l'autre
    String fct = inputString.substring(0,index); 
    String arg = inputString.substring(index,inputString.length()); 
    // appel de ma fonction en transformant la chaine en nombreif(fct =="LED13"){
      light(13, arg.toInt());}elseif(fct =="LED9"){
      light(9, arg.toInt());} 
    // on vide la chaine pour utiliser les messages suivants
    inputString ="";           
    stringComplete =false;}} 
/*
  1 - Réception des données
  SerialEvent est déclenchée quand de nouvelles données sont reçues. 
  Cette routine tourne entre chaque loop(), donc utiliser un 
  delay la fait aussi attendre.
 */void serialEvent(){while(Serial.available()){// récupérer le prochain octet (byte ou char) et l'enleverchar inChar =(char)Serial.read();// concaténation des octets reçus
    inputString += inChar;// caractère de fin pour notre chaineif(inChar =='\n'){  
      stringComplete =true;}}} 
// fonction personnalisablevoid light(int pin, int brightness){
  Serial.print("Light function : ");
  Serial.print(pin);
  Serial.print(", ");
  Serial.println(brightness);
  analogWrite(pin,brightness);}

Avec deux arguments

On découpe encore une fois les données avec les espaces.

Pour le code Arduino, on découpe une nouvelle fois pour récupérer le second argument. On ajoute aussi nos fonctions.

void loop(){if(stringComplete){ 
    ...
 
    // deuxième découpage pour le second argument
    index = arg.lastIndexOf(' ');
    String arg2 = arg.substring(index,arg.length());
    arg = arg.substring(0,index); 
    // appel des fonctions en transformant la chaine en nombreif(fct =="LED"){
      light(arg.toInt(), arg2.toInt());}elseif(fct =="MODE"){
      mode(arg.toInt(), arg2.toInt());} 
...
 
// fonctions personnalisablesvoid light(int pin, int brightness){
  ...
} 
void mode(int pin, int state){
...
}

Découper le message (parser)

Jusqu'ici, le nombre d'arguments est fixe et la méthode n'est pas modulaire. On peut concevoir une fonction qui parcourt le message et le découpe à chaque espace, qui sera le séparateur. Ainsi, le message “LED 9 120”, pourra être décomposé en trois “bouts” : “LED”, “9”, “120”. Le premier sera le sélecteur de la commande et les deux autres, les arguments dans Arduino.

Le patch Pure Data est le même que précédemment :

Le code Arduino est aussi presque le même, nous ajoutons la fonction splitString() :

...
 
int cnt =0;// nombre de données découpées
String data[10];// stockage des données découpées 
...
 
void loop(){// si le message est completif(stringComplete){ 
    // on le découpe à chaque espace ' '// et on stocke les bouts dans un tableau
    splitString(inputString, ' '); 
    // appel des fonctions selon le premier sélecteurif(data[0]=="LED"){
      light(data[1].toInt(), data[2].toInt());}elseif(data[0]=="MODE"){
      mode(data[1].toInt(), data[2].toInt());} 
    // vide la chaine
    inputString ="";           
    stringComplete =false;}} 
...
 
// méthode pour découper le message avec un séparateur (ou "parser")void splitString(String message, char separator){int index =0;
  cnt =0;do{
      index = message.indexOf(separator);// s'il y a bien un caractère séparateurif(index !=-1){// on découpe la chaine et on stocke le bout dans le tableau
          data[cnt]= message.substring(0,index); 
          cnt++;// on enlève du message le bout stocké
          message = message.substring(index+1, message.length());}else{// après le dernier espace   // on s'assure que la chaine n'est pas videif(message.length()>0){ 
           data[cnt]= message.substring(0,index);// dernier bout
           cnt++;}}}while(index >=0);// tant qu'il y a bien un séparateur dans la chaine} 
...

Autres exemples

// Exemple avec strtok// http://forum.arduino.cc/index.php/topic,41215.0.html#include <string.h> 
char sz[]="Here; is some; sample;100;data;1.414;1020"; 
void setup(){char*p = sz;char*str;
  Serial.begin(9600);while((str = strtok_r(p, ";", &p))!=NULL)// delimiter is the semicolon
    Serial.println(str);} 
void loop(){}

SerialCommand

Télécharger la bibliothèque ArduinoSerialCommand et la placer dans le dossier “~/sketchbook/libraries”.

// Demo Code for SerialCommand Library - Steven Cogswell - May 2011 
#include <SerialCommand.h>#define arduinoLED 13 // Arduino LED on board 
SerialCommand sCmd;// The demo SerialCommand object 
void setup(){
  pinMode(arduinoLED, OUTPUT);// Configure the onboard LED for output
  digitalWrite(arduinoLED, LOW);// default to LED off 
  Serial.begin(9600); 
  // Setup callbacks for SerialCommand commands
  sCmd.addCommand("ON", LED_on);// Turns LED on
  sCmd.addCommand("OFF", LED_off);// Turns LED off
  sCmd.addCommand("HELLO", sayHello);// Echos the string argument back
  sCmd.addCommand("P", processCommand);// Echos two arguments converted to integers
  sCmd.setDefaultHandler(unrecognized);// Handler for command that isn't matched 
  Serial.println("Ready");} 
void loop(){
  sCmd.readSerial();// We don't do much, just process serial commands} 
void LED_on(){
  Serial.println("LED on");
  digitalWrite(arduinoLED, HIGH);} 
void LED_off(){
  Serial.println("LED off");
  digitalWrite(arduinoLED, LOW);} 
void sayHello(){char*arg;
  arg = sCmd.next();// Get the next argument from the SerialCommand object bufferif(arg !=NULL){// As long as it existed, take it
    Serial.print("Hello ");
    Serial.println(arg);}else{
    Serial.println("Hello, whoever you are");}} 
void processCommand(){int aNumber;char*arg;
  Serial.println("We're in processCommand");
  arg = sCmd.next();if(arg !=NULL){
    aNumber =atoi(arg);// Converts a char string to an integer
    Serial.print("First argument was: ");
    Serial.println(aNumber);}else{
    Serial.println("No arguments");} 
  arg = sCmd.next();if(arg !=NULL){
    aNumber =atol(arg);
    Serial.print("Second argument was: ");
    Serial.println(aNumber);}else{
    Serial.println("No second argument");}} 
// This gets set as the default handler, and gets called when no other command matches.void unrecognized(constchar*command){
  Serial.println("What?");}

CmdMessenger

Plus compliqué mais à noter : http://playground.arduino.cc/Code/CmdMessenger

Réception de valeurs

Même technique, l'espace est un séparateur et le retour à la ligne le caractère de fin de message

/*
 * Serial messages (8)
 * Envoie de données de trois capteurs
 */ 
void setup(){
  Serial.begin(9600);} 
void loop(){
  Serial.print(analogRead(0));
  Serial.print(" ");
  Serial.print(analogRead(1));
  Serial.print(" ");
  Serial.println(analogRead(2));
  delay(20);}

Communication série Arduino/Processing

$
0
0

Communication série Arduino/Processing

Il est très facile d'envoyer une valeur avec la communication série, mais il souvent utile d'envoyer un paquet de valeurs. Par exemple envoyer les valeurs de deux ou plus capteurs.

Code Arduino

// Send serial data to Processing// Data are separated by a ",", so you could send any number of data 
int firstSensor =0;// first analog sensorint secondSensor =255;// second analog sensor 
void setup(){
  Serial.begin(9600);while(!Serial){;// wait for serial port to connect. Needed for native USB port only}} 
void loop(){ 
    // Update Data with linear values
    firstSensor +=1; 
    secondSensor -=1;if(secondSensor <0)  secondSensor =255;if(firstSensor >255)  firstSensor =0; 
    // Send Data
    Serial.print(firstSensor);
    Serial.print(",");// séparateur// Avec println on ferme le paquet de valeur, car "ln"
    Serial.println(secondSensor); 
    // Sampling rate
    delay(5);}

Code Processing

// Get Serial Data from an Arduino// Parse it with a separator caracter "," 
// import the Processing serial libraryimportprocessing.serial.*;    
Serial myPort;// The serial port 
// Test valuesint v1 =0;int v2 =255;int x; 
void setup(){
  size(640,480);// Open serial port//printArray(Serial.list());
  myPort =new Serial(this, Serial.list()[0], 9600); 
  // Read bytes into a buffer until you get a linefeed (ASCII 10):
  myPort.bufferUntil('\n'); 
  //draw with smooth edges://smooth();
  background(255);} 
void draw(){ 
  // Draw circles
  fill(#ff0000);
  ellipse(x, v1, 5, 5);
  fill(#00ff00);
  ellipse(x, v2, 5, 5); 
  // Update x position
  x++; 
  // Refresh screenif(x >600){
    background(255);
    x =0;}} 
// serialEvent  method is run automatically by the Processing applet// whenever the buffer reaches the byte value set in the bufferUntil()// method in the setup():void serialEvent(Serial myPort){ 
  // read the serial buffer:String myString = myPort.readStringUntil('\n'); 
  // if you got any bytes other than the linefeed:
  myString = trim(myString); 
  // split the string at the commas// and convert the sections into integers:int values[]=int(split(myString, ',')); 
  if(values.length>0){
    v1 = values[0];
    v2 = values[1];//println(v2);}}

Références artistiques

$
0
0

Références artistiques

Voici sélectionnées quelques œuvres artistiques appartenant essentiellement aux XXe et XXIe siècle afin de donner quelques clès de compréhension à ceux qui voudraient aborder ce qui se fait aujourd'hui en Art : numérique, électronique, mécanique, interactivité, générativité, …

Mouvements artistiques : Land Art, Performance, Body Art, Fluxus, Partition graphique, Net Art, Art interactif, Art mécanique, Art cinétique, Art optique, Art abstraitArt conceptuel, Nouveau réalisme, Art génératif, Art vidéo, Art numérique, Art médiatique, Computer Art (Computer Art History/pdf), ASCII Art, Glitch Art, Circuit Bending, Musique concrète, Musique bruitiste, Computer Music, Musique électroacoustique, Hacker, Installation artistique, Art Urbain, Architecture radicale, Bio Art, Bio Design, Arts & Crafts, …

Voir aussi nos articles Arts et machines, Machines musicales, Lutherie électronique, et celui de Labomedia : Une Histoire des nouveaux médias de 1900 à nos jours.

Mouvement figé

  • Roman Opalka. OPALKA 1965 / 1 - ∞ [1965]. article.

  • Cyrille Henry. Voyages [2006]. (il doit y avoir un autre artiste antérieur…)

Installation Multimédia

  • Nicolas Shoeffer. Cysp1 [1956]

  • Le Corbusier, Edgar Varèse, Iannis Xenakis. Le Pavillon Philips, exposition universelle de Bruxelles [1958]

Installation In-situ

  • Adam Nilsson. Robo-rainbow [2010]

Performance audiovisuelle

  • Alva Noto & Annes James Chaton. Uni Acronym [2011]. vidéo (Autres projets : Cyclo [2001] et Transform [2001])

  • Chris Milk pour Arcade Fire. Summer into dust [2011]. vidéo

  • Nicolas Bernier. Frequencies (synthetic variations) [2013]

Net Art

  • David Guez. 2067 [2006]

Art interactif

  • Samuel Bianchini. Niform [2007]. Valeurs croisées [2008]
  • Free Art and Technology (FAT), OpenFrameworks, the Graffiti Research Lab, and The Ebeling Group communities. Eyewriter [2009]. vidéo.

  • INRIA ENSTA ParisTech et l’Université de Bordeaux I/Labri. Ergo-Robots [2011]

Data Processing

  • Walking Man ASCII.

Art électronique

  • Walt Disney. Tron [1982]

{vimeo>162541839?600}}

Art Sonore

Art Biologique

Rencontres des ateliers de Marseille

$
0
0

Rencontres des ateliers de Marseille

L'équipe du LFO a organisé deux journées de rencontres entre les ateliers de fabrication et de réparation de Marseille les 22 et 26 avril 2016. Nous avons invité une quarantaine de personnes faisant parti d'une trentaine d'organisations.

Plusieurs réflexions ont motivé ces rencontres :

  1. Après avoir été dévalorisés symboliquement et économiquement, les savoirs-faire manuels et les outils de production associés regagnent très doucement du terrain. À Marseille, en parallèle des ateliers historiques, une nouvelle vague d'ouverture d'ateliers semble émergé depuis deux ans. Le but premier de ces rencontres est de mieux connaître l'ensemble des ces acteurs et de s'ouvrir à leurs domaines.
  2. Depuis son essor dans les années 90, le mouvement des logiciels libres a essaimé. Il inspire aujourd'hui bien d'autres domaines que celui de l'informatique : le matériel libre, le design libre, les connaissances libres, la science citoyenne, les semences libres, etc. Cet ensemble basé sur les notions de biens communs permet d'esquisser les contours d'une société meilleure sur le plan humain et environnemental.
  3. Pour accompagner ces mouvements, s'est développé depuis une vingtaine d'années des espaces d'échanges de savoirs : médialabs, hackerspaces, fablabs, friches, ateliers, et autres tiers-lieux, qui renouvellent ou réactualisent les pédagogies mêlant pratique et théorie, art et science, individu et société, de l'éducation populaire.
  4. Un idéal s'invente autour de la place des ateliers dans les villes. S'inspirant des “ateliers communaux” d'André Gorz, du projet Fab City de la ville de Barcelone avec un atelier par quartier, ou des villes reprises par leurs habitants en nécessité (DIY Manifesto), pourquoi ne pas imaginer les ateliers comme un réseau de nouveaux services publics ? Des espaces en ville pour bricoler, réparer, créer, fabriquer, s'entraider, échanger, semblent remplir un besoin fondamental, qui pourrait poser les bases d'une relation plus consciente et responsable envers la matière et les objets que nous fabriquons et consommons.

Participants

Un grand merci aux dix-huit participants de ces ateliers, que nous avons ici regroupés en structures.


Les Pas Perdus est un collectif d'artistes plasticiens qui partage avec un autre collectif “L'Art de Vivre” un local d'environ 1300m2, le comptoir de la Victorine. Ils proposent depuis une quinzaine d'années des installations et des œuvres plastiques imbriquées dans un voyage inventif à travers le meuble > la maison > le quartier > la ville. En côtoyant des pratiques esthétiques populaires, le groupe artistique travaille à la fabrication d'œuvres en co-réalisation avec des créateurs/trices populaires. Le Comptoir de la Victorine a ouvert en avril 2016, un nouvel espace : le vestibule pour l'emploi. Les Pas Perdus font partis du réseau Art Factories, les nouveaux territoires de l'art.

Projets : Le tuning d'appartement, L'atelier bricolage, Week-end FADA, L'art des habitants habitésà la Cité Radieuse, Kitchen On The Run (rencontre entre des réfugiés et la population locale autour de la cuisine).


Repair Café Marseille est une initiative de l’association Les Énergiques, développée dans le cadre d’un projet cofinancé par la Région PACA dans le domaine de la transition énergétique. En effet, cette transition nécessaire ne concerne pas uniquement l’augmentation de la production d’énergie renouvelable, mais également la réduction de la consommation d’énergie dans tous les domaines d’activité. Il fait parti du réseau national et international des Repair Café créé en 2008. À Marseille, les ateliers sont itinérants, il n'y a pas de lieu fixe.

Réparer ensemble, c’est la fonction principale d’un lieu appelé Repair Café, dont l’entrée est ouverte à tous. Outils et matériel sont disponibles pour y effectuer de nombreuses réparations : vêtements, meubles, appareils électriques et électroniques, vélos, vaisselle, jouets, etc. Il s'agit aussi de montrer aux participants qu'il existe localement des artisans réparateurs compétents et de les sensibiliser au problème de l’obsolescence des objets. Ainsi, nous espérons déclencher chez les citoyens un nouveau réflexe, qui ne sera plus celui d’acheter à bas prix des produits de mauvaise qualité, mais de réparer eux-mêmes leurs objets de bonne qualité dans le cas de pannes simples, et de faire appel à leur « réparateur de famille », homologue pour leurs objets de leur « médecin de famille », lorsque la panne sera plus complexe.


Le Collectif Vélos en ville est une association loi 1901 reconnue d’intérêt général créée le 1er août 1996. Elle a pour objet de sensibiliser, de former et de faire participer le public le plus large possible au développement de la pratique du vélo en ville. Elle appartient au réseau national de la Fédération française des Usagers de la Bicyclette (FUB), au réseau national de l’Heureux-Cyclage et à l’APEAS (Agence Provençale de l’Economie Alternative et Solidaire). L'association compte environ 30 bénévoles, 4 salariés et 1400 adhérents. Ils utilisent un système de gestion développé par le réseau national : La Burette. À Marseille, il existe un autre collectif, Vélo Sapiens.

Outre son atelier de réparation, le recyclage de pièces détachées et la vente de vélo, Vélos en Ville veille au respect des lois concernant les pistes cyclables, organise des ballades, anime des ateliers de sensibilisation et propose tous les ans une Fête du Vélo. La prochaine aura lieu le dimanche 5 juin 2016.


La ressourcerie Histoires sans fin est une association affiliée au réseau national des Ressourceries depuis décembre 2014. Un lieu est ouvert à Venelles et un second va ouvrir ses portes au Panier, 12 place de lorette. Les ressourceries en PACA sont : Trilogik, Impulse Toit, Recyclodrome, Evolio et Histoires sans fin. Voir leur plaquette.pdf.

Une ressourcerie est un établissement ayant pour objectif principal de favoriser le réemploi de certains objets considérés comme des déchets en leur donnant une deuxième vie en les proposant à la vente à petit prix. Pour cela c'est un intérmédiaire entre les communes, les déchêteries et les éco-organismesà travers quatre activités : collecte, valorisation, revente, sensibilisation et pour certaines s'ajoutent une démarche d'insertion par l'emploi. Dans certains cas, des réparations seront nécessaires afin de leur redonner une valeur d’usage.


Le Lieu de Fabrication Ouvert (LFO) est un espace associatif d'expérimentation, d'échanges et d'apprentissage autour de la fabrication numérique et des cultures libres. Il est animé par deux associations Reso-nance numérique et Zinc depuis novembre 2013. En parallèle du lieu physique, un site Internet Wiki est régulièrement enrichi de contenus : connaissances, projets, ateliers. Les adhérents sont invités à y contribuer. Les fablabs sont un réseau national et international d'ateliers de fabrication numérique ouverts au public.

Nous avons organisé deux événements regroupant les projets du LFO, des acteurs régionaux, nationaux et internationaux de diverses disciplines : What The FLOK ? en 2014 et Made In Friche Machines en 2015, avec notamment une journée de rencontre des Fablabs de la région. Projets : BrutBox, Malinette, Chimères Orchestra, VéloLab, Pépinière mobile.


Make It Marseille est un espace d'ateliers et de travail partagés (co-working) orienté entreprise, d'une superfice de 450m2. Il a ouvert ses portes en avril 2016. Le vernissage a lieu le jeudi 28 avril 2016. Les espaces et les machines se louent. Plusieurs machines à commande numérique sont disponibles pour le textile, les bijoux, une fraiseuse numérique de grand format 1,50mx1,50m, une découpe laser 90x50cm ainsi que des outils électro-portatifs et un studio photo. La formation sécurité est obligatoire. Au niveau électronique, le partenaire est Ultra Lab.

Projet : Module M, un espace de travail open source.


Loïc Bourse (Cobannos) est sociologue de formation, puis après une reconversion professionnelle dans le génie mécanique, devient artisan dans le domaine du vélo. Il possède chez lui un atelier métal avec tour, fraise, ceintreuse et soudure. Il souhaite développé son activité : monter un atelier de création de vélo et de revente de pièces détachées.


Le DSAA - Design Graphique est une formation en design graphique (master 1 et 2) autour des métiers du livre et du numérique. Un site web wiki a pour ambition d'archiver, documenter et diffuser les recherches développées au sein de la formation.

Projets : Open Frac #1, Open Frac #2, Portrait Karmique, Noailles Tous Ici !.


Assodev-Marsnet est une association créée en 2001 ayant pour but le développement des initiatives solidaires, de la vie associative et du bénévolat.

Elle accompagne à l'usage de l'Internet coopératif et de l'informatique libre :

L'association est constituée d'environ 230 membres dont 170 associations, 25 bénévoles/contributeurs et 3 salariés. Marsnet propose également des services en ligne libres, décentralisés, ouverts, éthiques et solidaires : marslibre.org

Elle organise également des débats-atelier sur les dangers des géants du net (GAFAM), et les alternatives libres, éthiques et décentralisées : Libérons Internet ! Dégoogling-Testing Party ! les 15 et 23 avril 2016.

Elle dispose d'une salle équipée de 8 postes et d'un vidéo projecteur dans des locaux partagés (autre salle commune, cuisine et courette extérieure) pour les formations, les ateliers d'entraide et les bénévoles.

Envies

Les idées et envies qui ont été formulées.

Prochain rendez-vous

L'équipe du LFO organise un festival MACHINES#2 d'une semaine avec ateliers, concerts, débats fin septembre 2016 au dernier étage de la Friche Belle de Mai. Rien n'est encore joué, mais cela pourra être une belle occasion de fabriquer et d'échanger ensemble, d'essaimer vos ateliers. Le thème sera autour de l'énergie.

Tournée des ateliers

Chaque collectif peut animer un atelier dans les autres lieux. Nous pouvons ainsi organiser une sorte de tournée des ateliers. Les premières demandes formulées concernent :


Un atelier d'initiation sur les licences au LFO, animé éventuellement par Marsnet. Nous essaierons de l'organiser pour juin (voir l'agenda). L'idée est de s'inspirer des réflexions sur les licences libres, logicielles, matérielles et sur la réciprocité (Peer Production Licence). Le Labomedia à Orléans a organisé un atelier à ce sujet : Autour des licences à réciprocité.


Une formation sur la soudure métal (TIG, MIG, à l'arc), pourquoi pas en vue de la réalisation d'éoliennes Low Tech ou de tall bike. Celle-ci pourrait se dérouler dans l'atelier des Pas Perdus au comptoir de la Victorine, en compagnie de Julien et de Loïc.

EDIT : Ateliers métal prévu les 19 et 20 juillet 2016.

Reste la question du modèle économique que nous n'avons pas eu le temps d'aborder. Nous pourrions envisager de proposer des formations professionnelles ou des stages alliant métiers manuels et numérique, qui se dérouleraient dans les différents lieux.

Un nouveau lieu

Ouvrir un nouveau lieu à Marseille autour du métal semble plaire à beaucoup de monde : Loïc cherche à espace où démarrer son activité de créateur de vélo ; le LFO et certains membres de Vélos en Ville souhaite aussi se donner les moyens de manipuler le métal et d'avoir les conditions pour créer plus d'objets ou de pièces artistiques ; et Vélos en Ville serait prêt à aider et soutenir l'ouverture d'un nouveau lieu autour du vélo. Comme le proposait Daniel, il pourrait même y avoir plusieurs pôles : meubles, vélo, jouets, etc.

Les Pas Perdus proposent de discuter de ce projet, car il y aurait des espaces négociables au comptoire de la Victorine et une volonté d'ouvrir un peu plus leur atelier. En s'organisant à plusieurs, nous pourrions monter un projet qui plaise à la mairie, pour y donner du poids et pérenniser aussi le comptoire. Ricardo proposait un service d'appel à bénévoles mobee pour ce type d'actions.

De façon coopérative, nous pourrions y organiser :

  • des ateliers de réparation en lien avec Repair Café et les ressourceries pour favoriser les circuits courts ;
  • des temps de création pour produire des pièces artistiques ou écolo, en complément de l'acquisition d'une fraiseuse numérique grand format capable d'usiner de l'aluminium et du bois ;
  • des espaces par matériaux avec des modules de travail transportables comme le module M de Make It Marseille ;
  • des formations sur les savoir manuels et numérique pour être en mesure de choisir entre ces différentes techniques ;
  • la mise en commun “x.thèques” : Logithèque, Matériauthèque, Bibliothèque, Outilsthèque, Webothèque, Projetsthèque, etc.

Resterait à mieux considérer, notamment pour le LFO, les conditions de travail par une meilleure connaissance des matières utilisées dans ce type d'espace (extraction, transformation, transport, caractéristiques, santé, recyclage) que nous documenterons sur cette page matériaux, l'impression des fiches de sécurité et la signature de décharges des participants. Nous pouvons demander l'aide d'un inspecteur du travail.

Plateforme Web

Plusieurs participants ont souhaité aborder avec courage et détermination l'“hydre de mer” de toute organisation : les outils numériques. À Marseille, plusieurs initiatives existent qu'il serait intéressant de faire converger pour partir de l'existant :

Ailleurs aussi, ça cogite et parfois c'est bien utile :

Bref, il semble y avoir une réelle envie des acteurs de terrain de s'organiser pour être plus fort, de rendre visible leurs diversités, leurs complémentarités, leurs réalisations, leurs pertinences ; de disposer d'outils permettant de se relier (portofolio, carte, annuaire, agenda, liste de diffusion, …) et d'outils internes de gestion (adhésion, comptabilité, inscriptions aux ateliers, aux temps machines, etc.) qui soient potentiellement interconnectables. Ces outils numériques doivent être forcément sous licences libres et éventuellement hébergés de façon indépendante. Il y a du travail … À noter, la sortie récente d'une nouvelle version du Guide Libre Associations, des logiciels pour libérer votre projet associatif.

La question de s'organiser autour d'un PRIDES a été évoquée, mais plusieurs interrogations ont été signalées (complexité).

Charte

Les réflexions sur ces outils ne doivent pas nous éloigner de l'essentiel : la phase d'écriture d'une sorte de charte qui délimiterait les objectifs. Il est sûrement trop tôt pour se mettre à la tâche, mais nous pouvons au moins faire apparaître ici les idées qui ont été échangées :

  • Un label “fabriqué ici” pour mettre en valeur ce qui se fait à Marseille sans pour autant faire la promotion béate d'une ville qui n'est pas toujours très ouverte à l'expérimentation
  • Trouver les mots qui nous ressemblent : “les lieux de fabrication et de réparation à Marseille” à vocation artistique, social et écologique (je me lance !). Étant entendu que la fabrication peut être comprise comme un ensemble large : alimentation (élever, cultiver, cuisiner, ..), habitat (construire, meubler, …), transport (partager, réparer, …)
  • Le partage des outils de production et la formation (de pair à pair ?)
  • La constitution d'une bibliothèque de projets
  • L'échange sous forme de monnaies complémentaires ?

Ressources

Quelques liens et articles pour allez plus loin et voir ce qui se fait ailleurs.

Journée Fablabs PACA #2

$
0
0

Journée Fablabs PACA #2

L'équipe du LFO a co-organisé un festival Arts et Culture Numérique autour de la thématique “Machines” à la Friche la Belle de Mai à Marseille les 20, 21 et 22 novembre 2015. Trois jours jalonnés d’installations, de performances, de plateaux radio, de concerts, d’ateliers de rencontres et un temps fort le week-end dans lequel nous avons investis un bel espace d'exposition (Tour Panorama R2), l'occasion de promouvoir les usages et utilisateurs du Fablab.

Dans cette perspective et à la suite de la première journée du 9 mars 2015, nous avons proposé une seconde journée de rencontre entre Fablabs afin d'aborder l'actualité du mouvement et son développement. Étaient réunies des personnes de la région et d'ailleurs, actives dans les milieux des hackerspaces et fablabs pour faire un instantané de la situation du réseau, permettre à chacun de mieux saisir les enjeux et valeurs de ces nouveaux lieux d'émancipation.

La rencontre s'est tenue le vendredi 20 novembre de 9h à 18h. Pour préparer cette journée, nous avons proposé ce magnifique questionnaire : quels sont vos activités, votre fonctionnement, vos envies et projets à partager ?

Participants

Merci aux 18 structures et 22 personnes présentes :

Et sur le formulaire :

  • Petits Débrouillards (Manosque)
  • Fablab Centrale Marseille (Marseille)
  • Laboratoire Social du Numérique (Grasse)
  • Olivier Gendrin (Association des Fablabs Français)

État des lieux

Pendant la matinée, nous avons échangé sur les actualités du réseau des fablabs et sur les envies et projets des participants.

Association Française des Fablabs

Beaucoup d'interrogations et de perplexité ont été exprimées sur la tentative de créer une Association Française des Fablabs. L'idée a pris corps lors du fablab festival à Toulouse (5-8 mai 2015), puis le document présentant les statuts a été rédigé de façon collective via Internet et lors des rencontres des 10-11 novembre 2015à Paris.

Malgré les réserves, nous saluons ce long travail de discussion et de consensus. Le texte en l'état semble promouvoir les même valeurs que dans nos Fablabs. Nous espérons que cela puisse permettre de faire avancer des chantiers entre Fablabs qui nous semblent prioritaires : plateforme Web pour Fablab, flux RSS, cartes des territoires, documentation, machines open source et écologiques, …

Sites et outils pour les Fablabs

Les sites des fablabs peinent à être clairs, surtout dans leur dynamique collective, et les outils de discussions et d'échanges bien que nécessaires, ont encore trop d'inconvénients.

  • Listes de diffusion. Il semble en existé trois : fablab-fr@lists.imaginationforpeople.org (fablabs francophones), fablabfrance@lists.imaginationforpeople.org (fablabs de France …) et interfabs@interfabs.fr. Pour l'international, des échanges se font via fabfoundation.org et via les cours de la fabackademy. Bien que très utiles et nécessaires pour discuter avec des Fablabs que nous ne connaissons pas, les échanges sont trop nombreux et le fait d'avoir trois listes fait que pour être sûr d'atteindre le plus de monde possible, les messages sont dupliqués… En l'état, peu de personnes semblent avoir le temps et la patience de lire ces discussions. Peut-être qu'une seule liste et une certaine discipline permettrait de pouvoir en faire un outil utile. De plus, il semble y avoir un souci de pérennisation des listes imaginationforpeople.
  • Forum. Forum actif et simple d'utilisation : forum.fablab.fr. C'est peut-être la méthode la plus cohérente pour les discussions.
  • Flux RSS. L'idée est de pouvoir agréger sur un site portail encore à définir les flux RSS des sites des Fablabs, avec la possibilité d'une recherche par critère (géographique, type de lieu, domaines, licences, auteurs, dates, …). C'est l'outil qui semble le plus réaliste à développer car la technique RSS est bien connue, et le plus souhaitable car chaque site gère ses données et que le site centralisateur ne contient qu'une adresse Web et non les données. Cependant, un gros travail reste à faire pour développer des plugins qui formatent de manière homogène les articles de Wikimedia et de Dokuwiki, les moteurs de Wiki les plus utilisés. Tentatives d'agrégation de flux RSS encore non satisfaisantes : planet.fablab.fr et reso-nance.org/rss.
  • Cartographie des fablabs. Une carte pourrait être un moyen efficace de trouver un Fablab. Le problème c'est qu'il existe plusieurs cartes et que toutes n'ont pas les mêmes données. Pour nous, en France, la carte de Makery semble la plus à jour. À noter aussi la liste du wiki.fablab dans lequel il suffit d'ajouter une ligne. Les cartes internationales ne sont pas à jour concernant les fablabs français, voire leur inscriptions à la liste sont totalement obscures : fablabs.io, fabfoundation.org. Pour être sûr de promouvoir un de ces services, il faudra pouvoir être sûr de la transparence des données, de l'inscription et du stockage de celles-ci sur un serveur indépendant que chacun pourrait utilisé. Les enjeux de publicité et de visibilité freinent l'adoption d'un outil qui pourrait être simple et efficace encore une fois… En ce sens, la communauté hackerspaces semble beaucoup mieux organisée, dû à un mouvement moins sujet aux effets de mode que celui des fablabs sans doute.

  • Cartographie des territoires (et de leurs richesses). Dans un souci d'inscrire le mouvement fablabs dans le territoire, de lier davantage avec d'autres associations, entreprises, collectivités, artisans, indépendants et ce dans tous les domaines de la vie courante, plusieurs initiatives ont été évoquées : territoire-collectif (PACA), bastamag (France), imagination.social (France), alpesvertes (Alpes Maritimes), aaar.fr (région Centre). L'échelle de la Région semble être un bon terrain pour explorer ou renforcer un circuit alternatif de production/consommation/échanges et se passer du cercle emploi/consommation/monnaie. La difficulté réside néanmoins dans les critères des filtres, leurs nombres et leurs lisibilité.

Autres actualités

Groupes de discussions

L'après-midi, après une présentation du Hackerspace de Catane, nous nous sommes répartis en cinq groupes pour avancer sur certaines thématiques.

Modèle économique et structuration

Il semble y avoir autant de Fablabs que de types de structures ou de modèles économiques (subventions, privés, auto-financés, mixtes, …) On peut tout de même noter la tendance de mutation des structures de médiation numérique qui sont passés d'Espaces Cultures Multimédia (ECM) en Espace Public Numérique (EPN), puis qui veulent maintenant se transformer en *labs.

Pad du groupe

Valeur des échanges

Il serait intéressant pour les Fablabs d'expérimenter éventuellement l'usage des monnaies locales (complémentaires et fondantes) et des Systèmes d'Échanges Locaux (S.E.L) qui mettent en place des échanges par unité d'heures et qui veulent garantir la réciprocité.

Pad du groupe

Expériences en ce moment : Écrou (Aix-en-Provence), blockchain/bitcoin, noyauXchange, …

Formations et évaluation

Besoins de transversalité des compétences entre l'éducation nationale et les autres lieux d'apprentissage comme les Fablabs. Besoins aussi pour les Fablabs de mettre en place des systèmes pour autonomiser les utilisateurs à travers la mise en avant de personnes relais qui pourraient tourner tous les 6 mois.

Pad du groupe

Expériences en ce moment : Portrait Karmique, Atelier numérique de l'École Boulle

Équipements des Fablabs

Comment équiper un Fablab ? Quels retours d'expériences ? Quelles matières ? Avec une attention particulière pour les outils open source et les matériaux les moins nocifs pour l'homme et l'environnement.

Une démarche intéressante pour les Fablabs serait de récupérer et de nettoyer des matières premières ou essayer que leur fabrication soit la moins nocive possible, et de moderniser des machines (nettoyer la mécanique et changer l'électronique par exemple). On voit bien qu'un circuit pourrait se mettre en place n'importe où concernant la fabrication de meubles : récupération de bois, nettoyage, usinage selon des plans open source pour une somme d'argent très modeste.

Une attention particulière devrait être portée sur les expériences de recyclage des filaments d'imprimantes 3D et sur une méthode de remplissage à deux têtes d'extrusion : une buse fine avec un filament neuf pour les contours et une buse plus grosse avec un filament recyclé pour le remplissage serait à expérimenter.

Des matériaux à explorer : des plastiques faits avec du bambou, des plaques faites avec des algues, …

Ressources : Équipement d'un Fablab et Liste de fournisseurs

Documentation

Comment documenter et trouver le temps de le faire ? Ontologie, droit d’auteurs, …

Pad du groupe

Projets

Quelques projets des participants :

  • Reso-nance Numérique / Plateforme d'échanges locaux : pour développer une société de producteurs alternative
  • Reso-nance Numérique / Plateforme LFO : Plateforme Web pour fablab mêlant documentation, wiki, outils formulaires/contact, rss, agenda, décentralisée, serveur indépendant, utilisation des machines, personnes ressources/besoins, inscription d'ateliers, demandes d'ateliers, commandes groupées, …
  • Reso-nance Numérique / Plugin DokuWiki pour structurer les pages et exporter le flux RSS
  • Reso-nance Numérique / La Malinette : retours, développements, documentation, …
  • Reso-nance Numérique et BrutPop / BrutBox : idem
  • Reso-nance Numérique / Développement d'un outil de formulaires en php pour se passer de Google Form et contrôler nos données
  • Reso-nance Numérique / Chimères Orchestra : lutherie expérimentale et fabrication
  • 8fablab / Aker
  • La Charbonnerie / Projet de voile libre. Voir aussi makertour et projet de coque de bateau en noix…
  • La Charbonnerie / Impression 3D DLP/SLA en résine biosourcée (Charbonnerie). Voir aussi Felfil Evo (open source filament extruder) + Imprimante 3d recyclée
  • La Charbonnerie / Un projet de découpeuse laser sans miroirs (Charbonnerie). Voir aussi LaserSaur open source (montage Fablabo)
  • Labomedia / Hackadon
  • Labomedia / licences matériel libres, voir aussi Peer Production Licence (Michel Bauwens)
  • Nicelab / alpesvertes.org
  • Fuvlab / Kart hybride
  • Olivier Gendrin / Entreprise de location/maintenance de matériel. La création d'une entreprise filiale est source de conflit d’intérêt si elle est portée par le RFF ou des personnes impliquées. Donc mauvaise idée car source de problèmes et de conflits, ce projet d'entreprise doit être indépendant du RFF.
  • Fablab Centrale Marseille / Makers Original Challenge les 5, 6 et 7 Février
  • Petits Débrouillards Manosque / Science tour Numérique
  • Association des Fablabs / Gouvernance démocratique : Holocracie

Ateliers "Avatar"

$
0
0

Ateliers "Avatar"

Bannière réalisée à partir du site turnyournameintoaface

Déroulé des ateliers

I - Découverte et expérimentation

Présentation de chaque membre du groupe . On se pose la question suivante : où, sur quelle plateforme, quel site, quel outil… se situe son identité numérique la plus fournie / complète / complexe ? Est-ce sur un réseau social, un jeu, un forum ? Quel est notre avatar le plus dense ?

Définition

Depuis wikipedia

Un avatar est un personnage représentant un utilisateur sur Internet et dans les jeux vidéo. À l’origine, il s'agit de l'incarnation numérique d’un individu dans le monde virtuel d'un jeu en ligne. Par extension ce terme est arrivé dans les forums de discussions puis dans le langage courant, il désigne alors le pseudonyme utilisé sur les sites internet et les réseaux sociaux.

Panel de générateurs d'avatar

Technique de morphing avec un vidéo projecteur

II - Portrait Chinois

Création d'un avatar animé à partir de comment on se définit

L'idée est de répondre à un portrait chinois :

  • Si j’étais un chiffre ?
  • Si j’étais un animal imaginaire ?
  • Si j’étais une plante ?
  • Si j’étais une saison ?
  • Si j’étais une couleur ?
  • Si j’étais un instrument de musique ?
  • Si j’étais un super pouvoir ?

On recherche ensuite les images qui illustrent ces réponses, pour référence.

Ensuite, nous allons créer des gifs sur l'outil en ligne PISKEL, qui permet de faire des dessins en pixel art ainsi que des animations.

Exemple, avec les réponses de Laurène

  • Si j’étais un chiffre ? » TROIS
  • Si j’étais un animal imaginaire ? » LICORNE
  • Si j’étais une plante ? » ROSE
  • Si j’étais une saison ? » PRINTEMPS
  • Si j’étais une couleur ? » VERT
  • Si j’étais un instrument de musique ? » TAMBOUR
  • Si j’étais un super pouvoir ? VOLER DANS LES AIRS

IMAGES DE RÉFÉRENCE :

Ressources des ateliers

Dokuwiki

$
0
0

Dokuwiki

DokuWiki est un moteur de wiki libre sous licence GNU GPL conforme aux standards, simple à utiliser, dont le but principal est de créer des documentations de toute sorte. Ce logiciel est développé en PHP par Andreas Gohr. Il est destiné aux équipes de développement, aux travaux de groupe et aux petites entreprises. Il a une syntaxe simple qui assure la lisibilité des fichiers de données en dehors du Wiki, et facilite la création de textes structurés. Toutes les données sont stockées dans des fichiers texte, et donc aucune base de données n’est nécessaire.

Ressources

De nombreux plugins sont disponibles https://www.dokuwiki.org/plugins, on peut les installer via le ftp ou directement dans la page administration du DokuWiki installé.

Plugins

  • tag plugin : Gestion de tag
  • cloud : Creation de nuage de mots (tag)
  • Dw2Pdf plugin (voir conseil pour le css plus bas) : Export en Pdf
  • Gallery Plugin
  • Translation : Faire un dokuwiki multilingues
  • Video Sharing Site Plugin : Gestion de video youtube etc…
  • Blockquote Plugin : design de bloc pour citations.
  • Button Plugin : créer des boutons
  • CAPTCHA Plugin : Sécurité de connection
  • GoogleFonts Plugin : Design import de fonts google
  • nspages plugin : création de répertoire, organisation des fichiers
  • S5 Slideshow Plugin : diaporama
  • discussion : commentaires et discussion
  • warp : design de colonne et de bloc.
  • Folded : design pour replier des blocs
  • Formulaire Rated : rated
  • Bureaucracy : générer des formulaires (envois de mails ou bien création de pages) + plugin “data” (optionnel) pour gérer des données statiques (listes prédéfinies, etc.)

Mettre à jour

  • Sauvegarder tout le wiki sur l'ordi
  • Télécharger nouvelle version
  • Écraser les fichiers sur le répertoire de l'ordi + supprimer fichiers, …
  • Renommer le dossier distant du wiki, puis téléverser la nouvelle version dans le bon répertoire distant

Configuration

  • breadcrumb
  • url esthétiques + htaccess
  • userarea
  • mime et types de fichiers
  • langue : ./inc/lang/fr

Templates

Les templates permettent de créer un modèle de page. Ainsi, dès que vous créez une page, elle sera structurée par votre template.

Exemple de template de notre wiki

====== @@Nom du projet@@ ======
  * Porteur du projet : [[:user:@USER@|@USER@]]
  * Date : %d/%m/%Y/ - ...
  * Licence : [[http://creativecommons.org/licenses/by-sa/3.0/legalcode|CC-by-sa-3.0]]
  * Description : @@Description@@
  * Techniques : @@Mots clés@@
  * Fichiers sources : lien
  * Lien : lien

{{tag>@@Mots clés@@}}

===== Description =====
@@Description@@

{{@@Image@@|@@Nom du projet@@}}

===== Matériaux =====
Liste de matériel et composants nécessaires.

===== Tutoriel =====
Guide pas à pas pour la réalisation du projet.

===== Photos =====
Code pour afficher les images du projet :
{{gallery>?&crop&lightbox}}

En l'associant avec les formulaires du plugin bureaucracy, nous pouvons créer des pages avec des champs dynamiques (voir plus bas).

Notes d'utilisations

Des plugins peuvent être utile pour designer mieu son dokuwiki comme WARP, Google Font,etc… voir plus haut.

Trick CSS

  • Menu (content.less) ++ Le code ++
  • On peut changer les traduction française pour raccourcir les noms des boutons… fichier lang.php (dans /inc/lang/fr )
  • Afficher ou non le fil d'arianne (display = none; (ligne 245 - fichier design.less )
  • Modifications avant footer : classe .docInfo (ligne 384 - fichier design.less )

CSS DW2pdf

Attention ! pour modifier ce css en live, il faut charger une page différente a chaque fois car le cache est généré au chargement de la page.

  • le fichier se trouve dans /dw2pdf/tpl/votre_theme

Formulaire avec Bureaucracy

Créer une page

Exemple de formulaire pour créer une page :

<form>
action   template tpl "projets:@@Nom du projet@@:"

fieldset "Créer votre page projet"
textbox  "Nom du projet"
textbox  "Description" !
file "Image" !

fieldset "Matières :"
yesno "Metal"
yesno "Bois"
yesno "Papier"

data_aliastextbox "Mots clés" _machines 
submit "Créer la page"
</form>

Explications :

action template tpl "projets:@@Nom du projet@@:"

Le template “tpl” est un fichier texte “tpl.txt” placé dans le répertoire des projets : “./data/pages/projets/tpl.txt”

textbox  "Description" !

Avec le ! c'est un champ optionnel

data_aliastextbox "Mots clés" _machines

Liste de valeurs prédéfinies à éditer ici : http://votresite.org/?do=admin&page=data_aliases
Le “_” c'est pour dire d'aller chercher les données de “machine”
En ajoutant le “s” à la fin, cela crée une liste à champ multiple
Il faut ajouter des guillemets s'il y a des espaces sinon ça crée deux champs, ou sinon faire des mots clés attachés.

Template des pages Les données du formulaires vont remplacer les mots avec un syntaxe spéciale et la page créée va donc être suivre la structure du template.

====== @@Nom du projet@@ ======
  * Porteur du projet : [[:user:@USER@|@USER@]]
  * Date : %d/%m/%Y/ - ...
  * Licence : [[http://creativecommons.org/licenses/by-sa/3.0/legalcode|CC-by-sa-3.0]]
  * Description : @@Description@@
  * Techniques : @@Mots clés@@
  * Fichiers sources : lien
  * Lien : lien

{{tag>@@Mots clés@@}}

===== Description =====
@@Description@@

{{@@Image@@|@@Nom du projet@@}}

===== Matériaux =====
Liste de matériel et composants nécessaires.

===== Tutoriel =====
Guide pas à pas pour la réalisation du projet.

===== Photos =====
Code pour afficher les images du projet :
<code>{{gallery>?&crop&lightbox}}

</code>

Envoyer un email

Exemple de formulaire pour envoyer un email :

<form>
fieldset "Vous !"
Action mail contact@votresite.org
Thanks "Merci de votre participation, le formulaire a correctement été validé. Nous vous recontacterons début septembre pour organiser les équipes avant le festival."

textbox  "Votre joli petit nom"
email "Votre adresse électronique"

fieldset "Participer à un projet"
select "Choix" "-|CNC fraiseuse numérique|Precious Plastic|Vélo énergie|Four solaire|Pépinière mobile" !

fieldset "Proposer un projet"
static "Un projet sur lequel vous serez le référent et plutôt autonome. Soyez précis dans votre description, notamment en ajoutant des liens Internet."
textarea  "Description" !
submit "Envoyer"
</form>

ESP8266 : communications

$
0
0

ESP8266 : communications

L'ESP8266 et votre ordinateur se connectent au réseau d'un routeur Wi-Fi “linksys”, puis s'échangent des données.

Installer la bibliothèque OSC (Menu Croquis > Inclure une bibliothèque > Gérer les bibliothèques > Taper OSC).

Adresse IP statique

La plupart des exemples fonctionnent en adressant automatiquement le module Wi-Fi. Il est possible de configurer aussi une adresse statique, c'est-à-dire que la connaît avec la fonction Wifi.config (ip1, ip2, ip3). Veillez à ne pas utiliser deux fois la même adresse. Pour cela, on peut choisir des adresses au-delà des 10 premières.

// Setupchar ssid[]="linksys";// Name of the Wi-Fi networkchar pass[]="";// No password
IPAddress ip(192, 168, 0, 110);// Local IP   
IPAddress gateway(192, 168, 0, 1);// Router IP
IPAddress subnet(255, 255, 255, 0);//... 
void setup(){
  WiFi.config(ip, gateway, subnet);// Choose the static IP Address
  WiFi.begin(ssid, pass);// WiFi Connection//...} 
//...

Send OSC to Pure Data

/* 
 *  Send OSC messages to PD
 *  
 *  Examples : OSC/ESP8266SendMessages
 */ 
#include <ESP8266WiFi.h>#include <WiFiUdp.h>#include <OSCMessage.h>//#include <Streaming.h> 
int status = WL_IDLE_STATUS;char ssid[]="linksys";char pass[]="";
WiFiUDP udp; 
const IPAddress outIp(192,168,1,110);// MASTER IP constunsignedint outPort =9999;// MASTER PORT 
void setup(){
  Serial.begin(115200);
  Serial.println(); Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid); 
  WiFi.begin(ssid, pass); 
  while(WiFi.status()!= WL_CONNECTED){
    delay(500);
    Serial.print(".");}
  Serial.println("");
  printWifiStatus();} 
void loop(){// SEND OSC
  OSCMessage msg("/test");
  msg.add("Hello from ESP8266");
  udp.beginPacket(outIp, outPort);
  msg.send(udp);
  udp.endPacket();
  msg.empty();
  delay(500);} 
void printWifiStatus(){// print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID()); 
  // print your WiFi shield's IP address:
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP()); 
  // print the received signal strength:long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm"); 
  Serial.println("Starting UDP");
  udp.begin(localPort);
  Serial.print("Local port: ");
  Serial.println(udp.localPort());}

Receive OSC from Pure Data

Pure Data controls the ESP8266.

// Pd > bundle and typed message > packOSC > udpsend > routeur Wi-Fi// ESP8266 > OscBundle  
#include <ESP8266WiFi.h>#include <WiFiUdp.h>#include <OSCMessage.h>#include <OSCBundle.h>#include <OSCData.h> 
int status = WL_IDLE_STATUS;char ssid[]="linksys";// your network SSID (name)char pass[]="";// your network password 
// A UDP instance to let us send and receive packets over UDP
WiFiUDP Udp; 
constunsignedint localPort =8888;// local port to listen for UDP packets (here's where we send the packets) 
OSCErrorCode error;unsignedint ledState = LOW;// LOW means led is *on* 
void setup(){
  pinMode(BUILTIN_LED, OUTPUT);
  digitalWrite(BUILTIN_LED, ledState);// turn *on* led
  WiFi.begin(ssid, pass);// Connect to WiFi networkwhile(WiFi.status()!= WL_CONNECTED){
    delay(500);}
  Udp.begin(localPort);} 
void ledOut(OSCMessage &msg){
  ledState = msg.getInt(0);
  digitalWrite(BUILTIN_LED, ledState);} 
void loop(){
  OSCBundle bundle;int _size = Udp.parsePacket();if(_size >0){while(_size--){
      bundle.fill(Udp.read());}if(!bundle.hasError()){
       bundle.dispatch("/led", ledOut);}else{
      error = bundle.getError();}}}

Receive UDP Packets from Pure Data

/* 
 *  Receive UDP Packets from Pure Data with [netsend]
 *  
 *  Connect the ESP8266 to the "linksys" Wi-Fi router
 * 
 */ 
#include <ESP8266WiFi.h>#include <WiFiUdp.h> 
const boolean DEBUG =false; 
// WIFIchar ssid[]="linksys";char pass[]="";constunsignedint localPort =8888;// portchar packetBuffer[255];// incoming
String data[3];// dataint status = WL_IDLE_STATUS;
WiFiUDP udp; 
void setup(){ 
  // Output
  pinMode(14,OUTPUT);
  pinMode(12,OUTPUT);
  pinMode(13,OUTPUT);
  digitalWrite(14,HIGH);
  digitalWrite(12,HIGH);
  digitalWrite(13,HIGH); 
  // WiFi Connection
  WiFi.begin(ssid, pass);while(WiFi.status()!= WL_CONNECTED){
   delay(500);} 
  // UDP Connection
  udp.begin(localPort); 
  if(DEBUG){
    Serial.begin(115200);
    Serial.print("IP: ");
    Serial.println(WiFi.localIP());}} 
void loop(){ 
  // Read data if availableint packetSize = udp.parsePacket();if(packetSize){// Read the packet into packetBufferint len = udp.read(packetBuffer, 255);if(len >0){
      packetBuffer[len]=0;} 
    // Parse with space delimiter ' ' and fill data[]
    String strData(packetBuffer);
    splitString(strData, ' '); 
    analogWrite(data[0].toInt(), data[1].toInt()*4); 
    if(DEBUG){
      Serial.println(data[0]);
      Serial.println(data[1]);// Serial.println(data[2]);}}} 
 
// Méthode pour découper le message avec un séparateur (ou "parser")void splitString(String message, char separator){int index =0;int cnt =0;do{
      index = message.indexOf(separator);// s'il y a bien un caractère séparateurif(index !=-1){// on découpe la chaine et on stocke le bout dans le tableau
          data[cnt]= message.substring(0,index); 
          cnt++;// on enlève du message le bout stocké
          message = message.substring(index+1, message.length());}else{// après le dernier espace   // on s'assure que la chaine n'est pas videif(message.length()>0){ 
           data[cnt]= message.substring(0,index);// dernier bout
           cnt++;}}}while(index >=0);// tant qu'il y a bien un séparateur dans la chaine}

ESP8266 : Serveur Web

$
0
0

ESP8266 : Serveur Web

Serveur Web #1

Éteindre ou allumer une LED avec le navigateur Web. L'ESP8266 crée un réseau Wi-Fi, sur lequel va se connecter un ordinateur ou un téléphone mobile. Il suffit ensuite d'ouvrir le navigateur Web et d'entrer dans la barre d'adresse, l'adresse suivante : http://192.168.4.1/OFF pour éteindre la LED ou bien http://192.168.4.1/ON pour l'allumer.

/*
 *  ESP8266 - Web Server
 *  
 *  Connect your computer to the Wi-Fi Network "Bonjour_IOT" with "12345678" password
 *  Open your favorite Web browser and enter "192.168.4.1/OFF" to switch off the Builtin LED or
 *  192.168.4.1/ON" to switch it on
 *  
 */ 
#include <ESP8266WiFi.h> 
WiFiServer server(80);// Initialize the server on Port 80 
int LED_PIN =2; 
void setup(){
  pinMode(LED_PIN, OUTPUT);
  WiFi.mode(WIFI_AP);// Our ESP8266-12E is an AccessPoint
  WiFi.softAP("Hello_IOT", "12345678");// Provide the SSID and password
  server.begin();// Start the HTTP Server
  Serial.begin(115200);// Start communication between the ESP8266-12E and the monitor window
  IPAddress HTTPS_ServerIP= WiFi.softAPIP();// Obtain the IP of the Server
  Serial.println();
  Serial.print("Server IP is: ");// Print the IP to the monitor window
  Serial.println(HTTPS_ServerIP);} 
void loop(){
  WiFiClient client = server.available(); 
  if(!client){return;} 
  Serial.println("Somebody has connected :)"); 
  //Read what the browser has sent into a String class and print the request to the monitor//String request = client.readString();
  String request = client.readStringUntil('\r'); 
  //Looking under the hood
  Serial.println(request); 
  // Handle the Requestif(request.indexOf("/OFF")!=-1) digitalWrite(LED_PIN, HIGH);elseif(request.indexOf("/ON")!=-1) digitalWrite(LED_PIN, LOW); 
  client.flush();//clear previous info in the stream
  client.print("ok");// Send the response to the client
  delay(10);
  Serial.println("Client disconnected");// Looking under the hood          }

Serveur Web #2

Même chose avec un peu plus de contrôle.

/*
 * Access Point (AP) Web Server
 * 
 * This example demonstrates how to turn the ESP8266 into an access point (AP), and serve up web pages to any connected client.
 * 
 * From https://learn.sparkfun.com/tutorials/esp8266-thing-development-board-hookup-guide/example-sketch-web-server
*/ 
#include <ESP8266WiFi.h> 
// Pin Definitionsconstint LED_PIN =2;// LEDconstint ANALOG_PIN = A0;// The only analog pin on the Thingconstint DIGITAL_PIN =12;// Digital pin to be read 
WiFiServer server(80); 
void setup(){// Pins
  Serial.begin(115200);
  pinMode(DIGITAL_PIN, INPUT_PULLUP);
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW); 
  // WiFi
  WiFi.mode(WIFI_AP);
  WiFi.softAP("Hello_IoT", "12345678");// Provide the (SSID, password); .
  server.begin();} 
void loop(){// Check if a client has connected
  WiFiClient client = server.available();if(!client){return;} 
  // Read the first line of the request
  String req = client.readStringUntil('\r');
  Serial.println(req);
  client.flush(); 
  // Match the requestint val =-1;// We'll use 'val' to keep track of both the// request type (read/set) and value if set.if(req.indexOf("/led/0")!=-1)
    val =1;// Will write LED lowelseif(req.indexOf("/led/1")!=-1)
    val =0;// Will write LED highelseif(req.indexOf("/read")!=-1)
    val =-2;// Will print pin reads// Otherwise request will be invalid. We'll say as much in HTML 
  // Set GPIO5 according to the requestif(val >=0)
    digitalWrite(LED_PIN, val); 
  client.flush(); 
  // Prepare the response. Start with the common header:
  String s ="HTTP/1.1 200 OK\r\n";
  s +="Content-Type: text/html\r\n\r\n";
  s +="<!DOCTYPE HTML>\r\n<html>\r\n";// If we're setting the LED, print out a message saying we didif(val >=0){
    s +="LED is now ";
    s +=(val)?"on":"off";}elseif(val ==-2){// If we're reading pins, print out those values:
    s +="Analog Pin = ";
    s += String(analogRead(ANALOG_PIN));
    s +="<br>";// Go to the next line.
    s +="Digital Pin 12 = ";
    s += String(digitalRead(DIGITAL_PIN));}else{
    s +="Invalid Request.<br> Try /led/1, /led/0, or /read.";}
  s +="</html>\n"; 
  // Send the response to the client
  client.print(s);
  delay(1);
  Serial.println("Client disconnected"); 
  // The client will actually be disconnected // when the function returns and 'client' object is detroyed}

MAX7219

$
0
0

MAX7219

Texte défilant

Installer deux bibliothèques

Connectiques Nano

  • D13 > CLK
  • D11 > DIN
  • D10 > CS

Code

Code pour déplacer un texte :

 
#include <SPI.h>#include <Adafruit_GFX.h>#include <Max72xxPanel.h> 
int pinCS =10;// Attach CS to this pin, DIN to MOSI and CLK to SCK (cf http://arduino.cc/en/Reference/SPI )int numberOfHorizontalDisplays =4;// Number of Matrixint numberOfVerticalDisplays =1; 
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); 
String tape ="SANG CORPS RESTE PONT DANCE";int wait =40;// In milliseconds 
int spacer =1;int width =5+ spacer;// The font width is 5 pixels 
void setup(){
  matrix.setIntensity(3);// Use a value between 0 and 15 for brightness 
  // Rotate the matrix in line
  matrix.setRotation(0, 1);
  matrix.setRotation(1, 1);
  matrix.setRotation(2, 1);
  matrix.setRotation(3, 1);} 
void loop(){ 
  for(int i =0; i < width * tape.length()+ matrix.width()-1- spacer; i++){ 
    matrix.fillScreen(LOW); 
    int letter = i / width;int x =(matrix.width()-1)- i % width;int y =(matrix.height()-8)/2;// center the text vertically 
    while( x + width - spacer >=0&& letter >=0){if( letter < tape.length()){
        matrix.drawChar(x, y, tape[letter], HIGH, LOW, 1);} 
      letter--;
      x -= width;} 
    matrix.write();// Send bitmap to display 
    delay(wait);}}

MCP 3008

$
0
0

MCP 3008

Le Raspberry pi est doté des GPIO, capables de servir d’entrées(tuto) ou de sorties(tuto) numériques. On peut donc lire des signaux logiques hauts ou bas (des 0 ou des 1). Il n’est en revanche pas possible de lire directement des valeurs analogiques. Pour cela, il faut utiliser un ADC, pour “Analog to Digital Converter”, ou convertisseur analogique vers numérique en français, dont le Raspberry Pi n’est pas doté. L’objet de ce tutoriel sera justement de connecter une puce, la MCP3008, au Raspberry pi via le bus SPI pour ajouter huit entrées analogiques.

Ressources

Connection

Connections SPI (logiciel) :

MCP3008 pins Raspberry-pi pins
VDD 5V ou 3.3v
VREF 5V ou 3.3v
AGND GND
DGND GND
CLK gpio12
DOUT gpio16
DIN gpio20
CS/SHDN gpio21

On peut se brancher sur n'importe quel GPIO du moment que le script python ensuite les prenne en compte.
On peut brancher le dispositif a chaud sur le raspberry pi.

Installation

sudo apt-get update
sudo apt-get install build-essential python-pip python-dev python-smbus git
sudo pip3 install python-osc

GPIO

git clone https://github.com/adafruit/Adafruit_Python_GPIO.git
cd Adafruit_Python_GPIO
sudo python3 setup.py install

MCP3008

git clone https://github.com/adafruit/Adafruit_Python_MCP3008.git
cd Adafruit_Python_MCP3008
sudo python3 setup.py install

Code

Code pour recevoir via python dans pdextended les valeurs analogiques du MCP3008

"""
Get Analog sensors from mcp3008 and send to OSC
 
""" 
importtimefrom pythonosc import udp_client
import Adafruit_GPIO.SPIas SPI
import Adafruit_MCP3008
 
 
# Software SPI configuration:
CLK  =12
MISO =16
MOSI =20
CS   =21
SECONDS =0.02 
 
if __name__ =="__main__":
    mcp = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS, miso=MISO, mosi=MOSI)
    client = udp_client.SimpleUDPClient("127.0.0.1",8000) 
    # Main program loop.whileTrue:
        # Read all the ADC channel values in a list.
        values =[0]*8for i inrange(8):
            # The read_adc function will get the value of the specified channel (0-7).
            values[i]= mcp.read_adc(i)
            client.send_message("/ana"+str(i), values[i])# Pause for half a second.time.sleep(SECONDS)

Borne à livres

$
0
0

Borne à livres

  • Porteur du projet : Reso-nance + Asile 404 + Casse tête
  • Date : 2016
  • Licence : libre !
  • Contexte : vie de quartier
  • Fichiers :
  • Lien : lien vers un site éventuellement

2D et 3D PRIMITIVES

Cercle, carré, rectangle, sphère, cylindre, tore, cone, …

Matériaux

  • Métal
  • Fer à béton
  • Système de lecture de son interactif : Arduino + capteur ultrason HC-SR04 + lecteur mp3 DFPlayer_mini_MP3 + enceinte 3w

Tutoriel

Structure en métal :

Nous avons acheté des fer à bétons de 8mm , du scellement chimique au magasin de bricolage, et une plaque d'Acier Brut de 2mx1m x2mm chez http://www.descours-cabaud.com plus quelques disques pour la disqueuse pour une centaine d'euros. (48€ la plaque d'acier).
Quelques heures de disquage et de soudure à l'arc plus tard… la structure est prête a accueillir les livres.

Systeme de lecture :

"Les murs ont des oreilles, mais ça c’était avant...
maintenant ils ont aussi une bouche...
une bouche... pour vous faire ouvrir les yeux,
les yeux... lisant quelques lignes d'un livre,
un livre... déposé par un voisin,
un voisin... ou peut-être même vous,
vous... pour me faire ouvrir ma bouche ..."

On utilise un capteur ultrason et un lecteur mp3 pour déclencher un son quand un passant passe à coté de la borne.

  • Capteur ultrason (4€), Arduino (20€), lecteur mp3(8€), carte microsd, petit hp (3€), 2 résistances 1kohm…

On pourrai aussi certainement utilisé une ATTINY pour éviter d'utiliser une arduino, mais peut être le code aura besoin d'être éditer pour rajouter des mp3.

Shield Arduino

On produit un shield Arduino, avec la fraiseuse à commande numérique pour éviter des fils :

Code Arduino

ps : il faut avoir la librairie DFPlayer_Mini_Mp3 installée

/*
reso-nance numerique
 HC-SR04 Ping distance sensor start a mini DFPlayer_mini_MP3 track
 */ 
// ----editez ces lignes :int nombre_mp3 =4;// nombre de mp3 sur la carte sdint temps_mp3 =3000;// temps max mp3 en msecint volume_mp3 =28;// volume du mp3 (0-30)//---------------------- 
#include <SoftwareSerial.h>#include <DFPlayer_Mini_Mp3.h>#define trigPin 3#define echoPin 2 
long randNumber =1;int lastState =0;int lastSong =0; 
void setup (){
  Serial.begin(9600);
  mp3_set_serial (Serial);//set Serial for DFPlayer-mini mp3 module  
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);} 
//void loop (){ 
  // Ici on definit le nombre de mp3 dans la carte
  randNumber = random(nombre_mp3)+1;
  mp3_set_volume (volume_mp3); 
  long duration, distance;
  digitalWrite(trigPin, LOW);// Added this line
  delayMicroseconds(2);// Added this line
  digitalWrite(trigPin, HIGH);//  delayMicroseconds(1000); - Removed this line
  delayMicroseconds(10);// Added this line
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance =(duration/2)/291;// en centimetre il faut diviser par 29.1 ici nous sommes en decimetre;
  delay(200); 
  // CONDITION DE LECTURE : si quelquechose passe a moins de 60cm du detecteur mais a changer de distance : declenchement du son  6 = 60cm !!if(distance <=8&& distance != lastState && randNumber != lastSong){
    mp3_play (randNumber);
    lastSong = randNumber;// on memorise le dernier fichier mp3 lu
    delay (100);//fade-out à la fin...
    mp3_set_volume (volume_mp3);
    delay (temps_mp3);
    mp3_set_volume (volume_mp3 -5);
    delay (1000);
    mp3_set_volume (volume_mp3 -10);
    delay (1000);
    mp3_set_volume (volume_mp3 -15);
    delay (1000);
    mp3_set_volume (volume_mp3 -20);
    delay (1000);
    mp3_stop (); 
  }else{
    mp3_stop ();} 
  lastState = distance;// on memorise la derniere distance de la boucle... pour la comparer a celle d'avant... 
} 
/*
   mp3_play ();     //start play
 mp3_play (5);    //play "mp3/0005.mp3"
 mp3_next ();     //play next 
 mp3_prev ();     //play previous
 mp3_set_volume (uint16_t volume);    //0~30
 mp3_set_EQ ();   //0~5
 mp3_pause ();
 mp3_stop ();
 void mp3_get_state ();   //send get state command
 void mp3_get_volume (); 
 void mp3_get_u_sum (); 
 void mp3_get_tf_sum (); 
 void mp3_get_flash_sum (); 
 void mp3_get_tf_current (); 
 void mp3_get_u_current (); 
 void mp3_get_flash_current (); 
 void mp3_single_loop (boolean state);    //set single loop 
 void mp3_DAC (boolean state); 
 void mp3_random_play (); 
 */

Photos

Un lieu potentiel d'installation sur la Place Cadenat dans le quartier de la belle de Mai.

Bornes à livres mobile

$
0
0

Bornes à livres mobile

  • Porteur du projet : ZINC
  • Date : 21/12/2017
  • Licence : libre !
  • Contexte : Création d'une bornes à livres mobile à la Friche Belle de Mai

Description

Une borne à livres mobile à la Friche Belle de Mai pour échanger, partager et lire des livres, des fanzines, des revues…

Matériaux

  • Quincaillerie
    • 30 visses bois
    • 4 rivés
    • 6 charnière + 18 visses
    • 4 roues dont deux auto-bloquantes
    • 6 charnières
  • Bois
    • Bois de palette
    • Tasseaux
    • 4 plaques de Cp 1 cm
    • Plaque bois brut épaisseur 2 cm
    • Medium 3 mm

0utils

Tutoriel

  • Découper les planches au bon format

  • Assembler les planches pour créer un caisson rectangulaire

  • Fixer les charnières des volets de rangement

  • Graver la plaque avec le nom et l'usage de la borne à livres

  • Créer un double fond pour ré-hausser et rendre visibles les livres
  • Peindre la borne
  • Visser les roues

  • Assembler le nom de la borne à livres

Photos

Viewing all 1450 articles
Browse latest View live