Programmation Arduino

Mémoire EEPROM

a marqué ce sujet comme résolu.

Bonjour à tous, je vous présente mon projet : Graisseuse de chaîne de vélo et pour cela nous allons utiliser une seringue, donc avec une partie qui va servir de vérin avec donc un piston. La chaîne doit être graissée tous les quarts d'heure et pour cela le piston doit avancer afin de lubrifier la chaîne. Or lorsqu'on va éteindre le programme le piston va reprendre à 0 et non là où il en était. Pour remédier à cela je dois utiliser la fonction mémoire EEPROM (je suis sur ARDUINO), je me suis mis à Arduino il y a un peu plus d'1 mois seulement donc j'ai du mal encore avec la programmation mais je progresse ! Je ne comprend pas trop comment fonctionne l'EEPROM, si vous pouviez me guider afin d'y arriver je vous en serais reconnaissant ! Merci d'avance à tous !

Et qu'est ce que tu n'arrives pas à faire/ne comprends pas ?

Si tu veux garder la position de la seringue en mémoire il faut que tu enregistres dans l'EEPROM, une "valeur" représentant sa position avec la fonction:

EEPROM.write(600, 42); //adresse = 600, valeur = 42 (extrait du tutoriel sur la gestion des mémoires sur Arduino)

Puis lorsque tu as besoin de connaître la position du piston, tu retournes lire la valeur dans l'EEPROM à la même adresse avec la fonction:

unsigned char donnee = EEPROM.read(600); //adresse = 600

Içi, tu viens lire la valeur à l'adresse 600 que tu enregistres dans la variable "donnee" de type "unsigned char". Si ta valeur ne tient pas sur 8 bits (c'est à dire qu'elle est supérieur à 255), tu dois utiliser une autre méthode un peu plus compliqué.

+2 -0

int motor1Pin1 = 3;
int motor1Pin2 = 4;
int enablePin = 9;

void setup() {

pinMode(motor1Pin1, OUTPUT); pinMode(motor1Pin2, OUTPUT); pinMode(enablePin, OUTPUT);

digitalWrite(enablePin, HIGH); }

void loop() { // Le moteur tourne dans un sens digitalWrite(motor1Pin1, LOW); digitalWrite(motor1Pin2, HIGH);

delay( 3000 ); // Attendre 3 secondes

// Le moteur tourne dans l'autre sens digitalWrite(motor1Pin1, HIGH); digitalWrite(motor1Pin2, LOW);

delay( 3000 ); // Attendre 3 secondes }

Voilà mon programme pour l'instant mais je n'arrive pas à réaliser le montage avec le pont en H…

Alors ça ne sert à rien de se lancer dans la programmation tout de suite :)

Tu t'es basé sur un schéma en particulier ? Si je comprends bien, tu veux utiliser un moteur DC monté sur un pont en H pour le piloter dans les 2 sens, pour une application qui requiert un maintien de position ?

Si il s'agit bien d'une "position" et non d'une "vitesse de rotation" alors je pense que tu devrais te tourner vers autre chose qu'un moteur DC. Les moteurs DC permettent de faire de la variation de vitesse, et ne sont pas très bien adapté pour des applications de "positionnement", tu devrais te tourner vers un servomoteur où un moteur pas à pas, bien que ces derniers soient un peu plus compliqué à mettre en oeuvre.

Tu pourrais fournir un schéma de ton montage ? Avec la référence des composants que tu utilises.

Non je n'ai pas de schéma en particuliers et le moteur DC n'est là que pour tester le programme ^^ Il me faut un moteur qui pousse mon piston de la seringue (avec quelque chose comme un système vis écrou + glissière ) afin de lubrifier la chaîne de vélo. J'aurai plus d'information à vous donner demain ! Merci :)

Si c'est utile, on s'occupera de la partie EEPROM après, mais j'ai une question bête d'abord: si tu utilises un système de vis sans fin pour faire avancer ton verrin, mécaniquement, quand l'arduino est éteint, le système ne bouge pas, il n'est pas utile de mémoriser sa position. A quoi va servir l'EEPROM ?

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte