Nouvelle discussionNouveau message Derniers messages Recherche forum
467 messages.      42 43 44 45 46 47 - Arduino pour l'assistance d'un VAE [31032]
Peter
21-07-2024 à 16h13
Acceder au profil du membre
En faite je me suis trompé ! Ce n'est pas dans le code Github mais dans la version du code que tu avais publiée le 3 Juillet.
C'est peut-être une fausse manip de ma part.
Ligne 409 et 414.
dans le code Github ligne 435 et 440 c'est bien dé-commenté donc no problemo

19423 msg, 48 ans. (-77). [mon blog]
 Citer Alerter [752078]

Message modifié le 2024-07-21 16:16:06 par Peter.
Peter
22-07-2024 à 12h54
Acceder au profil du membre
Salut j'ai fais un test avec le petit vélo et le code qui fonctionne très bien sur mon Madrid.
J'ai adapté les constantes et il fonctionne très bien aussi sur le petit vélo avec le capteur de Couple.
Le code est très simple et presque à ma portée.
C'est un ancien code PAS_to_Throttle pulse, il ne contient que 67 lignes.
Heureusement que Soupaloignon l'avait développé correctement du coup c'est plus facile pour ensuite jouer avec et surtout appréhender l'Arduino.

code By Chris 74
// constantes matérielles
const int PASPin = 2; // entrée venant du PAS
const int ledPin = 13, PWMOut=3; // Broche à laquelle la LED est attachée et la broche de sortie PWM

// constantes du logiciels

const int startPulses = 6; // Nombre d'impulsions PAS nécessaires avant la mise en marche
const unsigned long activityTimeoutMS = 350; // Temps d'inactivité du signal PAS autorisé avant de s'éteindre
const int lowPWMValue = 56, highPWMValue = 170; // Valeurs PWM pour piloter l'entrée de l'accélérateur, par défaut 56 (1,1 V) et 170 (3,4 V), U=n/255*5V, n=U/5V*255

// Variables
volatile int inputEdges = 0; // compteur du nombre d'impulsions depuis la dernière remise à zéro
volatile unsigned long lastEdgeTime = 0; // horodatage de la dernière impulsion PAS
bool state=false; // variable contenant des informations sur l'état de la sortie

//initialisation qui ne s'effectues qu'une fois
void setup() {
pinMode(PASPin, INPUT_PULLUP); // initialize the PAS pin as a input (pullup !)
attachInterrupt(digitalPinToInterrupt(PASPin), pulse, RISING); //Each rising edge on PAS pin causes an interrupt
pinMode(ledPin, OUTPUT); // initialize the LED as an output
pinMode(PWMOut, OUTPUT); // initialize the PWM pin as an output
Serial.begin(9600); // initialise le moniteur série
}

// boucle de répétition
void loop() {
//Si le signal PAS est inactif trop longtemps, éteignez tout
unsigned long curTime=millis();
if ((curTime > lastEdgeTime + 250)&&((curTime - lastEdgeTime) > 100)) {
turnOff();
}

//Si le système est éteint, vérifier si les impulsions sont actives
if ((!state)&&((millis() - lastEdgeTime) <  activityTimeoutMS)) {
//si les impulsions sont actives, vérifiez s'il y avait suffisamment d'impulsions pour allumer
if (inputEdges > startPulses) {
turnOn();
}

}

//Utilisation LED pour l'état
digitalWrite(ledPin, state);
}
//Turn off output, reset pulse counter and set state variable to false
void turnOff() {
detachInterrupt(digitalPinToInterrupt(PASPin)); // desactiver interrupt, uniquement pin concernée
analogWrite(PWMOut, lowPWMValue);
inputEdges = 0;
state = false;
attachInterrupt(digitalPinToInterrupt(PASPin), pulse, RISING); // reactiver interruption
}

//Activer la sortie et définir la variable d'état sur vrai
void turnOn() {
analogWrite(PWMOut, highPWMValue);
state=true;

}

//Interrompre le sous-programme, actualiser l'horodatage de la dernière impulsion et incrémenter le compteur d'impulsions (jusqu'à ce que 10000 soit atteint)
void pulse() {
lastEdgeTime=millis();
if (inputEdges <  100) {
inputEdges++;
}
}


Patrick tu peux l'essayer même s'il ne donne pas de proportionnalité, il permet de faire fonctionner le vélo en mode PAS.

J'ai également essayé de réécrire le code à ma façon, en m'inspirant de ce dernier et en n'utilisant que les parties du code qui me semble essentielles et que j'arrive à bien comprendre.
Résultat aucune assistance

J'ai l'impression d'avoir compris un truc essentiel, mais peut-être que j'ai tout faux.
J'ai l'impression que dans ce code on utilise l'activation de la led pour dire qu'on peut activer la sortie PWM.
Si la led est éteinte (LOW), nano écrit la valeur basse (56bits) sur PWMOut.
Si la led est allumée (HIGH), nano écrit la valeur haute (170bits) sur la sortie PWM.
Ce qui est déroutant pour moi c'est dans void loop le traitement de la désactivation ou de l'arrêt des fonction avant l'activation.
Mon cerveau marche dans l'autre sens et veut traiter en premier l'activation de la LED par exemple, puis dans les lignes suivantes la désactivation.

19423 msg, 48 ans. (-77). [mon blog]
 Citer Alerter [752087]

Message modifié le 2024-07-23 09:13:11 par Peter.
publicité
22-07-2024 à 12h54
Creation du fichier https://cyclurba.fr/fichier/pub_log.txt
Lien commercial -303-


Peter
22-07-2024 à 14h10
Acceder au profil du membre
Je viens également de tester le code de Soupaloignon PAS_to_Throttle Proportionnel.
Celui-là avec ses 315 lignes est beaucoup moins à ma portée, même si je comprends les lignes de code, de moi même je n'aurais jamais pu écrire cela.
Il fonctionne aussi super bien et je dois dire bien mieux que sur mon Madrid.
Il y a une option pour installer une gâchette d'accélérateur sur le nano, mais perso je ne l'utilise pas.
Il suffit de mettre à 0 les constantes que l'on ne veut pas utiliser comme pour le code Tork.
Sur mon petit vélo difficile de voir si la proportionnalité est efficace mais une chose est sûr le vélo fonctionne très bien

github.com

Voici juste la partie ajustable du code le reste est sur la page Github au dessus

/******************************************************************
Created with PROGRAMINO IDE for Arduino - 02.06.2023  10:21:23
Project     :
Libraries   :
Author      :  Chris74

Description :  e-bike PAS to Throttle

*** Github (code, diagram, infos and more) :  github.com 


- Forum Cyclurba : cyclurba.fr #msg742211

- Doc PAS ebikes.ca (Signal Types for Basic PAS Sensors) ebikes.ca 

- Divers : RC Low-pass Filter Design Tool sim.okawa-denshi.jp 


******************************************************************/

// Install  librairy with Arduino IDE librairy manager or manual (see url)

#include < RunningMedian.h>  // filtre median ou moyennage  github.com  



// -------- GPIO Arduino Uno/Nano --------------

const int PAS_PIN = 2;   // interrupt (0)  : input from PAS
const int LED_PIN = 13;  // 13 = LED_BUILTIN (controle)

const int PWM_PIN = 3;  // PWM output pin --> to e-bike controler
// PWM signal 490,20 Hz on D3, D9, D10, (or D11 but not on all Nano)
// PWM signal 976,56 Hz on D5 or D6

const int THR_PIN = 0;   // -- THROTTLE A0 (if needed, not mandatory)



// -------- SETTING CONSTANTS (if const float use decimal !) ------------------------

#define USE_PROPORTIONAL    1   // use proportional assistance ? 1=yes, 0=no (if no, use only On-Off assistance with full PWM)
#define INVERSE_ASSISTANCE  0   // if proportional, inverse assistance ? 1=yes, 0=no (if yes, slow pedaling = more assistance !)
// Si inverse, envois plus d'assistance en pédalage lent qu'en pedalage rapide !

#define USE_THUMB_THROTTLE  0   // thumb throttle instaled (see diagram) ? 1=yes, 0=no (throttle priority on the PAS !)

const int  NB_MAGNETS =  32;     // How many magnets on PAS ?  (default 6)

const float V_REF =     5.02;   // Arduino +5V pin reference (=PWM high level) - To test! (default 5.00)
const float V_MIN_THR = 1.10;   // throttle out min voltage (default 1.1V --- no push)
const float V_MAX_THR = 3.40;   // throttle out max voltage (default 3.5V --- full  push)

// thumb throttle (if instaled) --> ADC value, see debug Serial in loop !
const int   TR_ADC_MIN    = 220;    // throttle min (no push) - marge ajoutee dans map()
const int   TR_ADC_MAX    = 859;    // throttle max (full push) - marge deduite dans map()
const int TR_ADC_MARGIN   = 15;     // margin throttle before send signal PWM and as a deduction of TR_ADC_MAX

const int  RPM_TO_START = 5;   // How many RPM to start assistance ? (with default 10, start is normally fast enough)
// --> more rpm = less ms

const int START_PULSES  = 2;    // Number of pulses (magnet) needed before turning On (0 = fastest)

// if use_proportional, RPM value for maping PWM out --> cf map() in void turnOn()
const int RPM_MIN = 5;         // min rpm  (default 25rpm)
const int RPM_MAX = 65;         // max rpm  (default 65rpm)

// interval timer loop: Check RPM, Turn Off, and debug Serial
const int SCAN_INTERVAL = 200;   // default 250, if assistance cut too fast when stop pedaling, put const to ~500ms or 1000ms





Tout ceci est dispo en libre accès sur la page perso Github de Chris74 dont le lien est inclus au code

19423 msg, 48 ans. (-77). [mon blog]
 Citer Alerter [752088]

Message modifié le 2024-07-23 08:54:36 par Peter.
Moabdelwanis
07-04-2025 à 06h41
Bonjour à tous d'Egypte !: Coucou:

Tout mon respect et mon amour pour le peuple français. J'ai utilisé un traducteur pour écrire ceci en français; Veuillez me pardonner s'il y a des erreurs.

Je tiens à remercier Soupaloignon et Peter Patlec pour cette discussion incroyable, fantastique et informative. Je voudrais améliorer mon véhicule, mais d'abord, j'ai besoin de plus de conseils pour m'assurer que je me dirige dans la bonne direction.

J'ai un élément d'élément promovec avec une batterie 36V 9AH et un moteur avant de 250 W. Actuellement, il n'a pas de fonction de papillon ni de capteur de couple; Il n'a qu'un PAS (capteur d'assistance à la pédale). Je veux y ajouter une fonction de gaz. Aussi, dois-je faire une analyse avant d'aller avec cette modification?

Pourriez-vous s'il vous plaît me guider sur quels référentiels GitHub spécifiques que je devrais examiner pour les fonctions suivantes?

- Accélération au pas
- Bouton à pas
- Pas à la gazon

Aussi, pourriez-vous s'il vous plaît me recommander

Merci!


Anonyme, 2 msg, (FR-12).
 Citer Alerter [759373]
Peter
07-04-2025 à 07h19
Acceder au profil du membre
Boujour et bienvenue.
Pour ton cas il faut suivre la page Throttle to PAS :
github.com

Tu peux déjà faire ce montage qui fonctionnera avec les réglages de bases. Mais il faudra aussi faire des réglages personnalisés et des mesures afin que les constantes soient ajustées pour correspondre exactement à ton vélo. Il faut connaître le signal que demande le capteur PAS et aussi la plage de fonctionnement de la gâchette d'accélérateur ainsi que la tension précise de l'alimentation 5v.
Suis bien toutes les étapes décrites par Chris741233, les schémas et les explications sont très claires et bien détaillées.
Je te conseil d'utiliser un convertisseur de tension 48v/9v où 7v pour alimenter ton circuit Arduino.
Tu pourras utiliser le +5v de l'Arduino pour alimenter le PAS et la gâchette.
N'utilises pas le +4,2v du contrôleur pour alimenter le circuit Arduino car il risque de griller le régulateur de tension +5v de ton contrôleur.
N'utilises pas d'alimentation 12v pour le circuit Arduino car il risque de griller le convertisseur +5v intégré de l'Arduino.

19423 msg, 48 ans. (-77). [mon blog]
 Citer Alerter [759375]
Moabdelwanis
08-04-2025 à 05h59
Thanks, Peter. I will try to do that. Do you recommend this Throttle Accelerator one, or is there a better one?
Aliexpress

Anonyme, 2 msg, (FR-12).
 Citer Alerter [759385]
publicité
08-04-2025 à 05h59
Creation du fichier https://cyclurba.fr/fichier/pub_log.txt
Pèse vélo de précision
Mesurez le poids de votre vélo et de ses accessoires avec une précision de 10 grammes. Et ce jusqu'à 40 kg. Moins de 15 euros... moi je dis ça, je dis rien ...
cyclurba.fr/Velos_electriques/168/Peson-Pèse-vélo.html
Lien commercial -185-

Peter
08-04-2025 à 07h15
Acceder au profil du membre
Tu peux prendre celle qui te convient le mieux ça n'a pas d'importance.

19423 msg, 48 ans. (-77). [mon blog]
Alerter [759386]
467 messages.      42 43 44 45 46 47 - Arduino pour l'assistance d'un VAE - Lu 26284 fois. [31032]
retour en haut de page Messages récents
Creation du fichier https://cyclurba.fr/fichier/forum_compteur.txt
répondre dans cette discussion
En ce moment sur le tchat

Creation du fichier https://cyclurba.fr/fichier/pub_log.txt
Réparer et entretenir son vélo soi-meme
Lien commercial -181-