Mesurer tension batterie avec rpi


#1

Bonjour j’ai trouvé un code que je voudrai utiliser pour savoir combien j’ai de tension dans ma batterie, j’utiliserai un ACS712 avec un MCP3008

import spidev
from time import sleep
import os

spi = spidev.SpiDev()
spi.open(0,0)
acs712 = 0

def getReading(channel):
-rawData = spi.xfer([1, (8+channel) << 4, 0])
-processedData = ((rawData[1]&3) << 8) + rawData[2]
-return processedData

while True:
-data = getReading(acs712)

Je n’ai aucun moyen de tester ce code car c’est un projet scolaire et je n’ai pas les affaires chez moi donc quelqu’un pourrai me dire ce code à l’air bon et me dire comment le finir pour activer quelque chose à un seuil, allumer un LED à 50% par exemple. Je ne suis pas très bon ce serai bien si vous pouviez m’expliquer un peu en détail svp.
EDIT:j’ai mis des “-” pour l’indentation


#2

Le code ressemble à quelque chose à ceci près qu’il manque le décalage (indentation).
C’est déjà possible de tester la syntaxe en lançant le programme sur un pc.
Par la suite, tu auras une erreur d’import si tu n’est pas sur un raspberry.
Ce que je me demande, c’est à quoi sert ton script si tu n’as pas de rpi sous la main ? Tu ne peux vraiment pas même en emprunter un ?


#3

Merci, pourrai tu m’expliquer ce qu’est ce décalage stp?
Et non je ne peux pas car personne dans mon entourage n’en a il faut que je m’en achète un et comme je l’ai c’est pour un projet scolaire voila l’utilité.


#4

Dans un script python, certaines parties doivent être décalées vers la droite pour former des blocs. C’est le cas pour les lignes qui suivent def, et while.
Mais je crains que tu doives bosser un peu pour apprendre le langage python si tu veux aller plus loin. Lis le tutoriel officiel ; en un weekend à peine, tu auras les réponses à tes questions.


#5

Ah oui xD c’est de CE décalage dont tu me parlais, non ça je le sais pas de problème là dessus (c’est juse que j’ai du mal avec la mise en forme du texte je vais essayer de le régler)
Ce que je voudrai savoir en fait c’est que j’aurai une valeur après ça si je met print(data) mais comment savoir après à quoi celà correspond?


#6

Bonjour,

En théorie, en mode édition du topic, sélectionner le texte du programme et cliquer sur l’icône “</>” Texte préformaté.

A+


#7

Il faut regarder dans la doc du module spidev


#8

Ok merci @jmbc et merci @jelopo x)


#9

Bonjour


j’ai ça juste pour savoir si j’ai bien compris car je ne suis pas trop sur, j’ai bien maximum 8V pour entrer et 185mV/A, donc je dois baisser la tension de ma batterie jusque 8V et par exemple si j’ai maximum 10A sur ma batterie j’aurai 1850 d’écris si je fais un print(data)? et de la je pourrai ramener en pourcentage?


#10

Bonjour,
1°) l’ACS712 est un capteur d’intensité, pas de tension. Si tu le branches directement sur ta batterie, tu vas le cramer.
le MCP 3008 est un capteur de tension avec sortie digitale. Si c’est une tension que tu veux mesurer, il est suffisant. Si c’est un courant, c’est effectivement le bon convertisseur pour lire la sortie de l’ACS712.
Es-tu sûr de savoir ce que veux-tu mesurer ?
2°) le programme semble correct, et le modèle 20A de l’ACS712 a bien un rapport de sortie de 185 mV/A.
3°) les tutos pour allumer une led ne manquent pas. exemple : http://nagashur.com/blog/2013/01/01/controler-une-led-depuis-les-ports-gpio-du-raspberry-pi/


#11

Il faut que je trouve quelque chose pour comme dans les telephones donne un pourcentage de la batterie et quand j’ai vu que certains utilisaient ça je me suis dit ok il me faut ce composant et merci pour le 2 tu me rassure x)


#12

Je ne suis pas un spécialiste de ce genre de montage, mais je crois que dans les téléphones ils ont à la fois un ampèremètre monté en série sur la batterie, et un voltmètre monté en parallèle.
Le voltmètre va permettre de détecter les états extrêmes (batterie complètement chargée et batterie complètement déchargée). Par exemple pour une batterie de voiture, 12V alors que le courant débité est faible = batterie déchargée ;
L’ampèremètre va permettre de calculer la capacité de la batterie lors d’une charge totale, et de calculer l’état de charge.
Donc il te faut utiliser une entrée du MCP3008 pour mesurer la tension, et une entrée pour mesurer en permanence le courant. Et ton programme doit faire le cumul des ampères débités par seconde pour connaître l’état de charge.

C’est un beau projet, tu vas avoir du boulot.
Maintenant dans un premier temps, tu peux peut-être simplifier en utilisant quelques règles simples, du genre :

  • si tension <12,6V avec courant de décharge<1A, j’allume la LED
  • sinon si tension <12,3V, j’allume la LED

#13

Ça a l’air assez compliqué :sweat_smile: la tension est sensé être à 12v non? Pourquoi 12,6? Et sinon pour faire plus simple peut-on utilisé seulement la tension pour mettre un pourcentage? (Même si ça serai beaucoup moins précis c’est pas grave) si oui comment je pourrai faire? Le programme serai changé de beaucoup? (Dsl j’ai beaucoup de question mais j’ai pas beaucoup de niveau je ne suis qu’en terminal) x)


#14

En réponse partielle à ton dernier message, je crois qu’il te serait très profitable de lire la fiche wikipedia sur les batteries au plomb et leur charge :


De même, une petite recherche sur le web avec des mots clés “recharge batterie montage électronique” te donnera plein de réponses sur ce sujet.
Oui tu peux utiliser la tension pour calculer un pourcentage, mais le résultat ne sera pas digne de confiance. Si tu veux quelque chose de sérieux, tu dois tenir compte des explications de jmt et autres. À la question “comment faire”, je te conseille de reprendre tes cours de math qui contiennent toutes les explications voulues ; demande conseil à ton prof, et si tu restes dans le brouillard, reviens vers nous avec ce que tu auras compris d’un côté, et les points restant obscurs de l’autre.


#15

merci jmbc je ferai de mon mieux je reviens si je suis bloqué x)
EDIT: non ça le fait pas j’ai du mal, je pense que je vais le faire qu’avec la tension (on me met tellement de pression je suis pas bien…) du coup avec le code en haut je lis une tension si je connecte la batterie au MCP3008 (avec un pont diviseur pour pas le cramer bien sur) et donc j’aurai directement la tension ou il y a une conversion à faire?


#17

Bonjour j’aurai besoin d’une information svp pour lire la tension de la batterie, je bloque sur les branchements (je prends le + de la batterie le branche, avec un pont diviseur, au MCP3008 mais je ne suis pas vraiment sur car j’ai vu des choses qui me font douté quelqu’un pourrai validé svp)