Une photographie, des leds, un HC-SR04 et un débutant.

Bonjour à tout le monde, je n’ai pas trouvé d’endroit où faire de présentation je profite donc de ce premier post.
Moi, c’est Stéphane, 32 ans, Lorientais, artiste photographe et bricoleur à mes heures.
je vous invite à visiter mon site internet : www.stephaneadam.fr

Pour me situer, j’ai découvert les systèmes interactifs appliqués à l’art il y a environ 6-7 ans pendant un wokshop organisé par ma prof de Com lors de mes études aux beaux arts. Il a été question de survoler Max/msp et de produire quelques effets sonores. Une fois l’intervenant retourné à ces propres travaux, j’ai fait de même et ai continué mes recherches dans les techniques photographiques alternatives (sténopés, cyanotypies…).
Je n’ai pas de “formation” propre à l’électronique et/ou à l’électricité, encore moins pour la programmation. Je sors d’un bacpro espace vert et ensuite 5 ans aux beaux arts.

Aujourd’hui, j’ai envie de faire “vivre” mes images autrement. De compléter ce quelles évoquent déjà par une interactivité. Que le public par sa présence active les images.

Qui dit interactivité, dit programmation, dit électronique, dit apprentissage de nouvelles choses pas faciles faciles pour une personne qui à laissé les maths loin loin loin derrière lui… Mais je ne suis patient et pas fou, ça va me prendre du temps, beaucoup d’erreurs, du capillaire sacrifié et le plaisir d’enfin y arriver.

Pour mon premier projet la finalité sera, d’avoir accroché au mur une photographie que l’on verrait à peine du fait que la pièce sera plongée dans la pénombre et que les leds qui la composent seront allumées faiblement. C’est seulement quand une personne s’approchera de cette photographie que celle-ci s’activera et modulera sa lumière en fonction de la distance et de sa position droite-gauche.

C’est un peu obscur, ça n’est pas très clair…

J’ai déjà bidouillé une version simple avec les bandes de leds collées sur du Dibond, c’était simplement branché sur le secteur avec l’adaptateur fourni.

Rien d’interactif, juste une photographie rétroéclairée
C’est visible sur mon site http://www.stephaneadam.fr/details-de-lexposition-dans-la-chapelle/

Maintenant, c’est la phase écriture et prise en mains. j’en suis pour le moment arrivé à une forme comme celle-ci :

Je réutilise donc les photographies que j’ai déjà tirées. Mais une fois le principe bien mains, je compte bien m’en servir sur des formats plus grands.
Là on est sur une version “finale”. Donc pas pour tout de suite.

Aujourd’hui je fais s’allumer des leds en fonction de la distance de ma main (loin vert - rouge près) et je vérifie si la distance est correcte sur le terminal. (http://www.instructables.com/id/Simple-Arduino-and-HC-SR04-Example/?ALLSTEPS
Je recopie bêtement ce qui montré en essayant de comprendre ce qui se passe au niveau du code.

J’ai aussi deux librairies pour ce capteur, la NewPing et la Ultrasonic.
J’ai fait un montage avec la Ultrasonic, ça m’a juste fait un truc délirant, les mesures étaient à l’ouest et les leds clignotaient comme un sapin de Noël…

Voilà ou j’en suis.
À partir d’ici je voudrai déjà réussir à faire changer l’intensité lumineuse d’une led en fonction de la position de ma main.

Vous en pensez quoi ?
A bientôt

steadam:
J'ai aussi deux librairies pour ce capteur, la NewPing et la Ultrasonic.
J'ai fait un montage avec la Ultrasonic, ça m'a juste fait un truc délirant, les mesures étaient à l'ouest et les leds clignotaient comme un sapin de Noël...

Voilà ou j'en suis.
À partir d'ici je voudrai déjà réussir à faire changer l'intensité lumineuse d'une led en fonction de la position de ma main.

Vous en pensez quoi ?
A bientôt

bonjour
chouette encore un truc parfaitement inutile et donc indispensable :grin:

le probleme du clignotement vient vraisemblablement du fait que la detection de distance us se fait de maniere erratique
le corps humain en general n'est pas un bon reflecteur US.
tu peux essayer de faire de l'echantillonage et du filtrage numerique
essaye déjà avec ce programme et regarde ce que cela rend en serial lorsque tu t'approche
si lorsque tu es fixe si les valeurs changent beaucoup cela indiquera certianement un proble de cible "molle" :grin:

// définition des broches utilisées
int trig = 12;
int echo = 11;
long lecture_echo;
long cm;

void setup()
{
  pinMode(trig, OUTPUT);
  digitalWrite(trig, LOW);
  pinMode(echo, INPUT);
  Serial.begin(9600);
}

void loop()
{
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  lecture_echo = pulseIn(echo, HIGH);
  cm = lecture_echo / 58;
  Serial.print("Distance en cm : ");
  Serial.println(cm);
  delay(500);
}

Artouste, je viens de tester ce que tu m'a donné.
Sa fonctionne très bien, j'ai posé le capteur US sur une règle et la mesure est exacte avec une feuille de papier et mange 1 cm avec la boite de l'arduino, mon carnet de chèque et un un carnet Rhodia (je pose sur 5cm et cela indique 4cm, rien de bien méchant)

Merci

De mon coté je viens de trouver un tuto expliquant comment faire varier la luminosité d'une led à l'aide d'un slider dans processing.
Ca va bien m'occuper la journée ^^

steadam:
Artouste, je viens de tester ce que tu m'a donné.
Sa fonctionne très bien, j'ai posé le capteur US sur une règle et la mesure est exacte avec une feuille de papier et mange 1 cm avec la boite de l'arduino, mon carnet de chèque et un un carnet Rhodia (je pose sur 5cm et cela indique 4cm, rien de bien méchant)

Merci

De mon coté je viens de trouver un tuto expliquant comment faire varier la luminosité d'une led à l'aide d'un slider dans processing.
Sa va bien m'occuper la journée ^^

tres bien , papier carton comme cible c'est bien vu par les US

refait l'expé avec une modelisation humaine (un corps , une main) évidemment le plus nu possible (pas de vetements influants sur la reflectivité aux US)

t'inquiete , on ne regarde pas :grin:

J'ai refait l'expérience avec la main, ça fonctionne très bien, torse nu, pareil, mais avec mon pull en laine synthétique c'est plus ou moins correct mais avec des pics de dingue (passe de 22 à 3775 puis à 4 et re 22)...

Bon... tu me dira, tout le monde torse nu à mon futur vernissage ça risque d'être sympa, non ?
:wink:

steadam:
J'ai refait l'expérience avec la main, ça fonctionne très bien, torse nu, pareil, mais avec mon pull en laine synthétique c'est plus ou moins correct mais avec des pics de dingue (passe de 22 à 3775 puis à 4 et re 22)...

Essaye avec un pull en laine de vigogne , tres important la vigogne comme reference :grin:

retour serieux : là ce sont les sorties serial en cm ?
ça donne quoi quand tu expose ton pull sans toi à l'interieur ?
Je pense qu'il va falloir faire un bon filtrage avec evacuation des extremes

Bon... tu me dira, tout le monde torse nu à mon futur vernissage ça risque d'être sympa, non ?
:wink:

ouais 8) pas necessairement sur :grin:

La suite.
Un début de gribouillage de code hier soir, une petite correction de la part mon petit frère ce matin et ça avance.

int trig = 12;
int echo = 11;
int led = 10;
long lecture_echo; // ?
long cm; //

void setup()
{
Serial.begin (9600);
pinMode(trig, OUTPUT);
digitalWrite(trig, LOW);
pinMode(echo, INPUT);
pinMode(led, OUTPUT);
}

void loop()
{
  digitalWrite(trig, HIGH);
 delayMicroseconds(10);
 digitalWrite(trig, LOW);
 lecture_echo = pulseIn(echo, HIGH);
 cm = lecture_echo / 58;
 
 Serial.print("Distance en cm : ");
 Serial.println(cm);
 delay(500);
 
 
 if (cm > 40){ //si au dela de 40 cm
   analogWrite(led, 0); //la led est à 0 -> pk ça n'éteint pas la led ?
   Serial.println("supp à 40");
 }else if (cm > 30){
   analogWrite(led, 20);
   Serial.println("supp à 30");
 }else if (cm > 20){
   analogWrite(led, 127);
  Serial.println("supp à 20");
 }else if (cm < 20){
   analogWrite(led, 255);
   Serial.println("inf à 20");
 }
}

Petit blocage sur le fait qu’au delà de 40 cm la led reste allumée…
Il m’a envoyé vers PWM et analogWrite. Je vais potasser tout ça.

Affaire à suivre…

steadam:
La suite.
Un début de gribouillage de code hier soir, une petite correction de la part mon petit frère ce matin et ça avance.

Petit blocage sur le fait qu'au delà de 40 cm la led reste allumée...
Il m'a envoyé vers PWM et analogWrite. Je vais potasser tout ça.

Affaire à suivre...

Tu vois des variations de la led pour les distances intermediaires ?

Artouste:
Tu vois des variations de la led pour les distances intermediaires ?

Oui oui la leds varie bien. Pour le moment un peu trop "franchement", il va falloir que je trouve (pour plus tard) comment adoucir la transition entre les différents états.

Le souci de problème c'est juste cette histoire de 0 qui ne fonctionne pas au delà de 40 cm.

steadam:

Artouste:
Tu vois des variations de la led pour les distances intermediaires ?

Oui oui la leds varie bien. Pour le moment un peu trop "franchement", il va falloir que je trouve (pour plus tard) comment adoucir la transition entre les différents états.

Le souci de problème c'est juste cette histoire de 0 qui ne fonctionne pas au delà de 40 cm.

essaye ça dans ton code

// pinMode(led, OUTPUT);

You do not need to call pinMode() to set the pin as an output before calling analogWrite().

essaye aussi de mettre 1 au lieu de 0 si > 40

et une bonne methode pour gerer la fluidite de variation : utiliser la fonction map

Artouste:
essaye ça dans ton code

// pinMode(led, OUTPUT);

Je le met où ? Je l'ai déjà dans le setup, il faut que je le glisse avant chaque analogWrite de ma loop ?

Artouste:
essaye aussi de mettre 1 au lieu de 0 si > 40

C'est marrant tiens ! J'ai essayé en inversant les mesures les 0 sont devenu 255 et ça fonctionne.
255 ça s'éteint et à 0 c'est allumé... heu... Comment dire j'ai du louper une étape.

Artouste:
et une bonne methode pour gerer la fluidite de variation : utiliser la fonction map
map() - Arduino Reference

Je vais voir ça tout de suite merci !

steadam:
Je vais voir ça tout de suite merci !

bon ça avance
pour la fonction map
part plutot de l’info de retour brut du capteur plutot que de la conversion en cm (in fine pas tres utile ici )

pour le code tu commente juste avec // la ligne dans le setup

Décidément j’ai de la chance :slight_smile:

Re-coup de mains de mon fréro, je lui ai parlé de map, il y a jeté un œil et on s’est mis d’accord (surtout lui)

int trig = 12;
int echo = 11;
int led = 10;
long lecture_echo; // ?
long cm; //
const int distMax = 40;


void setup()
{
Serial.begin (9600);
pinMode(trig, OUTPUT);
digitalWrite(trig, LOW);
pinMode(echo, INPUT);
pinMode(led, OUTPUT);
}

void loop()
{
  digitalWrite(trig, HIGH);
 delayMicroseconds(10);
 digitalWrite(trig, LOW);
 lecture_echo = pulseIn(echo, HIGH);
 cm = lecture_echo / 58;
 
 Serial.print("Distance en cm : ");
 Serial.println(cm);
 delay(500);
 
 if (cm > distMax){ //si au dela de 40 cm
   analogWrite(led, 255); //la led est éteinte
   Serial.println("supp à 40");
 }else if (cm < distMax) //si la distance en cm inferieure à distMax  
   analogWrite(led, map(cm, 0, distMax, 0, 255));//
}

Grâce à la fonction map j’ai une variation de la lumière au cm et trois fois rien à écrire !
Merci Artoust Merci frangin!

Pour la suite 3 leds alignées . Celle du milieu ne change pas, celles des cotés s’allument à mi parcours.

J'avance, j'avance,
donc ça fonctionne avec trois leds, c'est beau, presque j'en ai la larme à l’œil.

Comme prévu à 40cm seulement la led du milieu commence à s'allumer, puis à partir de 20 cm se sont les deux autre leds qui comment à s'illuminer.

Bon la suite !

Maintenant j'ai bien envie que quand on se trouve sur la droite ça soit la led de droite qui s'allume, et inversement si je passe sur la gauche.

Aller deux capteurs ! Et que ça saute !

steadam:
J'avance, j'avance,
donc ça fonctionne avec trois leds, c'est beau, presque j'en ai la larme à l’œil.

C'est pas recommandé pour un photographe, encore qu'il parait que c'est comme ça que David Hamilton à fait sa réputation :grin:

Comme prévu à 40cm seulement la led du milieu commence à s'allumer, puis à partir de 20 cm se sont les deux autre leds qui comment à s'illuminer.

Bon la suite !

Maintenant j'ai bien envie que quand on se trouve sur la droite ça soit la led de droite qui s'allume, et inversement si je passe sur la gauche.

Aller deux capteurs ! Et que ça saute !

mathématiquement là tu augmente tes contraintes d'un facteur carré (et pas Cheval )

attention à laisser du temps aux relaxations entre mesure pour bien discriminer

Artouste:
attention à laisser du temps aux relaxations entre mesure pour bien discriminer

C'est peut être maintenant que la librairie NewPing va intervenir ?
Elle permet de contrôler plusieurs sonars. Google Code Archive - Long-term storage for Google Code Project Hosting.

steadam:

Artouste:
attention à laisser du temps aux relaxations entre mesure pour bien discriminer

C'est peut être maintenant que la librairie NewPing va intervenir ?
Elle permet de contrôler plusieurs sonars. Google Code Archive - Long-term storage for Google Code Project Hosting.

bonsoir
si c'est juste pour discriminer du gauche droite ( avec 2 SR04) je resterais sans lib