====== Al-Zohra n'est pas née en un jour ======
* Porteur du projet : [[user:lamirza|Randa Mirza]]
* Support électronique et programmation : [[user:jerome|Jérôme]] (reso-nance)
* Date : juin 2015 - ...
* Licence : code libre ! image copyright Randa Mirza
* Lien : http://randamirza.com
{{tag>mythologie photo arduino stepper}}
===== Description =====
Mythologie arabe préislamique
{{ :projets:zohrawasnotborninaday:venus-f2.jpg?600 |}}
Les anges furent vraiment étonnés de la désobéissance et des comportements de l'Homme, ne les comprenant pas. Dieu les informa que s'ils avaient été à la place des hommes, ils se seraient comportés de la même manière et auraient en ce sens péché. Afin de connaître cette vérité, les anges élurent parmi eux Harut et Marut, Dieu leur donna des instincts humains et les envoya sur terre. Il leur exhorta d’éviter le vin, le culte des idoles, la fornication, le meurtre, etc... Sur terre Harut et Marut rencontrèrent Zohra et tombèrent amoureux de ses charmes. Zohra accepta de se donner à eux sexuellement à condition qu’ils lui apprennent les mots secrets pour monter au ciel. En prononçant les mots magiques, Zohra fut élevée vers le ciel. Quand elle voulu redescendre, elle oublia les mots et fut changée en planète. Ainsi les arabes se racontaient l’histoire de la planète Vénus.
Zohra signifie Vénus en Arabe. L’œuvre ci-contre met en relief la verticalité de l’ascension de Zohra vers le ciel et sa transformation en Vénus. Harut et Marut sont les deux chiens placés à ces pieds; dans la tradition musulmane, les chiens sont des anges déchus. La composition de l’image est inspirée d’une représentation d’Ishtar, déesse assyrienne et babylonienne qui a comme descendance Aphrodite chez les Grecques et Vénus chez les Romains.
===== Scénario =====
{{:projets:zohrawasnotborninaday:venus-pictures-all.jpg?800|}}
===== Dispositif technique =====
Suivant le scénario, la carte Arduino contrôle la luminosité d'une LED puissante avec un MOSfet et sa position verticale avec un moteur pas à pas.
Avec le classique pilote de moteur L298, le moteur pas à pas faisait trop de bruit. Nous avons donc essayer une nouvelle solution avec le pilote SilentStepStick, basé sur le Trinamic TMC2100. Le résultat est tout à fait concluant. Voir notre page sur l'utilisation du [[materiel:silentstepstick:|SilentStepStick]].
Mise à jour (08/2016) :
* Arduino UNO
* [[http://www.watterott.com/en/Arduino-FabScan-Shield|FabScan Shield]] (avant c'était le [[https://www.arduino.cc/en/Main/ArduinoMotorShieldR3|Arduino Motor Shield]])
* [[http://www.watterott.com/en/SilentStepStick-TMC2100-5V-with-Pins|SilentStepStick 5V]] ({{:projets:zohrawasnotborninaday:silentstepstick_v12_5v.pdf|}}, {{:projets:zohrawasnotborninaday:tmc2100_datasheet.pdf|TrinamicTMC2100-StepperMotorDriver.pdf}}) avec une [[http://www.gotronic.fr/art-alimentation-rs100-24-20111.htm|alimentation 24V]]
* [[http://www.watterott.com/en/SilentStepStick-Protector|SilentStepStick Protector]]
* Moteur pas à pas [[http://openbuildspartstore.com/nema-17-stepper-motor/|OpenBuilds Nema 17]] ({{:projets:zohrawasnotborninaday:mt-1704hs168a-ts_reva.pdf|1704HS168A.pdf}})
* Guidage linaire avec courroie [[http://openbuildspartstore.com|OpenBuilds]]
* [[http://boutique.semageek.com/fr/94-module-mosfet-tinkerkit-7640152110863.html|TinkerKit MOSFET]] pour contrôler la lumière
{{:projets:zohrawasnotborninaday:dsc_6461.jpg?600|}}
Connections Arduino :
* SilentStepStick (pins 2,3,4)
* Mosfet (pin 11, 5V, GND)
{{:projets:zohrawasnotborninaday:2015-06-16-19.08.45.jpg?600|}}
{{:projets:zohrawasnotborninaday:mosfet.png?400|}}
===== Code Arduino =====
* Fichier : {{:projets:zohrawasnotborninaday:venus_silentstickdriver.zip|}}
++++ Nouveau code Arduino (08/2016) |
/*
* Al-Zohra n'est pas née en un jour
* Zohra was not born in a day
*
* Artistic installation from Randa Mirza
*
* Code : Jérôme Abel
* Date : 09/08/2016
* License : GNU/GPL v3
* Website : http://reso-nance.org/wiki/projets/zohrawasnotborninaday/accueil
*
* Electronic setup :
* + Arduino UNO
* + FabScan Shield
* + SilentStepStick 5V (Trinamic TMC2100 Stepper Motor Driver) with 20V-28V power supply
* + SilentStepStick Protector
* + Motor stepper Nema 17 (1704HS168A)
* + TinkerKit MOSFET (for the light)
*
* Wiring setup :
* SilentStepStick (pins 2,3,4)
* Mosfet (pin 11, 5V, GND)
*
* Main principle :
* An Arduino controls a light with a mosfet and a motor stepper with a quiet driver (for inside installation)
*
*/
// Pins Stepper Driver (TMC2100 SilentStick 5V)
#define EN_PIN 2
#define STEP_PIN 3
#define DIR_PIN 4
#define MS_PIN A5 // HIGH for 16 microstepping, LOW for no microstepping
#define STEPS 200 // 200 pas pour un tour
#define MICROSTEPS 16 // microstepping 1/16
// Pins Mosfets Lamp
#define LAMP_PIN 11
// ---------------- Variables du scénario ---------------- //
int wait = 29000; // temps d'attente de départ
int lamp_fadein = 29000; // temps de fade in
int lamp_intensity = 200; // intensité de la lampe (entre 0 et 255)
int lamp_fadeout = 5000; // temps de fade out
int motor_turns = 5 ;// nombre de tours en montéé
int motor_turns_ms = 20000; // temps par tour en millisecondes
int motor_break = 7000 ; // temps d'attente en position haute
//---------------- Démarrage ---------------- //
void setup() {
// Setup Stepper Driver
pinMode(EN_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
pinMode(STEP_PIN, OUTPUT);
//pinMode(MS_PIN, OUTPUT);
digitalWrite(EN_PIN, HIGH); // Désactiver le driver
digitalWrite(DIR_PIN, LOW); // LOW or HIGH
digitalWrite(STEP_PIN, LOW);
//digitalWrite(MS_PIN, LOW); // No microstepping
// Allumer la lampe au démarrage
pinMode(LAMP_PIN, OUTPUT);
analogWrite(LAMP_PIN, 0);
delay(2000); // Délai de sécurité
digitalWrite(EN_PIN, LOW); // Activer le driver
}
//---------------- Boucle du scénario - programme ---------------- //
void loop() {
delay(wait);
fadein(LAMP_PIN, lamp_intensity, lamp_fadein); // pin (lamp), intensity max, temps total
motorON();
motorGo(motor_turns, motor_turns_ms); // nombre de tours, millisecondes par tour (minimum 7000 !)
delay(motor_break);
fadeout(LAMP_PIN, lamp_intensity, lamp_fadeout); // pin (lamp), intensity max, temps total
motorOFF();
}
//---------------- Fonctions utiles ---------------- //
void motorON() {
digitalWrite(EN_PIN, LOW);
}
void motorOFF() {
digitalWrite(EN_PIN, HIGH);
}
void motorGo(int _tour, int _tourms){
// Delai entre chaque pas (vitesse en millisecondes)
int _delay = (int) (_tourms / (STEPS * MICROSTEPS) ) * 1000 / 2;
// Exécuter le nombre de tours
for(int x = 0; x < (_tour * STEPS * MICROSTEPS); x++) {
digitalWrite(STEP_PIN,LOW);
delayMicroseconds(_delay);
digitalWrite(STEP_PIN,HIGH);
delayMicroseconds(_delay);
}
}
void fadeout (int _pin, int _intensity, int _time){
int new_time = (int) (_time / 255);
for (int i = 0; i <= 255; i++) {
int lampBright = 255 - i;
analogWrite(_pin, map(lampBright, 0, 255, 0, _intensity));
delay(new_time);
}
}
void fadein (int _pin, int _intensity, int _time){
int new_time = (int) (_time / 255);
for (int i = 0; i <= 255; i++) {
analogWrite(_pin, map(i, 0, 255, 0, _intensity));
delay(new_time);
}
}
++++
++++ Ancien code Arduino (2015) |
// Include the Stepper Library
#include
// VARAIABLES INTERESSANTES
int leds_up = 0; //
int wait = 29000; // blablablabla
int lamp_up = 29000; //
int motor_up = 7 ; // = 7 giris = 42 sec if speed = 5
int motor_break = 7000 ;// after leds down
int lamp_down = 5000;
int motor_down = 7 ; // = 7 giris = sec if speed = 40
// ============================= //
const int leds = 6;
const int lamp = 5;
// Map our pins to constants to make things easier to keep track of
const int pwmA = 3;
const int pwmB = 11;
const int brakeA = 9;
const int brakeB = 8;
const int dirA = 12;
const int dirB = 13;
// The amount of steps for a full revolution of your motor.
// 360 / stepAngle
const int STEPS = 200;
// Initialize the Stepper class
Stepper myStepper(STEPS, dirA, dirB);
void setup() {
// Set the RPM of the motor
myStepper.setSpeed(60);
// Turn on pulse width modulation
pinMode(pwmA, OUTPUT);
pinMode(pwmB, OUTPUT);
digitalWrite(pwmA, HIGH);
digitalWrite(pwmB, HIGH);
// Turn off the brakes
pinMode(brakeA, OUTPUT);
pinMode(brakeB, OUTPUT);
digitalWrite(brakeA, LOW);
digitalWrite(brakeB, LOW);
// Log some shit
Serial.begin(9600);
// LEDS variano da 0 (spento) a 255 (acceso full)
analogWrite(leds, 10);
// LAMP varia da 0 a 255
analogWrite(lamp, 0);
}
void motorON() {
digitalWrite(pwmA, HIGH);
digitalWrite(pwmB, HIGH);
}
void motorOFF() {
digitalWrite(pwmA, LOW);
digitalWrite(pwmB, LOW);
}
void fadeout (int _pin, int _intensity, int _time){
int time = (int) (_time / 255);
for (int i = 0; i <= 255; i++) {
int lampBright = 255 - i;
analogWrite(_pin, map(lampBright, 0, 255, 0, _intensity));
delay(time);
}
}
void fadein (int _pin, int _intensity, int _time){
int time = (int) (_time / 255);
for (int i = 0; i <= 255; i++) {
analogWrite(_pin, map(i, 0, 255, 0, _intensity));
delay(time);
}
}
void loop() {
delay(wait);
fadein(lamp, 200, lamp_up); // pin (leds or lamp), intensity max, temps total
motorON();
myStepper.setSpeed(2); // 5 giri al minuto ==> 1 giri = 3 sec.
myStepper.step(STEPS * motor_up);
delay(motor_break);
fadeout(lamp, 200, lamp_down);
motorOFF();
}
++++
===== Photos =====
{{:projets:zohrawasnotborninaday:image2.jpg?400|}}
{{:projets:zohrawasnotborninaday:2015-06-15-18.25.43.jpg?400|}}
{{:projets:zohrawasnotborninaday:2015-06-15-18.26.19.jpg?400|}}
{{:projets:zohrawasnotborninaday:2015-06-16-17.49.05.jpg?400|}}
{{:projets:zohrawasnotborninaday:dsc_6457.jpg?400|}}
{{:projets:zohrawasnotborninaday:venus-box-h-all.jpg?400|}}