Probleme casque iron man

bonjour a tous.

Je suis toujours sur mon casque iron man et je viens vous voir car là j’en peux plus.
le servo ne fonctionne pas . si je désactive la ligne audio.play ..... le servo fonctionne.
SVP j’en peux plus de se truc j’aimerais vraiment le finir.
merci d’avance .

type or p#include <Servo.h>
Servo servo1;
#include <CapacitiveSensor.h>
CapacitiveSensor Sensor = CapacitiveSensor(4, 2);
#include <SPI.h>
#include <SD.h> // Inclure la librairie SD
#define SDPIN 10 // Chip Select du lecteur SD
#include <TMRpcm.h> 
File myFile;
TMRpcm audio;

long val;
int pos;
int led = 5;
int servoPin = 7;
int servostatus = 30;
int ledlevel=0;

void setup(){
  
  audio.speakerPin = 9; // Speaker sur la pin 9
  audio.setVolume(3); // gestion du volume de 0 à 7
  audio.quality(1); // qualitée audio 0 ou 1
  // Initialisation de la carte SD
  if (!SD.begin(SDPIN)) { 
    Serial.println("initialization failed!"); 
    return;
  }
  
  
  servo1.attach(servoPin);

  pinMode(led, OUTPUT);
}

void loop(){
val = Sensor.capacitiveSensor(60);
if (val >= 50 && pos == 0)

      
{  
      audio.play("14.wav"); // Joue le son "son8bit.wav"
      servo1.write(0);
      delay (10);
      analogWrite(led, 50);
      delay(30);
      digitalWrite(led, LOW);
      delay(50);                
      analogWrite(led, 30);
      delay(30);
      digitalWrite(led, LOW);
      delay(50);                             
      analogWrite(led, 50);
      delay(30);
      digitalWrite(led, LOW);
      delay(30);
      analogWrite(led, 30);
      delay(30);
      digitalWrite(led, LOW);
      delay(50);

for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 15)
    
{
analogWrite(led, fadeValue);
pos = 1;
delay(100);
}  
}  

else if (val >= 60 && pos == 1)  
 { servo1.write(180);
  digitalWrite(led, LOW);
  pos = 0;
  delay(100);
  
}

while(audio.isPlaying()){}//wait until file is played
delay(1000);audio.stopPlayback(); // or wait 1sec and stop music
digitalWrite(9, LOW);
}aste code here

Quelle carte est utilisée?

Si c'est une Uno, c'est normal car TMRpcm et Servo.h utilisent toutes les deux la même ressource hard (timer 1).

Dans ce cas, il faut chercher une autre bibliothèque pour les servos : peut-être celle-ci

Arduino's Servo library causes your servos to jitter. Alorium Technology's XLR8Servo Library doesn't jitter.
With Arduino's Servo library you lose the analogWrite() (PWM) functionality on pins 9 and 10.
With Alorium Technology's XLR8Servo Library you can still use analogWrite() (PWM) functionality on pins 9 and 10.
Arduino's Servo library uses the microcontroller's only 16bit timer.
Alorium Technology's XLR8Servo Library leaves the 16bit timer available for other uses.

Mais je ne sais pas si elle fonctionne avec un Uno. A tester...

Merci de ta réponse rapide, c'est une nano je dois utiliser laquelle du coup.

Ma réponse n'est pas bonne, cette bibliothèque n'est pas compatible Arduino.

Il y a aussi celle-ci, tu peux tester l'exemple ici pour la faire marcher puis voir avec ton code si elle est compatible de TMRpcm

OK je teste, merci de t'intéresser de mon cas

si rien ne marche, il faudra contrôler le servo sans bibliothèque, en créant toi-même les signaux PPM. Un tuto sur le site d'Eskimon (tu peux lire à partir de mais le reste est intéressant aussi)

PWMServo utilise aussi le timer 1! donc non compatible avec TMRpcm.

OK j’utilise maintenant la bibliothèque servoTimer2.h et la miracle.
Merci a tous vous m'avez aiguillez dans la bonne direction.
Je laisse le code pour ceux que c’a intéresse.

//#include <Servo.h>
//Servo servo1;
#include"ServoTimer2.h"
ServoTimer2 servo1;
 
#include <CapacitiveSensor.h>
CapacitiveSensor Sensor = CapacitiveSensor(4, 2);
#include <SPI.h>
#include <SD.h> // Inclure la librairie SD
#define SDPIN 10 // Chip Select du lecteur SD
#include <TMRpcm.h> 
File myFile;
TMRpcm audio;

long val;
int pos;
int led = 5;
int servoPin = 6;
int servostatus = 30;
int ledlevel=0;

void setup(){
  
  audio.speakerPin = 9; // Speaker sur la pin 9
  audio.setVolume(3); // gestion du volume de 0 à 7
  audio.quality(1); // qualitée audio 0 ou 1
  // Initialisation de la carte SD
  if (!SD.begin(SDPIN)) { 
    Serial.println("initialization failed!"); 
    return;
  }
  
  
  servo1.attach(servoPin);

  pinMode(led, OUTPUT);
}

void loop(){
val = Sensor.capacitiveSensor(60);
if (val >= 50 && pos == 0)

      
{  
      audio.play("14.wav"); // Joue le son "son8bit.wav"
      servo1.write(2250);
      delay (10);
      analogWrite(led, 50);
      delay(30);
      digitalWrite(led, LOW);
      delay(50);                
      analogWrite(led, 30);
      delay(30);
      digitalWrite(led, LOW);
      delay(50);                             
      analogWrite(led, 50);
      delay(30);
      digitalWrite(led, LOW);
      delay(30);
      analogWrite(led, 30);
      delay(30);
      digitalWrite(led, LOW);
      delay(50);

for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 15)
    
{
analogWrite(led, fadeValue);
pos = 1;
delay(100);
}  
}  

else if (val >= 60 && pos == 1)  
 { servo1.write(1500);
  digitalWrite(led, LOW);
  pos = 0;
  delay(100);
  
}

while(audio.isPlaying()){}//wait until file is played
delay(1000);audio.stopPlayback(); // or wait 1sec and stop music
digitalWrite(9, LOW);
}

Cool :grinning:
Si tu en as l'occasion, poste une petite vidéo du casque une fois terminé...

1 Like

En fait non ça ne va pas, lorsque je débranche le câble usb et que je passe sur batterie ce qui sera la configuration final. je pert l'audio et le servo fait des aller retour. Si quelqu'un a une idée je suis preneur, d'avance merci.

Il faut donner le schéma du montage.

Et décrire la batterie en question

J’espère que c’est assez clair

les batteries sont en série?

Oui pour avoir 7v

Les nano officielles utilisent un régulateur de tension LM1117 qui est une version faible chute de tension donc cela devrait fonctionner avec tes batteries. Pour autant qu'il n'y ait pas un important appel de courant qui mette à genoux la batterie ou le régulateur.
Si c'est un clone nano il faudrait s'assurer de la référence du régulateur.

Je suis quand même surpris par le branchement du servo dans ton plan d'interconnexion. Sur les prises servo le rouge est le + normalement.

oups !!! bien vue je me suis tromper sur le plan mais le réel est bon. Sinon j’ai refais tous les branchements et ça fonctionne bien un fil de couper dans la gaine.
Maintenant une autre question, peut on empêcher le servo de bouger a la mise sous tension. il se déplace de quelques degrés et vient se positionner en attente.
D’avance merci.

virer le servo1.attach du setup
et le positionner là

else if (val >= 60 && pos == 1)  
 { 
  servo1.attach(servoPin);
  servo1.write(1500);
  digitalWrite(led, LOW);
  pos = 0;
  delay(100);
  
}

merci pour ta réponse, ça ne fonctionne pas, des que j’alimente le circuit, le servo se déplace sans tenir compte de sa dernière position qui devrait être casque fermé.