Bonjour tout le monde.
Moi.
Je suis retraité et passionné depuis quelques mois d'Arduino ...
et de modélisme naval depuis 40 ans. Actuellement je monte un Yatch de 1,06 m propulsé par 2 turbines (pas courant !).
Mon projet.
J'ai un projet depuis des décennies : fabriquer un banc de test pour mes ensembles de propulsion.
Chercher le meilleurs ensemble possible : batterie Li-Ion, contrôleur, moteur, hélice ...
Mon matériel.
Pour cela j'ai deux Arduinos (donc 2 sketchs) : le premier sert à piloter le moteur en 5 phases : plateau à vitesse nulle, rampe d'accélération, plateau vitesse max de stabilisation, rampe de décélération et plateau final de stabilisation.
Le deuxième permet d'enregistrer 4 ou 5 voir 6 valeurs (tension, intensité, puissance alim, 1 ou 2 vitesses moteur et accessoirement température(s) sur une carte SD pour les récupérer sous Excel et sortir des courbes caractéristiques.
Mon souci.
J'aimerais pourvoir libérer un Arduino et tout gérer par l'autre.
J'utilise les entrées analogiques du 1er et une entrée numérique pour le démarrage de séquence avec un bouton poussoir et l'autre et pour le 2 ème les sorties numériques pour la carte SD et 1 entrée numérique pour le lancement de l'enregistrement.
Je fournirai mes 2 sketchs et quelques photos si certains peuvent m'aider.
Bonjour et merci.
Ce serait une solution mais ... je pense qu'il est possible de tout passer sur le même Arduino et c'est plutôt LA solution que je cherche à faire.
De plus je n'ai pas à transférer d'infos du 1er sur le 2éme.
Par contre les deux sont en attente de l'appui sur le BP pour un démarrage simultané.
Merci quand même.
Dom22
P. S. : Les sketchs sont sur un autre ordi ... mais je les posterai.
de 3 à 6 entrées analogiques (suivant le nombre de capteurs : tension, intensité, température etc..)
1 entrée digitale pour le bouton de démarrage de la séquence
1 ou 2 autres entrées digitales pour la vitesse : fourche optique et/ou à effet hall
1 sortie pour le contrôleur
4 sorties pour la carte SD
Le compte est bon pour un UNO.
En fait mon problème est la répartitions des broches vis à vis des sketchs, exemple pour la carte SD suivant les sketchs que je trouve certains utilisent 10, 11, 12, 13 et d'autres 4, 11,12,13 !! par contre je ne vois pas comment passer de 4 à 10 ou inversement !! Dans la librairie ???
Voilà mes deux sketchs :
[ /* Dom22 01-2017
* Acquisition de 6 entrées et stockage sur carte SD d'un fichier .csv
* pour la récupération des données sur EXCEL et affichage de courbes
* https://tutoarduino.com/les-cartes-sd/
* ** MOSI - pin 11
* ** MISO - pin 12
* ** CLK - pin 13
* ** CS - pin 4
*/
#include <SPI.h>
#include <SD.h>
File fichierSD;
int sensorValue1 ;
int sensorValue2 ;
int sensorValue3 ;
int sensorValue4 ;
int sensorValue5 ;
int sensorValue6 ;
long tension ;
long intensite ;
long puissance ;
int vitesse ;
int option1 ;
int option2 ;
void setup() {
Serial.begin(9600);
sensorValue1 = analogRead(A0);
sensorValue2 = analogRead(A1);
sensorValue3 = analogRead(A2);
sensorValue4 = analogRead(A3);
sensorValue5 = analogRead(A4);
sensorValue6 = analogRead(A5);
tension = sensorValue1;
intensite = sensorValue2;
puissance = tension * intensite;
// Initialisation de l'instance
if(!SD.begin(4)) {
Serial.println(F("Initialisation impossible !"));
return;
}
Serial.println(F("Initialisation OK"));
}
void loop() {
Serial.print(tension); Serial.print(" ; "); // Affichage U sur le moniteur série
Serial.print(intensite); Serial.print(" ; "); // Affichage I sur le moniteur série
Serial.print(puissance); Serial.print(" ; "); // P=UI
Serial.print(vitesse); Serial.print(" ; "); // Affichage V sur le moniteur série
Serial.print(sensorValue4); Serial.print(" ; ");
Serial.print(sensorValue5); Serial.print(" ; ");
Serial.print(sensorValue6); Serial.println(" ; ");
fichierSD = SD.open("domi.csv", FILE_WRITE); // Ouverture du fichier
if(fichierSD) { // Vérification de présence du fichier
fichierSD.print(tension); fichierSD.print(" ; "); // Ecriture de U dans le fichier
fichierSD.print(intensite); fichierSD.print(" ; "); // Ecriture de I dans le fichier
fichierSD.print(puissance); fichierSD.print(" ; "); // Ecriture de P dans le fichier
fichierSD.print(vitesse); fichierSD.print(" ; "); // Ecriture de V dans le fichier
fichierSD.print(sensorValue4); fichierSD.print(" ; ");
fichierSD.print(sensorValue5); fichierSD.print(" ; ");
fichierSD.print(sensorValue6); fichierSD.println(" ; ");
fichierSD.close(); // Fermeture du fichier
}
delay(1000);
}]
Pilotage moteur :
[ /* Dom22 01-2017
* Créé entièrement puisque pas trouvé d'exemple après de longues heures de recherche
* Essai 2 : donner directement à i la valeur de la durée d'impulsion
* Gestion Accélération / Vitesse Max / Décélération moteur brushless
* Déblocage du controleur avec une impulsion à 50% ????
* Sans delay la rampe dure environ 7 sec d'accéleration + 3 sec de plateau + 7 sec de décélération
*
*/
#include <Servo.h> // Appel de la library Servo.h
const int APPUI=0; // constante état du BP - appui sur niveau bas
const int PAS_APPUI=1; // constante état du BP - relâché sur niveau haut
const int BP=3; //declaration constante de broche
int ETAT_BP; // variable d'état du bouton poussoir
Servo esc ; // Créé une variable de type Servo et on lui attribue comme nom : esc
void setup()
{
esc.attach(8); // On attribue la broche 8 à la variable esc
esc.writeMicroseconds(1400); // On attribue la valeur min
Serial.begin(9600);
}
void loop()
{
ETAT_BP=digitalRead(BP); // lit l'état du BP et met la valeur 0/1 dans la variable
if (ETAT_BP==APPUI){ // si l'état du BP est appuyé (càd si variable état BP = 0)
{
Serial.print("ETAT_BP : "); Serial.println("Appuye !"); // on l'affiche sur le moniteur
Serial.println("Acceleration pendant 12 secondes !"); // Affiche sur le moniteur la durée de l'impulsion
for(int i=1400;i<1700;i++) // Accélération
{
esc.writeMicroseconds(i); // On génère directement la durée
Serial.print("|");
delay(40); // Rampe d'accélération
}
Serial.println( );
Serial.println("Stabilisation pendant 3 secondes !"); // Affiche sur le moniteur
esc.writeMicroseconds(1700); // Palier à vitesse max
delay(3000); // Durée du palier
Serial.println("Deceleration pendant 12 secondes"); // Affiche sur le moniteur la durée de l'impulsion
for(int i=1700;i>1400;i--) // Décélération
{
esc.writeMicroseconds(i); // On génère directement la durée
delay(40); // Rampe de décélération
}
Serial.println("Arret moteur !");
Serial.print("ETAT_BP : "); Serial.println("Relache !");
}
}
}]
Merci beaucoup Serge.
J'aurais tendance à créer des nappes pour relier mes modules aux cartes et du coup je peux m'en faire une spécifique avec mes 4 broches contiguës et juste deux brins plus long pour le +5V et le GND.
Merci encore.
Dom22
Bonjour.
J'ai avancé un peu cette nuit et tout réuni sur la même carte ;
J'ai gardé mon Arduino avec le câblage "mesures" et j'ai ajouté sans problème le câblage "pilotage moteur".
Ça donne ça :
13 SCK
12 MOSI
11 MISO