Bonjour tout le monde ! Je travaille sur un projet avec des boutons poussoirs dans lesquels se trouve un arduino pro mini , un nrf24l01 et un simple bouton poussoir. Je veux (en tout cas c'est le cas pour le moment ) alimenter ça avec 2 piles AA ou AAA.
En gros quand l'utilisateur appuie sur le bouton, un message est envoyé via le nrf24l01 et est reçu via un boitier doté d'un nrf24l01 et un esp8266. Les messages sont alors transformés en udp et partent sur le reseau pour activer des afficheurs matriciels... Bref tout fonctionne. Au départ j'utilisait des nanos. Puis pour des raisons d'économie d'énergie je suis passé au pro mini. J'ai viré la led d'alim, viré le régulateur et ai ajouté à mon sketch une veille type power down. Sauf que je veux obtenir la config la moins énergivore! Je souhaite donc passer à 1mhz au lieu de 8mhz puisque la conso est relative à la fréquence de fonctionnement n'est-ce pas?
J'ai donc changé les fuses à 0x62 pour diviser par 8, 0xD9 et 0xFF. LE PROBLEME EST QUE MON SYTEME NE FONCTIONNE PAS POUR L'ENVOI DES MESSAGES VIA NRF24L01. Je voie bien que mes appuis boutons font leur travail pourtant.... Pourquoi? Je me doute que ça doit être un problème de vitesse de comunication entre le nrf24 et l'arduino mais je ne comprends pas comment y remédier? Queslqu'un peux t'il m'aider?
Normal, avec une horloge divisée par 8, le débit de l'UART est divisé par 8.
Tu vas aussi avoir des problèmes avec millis(), les PWM enfin tout ce qui utilise les timers.
Il faut créer un nouveau type de carte dans board.txt qui reprenne la définition de la pro mini avec une horloge spécifiée à 1MHz.
Merci pour votre retour rapide! Je ne suis pas ultra familié avec vos termes... J'ai modifié boards.txt avec un texte adapté d'où j'ai d'ailleurs pu trouver comment jouer sur les fusibles. Dans mon IDE j'ai dans les boards dispo un pro mini avec internal 1mhz. J'upload via le prorammateur usbasp. Je ne voie pas où je peux modifier des valeurs type millis etc.... Auriez vous un exemple ? Que je puisse comprendre de quoi il s'agit? Ou puisje copier la def du pro mini pour le nommer promini1mhz en ne modifiant que la fréquence dans le texte?
Je viens de regarder un peu plus en profondeur. Il faudrait aussi adapter le bootloader.
Le plus simple serait d'installer le support des MiniCore de MCUdude

Ils supportent toute les ATmega8, ATmega48, ATmega88, ATmega168, ATmega328 de 20MHz à 1MHz.
Ok ça me plaît j'avais commencé par là. Mais je ne comprenais pas comment faire. J'ai bien dans les boards les minicore. Mais quand j'essayais de uploader mon sketch ça ne fonctionnait. Mais j'ai a peine découvert ce matin que je devais utiliser "televerser avec le programmateur". Comme une andouille j'avais testé avec arduino uno as isp et j'ai ensuite acheté le usbasp pensant que j'avais un souci technique. Donc maintenant que j'ai compris que je devrais uploader via le programmateur et que tu me reparle de ce minicore que j'avais installé il y a un petit moment je suis plein d'espoir !! Je teste demain matin et te fais un retour ! Merci+++
Bonjour,
Tu peux aussi téléverser avec le bootloader, mais il faut installer le bootloader de minicore avec 'graver le bootloader'
Bonjour ! Alors j'ai choisi minicore internal 1Mhz, j'ai gravé le bootloader et j'ai ensuite téleversé avec le progeammateur mon scketch habituel et..... toujours pas de focntionnement du nrf24l01. Si je fais marche arrière a savoir repasser en pro mini 8mhz ça fonctionne desuite..... Une idée les amis? voici mon script :
#include <SPI.h>
#include <RF24.h>
#include <EEPROM.h>
#include <LowPower.h>
#define pinCE 7
#define pinCSN 10
#define tunnel "PIPE1"
#define pinButton 3
#define pinConfigButton 2
RF24 radio(pinCE, pinCSN);
const byte adresse[6] = tunnel;
char message[15];
int configPressCount = 0;
int transmitPressCount = 0;
unsigned long buttonDownTime = 0;
bool isConfigMode = false;
int mode = 0;
unsigned long lastConfigButtonPress = 0; // To manage debouncing
void setup() {
ADCSRA &= ~(1 << ADEN); // Disable ADC
pinMode(pinButton, INPUT_PULLUP);
pinMode(pinConfigButton, INPUT_PULLUP);
radio.begin();
radio.openWritingPipe(adresse);
radio.setPALevel(RF24_PA_MAX);
radio.stopListening();
// Load values from EEPROM
mode = EEPROM.read(0);
transmitPressCount = EEPROM.read(1);
attachInterrupt(digitalPinToInterrupt(pinButton), buttonPress, FALLING);
attachInterrupt(digitalPinToInterrupt(pinConfigButton), configButtonPress, FALLING);
}
void loop() {
LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
if (digitalRead(pinButton) == LOW) {
buttonDownTime = millis();
while (digitalRead(pinButton) == LOW) {
if (millis() - buttonDownTime >= 3000) {
mode = (mode + 1) % 2;
EEPROM.write(0, mode); // Save to EEPROM
radio.powerUp();
sprintf(message, "mode%d", mode + 1);
radio.write(&message, sizeof(message)); // Send mode change message
radio.powerDown();
buttonDownTime = 0;
delay(1000);
return;
}
}
clickFunction();
}
if (digitalRead(pinConfigButton) == LOW && millis() - lastConfigButtonPress > 300) {
configClickFunction();
lastConfigButtonPress = millis();
}
}
void clickFunction() {
if (isConfigMode) {
configPressCount++;
radio.powerUp();
strcpy(message, "plus");
radio.write(&message, sizeof(message));
radio.powerDown();
} else {
radio.powerUp();
if (mode == 0) {
sprintf(message, "gfu%dopen", transmitPressCount);
} else {
sprintf(message, "gfu%dcb", transmitPressCount);
}
radio.write(&message, sizeof(message));
radio.powerDown();
}
}
void configClickFunction() {
radio.powerUp();
if (isConfigMode) {
strcpy(message, "finconfig");
transmitPressCount = configPressCount;
EEPROM.write(1, transmitPressCount);
isConfigMode = false;
} else {
strcpy(message, "config");
isConfigMode = true;
configPressCount = 0;
}
radio.write(&message, sizeof(message));
radio.powerDown();
}
void buttonPress() {
// reveil.
}
void configButtonPress() {
// reveil
}
Salut tout le monde !!! Alors finalement de 9h à 17h54 j'ai cherché, testé recherché j'ai même chnagé pour tester sur de l'attiny84 pour me changer les idées ![]()
...
Et là le miracle!!! Je me suis rendu compte que dans la librairie RF24 et surtout dans le fichier RF24config.h se trouve la valeur 10000000hz pour le SPI. Je l'ai divisé par 8 (1250000) et le tour est joué!! Merci d'avoior pris du temps pour m'aider. voici les lignes à modifier ![]()
`
/** @brief The default SPI speed (in Hz) */
#ifndef RF24_SPI_SPEED
#define RF24_SPI_SPEED 10000000
#endif
``
Plutôt que modifier la librairie ,qui fonctionnera lentement la prochaine fois que tu l'utiliseras avec une carte "standard", il aurait mieux valu faire #define RF24_SPI_SPEED 1250000 dans ton code avant l'include de la librairie. Comme ça, la modification de la vitesse de transfert ne s'appliquerait que pour ce besoin particulier.
Entendu trés bonne idée. J'était parti pour m'embeter effectivement. Merci du tuyau ![]()
![]()
Nouveau.... Je ne comprends pas... J'ai mon pro mini 3.3v. le low fuse en 0x62 (division par 8 de l'hotloge interne 8mhz) le régulateur de tension enlevé, la led de marche enlevée et dans mon script j'ai les veilles et power down. Ah oui j'ai le BOD desactivé . Je tourne sur 2 piles AAA. Et alors que je suis encore a 2.7v mon systeme n'envoi plus les messages par le nrf24l01..... J'y suis depuis des semaines à tout tenter et je ne comprends rien. Help please
Salut.
Il serait étonnant qu'un AtMega328 à 1MHz ne tourne pas à 2.7V, mais il est vrai que l'on est à la limite de la datasheet :
2.7V to 5.5V for ATmega328P
Il serait bien de le vérifier avec un sketch simple, blink par exemple.
Côté NRF24L01, pas de souci :
VDD Supply voltage 1.9 3.6 V
Une autre piste : le NRF24L01 réclame 11mA en émission. Il se pourrait que les piles soient incapables de fournir ce courant dans un état de décharge assez profond. Il faut donc faire une mesure de tension en émission.
Question subsidiaire : quelle est la consommation de l'AtMega328 à 1MHz ? en mode actif et en mode veille, alimenté par deux piles neuves.
Les piles alcalines présentent une courbe de décharge assez pentue et passent rapidement en dessous de 1.2V :
Je ne pense pas que ce soit un bon moyen d'alimenter un AtMega328, étant donné que la tension chute rapidement, alors que la pile conserve conserve encore une capacité importante.
Etudier le cas des batteries (NI-MH à faible auto-décharge, ou LIFEPO4) ne ferait pas de mal.
Quelle autonomie vises tu ?
Salut alors en fait je tente de concurrencer le système d'un ingénieur en électronique qui est spécialiste des modules radio en Espagne il a équipé la plupart des musées de petits capteurs d'humidité de sa fabrication pour surveiller les tableaux . Et à côté de ça et il propose des boutons qui fonctionnent sur deux piles AA permettant de faire des appels caisse dans les magasins : caisse ouverte numéro 1 , caisse ouverte numéro 2 exetera. Donc on travaille avec lui dans notre entreprise pas de souci sauf que je me suis mis comme défi de proposer quelque chose d'un peu plus high-tech sans rentrer dans les détails je transforme des ordres des boutons via un ESP 8266 qui les reçoit et qu'il est balance sur le réseau en UDP. Pour le moment mes boutons tiennent à peine un jour et demi. J'ai essayé plein de montages différents même avec 4 piles AAA je ne vais pas plus loin qu'une semaine. Cet après-midi je suis passé de l'Arduino pro mini à l atmega328p en standalone a 8mhz avec le meme script et montage. Je vais voir ce que ça donne mais donc pour répondre à ta question je souhaiterais que ça tienne au moins 3 mois mais vraiment minimum. Pour ce qui est des mesures je suis pas bien organisé il faut effectivement que j'en fasse.
J'ai plusieurs montages équipés de PRO mIni 8MHz et NRF24L01, avec capteur de température / humidité ou capteur de présence, alimentés par Lithium Ion 16340 650mAH. L'autonomie est de 20 à 21 mois.
Je ne vois pas ce que tu recherches avec des piles.
Et bien faire changer 2 piles a des caissiers ou en tout cas a des gens a qui il tarde de terminer la journée et de partir ça reste faisable. Il fait que se soit simple. J'ai l'expérience du sav pour nos ecrans d'affichage dynamique et sur 9 magasins sur 10 dès que tu demandes à un employé de faire des manips c'est le bout du monde. Selon ton principe de batterie comment pourrait-on procéder à une charge facile ?. Tu me diras je pourrais faire des boutons brancher sur une allume 5 volts c'est ce que j'avais fait dans un premier temps et dans les magasins avec lesquels on bosse souvent même une prise électrique est compliqué à trouver. Et puis tout simplement je vois par-ci par-là des gens qui expliquent que sur des simples piles comme les miennes ils arrivent à tenir un an deux ans trois ans pour des capteurs d'humidité ou des choses dans le genre c'est pour ça que j'aimerais arriver au moins à quelques mois sachant que mes appareils consomme sans rien que je fasse c'est-à-dire sans même émission de message radio si je le laisse tel quel lendemain ou le surlendemain tu es sûr que je me retrouve avec un système qui ne fonctionne plus alors que la veille ça marche du feu de dieu
Bonsoir
changement de pile souhaité ?
Une foiss optimisé ton montage vois du côté des piles lithium 3V CR123A (environ 1500mAh, faible autodécharge, faible résistance intrerne...) Tu pourrais faire l'impasse sur le régulateur de tension = alimenter directement le monage en 3v
(pour info : je viens de démonter et désosser une installation Vérisure ; partout des CR123A de marque GP (courbes de décharge ici) : détecteurs d'ouvertures de porte, clavier + NFC, sirène, et même la caméra ....)
La famille ATmega n'est sans doute pas le meilleur choix pour ce genre de tâche. C'est bien pour faire joujou mais si tu cherches des performances particulières, il faut creuser un peu plus et trouver LE CPU qui répond à ton besoin particulier.
Il y a des processeurs plus récents avec un courant de veille bien plus bas et tu pourrais peut-être en trouver un qui intègre aussi la liaison HF.
Bonsoir. Sur mon montage pro mini j'ai viré le regulateur et la led. Le nrf24l01 et l'arduino pro mini sont en parallèle sur les 3v des 2 piles. J'ai du mal a comprendre pourquoi alors qu'aucune action sur mes boutons qui déclenchent l'envoi des message n'est fait les piles se déchargent. Je vais voir cette pile CR ce que ça donne mais si qqn peut voir si mon script est bien optimisé ça me rassurerai...j'avoue avoir soumis mon script a chatgpt et selon l'ia il serait parfait pour etre lowpower....
Entendu je vais voir ça. J'avoue etre un peu perplexe par rapport au nombre incroyable de tutos montrant des montages arduino qui durent super longtemps sur des piles alcalines. Je fais pas une fixette dessus mais ya des bizarreries. A la limite un nano en 6v avec le nrf24 sur 2 des 4 piles pour faire 3v dure 1 semaine. Je devrais m'attendre a au moins la moitié de durée sur le pro mini sans regul en 3v non? Depuis 17h j'ai mon montage atmega standalone en test. Suspense

