Bonjour a tous
Je réalise un projet sur le Terminator que je réalise en impression 3D comme ceci,
T-800
Et j'aimerai avoir votre aide précieuse
pour lui incorporer sur l’Arduino UNO :
- Commande RF commander le tous avec la touche "lecture ou 1"
(part la suite d'autre bouton pourrai être utiliser avec des fonction pour le pistolet Plasma.) - 6X LEDs (2 avant, 2 arrier, 2 pour les yeux)
- 1X Servo mini (mouvement gauche, droite)
- DFplayer (band sond)
- Ecran LCD (pour la video) "ajout perso"
Le code compiler que j'ai actuellement est un peu compliquer a déchiffrer mais expliquer sur le lien
#include <SoftwareSerial.h>
#include "DFRobotDFPlayerMini.h"
#include <Servo.h> // Tools -> Manage Libraries...
#include <ServoEasing.h> // ServoEasing v2.3.4
#include <AsyncTimer.h> // AsyncTimer v2.2.0
#include <jled.h> // JLed v4.8.0
//
// Eye LED settings...
//
#define LED_A 5
#define LED_B 6
#define LED_C 7
#define FADE_ON 125
#define FADE_ON_WAIT 500
#define FLICKER_TIME 2500
#define EYES_ON_WAIT 500
#define FADE_OFF 1500
#define FADE_OFF_WAIT 2500
//
// Eye Servo settings...
//
#define EYE_SERVO_A 9
#define EYE_SERVO_B 10
#define EYE_SERVO_C 11
#define EYE_SPEED 150
#define EYE_MIN 20
#define EYE_MAX 160
#define EYE_CENTER 90
#define EYE_INTERVAL 900
//
// Random eye movement...
//
AsyncTimer t;
ServoEasing eyeServoA;
ServoEasing eyeServoB;
ServoEasing eyeServoC;
unsigned short eyeTimer;
unsigned short scanTimer;
bool eyeMoveA = true;
bool eyeMoveB = true;
bool eyeMoveC = true;
//
// Eye flickering & fading movement.
//
JLed ledsA[] = {
JLed(LED_A).FadeOn(FADE_ON).DelayAfter(FADE_ON_WAIT * 2),
JLed(LED_A).Candle(6, 100, FLICKER_TIME * 2),
JLed(LED_A).On().DelayAfter(EYES_ON_WAIT * 2),
// JLed(LED_A).FadeOff(FADE_OFF).DelayAfter(FADE_OFF_WAIT * 2)
};
auto seqA = JLedSequence(JLedSequence::eMode::SEQUENCE, ledsA);
auto ledA = JLed(LED_A).FadeOff(FADE_OFF).DelayAfter(FADE_OFF_WAIT * 2);
JLed ledsB[] = {
JLed(LED_B).FadeOn(FADE_ON).DelayAfter(FADE_ON_WAIT * 2),
JLed(LED_B).Candle(6, 100, FLICKER_TIME * 2),
JLed(LED_B).On().DelayAfter(EYES_ON_WAIT * 2),
// JLed(LED_B).FadeOff(FADE_OFF).DelayAfter(FADE_OFF_WAIT * 2)
};
auto seqB = JLedSequence(JLedSequence::eMode::SEQUENCE, ledsB);
auto ledB = JLed(LED_B).FadeOff(FADE_OFF).DelayAfter(FADE_OFF_WAIT * 2);
//
// Generate variation for range -> range * 2
//
int vary(int range, int v = 11) {
return range + random(v) * range / v;
}
//
// Change JLed timings so each flicker is independent.
//
void retime(JLed (&leds)[3], JLed &led) {
leds[0].FadeOn(FADE_ON).DelayAfter(vary(FADE_ON_WAIT));
leds[1].Candle(6, 100, vary(FLICKER_TIME));
leds[2].On().DelayAfter(vary(EYES_ON_WAIT));
led.FadeOff(FADE_OFF).DelayAfter(vary(FADE_OFF_WAIT));
}
//
// Random eye movement.
//
void moveEyes() {
if (eyeMoveA) {
eyeServoA.startEaseTo(random(EYE_MIN, EYE_MAX + 1));
}
if (eyeMoveB) {
eyeServoB.startEaseTo(random(EYE_MIN, EYE_MAX + 1));
}
}
//
// Scan eyes back and forth.
//
void scanEyes() {
eyeServoC.startEaseTo(eyeMoveC ? EYE_MIN : EYE_MAX);
eyeMoveC = !eyeMoveC;
}
//
// Standard setup function.
//
// Use pins 2 and 3 to communicate with DFPlayer Mini
static const uint8_t PIN_MP3_TX = 2; // Connects to module's RX
static const uint8_t PIN_MP3_RX = 3; // Connects to module's TX
SoftwareSerial softwareSerial(PIN_MP3_RX, PIN_MP3_TX);
// Create the Player object
DFRobotDFPlayerMini player;
void setup() {
void playMp3Folder(int fileNumber);
// Init serial port for DFPlayer Mini
softwareSerial.begin(9600);
// Start communication with DFPlayer Mini
if (player.begin(softwareSerial)) {
Serial.println("OK");
// Set volume to maximum (0 to 30).
player.volume(20);
delay(45700);
} else {
Serial.println("Connecting to DFPlayer Mini failed!");
}
Serial.begin(9600); // For debugging.
randomSeed(analogRead(0)); // Init random number generator.
eyeServoA.attach(EYE_SERVO_A); // Init eyes.
eyeServoA.write(EYE_CENTER);
eyeServoA.setSpeed(EYE_SPEED);
eyeServoB.attach(EYE_SERVO_B);
eyeServoB.write(EYE_CENTER);
eyeServoB.setSpeed(EYE_SPEED);
eyeServoC.attach(EYE_SERVO_C);
eyeServoC.write(EYE_CENTER);
eyeServoC.setSpeed(EYE_SPEED / 2); // Run slower is scanning mode.
pinMode(LED_C, OUTPUT); // Make Led C constantly on (for scanning mode).
digitalWrite(LED_C, HIGH);
t.setup();
eyeTimer = t.setInterval(moveEyes, EYE_INTERVAL);
scanTimer = t.setInterval(scanEyes, EYE_INTERVAL * 5);
}
//
// Standard loop.
//
void loop() {
// Play the first MP3 file on the SD card
player.play(1);
t.handle();
if (!seqA.Update()) {
eyeMoveA = false; // Stop random eye movement when sequence ends and then we fade off.
if (!ledA.Update()) {
retime(ledsA, ledA);
seqA.Reset();
ledA.Reset();
eyeMoveA = true; // Restart eye movement for next eye flickering sequence.
}
}
if (!seqB.Update()) {
eyeMoveB = false; // Stop random eye movement when sequence ends and then we fade off.
if (!ledB.Update()) {
retime(ledsB, ledB);
seqB.Reset();
ledB.Reset();
eyeMoveB = true; // Restart eye movement for next eye flickering sequence.
}
}
}
- Les broches 5, 6 et 7 contrôlent les LED. Les broches 5 et 6 passent par la mise sous tension, le scintillement et la disparition. Ils fonctionnent sur des cycles aléatoires indépendants. La broche 7 est toujours allumée.
LED_A 5
LED_B 6
LED_C 7
- Les broches 9, 10 et 11 contrôlent les servos. Les broches 9 et 10 se déplacent de manière aléatoire vers la gauche et vers la droite en synchronisation avec le scintillement des LED (les broches 9 + 5 et 6 + 10 sont synchronisées). La broche 11 scanne à plusieurs reprises à gauche et à droite.
Vous n'avez pas besoin de câbler toutes les broches LED et servo, ni de les garder ensemble. Vous pouvez câbler les yeux de la tête à la broche 7 et leur servo aux broches 9 ou 10 afin qu'ils se déplacent de manière aléatoire (ils s'arrêteront momentanément de temps en temps) afin que votre terminateur puisse regarder autour de vous. Alternativement, vous pouvez câbler le servo oculaire à la broche 11 afin que le Terminator balaye la pièce à gauche et à droite.
EYE_SERVO_C 11
Ce que j’ai fait comme installation
Premier Test
comment puis-je incorporer dans une commande RF ?
et la commande DFplayer est t'il nécessaire pour l'ecran LCD ?
Je vous remercie d'avance de votre aide, être novice c'est pas facile ^^
Pour + de renseignement je reste a votre disposition.