User Tools

Site Tools


nomades:arduino

Workshop Arduino & Systéme interactif

1- achat Arduino uno (jan2016) et plus

2-premier pas dans l'univers d'arduino

-branchement de la carte arduino uno en usb sur votre ordinateur

-téléchargement logiciel Arduino-Ide pour charger les firmware et programmer votre arduino : https://www.arduino.cc/en/Main/Software

-test classique pour voir si tout marche bien : jouer avec une LED utilisé l'exemple BlinkWithoutDelay (exemples - delay) - changer l'interval : long interval = 100; / uploader à chaque changement du programme.

-utiliser un exemple plus complexe - thérémin controllé avec photorésistance

utiliser un breadboard petit cable croco resistance 10Kohms photoresistance

script dans example - StarterKit

connecter le circuit & uploader le script

2-les capteurs

-le potentiométre - connecté comme suit : https://www.arduino.cc/en/Tutorial/AnalogInput

-la photorésistance :

la résistance est de 10kohm - (marron/noir/orange/or)

-le capteur de température

-le capteur de pression

la résistance est de 10kohm - (marron/noir/orange/or)

-le switch

-le bouton pressoire, hardware :

- Le slider, hardware :

-Plusieurs capteurs ensemble :

3-oscillateur interne + interaction

On essaye de faire un oscillateur simple controllé par potentiométre

on entre et upload le code (plus bas)

puis on suit le schéma ci-joint

pour faire ce schéma j'ai utilisé : Fritzing - téléchargement ici : http://fritzing.org/download

/*
  Pitch follower
 
 Plays a pitch that changes based on a changing analog input
 
 circuit:
 * 8-ohm speaker on digital pin 9
 * potentiometer (10Kohms) on analog 3,3V and analog IN 0
 
 created 21 Jan 2010
 modified 23 Jan 2016
 by TheNoiser based on Tom Igoe, with suggestion from Michael Flynn

This example code is in the public domain.
 
 http://arduino.cc/en/Tutorial/Tone2
 
 */


void setup() {
  // initialize serial communications (for debugging only):
  Serial.begin(9600);
}

void loop() {
  // read the sensor:
  int sensorReading = analogRead(A0);
  // print the sensor reading so you know its range
  Serial.println(sensorReading);
  // map the analog input range (in this case, 400 - 1000 from the photoresistor)
  // to the output pitch range (120 - 1500Hz)
  // change the minimum and maximum input numbers below
  // depending on the range your sensor's giving:
  int thisPitch = map(sensorReading, 400, 1000, 120, 1500);

  // play the pitch:
  tone(9, thisPitch, 10);
  delay(1);        // delay in between reads for stability
}

,

4-les moteurs

- ServoMoteurs

Arduino permet de controler directement des moteurs, les premiers sur lesquels nous allons nous pencher sont les servomoteurs, avec une possibilité de rotation de 90, 180 voir 360 degrés selon les modèles. 0 et 1 sont les deux extrêmes. Par exemple, sur un moteur qui tourne a 180°, 0 correspondra à 0°, 0.5 à 90° et 1 à 180°. La vitesse n'est pas changeable.

Hardware :

Il suffit d'alimenter le servo en 5v, de relier sa masse et de le brancher sur une sortie Pwm.

<Code>

/ Sweep by BARRAGAN <http://barraganstudio.com> This example code is in the public domain.

#include <Servo.h>

Servo myservo; create servo object to control a servo a maximum of eight servo objects can be created

int pos = 0; variable to store the servo position void setup() { myservo.attach(6); attaches the servo on pin 9 to the servo object }

void loop() {

for(pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180 degrees 
{                                  // in steps of 1 degree 
  myservo.write(pos);              // tell servo to go to position in variable 'pos' 
  delay(15);                       // waits 15ms for the servo to reach the position 
} 
for(pos = 180; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees 
{                                
  myservo.write(pos);              // tell servo to go to position in variable 'pos' 
  delay(15);                       // waits 15ms for the servo to reach the position 
} 

}

</Code>

Il est possible d'utilliser une seule carte Arduino pour contrôler plusieurs moteurs (jusqu'à 3, après il faut une alimentation externe, celle de la carte ne suffit plus).

Hardware :

Si l'on veut contrôler plus de moteurs à la fois, il suffit de remplacer l'alimentation de l'arduino par une alimentation 5v plus puissante, l'arduino ne sera plus connectée aux servos que par les ports pwm.

Moteurs Courant continu (avec carte MotorShield Arduino)

Hardware

:

Code : voir en bas du lien http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.MATERIELArduinoShieldArduinoMotroShieldV3L298

5-arduino et PD

prise en main - étape de départ

-uploader le firmata pour pouvoir utiliser les entrées et les sorties arduino dans PD

#include <Firmata.h>

byte analogPin;

void analogWriteCallback(byte pin, int value)
{
  pinMode(pin, OUTPUT);
  analogWrite(pin, value);
}

void setup()
{
  Firmata.setFirmwareVersion(FIRMATA_MAJOR_VERSION, FIRMATA_MINOR_VERSION);
  Firmata.attach(ANALOG_MESSAGE, analogWriteCallback);
  Firmata.begin();
}

void loop()
{
  while (Firmata.available()) {
    Firmata.processInput();
  }
  for (analogPin = 0; analogPin < TOTAL_ANALOG_PINS; analogPin++) {
    Firmata.sendAnalog(analogPin, analogRead(analogPin));
  }
}

-puis télécharger et utiliser pd-extended

-ouvrir objet PDUINO dans les exemples

-cliquez sur devices pour avoir le port de votre arduino (comport - visible sur le retour d'info PD fenêtre principale

-activez le port (example cliquez serial port correpondant sur le port de votre arduino) puis visualisation dans les display plus bas dans le patch

-pour la partie connections des capteurs :

Entrées Entrées Analogiques

Entrées Numériques

Les entrées numériques se configurent de la même façon, en utilisant [pinMode digital n< pour les ouvrir.

les entrées sont instables - comment faire?

Si les autres entrées “flottent” et sont influencées par l'une d'elles, c'est qu'elles ne sont pas reliées à une source de tension possédant une impédance de sortie suffisamment faible (moins de 100kOhms, moins c'est mieux). Par exemple elles ne sont reliées à rien… Ou alors à une photorésistance qui serait dans l'obscurité (et qui présente alors une résistance de plusieurs MOhms).

Donc :

- soit tu ne te sers pas des autres entrées, dans ce cas, ou tu les passes en mode “sortie”, ou tu les relies à la masse (attention pas les deux à la fois !). Tu peux aussi les relier à la masse chacune par une résistance de 1kOhm, ce qui sera suffisant pour imposer un “zéro”, mais qui évitera de cramer l'étage de sortie si par mégarde tu l'activais…

- soit tu te sers de ces sorties mais la source de tension que tu mesures n'a pas assez de “pêche”, c-a-d a une impédance de sortie trop élevée (cas d'une photo résistance). Dans ce cas : soit tu ajoute avant chaque entrée un ampli-op monté en suiveur de tension (“buffer”), soit tu ajoute une résistance entre l'entrée et la masse ou le 5V, mais ça perturbera ta mesure ; essaye différentes valeurs (commence par 100kOhms). La solution ampli-op est la meilleure, mais demande un plus de soudures…

Contrôle des moteurs avec Firmata

Prendre l'objet “arduino”, et lui envoyer les commandes nécessaires (ouverture port, déclaration entrées / sorties, puis envoi frein, direction et vitesse)

un exemple concret :

Arduino + motorShieldV3 + moteurVitesseContinu

number –> / 100–>pwm 3 $1(msg)–>send $0-arduino(msg)

Moteur pas à pas (stepper)

Si on ne veut pas une vitesse de rotation très rapide ni un couple trop important, on peut utiliser le stepper directement sur la carte Arduino :

Il suffit de déclarer les pins utilisées en sorties (pinModeX output) et d'envoyer une succestion de 0 et de 1.

des patchsPD - Modules

Module sampling (rec disk) control via capteurs

download ici

module player timeline

download ici

Contrôle DMX via Arduino :

Il faut tout d'abord installer la librairie DMXSimple.

Ensuite, suivre les étapes de ce tutoriel : https://www.youtube.com/watch?v=sq33uOGq_l0

IMPORTANT : En uploadant Serial To DMX sur votre Arduino, vous aurez un message d'erreur disant qu'il ne trouve pas “wiring.h”. Il vous faut aller dans l'emplacement de la librairie, trouver DMX Simple.cpp, l'ouvrir avec un éditeur de texte et remplacer “wiring.h” au début par “Arduino.h”.

6-Arduino - synth & visual machine

7-Arduino - Theremine Purr Data simulation

Nous allons contruire une maquette de Thérémine avec un arduino et deux capteurs de distance qui controleront respectivement les modulations de fréquence( donc le pitch) et le volume du process audio géré par Purr Data

Matériel :

2 capteurs HC-SR04

1 arduino

1 bread board

Cables de connexion électroniques

1 cable USB (pour arduino vers PC)

1 PC

Sofware

Purr Data a.k.a pd-l2ork

Arduino avec la librairie UltraDistSensor installée (trouvée via le gestinnaire de bibliothèque Arduino)

Schémas de connexions :

Photos :

Code Arduino pour 2 capteurs de distance :

#include<UltraDistSensor.h>
UltraDistSensor mysensor1;
UltraDistSensor mysensor2;
//UltraDistSensor mysensor3;
int reading1;
int reading2;
int mysensor1distanceInCmMax=30;
int mysensor2distanceInCmMax=20;
void setup() {
    Serial.begin(9600);
    mysensor1.attach(11,12);//Trigger pin , Echo pin
    mysensor2.attach(3,2);//Trigger pin , Echo pin
}

void loop() {
     reading1=mysensor1.distanceInCm();
      if(reading1 > mysensor1distanceInCmMax){
      reading1 = mysensor1distanceInCmMax;
      }
//    Serial.print("Sensor 1 Reading :");
//    Serial.println(reading);
//    Serial.println(" CM");
   reading2=mysensor2.distanceInCm();
      if(reading2 > mysensor2distanceInCmMax){
      reading2 = mysensor2distanceInCmMax;
      }
//    Serial.print("Sensor 2 Reading :");
    Serial.print(reading1);
    Serial.print(" ");
    Serial.println(reading2);
    delay(60);
}

Patches Pure Data :

Reception des capteurs dans Purr Data

Partie Capteur

Patch principal + Audio

tips & tricks

les problémes qui peuvent apparaitre, les petits conseils utiles…

port & permissions

Si vous utilisez un systéme libre (Gnu/Linux) comme nous, la premiére fois que vous utilisez arduino pour uploader un script dans la carte, vous aurez sûrement ce probléme :

“Arduino IDE error - avrdude: ser_open(): can't open device ”/dev/ttyACM0“: Permission denied”

en fait votre utilisateur “username” n'a pas les droits de bosser avec la carte, on va les lui donner.

ouvrir un terminal et taper les commandes suivantes (mettre votre nom utilisateur à la place de <username>) :

$ sudo usermod -a -G dialout <username>

$ sudo chmod a+rw /dev/ttyACM0

si tout se passe bien vous devriez pouvoir uploader vos scripts.

calcul de résistances

arts & arduino

installation, art, interaction

controllers & stuffs

nomades/arduino.txt · Last modified: 2019/12/18 17:29 by 127.0.0.1