====== temps ====== * Porteur du projet : shaodan li [[:user:shaodan|shaodan]] * Date : 15/01/2018/ - ... * Licence : [[http://creativecommons.org/licenses/by-sa/3.0/legalcode|CC-by-sa-3.0]] * Description : le temps fait des dessins * Fichiers sources : //mettre un lien// * Lien : //mettre un lien// {{tag>esadmm arduino}} ===== Note d'intention ===== le temps fait des dessins {{projets:temps:accueil:wechatimg70.jpeg?800|temps}} {{:projets:temps:montre.jpg?800|}} ===== Notes techniques ===== Guide pas à pas et conseil pour la réalisation du projet. ==== Electronique ==== * CNC shield * 3 x A4988 drivers (microstep (1/16)) * 3 Steppers nema 17 HS ==== Code Arduino ==== // CNC shield / 3 A4988 drivers (microstep (1/16)) / 3 Steppers nema 17 HS??? // pins #define X_DIR 5 #define Y_DIR 6 #define Z_DIR 7 #define X_STP 2 #define Y_STP 3 #define Z_STP 4 #define EN 8 // Variables const boolean DEBUG = true; int start_time = 200; // 1000 const int step_delay = 200; // 500 ! microseconds const int step_sec = 53; // 200*16 > 3200 steps / 60 = 53,3333 steps const int step_min = 53; // 200*16 > 3200 steps / 60 = 53,3333 steps const int step_hour = 133; // 200*16 > 3200 steps / 24 = 133,3333 steps int current_sec = 1; int current_min = 1; int current_hour = 1; int delay_time; // Move functions void moveSecond() { for (int i = 0; i < step_sec; i++) { digitalWrite(X_STP, HIGH); delayMicroseconds(step_delay); digitalWrite(X_STP, LOW); delayMicroseconds(step_delay); } } void moveMinute(){ for (int i = 0; i < step_min; i++) { digitalWrite(Y_STP, HIGH); delayMicroseconds(step_delay); digitalWrite(Y_STP, LOW); delayMicroseconds(step_delay); } } void moveHour(){ for (int i = 0; i < step_hour; i++) { digitalWrite(Z_STP, HIGH); delayMicroseconds(step_delay); digitalWrite(Z_STP, LOW); delayMicroseconds(step_delay); } } void setup(){ pinMode(X_STP, OUTPUT); pinMode(Y_STP, OUTPUT); pinMode(Z_STP, OUTPUT); pinMode(X_DIR, OUTPUT); pinMode(Y_DIR, OUTPUT); pinMode(Z_DIR, OUTPUT); // Directions digitalWrite(X_DIR, HIGH); digitalWrite(Y_DIR, HIGH); digitalWrite(Z_DIR, HIGH); // Enable pinMode(EN, OUTPUT); digitalWrite(EN, LOW); // Debug console if (DEBUG) Serial.begin(19200); } void loop(){ // Seconds moveSecond(); current_sec = (current_sec + 1) % 10; // !! 60 delay_time = start_time - (step_sec * step_delay / 1000); // Minutes if (current_sec == 0) { moveMinute(); current_min = (current_min + 1) % 10; // !! 60 delay_time = delay_time - (step_min * step_delay / 1000) ; } // Hours if (current_sec == 0 && current_min == 0) { moveHour(); current_hour = (current_hour + 1) % 24; delay_time = delay_time - (step_hour * step_delay / 1000) ; } // Debug serial monitor if (DEBUG) { Serial.print(current_hour); Serial.print(":"); Serial.print(current_min); Serial.print(":"); Serial.print(current_sec); Serial.print(" - delay : "); Serial.println(delay_time); } // Delay time delay(delay_time); } === Test vitesse === ++++ Code test vitesse | // Arduino UNO / CNC shield / 3 * A4988 drivers (microstep (1/16)) / 3 Steppers nema 17 HS??? // pins #define X_DIR 5 #define Y_DIR 6 #define Z_DIR 7 #define X 2 #define Y 3 #define Z 4 #define EN 8 // Variables int count=0; int vitesse = 500; // vitesse 500 OK int count_hour = 60; // normalement ~3200 pas pour changer d'heure (= tour) void setup(){ // Pins pinMode(X, OUTPUT); pinMode(Y, OUTPUT); pinMode(Z, OUTPUT); pinMode(X_DIR, OUTPUT); pinMode(Y_DIR, OUTPUT); pinMode(Z_DIR, OUTPUT); // Directions digitalWrite(X_DIR, HIGH); digitalWrite(Y_DIR, HIGH); digitalWrite(Z_DIR, HIGH); // Enable pinMode(EN, OUTPUT); digitalWrite(EN, LOW); } void loop(){ count++; moveMotor(X,60,vitesse); moveMotor(Y,1,vitesse); if ((count % count_hour) == 0) { moveMotor(Z,1,vitesse); } } void moveMotor(int _pin, int _nb, int _delay){ for (int i = 0; i < _nb; i++) { digitalWrite(_pin, HIGH); delayMicroseconds(_delay); digitalWrite(_pin, LOW); delayMicroseconds(_delay); } } ++++ ===== Matériaux et outils ===== Liste de matériel et outils nécessaires. ===== Photos ===== {{gallery>?&crop&lightbox}}