%\documentclass[11pt,a4paper]{article} \documentclass[12pt,a4paper,twoside]{scrartcl} % scrartcl est la classe d'articles de Koma-script % qui gère nativement le format A4 ; utilisez article pour un format de papier américain \usepackage[utf8]{inputenc} % gestion d'utf8 \usepackage[french]{babel} % gestion de la langue française \usepackage[T1]{fontenc} % \usepackage{amsmath} % symboles mathématiques \usepackage{amsfonts} % fontes pour les symboles mathématiques \usepackage{amssymb} % jeu de symboles suppélémentaires \usepackage{hyperref} \usepackage{graphicx} % pour mettre des images \usepackage{caption} % pour des légendes \usepackage{lmodern} % fonte spéciale \usepackage{subcaption} % pour les subfigures et les subtables \usepackage{float} % pour placer exactement les figure (utilisation de H) %\usepackage[hyphens]{url} \usepackage[hyphenbreaks]{breakurl} \usepackage{comment} \usepackage{xcolor} \definecolor{editorGray}{rgb}{0.95, 0.95, 0.95} \definecolor{editorOcher}{rgb}{1, 0.5, 0} % #FF7F00 -> rgb(239, 169, 0) \definecolor{editorGreen}{rgb}{0, 0.5, 0} % #007C00 -> rgb(0, 124, 0) \usepackage{upquote} \usepackage[output-decimal-marker={,}]{siunitx} % pour la gestion des unités \usepackage{latexsym} \usepackage{keyval} \usepackage{ifthen} % pour permettre des tests (avec gnuplot) \usepackage{moreverb} \usepackage[siunitx]{gnuplottex} % pour permettre l'utilisation de gnuplot avec siunitx \usepackage{rotating} \usepackage{listings} \lstset{% % Basic design backgroundcolor=\color{editorGray}, basicstyle={\small\ttfamily}, frame=leftline, % Line numbers %xleftmargin={0pt}, % dysfonctionnent numbers=left, stepnumber=1, firstnumber=1, numberfirstline=true, % Code design keywordstyle=\color{blue}\bfseries, commentstyle=\color{darkgray}\ttfamily, ndkeywordstyle=\color{editorGreen}\bfseries, stringstyle=\color{editorOcher}, % Code %language=HTML5, alsodigit={.:;}, tabsize=2, showtabs=false, showspaces=false, showstringspaces=false, extendedchars=true, breaklines=true, % } % %\lstloadlanguages{Python} %\lstset{language=Python,escapechar=|} %\lstset{ literate= {á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1 {Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1 {à}{{\`a}}1 {è}{{\`e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1 {À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1 {ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1 {Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1 {â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1 {Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1 {œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1 {ű}{{\H{u}}}1 {Ű}{{\H{U}}}1 {ő}{{\H{o}}}1 {Ő}{{\H{O}}}1 {ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1 {€}{{\EUR}}1 {£}{{\pounds}}1, escapeinside={(*@}{@*)}, backgroundcolor=\color{lightgray!20!white} } \graphicspath{{./images/}} % nécessaire pour l'import des fichiers eps_tex dans un sous répertoire \author{Guyot Vincent} \title{Physique et informatique} \subtitle{Mesure de résistances, de diodes, de capacités,\\d'un générateur et d'un moteur\\avec Raspberrypi et INA219} \begin{document} \maketitle \renewcommand{\tablename}{Tableau} \tableofcontents \section{But} Il s'agit d'illustrer une chaîne de traitement de mesures physiques d'éléments électroniques par l'intermédiaire du multimètre INA219 branché sur un raspberrypi 4, le traitement des mesures obtenues dans un simple fichier texte étant alors fait directement dans \LaTeX{} à l'aide du logiciel Gnuplot. \section{Théorie} Plusieurs éléments ont été étudiés : \begin{itemize} \item des résistances, \item des diodes, \item des condensateurs, \item un générateur et \item un moteur électrique. \end{itemize} \subsection{Résistance} Pour les mesures de résistance, la physique est très simple. Il s'agit de la loi d'Ohm. \begin{equation} U=R\cdot I \end{equation} Si la physique est simple, le dispositif expérimental nécessaire pour en faire la vérification sera complexe à deux points de vue : \begin{itemize} \item la gestion des incertitudes et \item le transfert des données sur l'ordinateur. \end{itemize} Le rôle de cette expérience au lycée n'est pas dans un premier temps d'explorer une physique complexe. Il s'agit plutôt de montrer que mettre en place une expérience liant physique et informatique est complexe et demande des compétences multiples. Ces compétences vont être amenées par des étudiants en physique et en informatique qui devront collaborer pour mettre en place le dispositif expérimental et les outils d'analyse informatique. \subsection{Diode} Pour les mesures de caractéristique des diodes, la physique ne sera pas abordée autrement que pour indiquer l'existence d'une valeur limite de conduction, l'objectif étant de la visualiser par le diagramme Tension-courant. \subsection{Condensateur} Pour les condensateurs, la physique de la décharge d'un condensateur est étudiée au cours et la constante de temps \(\tau=R\cdot C\) supposée connue. L'INA219 va permettre de réaliser des mesures que l'humain n'est pas capable de faire en raison de la vitesse du phénomène étudié. Ainsi, la décharge de condensateurs de grande capacité pourra être réalisée automatiquement, malgré le temps long nécessaire, mais surtout la décharge de condensateurs de faible capacité deviendra possible en raison de la possibilité de faire des mesures allant jusqu'à moins d'une milliseconde. L'équation au c\oe ur du phénomène est : \begin{equation} U(t)=U_0\cdot e^{t/R\cdot C} \end{equation} Une application intéressante est présentée sous la forme d'un dispositif de détection de touché. L'INA219 n'y est pas utilisé, mais la charge d'un condensateur, sa constante de temps et sa relation à la résistance, soit \(\tau=R\cdot C\) le sont. \subsection{Générateur} Pour le générateur, c'est la résistance interne qui va nous intéresser\footnote{Voir : \url{http://www.learningaboutelectronics.com/Articles/Battery-internal-resistance}.}. Contrairement à un générateur à courant constant\footnote{Voir : \url{http://www.zpag.net/Electroniques/Alimentation/GenCourConstant.htm}.}, qui voit la tension à ses bornes augmenter quand la charge (une résistance par exemple) augmente, un générateur à tension constante\footnote{Voir : \url{http://www.ile-reunion.org/louispayen/cours/generateur-courant-tension.htm}.}, comme une pile ou un accumulateur, voit la tension à ses bornes diminuer avec la charge. En effet, pour un résistance externe qui diminue, si la tension est constante la loi d'Ohm implique que le courant augmente. Or, si le courant augmente, la résistance interne de la pile augmente et donc la tension aux bornes de la pile diminue. \medskip La raison de la décroissance de la tension aux bornes d'un accumulateur ou d'une pile est donc sa résistance interne. Or, celle-ci peut changer non seulement au cours de la décharge de l'accumulateur, mais au cours du temps de vie de la batterie\footnote{Voir : \url{https://www.powerstream.com/internal-resistance.htm}.}. \subsection{Moteur}\label{subsection:moteur} Nous allons réaliser ici l'étude d'un moteur CC, c'est-à-dire d'un moteur à Courant Continu. En substance, il existe quatre types de moteurs : les moteurs à courant continu (voir \cite[p. 96]{MonkS16}), les servo-moteurs (voir \cite[p. 156]{MonkS16}), les moteurs pas-à-pas (voir \cite[pp. 178,179]{MonkS16}) et les moteur brushless. Pour une description des trois premiers moteurs en relation avec le Raspberry pi, voyez l'excellent ouvrage \cite{MonkS16} que je recommande par ailleurs pour toute une série d'autres montages extrêmement intéressants. \begin{figure} \centering %\def\svgwidth{50mm} \input{images/GenerateurReel.eps_tex} \caption[Générateur]{Générateur réel}\label{figure:generateurreel} \end{figure} D'un point de vue électrique, un moteur CC est constitué d'un bobinage permettant de créer un champ magnétique. Or, ce bobinage constitue une résistance électrique qu'il est possible de mesurer. En effet, d'un point de vue théorique, on peut séparer un moteur CC en deux parties. Une partie constituée d'un moteur idéal sans résistance électrique et une autre constituée d'une résistance représentant la résistance interne du moteur. Ainsi, si on considère la tension aux bornes du moteur réel \(U\), on peut écrire l'équation~\ref{equation:tensionmoteur}. \begin{equation}\label{equation:tensionmoteur} U=E'+r_i\cdot I \end{equation} où \(E'\) est la tension, dite contre-électromotrice, au bornes du moteur idéal, \(r_i\) la résistance interne et \(I\) le courant dans le moteur. \smallskip Par ailleurs, un moteur CC a la particularité de produire une vitesse de rotation proportionnelle à sa tension contre-électromotrice selon l'équation~\ref{equation:omegamoteur}. \begin{equation}\label{equation:omegamoteur} E'=k\cdot \omega \end{equation} \smallskip En multipliant l'équation~\ref{equation:tensionmoteur} par le courant, on obtient l'équation~\ref{equation:puissmot} qui nous permet de déterminer avec l'équation~\ref{equation:puissthmecmot} la puissance mécanique théorique du moteur. \begin{align} U\cdot I&=E'\cdot I+r_i\cdot I^2\nonumber\\ P_{elec.}&=P_{mec.}+r_i\cdot I^2\label{equation:puissmot}\\ P_{mec.}&=U\cdot I-r_i\cdot I^2\label{equation:puissthmecmot} \end{align} On voit que la puissance mécanique est une fonction quadratique du courant. On peut donc étudier cette fonction et par dérivation déterminer le courant permettant une puissance maximale, comme le montre l'équation~\ref{equation:imaxmot}. \begin{equation}\label{equation:imaxmot} \frac{dP_{mec.}}{dI}=U-r_i\cdot I=0\;\Rightarrow\;I=\frac{U}{2\cdot r_i} \end{equation} \smallskip Enfin, il est possible de déterminer la puissance mécanique développée par le moteur. \begin{equation}\label{equation:puissexpmot} P_{mec.}=F\cdot v=F\cdot \frac{L}{t}=F\cdot \frac{R\cdot \alpha}{t}=F\cdot R\cdot \frac{\alpha}{t}=F\cdot R\cdot \omega=M\cdot \omega \end{equation} L'équation~\ref{equation:puissexpmot} et le schéma~\ref{figure:axemoteur} permettent d'obtenir la puissance mécanique en sachant que c'est soit la force multipliée par la vitesse linéraire, soit le moment de force multiplié par la vitesse angulaire. On peut donc en connaissant la force exercée par le moteur, qui a la valeur du poids suspendu si la vitesse de celui-ci est constante, sa vitesse de rotation et le bras de levier, c'est-à-dire la distance du centre de l'axe au point d'application de la force, calculer la puissance à partir de mesures simples. On comprends bien que mesurer le poids est simple. Pour la vitesse de rotation et le bras nous verrons dans la description de l'expérience comment le faire. \begin{figure} \centering %\def\svgwidth{50mm} \input{images/AxeMoteur.eps_tex} \caption[Axe]{Axe moteur}\label{figure:axemoteur} \end{figure} \section{Dispositif expérimental} Le dispositif expérimental est présenté la figure~\ref{figure:dispos}. On y voit à gauche le GPIO du Raspberrypi4, au centre l'INA219, la résistance R et le générateur externe à droite. La résistance de shunt permettant à l'INA de mesurer le courant est représentée en noir contre les ports de mesure. Celle-ci doit se placer en mode \og high side \fg{}, c'est-à-dire entre la tension positive du générateur continu (Vin+) et le pôle de tension la plus élevée de la résistance R (Vin-). Ainsi, en reliant la masse du générateur, du pôle de tension la plus basse de la résistance R et le Ground (GND) du GPIO, étant donné la faible valeur de la résistance de schunt (Rs = \SI{0,1}{\ohm}), la précision de la mesure de la tension aux bornes de R va peu fluctuer et sera de meilleure qualité qu'avec une mesure \og low side \fg. \medskip Du côté du bus I2C, à part l'alimentation (VCC 3,3V) et la terre (GND) de l'INA, les données sont transmises par la broche SDA et l'horloge par la broche SCL. \begin{figure} \caption[Rail]{Le RPI4, l'INA219 en mode high side et la résistance R}\label{figure:dispos} \smallskip \centering \includegraphics[scale=0.8]{images/RPI_INA.eps} \end{figure} \medskip La figure~\ref{figure:disposresistanceimage} présente le dispositif expérimental concrètement. L'INA ainsi que les branchements sont montés sur une \og breadboard \fg. On ne voit pas le générateur qui se trouve sur la gauche de l'image. \begin{figure} \caption[Rail]{Le RPI4, l'INA219 et la résistance R}\label{figure:disposresistanceimage} \smallskip \centering \includegraphics[scale=0.9]{images/RPI4_INA_photo_resistance.eps} \end{figure} La figure~\ref{figure:disposcobblerresistanceimage} presente le dispositif expérimental concrètement. La différence avec la figure~\ref{figure:disposresistanceimage} est la présence du T-Cobbler plus, permettant une lecture des fonctions des ports du GPIO et un branchement facilité sur le RPI4. \begin{figure} \centering \includegraphics[scale=0.3]{InaResistCobbler.eps} \caption{INA, résistance et T-Cobbler plus} \label{figure:disposcobblerresistanceimage} \end{figure} \subsection{Résistances} La procédure expérimentale a consisté en cinq séries de mesures successives sur différentes résistances. Les données sont récupérées sur le bus I2C (voir annexe~\ref{annexe:driver}, page \pageref{annexe:driver}) à l'aide du programme Python du listing~\ref{listing:INA}. Il faut relever que le programme enregistre la mesure de la puissance dissipée dans la résistance et suivant la valeur du maximum possible, ici les résistances utilisées étaient des ¼W, annonce le dépassement. Le réglage de la tension se fait en tournant le potentiomètre du générateur et chaque mesure est effectuée en pressant la touche ENTER. La figure \ref{figure:codefonctgraphresistance} présente en arrière plan le code python permettant les mesures de tension en fonction du courant pour une résistance, l'affichage des mesures faites par ce code et le graphe gnuplot correspondant. \begin{figure} \centering \includegraphics[scale=0.25]{softresistance.eps} \caption{Code, fonctionnement et graphe des mesures de résistances} \label{figure:codefonctgraphresistance} \end{figure} Par ailleurs, Gnuplot permettant la réalisation d'un graphe comportant plusieurs courbes pour chaque résistance à partir du même fichier, pour autant que chaque série de données soit séparées par deux lignes vides, le programme utilisé (listing~\ref{listing:INA}) permet de demander une nouvelle série de mesures en pressant la touche n (pour nouvelle) et cela autant de fois qu'on le désire jusqu'à la fin déclarée par la touche q (pour quitter). \begin{lstlisting}[float,language=python,caption={Le code de mesure avec l'INA.},label={listing:INA},numbers=right,numberstyle=\tiny,numbersep=6pt] from ina219 import INA219, DeviceRangeError from time import sleep SHUNT_OHMS = 0.1 #MAX_EXPECTED_AMPS = 2.0 MAX_EXPECTED_AMPS = 0.3 ina = INA219(SHUNT_OHMS, MAX_EXPECTED_AMPS) #ina.configure(ina.RANGE_16V, ina.GAIN_1_40MV) ina.configure(ina.RANGE_16V) max_power_R_mW = 230(*@\label{listing:maxpower0}@*) marchearret = '' def read_ina219(): try: print('Bus Voltage: {0:0.3f}V'.format(ina.voltage())) print('Bus Current: {0:0.3f}mA'.format(ina.current())) if ina.power() < max_power_R_mW:(*@\label{listing:maxpower1}@*) print('Power: {0:0.3f}mW'.format(ina.power())) else: print('!!!! Dépassement de puissance !!!! Coupez tout !')(*@\label{listing:maxpower2}@*) print('Shunt Voltage: {0:0.3f}mV\n'.format(ina.shunt_voltage())) fichier = open("data.txt", "a") fichier.write('{0:0.3f}'.format(ina.voltage())) fichier.write(' {0:0.3f}'.format(ina.current())) iv = ina.voltage()*0.005 fichier.write(' {0:0.3f}'.format(iv)) ia = ina.current()*0.005 fichier.write(' {0:0.3f}\n'.format(ia)) fichier.close() except DeviceRangeError as e: print(e) max_power_R_mW = int(input('Entrez la puissance max. de la résistace en mW : '))(*@\label{listing:maxpower3}@*) while marchearret != 'q': marchearret = input('Tapez ENTER pour enregistrer une mesure, q pour quitter et n pour une nouvelle série de mesure : ') read_ina219() if marchearret == 'n': max_power_R_mW = int(input('Entrez la puissance max. de la résistace en mW : '))(*@\label{listing:maxpower4}@*) fichier = open("data.txt", "a") fichier.write('\n\n') fichier.close() \end{lstlisting} \subsection{Diodes} Pour les diodes, le schéma de principe est donné dans la figure~\ref{figure:disposdiode}. On voit que la diode est placée en série avec une résistance R comme charge. Ainsi, pour les mesures de la tension à ses bornes (\(U_{diode }\)), il a été nécessaire de soustraire à la tension du bus (\(U_{bus}\)) la tension de la résistance (\(U_R\)), obtenue par la multiplication de la valeur de R précédemment mesurée avec le courant fourni par l'INA. \begin{figure} \caption[Rail]{Le RPI4, l'INA219 en mode high side, la diode et la résistance R}\label{figure:disposdiode} \smallskip \centering \includegraphics[scale=0.8]{images/RPI_INA_diode.eps} \end{figure} \medskip La figure~\ref{figure:disposdiodeimage} présente le dispositif expérimental concrètement. L'INA ainsi que les branchements sont montés sur une \og breadboard \fg. On ne voit pas le générateur qui se trouve sur la gauche de l'image. Relevez qu'une diode classique et quatre diodes électroluminescentes (LED) ont été utilisées. Sur l'image, on voit l'une des deux diodes vertes sur la breadboard. \begin{figure} \caption[Rail]{Le RPI4, l'INA219, les diodes et la résistance R}\label{figure:disposdiodeimage} \smallskip \centering \includegraphics[scale=0.5]{images/RPI4_INA_photo_diode.eps} \end{figure} Le code utilisé pour la mesure des caractéristiques des diodes est celui du listing~\ref{listing:INA} auquel on a retiré les lignes~\ref{listing:maxpower0}, \ref{listing:maxpower1}-\ref{listing:maxpower2}, \ref{listing:maxpower3} et~\ref{listing:maxpower4}. En effet, en se limitant à \SI{30}{\milli\ampere}, il n'était pas nécessaire de faire attention à la puissance dissipée dans la résistance, puisque avec \SI{187}{\ohm}, celle-ci se monte à \(P=R\cdot I^2=187\cdot (30\cdot 10^{-3})^2=\SI{168,3}{\milli\watt}\), soit moins d'un quart de watt. \subsection{Condensateurs} Pour les condensateurs, le schéma de principe est donné dans la figure~\ref{figure:disposcondo}. On voit que le condensateur est placé en parallèle avec une résistance R comme charge. Comme cette résistance était très grande relativement à celle du shunt de l'INA, on peut dire que la tension du bus correspondait à celle aux bornes du condenstaeur. \begin{figure} \caption[Rail]{Le RPI4, l'INA219 en mode high side, la diode et la résistance R}\label{figure:disposcondo} \smallskip \centering \includegraphics[scale=0.8]{images/RPI_INA_condo.eps} \end{figure} \medskip La figure~\ref{figure:disposcondoimage} présente le dispositif expérimental concrètement. L'INA ainsi que les branchements sont montés sur une \og breadboard \fg. On ne voit pas le générateur qui se trouve sur la gauche de l'image. Relevez que le condensateur électrolytique présent sur l'image est branché entre la borne positive du générateur, pour la borne positive du condensateur, et la terre, borne négative du condensateur. \begin{figure} \caption[Rail]{Le RPI4, l'INA219, le condensateur et la résistance R}\label{figure:disposcondoimage} \smallskip \centering \includegraphics[scale=0.5]{images/RPI4_INA_photo_condo.eps} \end{figure} Le code utilisé pour la mesure de la décharge est celui donné au listing~\ref{listing:INA_condo}. Dans ce cas, il n'est plus possible d'utiliser la touche \verb|Enter| pour effectuer la mesure. L'idée est donc de lancer une boucle \verb|while| dans laquelle on effectue une pause, donnée par la variable \verb|intevalle_temps| de la ligne~\ref{listing:intervalletemps}, juste après la prise des mesures avec l'INA, comme on le voit à la ligne~\ref{listing:sleep}. Par ailleurs, attendre un certain intervalle de temps sur un système qui n'est pas en temps réel, implique que des appels système peuvent faire varier cet intervalle. C'est pourquoi, il est préférable d'horodater chaque mesure, plutôt que de postuler que chacune d'entre-elle se fait après un intervalle de temps fixe. C'est la raison de la méthode \verb|time()| du module éponyme. À la ligne~\ref{listing:temps0}, on horodate (par un nombre de seconde sur Raspbian) le lancement du programme. Puis, à la ligne~\ref{listing:temps}, on horodate chaque mesure et fait la différence avec l'heure de lancement du programme. Ainsi, chaque mesure apparaîtra au bon instant sur le graphe. \begin{lstlisting}[float,language=python,caption={Le code de mesure avec l'INA.},label={listing:INA_condo},numbers=right,numberstyle=\tiny,numbersep=6pt] from ina219 import INA219, DeviceRangeError from time import sleep import time SHUNT_OHMS = 0.1 #MAX_EXPECTED_AMPS = 2.0 MAX_EXPECTED_AMPS = 0.3 ina = INA219(SHUNT_OHMS, MAX_EXPECTED_AMPS) #ina.configure(ina.RANGE_16V, ina.GAIN_1_40MV) ina.configure(ina.RANGE_16V) marchearret = '' intervalle_temps = 0.5 # en seconde(*@\label{listing:intervalletemps}@*) temps0 = time.time()(*@\label{listing:temps0}@*) temps = 0 def read_ina219(): global temps, intervalle_temps try: print('Bus Voltage: {0:0.3f}V'.format(ina.voltage())) print('Bus Current: {0:0.3f}mA'.format(ina.current())) print('Shunt Voltage: {0:0.3f}mV\n'.format(ina.shunt_voltage())) fichier = open("data_condo.txt", "a") fichier.write('{0:0.3f}'.format(temps)) fichier.write(' {0:0.3f}'.format(ina.voltage())) fichier.write(' {0:0.3f}'.format(ina.current())) iv = ina.voltage()*0.005 fichier.write(' {0:0.3f}'.format(iv)) ia = ina.current()*0.005 fichier.write(' {0:0.3f}\n'.format(ia)) fichier.close() #temps = temps + intervalle_temps temps = time.time()-temps0(*@\label{listing:temps}@*) except DeviceRangeError as e: # Current out of device range with specified shunt resister print(e) input('Lancez les mesures en pressant ENTER.') while marchearret != 'q': read_ina219() sleep(intervalle_temps) # en secondes(*@\label{listing:sleep}@*) \end{lstlisting} \subsubsection{Détection de toucher} L'idée est de charger l'une des broches numérique (puisque le raspberrypi ne possède pas d'entrée analogique) jusqu'à ce qu'elle parvienne à l'état haut (GPIO.HEIGH). Le temps pour y parvenir dépend d'un condensateur et d'une résistance externe qui va limiter le temps de charge selon la relation \(\tau=R\cdot C\). Ainsi, plus la résistance est grande, plus le temps sera long jusqu'à ce que l'on parvienne à l'état haut. Pendant la charge, on enclenche un compteur et on répète plusieurs fois l'opération pendant un temps donné. Si on approche le doigt de cette broche pendant sa charge, elle va se décharger à travers celui-ci et le processus de charge va recommencer. Ainsi, le temps de charge sera plus long, car la charge se fera tout de même, mais plus difficilement. Pratiquement, on va donc utiliser deux broches. L'une pour y placer des charges en la mettant au niveau haut avant de compter. Celle-ci sera placée relativement près de la seconde, celle qui va se charger progressivement, pour fournir lui fournir des charges. Y sera raccordée une résistance évitant un courant de décharge important dans la broche. Une valeur de \SI{10}{\kilo\ohm} est utilisée. L'autre pour réaliser la charge. Une grande valeur de résistance permet de bonnes mesures. Une valeur de \SI{10}{\mega\ohm} est utilisée et y est raccordé un fil conducteur enroulé en spirale pour réaliser le condensateur et permettre une bonne décharge avec le doigt. La figure~\ref{figure:touchereel} présente le dispositif. On y voit à droite les deux résistance dont celle de droite, la résistance réceptrice, est reliée au fil métallique enroulé en spiral pour le toucher et celle de gauche, la résistance émettrice, n'est relié à rien. On y voit aussi à gauche la résistance et la LED permettant de visualiser le toucher. Les deux résistances sont placées l'une près de l'autre pour permettre une charge plus rapide. On peut les éloigner considérablement plus. Des tests parfaitement fonctionnels ont été fait en plaçant la résistance émettrice à l'extrémité gauche de la \og breadboard \fg{}, la plaque permettant de relier les composants. Mais la charge est alors bien plus lente. Sur la figure~\ref{figure:toucheschema}, on voit les trois \og canaux \fg{} émetteur, récepteur et LED ainsi que les broches correspondant à chacun d'eux, notés avec la notation choisie dans le code du listing~\ref{listing:touch} : GPIO.BOARD. \begin{figure} \centering \begin{subfigure}{\textwidth} \centering \includegraphics[scale=0.35]{images/DoigtSensor.eps} \caption[Touché]{Dispositif réel}\label{figure:touchereel} \end{subfigure} \hspace{3mm} \begin{subfigure}{\textwidth} \centering \caption[Touché]{Schéma de principe}\label{figure:toucheschema} \includegraphics[scale=0.9]{images/RPI_touch.eps} \end{subfigure} \caption{Dispositif de détection de toucher}\label{figure:touche} \end{figure} Le mode GPIO.BOARD se réfère à une numérotation continue des pins depuis le pin le plus proche de la carte sd (pin 1), puis celui à ses côté (pin 2), puis celui en dessous dans l'axe du GPIO du pin 1 (pin 3), etc. Le numéro des broches du GPIO utilisées dans le code de la figure~\ref{listing:touch} correspond donc à celui indiqué à la figure~\ref{figure:toucheschema}. Dans ce code, on voit l'initialisation du GPIO jusqu'à la ligne~\ref{listing:touch0}, puis aux lignes~\ref{listing:touch1}, \ref{listing:touch2} et~\ref{listing:touch3}, la déclaration des broches utilisées, suivie de leur mode d'entrée ou sortie et de leur initialisation. Le c\oe ur du programme se trouve dans la boucle \emph{for} qui suit. La description est donnée en commentaires dans le code : on va incrémenter la variable \emph{total} pendant que la broche de réception est en train de se charger, mais ne l'est pas encore, c'est-à-dire n'est pas au niveau haut. Plus on éloigne la broche d'émission, plus ce nombre est grand. Si on touche, on empêche la broche d'émission de charger la broche de réception et ce nombre augmente. Grâce à la boucle \emph{for} et à la variable \emph{count}, on répète l'opération trente fois, toute les centièmes de seconde. À la ligne~\ref{listing:touch4}, on récupère le nombre \emph{total} et on teste s'il est supérieur à un seuil défini par l'absence de touché. Dans le cas présent, sans touché, ce nombré était systématiquement inférieur à 5000 (il ne s'agit pas de centième de seconde). En s'approchant, il augmente pour dépasser 5000. Il n'est donc même pas nécessaire de toucher réellement pour détecter la présence du doigt. Sur la figure~\ref{figure:touchereel}, on voit la LED allumée alors que le doigt ne touche pas la spirale métallique. \begin{lstlisting}[float,language=python,caption={Le code de détection du toucher.},label={listing:touch},numbers=right,numberstyle=\tiny,numbersep=6pt] import time try: import RPi.GPIO as GPIO except RuntimeError: print("Error importing RPi.GPIO!") GPIO.setmode(GPIO.BOARD)(*@\label{listing:touch0}@*) brocheLed = 13(*@\label{listing:touch1}@*) def mesure(count): """ Compte les coups """ global brocheLed # Définition des broches utilisées en mode GPIO.BOARD brocheEmettrice = 16(*@\label{listing:touch2}@*) brocheReceptrice = 18(*@\label{listing:touch3}@*) GPIO.setup(brocheEmettrice, GPIO.OUT) GPIO.setup(brocheReceptrice, GPIO.IN) GPIO.setup(brocheLed, GPIO.OUT) # Initialisation de la broche d'envoi du signal, en mode bas GPIO.output(brocheEmettrice, GPIO.LOW) GPIO.output(brocheLed, GPIO.LOW) total = 0 for x in range(1,count): # On répète la mesure un nombre count de fois time.sleep(0.01) GPIO.output(brocheEmettrice, GPIO.HIGH) while(GPIO.input(brocheReceptrice, == False): # Compte le temps (en centième de seconde) pendant lequel la broche de réception ne se charge pas. Plus on éloigne la broche d'émission, plus ce nombre est grand. Si on touche, on empêche la broche d'émission de charger la broche de réception et ce nombre augmente. total += 1 GPIO.output(brocheEmettrice, GPIO.LOW) return total def main(): while True: touch = mesure(30)(*@\label{listing:touch4}@*) print("Touché: %d" % touch) if(touch > 5000): GPIO.output(brocheLed, GPIO.HIGH) else: GPIO.output(brocheLed, GPIO.LOW) time.sleep(0.5) if __name__ == "__main__": main() \end{lstlisting} L'idée de ce dispositif était de tester si des modifications de la longueur de la spirale métallique ou son remplacement pas une feuille de papier d'aluminium peut conduire à des capacités et donc des temps de chargement différents. \subsection{Générateur} L'étude du générateur est classique. Nous considérerons ici la mesure de la résistance interne du générateur selon le modèle : \begin{equation}\label{equation:generateurreel} U_G-r\cdot I=R\cdot I \end{equation} où \(r\) est la résistance interne du générateur. Pour cela, nous allons utiliser exactement le même dispositif expérimental que celui de la mesure des résistances. Mais, ici, ce n'est plus la tension du bus qui nous intéresse, mais la somme de celle-ci avec la tension de shunt. L'idée est donc de tracer le graphe de la tension au bornes du générateur en fonction du courant mesurée par l'INA, cela pour différentes charges, ici avec différentes résistances. On peut soit changer à chaque fois de résistances, soit utiliser un potentiomètre, c'est-à-dire une résistance variable. On commence par placer le potentiomètre au maximum de sa résistance. Idéalement, si elle était infinie, aucun courant ne circulerait et la tension mesurée aux bornes du générateur serait la tension idéale ou tension à vide \(U_G\) de l'équation~\ref{equation:generateurreel}. Ensuite, on diminue progressivement la résistance. Le courant augmente donc et parallèlement la partie \(r\cdot I\) de l'équation~\ref{equation:generateurreel}, diminuant d'autant la tension à vide. La tension mesurée diminue donc. On voit sur l'image de la figure~\ref{figure:disposgenepotimage} le générateur constitué de huit accumulateurs de \SI{1,2}{\volt} à gauche et à droite le potentiomètre. \begin{figure} \caption[Rail]{Le RPI4, l'INA219, le générateur et le potentiomètre}\label{figure:disposgenepotimage} \smallskip \centering \includegraphics[scale=0.5]{images/genePot2.eps} \end{figure} \medskip Le code nécessaire est donc exactement le même que celui utilisé pour les résistances, à l'exception ... \subsection{Moteur} Au paragraphe~\ref{subsection:moteur}, page \pageref{subsection:moteur}, nous avons vu les principes généraux de l'étude d'un moteur CC. Voyons-en maintenant la réalisation concrète. Trois expériences vont être réalisées. \begin{enumerate} \item La détermination de la résistance interne du moteur. Pour cela, il faut bloquer le moteur. En effet, si la puissance mécanique qu'il développe est nulle, et c'est le cas si le moteur ne tourne pas, comme \(P_{mec.}=E\cdot I\), comme le courant n'est pas nul, cela signifie que la tension contre-électromotrice \(E\) est nulle. L'équation~\ref{equation:tensionmoteur}, page \pageref{equation:tensionmoteur}, se résume alors à l'expression donnée par l'équation~\ref{equation:resistanceinterne}. \begin{equation}\label{equation:resistanceinterne} U=r_i\cdot I \end{equation} Il suffit donc de mesurer la tension et le courant dans le moteur en mode bloqué. Évidemment, il faut être prudent, car en bloquant le moteur, la résistance interne étant généralement faible, le courant peut devenir très important et endommager le moteur. \smallskip La réalisation des mesures est ici très simple, puisqu'on se trouve dans le même cas que la mesure de résistances avec l'INA219. Il suffit de mettre le moteur à leur place en se référant à la figure~\ref{figure:dispos}, page \pageref{figure:dispos}, tout en veillant à ne pas dépasser la tension maximale admissible pour le moteur (suivant les cas de \SI{4}{} à \SI{12}{\volt}). \item La détermination de la constante k du moteur dans la relation~\ref{equation:omegamoteur} de la page \pageref{equation:omegamoteur}. Connaissant la résistance interne du moteur, la mesure de la tension \(U\) qui lui est appliquée et, simultanément, du courant \(I\) qui le traverse, permet d'obtenir l'équation~\ref{equation:tensioncontreelectromotrice} donnant la tension contre-électromotrice \(E'\) grâce à l'équation~\ref{equation:tensionmoteur}, page~\ref{equation:tensionmoteur}. \begin{equation}\label{equation:tensioncontreelectromotrice} E'=U-r_i\cdot I \end{equation} La tension et le courant sont mesurés par directement par l'INA219 comme décrit au point précédent, sauf que le moteur n'est alors plus en mode bloqué. \smallskip Reste à mesurer la vitesse de rotation angulaire \(\omega\). Le principe est simple. On va utiliser un compte tour. On compte un nombre donné de tours et le temps pour les faire. Par division, on obtient la fréquence en nombre de tours par seconde et en multipliant par \(2\cdot \pi\), on obtient la vitesse angulaire \(\omega\). Pour faire cela, il faut pouvoir compter compter le nombre de tours. Cela se fait en utilisant un aimant qui passe devant une sonde de Hall numérique. Une telle sonde ne mesure pas le champ magnétique en continu. Où plutôt, elle le fait, mais renvoie une valeur binaire quand le champ est supérieur à une valeur donnée et la valeur binaire opposée quand celui-ci est inférieur à cette valeur. Dans notre cas, la sonde LittleFuse 55100\footnote{Voir \url{https://www.distrelec.ch/Web/Downloads/_t/ds/littelfuse_55100_eng_tds.pdf?pid=\${product.code}} pour la sonde 3M à trois fils.} qui est un capteur à effet Hall, renvoie une valeur bas quand la sonde est à plus de \SI{130}{Gauss} ou à moins de \SI{12,5}{\milli\metre} de l'aimant de référence LittleFuse donné dans la documentation. Évidemment, on pourrait utiliser une sonde de Hall analoqique. Nous le ferons plus tard. Mais ici, il faut comprendre l'avantage d'une sonde numérique quand on sait que si un Arduino, par exemple, dispose d'entrées analogiques, Raspberry ne dispose que d'entrées numériques. Ce type de sondes permet donc de se passer d'un convertisseur analogique-numérique et peut être utilisée directement sur les broches du Raspberry. Deux problèmes se sont présentés, cependant. Le premier dû au problème bien connu des instabilités des broches laissées en l'air, généralement résolu par l'utilisation de résistances pull-up ou pull-down. Le second dû au temps de passage de l'aimant devant la sonde. Avant de présenter ces deux problèmes, présentons le dispositif complet. La figure \ref{figure:schemadisposmotaimanttour} est le schéma de principe correspondant à la figure \ref{figure:disposmotaimanttour} qui présente le montage. On y voit à gauche le moteur, au-dessus à gauche l'aimant et à droite le compte tour magnétique, scotché au montant du support de l'écran. \begin{figure} \caption[schemawMot]{Le moteur, l'aimant et le compte tour magnétique}\label{figure:schemadisposmotaimanttour} \smallskip \centering \includegraphics[scale=0.8]{images/RPI_INA_mot_littlefuse.eps} \end{figure} \begin{figure} \caption[wMot]{Les moteurs, les aimants et le compte tour magnétique ou sonde de Hall}\label{figure:disposmotaimanttour} \smallskip \centering \includegraphics[scale=1]{images/Moteurs.eps} \end{figure} Il faut noter, comme on le voit partiellement sur la figure \ref{figure:disposmotaimanttour}, que le compte tour magnétique, soit la sonde de Hall LittleFuse, est équipée de trois longs fils permettant de l'approcher facilement du moteur. De plus, le couleurs de ces fils sont très claires, puisque le fil rouge correspond à la tension d'alimentation de \SI{5}{\volt} (La tension minimale de \SI{3,8}{\volt} nécessitait l'utlisation de la broche GPIO numéro deux, puis que la première broche ne délivre que \SI{3,3}{\volt}), le fil noir à la masse et le fil bleu aux données, comme indiqué sur le schéma \ref{figure:schemadisposmotaimanttour} de principe. \smallskip Le code correspondant est donné dans le listing \ref{listing:INAmothall}. \begin{lstlisting}[language=python,caption={Le code de mesure avec le moteur, l'INA et la sonde de Hall.},label={listing:INAmothall},numbers=right,numberstyle=\tiny,numbersep=6pt] from ina219 import INA219, DeviceRangeError from time import sleep import time import math try: import RPi.GPIO as GPIO except RuntimeError: print("Error importing RPi.GPIO!") GPIO.setmode(GPIO.BOARD) SHUNT_OHMS = 0.1 MAX_EXPECTED_AMPS = 0.3 ina = INA219(SHUNT_OHMS, MAX_EXPECTED_AMPS) ina.configure(ina.RANGE_16V) marchearret = '' r = 3.17 # résistance interne du moteur (ohm) temps = 0 def read_ina219(): global r brocheHall = 11 # On est obligé de mettre à up la broche de Hall, car sinon, elle # est aléatoirement fixée. GPIO.setup(brocheHall, GPIO.IN, pull_up_down=GPIO.PUD_UP)(*@\label{listing:hall0}@*) nbtours = 100(*@\label{listing:hall1}@*) n = 0 drapeau = 'declanche' temps0 = time.time()(*@\label{listing:hall3}@*) while (n <= nbtours): etatBrocheHall = GPIO.input(brocheHall)(*@\label{listing:hall5}@*) if (etatBrocheHall == GPIO.LOW):(*@\label{listing:hall7}@*) if (drapeau != 'enclanche'): n = n + 1 #print('Enclanché') drapeau = 'enclanche' else: #print('-') drapeau = 'declanche'(*@\label{listing:hall8}@*) time.sleep(0.001)(*@\label{listing:hall6}@*) temps = time.time()-temps0(*@\label{listing:hall4}@*) frequence = nbtours/temps omega = 2*math.pi*frequence(*@\label{listing:hall2}@*) print(temps) print('Fréquence mot. : {0:0.3f}trs/s'.format(frequence)) print('Vit. angulaire : {0:0.3f}rad/s'.format(omega)) try: print('Bus Voltage: {0:0.3f}V'.format(ina.voltage())) print('Shunt Voltage: {0:0.3f}mV'.format(ina.shunt_voltage())) print('Bus Current: {0:0.3f}mA\n'.format(ina.current())) eprime = ina.voltage()-r*(ina.current()/1000) fichier = open("data_mot_hall.txt", "a") fichier.write('{0:0.3f}'.format(omega)) fichier.write(' {0:0.3f}'.format(eprime)) fichier.write(' {0:0.3f}'.format(ina.voltage())) fichier.write(' {0:0.3f}'.format(ina.current())) iw = frequence * 0.001/temps fichier.write(' {0:0.3f}'.format(iw)) iv = ina.voltage()*0.005 ia = ina.current()*0.005 ieprime = iv + r*(ina.current()/1000)*(0.1/r+ia/(ina.current()/1000)) fichier.write(' {0:0.3f}'.format(ieprime)) fichier.write(' {0:0.3f}'.format(iv)) fichier.write(' {0:0.3f}\n'.format(ia)) fichier.close() except DeviceRangeError as e: # Current out of device range with specified shunt resister print(e) while marchearret != 'q': marchearret = input('Tapez ENTER pour enregistrer une mesure, q pour quitter et n pour une nouvelle série de mesure : ') read_ina219() if marchearret == 'n': fichier = open("data_mot_hall.txt", "a") fichier.write('\n\n') fichier.close() \end{lstlisting} \smallskip Le premier problème a été que la tension de sortie haute de la sonde de hall n'est pas fixée. La documentation précise \og sinking output \fg{} pour la sortie haute, alors que pour la sortie basse, il est dit \og \SI{0,4}{\volt} @ \SI{20}{\milli\ampere} \fg{}. Il faut donc utiliser une résistance pull-up, c'est-à-dire une résistance branchée sur l'alimentation de \SI{5}{\volt}. En effet, sans courant, la tension aux bornes de la résistance est nulle est la tension de la broche est à son niveau haut de \SI{5}{\volt}. On peut le faire avec une résistance réelle, mais ce n'est pas nécessaire ici, car la broche utilisée peut être maintenue à son niveau haut de manière logicielle grâce à l'instruction de la ligne \ref{listing:hall0} du code du listing \ref{listing:INAmothall} où on voit la configuration de la \emph{brocheHall} avec \verb|pull_up_down=GPIO.PUD_UP|. \smallskip Le second problème ne fut pas évident à détecter, car relativement aléatoire. Ce qu'il faut savoir, c'est que la fréquence de rafraîchissement de la sonde de Hall est de \SI{10}{\kilo\hertz}, ce qui signifie un intervalle temporel d'un dixième de milliseconde. Or, le temps de passage de l'aimant devant la sonde est bien supérieur. Dans l'idéal, il faudrait donc faire un pause assez longue entre deux mesures pour permettre à l'aimant de ne plus solliciter la sonde de façon à ne compter qu'une seule fois chaque passage de celui-ci devant celle-ci. Or, comme il était prévu de faire varier la vitesse de rotation du moteur, il n'était pas envisageable de recalculer au mieux ce temps à chaque fois. La solution est venu du constat mis en évidence par l'affichage de l'état de la sonde à chaque pas de la boucle de mesure : pendant le passage devant la sonde, si dix mesures étaient faites, elles étaient systématiquement toujours dans l'état bas. Ainsi, il suffisait de lever un drapeau au premier passage au niveau bas devant la sonde pour incrémenter l'indice du nombre de tours et d'interdire cette incrémentation tant que le niveau de la sonde n'était pas retourné au niveau haut, signifiant que l'aimant n'était plus devant la sonde. Le code correspondant est celui des lignes \ref{listing:hall1} à \ref{listing:hall2} du listing \ref{listing:INAmothall}. À la ligne \ref{listing:hall1} est défini le nombre de tours pendant lesquels on va faire la mesure de temps, initialisée à la ligne \ref{listing:hall3} et enregistrée à la ligne \ref{listing:hall4}. L'état de la sonde est relevée à la ligne \ref{listing:hall5} et on bloque l'augmentation du nombre de tours pendant le passage de l'aimant devant la sonde aux lignes \ref{listing:hall7} à \ref{listing:hall8}. À la ligne \ref{listing:hall6}, on attends ensuite une fraction de seconde avant de relancer la mesure (mais cela ne doit pas être absolument nécessaire). Enfin, on calcule la fréquence et la vitesse angulaire. \smallskip La suite du code permet d'enregistrer les différentes grandeurs de l'équation \ref{equation:tensioncontreelectromotrice}, page \pageref{equation:tensioncontreelectromotrice}, que sont la vitesse angulaire \(\omega\), la tension contre-électromotrice \(E'\), la tension aux bornes du moteur \(U\), le courant \(I\) et leurs incertitudes, en relevant que le courant et son incertitude sont mesurés en \si{\milli\ampere}. \medskip La procédure de mesure est ainsi la suivante. On lance le programme, puis on met le moteur à sa vitesse maximale et en appuyant sur la touche \emph{Enter}, on lance le programme. Une mesure est immédiatement faite. À l'aide du potentiomètre du générateur, on diminue un peu la tension et donc la vitesse du moteur et on appuie à nouveau sur \emph{Enter} pour une nouvelle mesure. On procède ainsi jusqu'à l'arrêt du moteur. \item La détermination de la puissance maximale que peut fournir le moteur. Rappelons dans un premier temps que l'équation \ref{equation:imaxmot}, page \pageref{equation:imaxmot}, nous donne une expression théorique nous permettant de calculer le courant dans le moteur pour la puissance maximale qu'il peut fournir. Ce courant dépend de la tension appliquée au moteur et de sa résistance interne. Avec la mesure de ces deux grandeurs, on peut donc prévoir le courant et à l'aide de l'équation \ref{equation:puissthmecmot}, page \pageref{equation:puissthmecmot}, déterminer la puissance maximale. Une autre manière d'obtenir ce courant est de tracer le graphe de la puissance mécanique du moteur en fonction du courant. Selon l'équation \ref{equation:puissthmecmot}, il s'agit d'une fonction quadratique et on devrait obtenir une parabole dont le maximum correspond à la puissance maximale du moteur pour la tension donnée. Deux manières de déterminer cette courbe se présentent alors~: \begin{enumerate} \item en calculant la puissance à l'aide des mesures de la tension aux bornes du moteur, du courant et de la résistance, détermination qu'on nommera \og électrique \fg{} et \item en calculant la puissance \og mécanique \fg{} du moteur via son couple \(C\) et sa vitesse de rotation angulaire \(\omega\). En effet, on a que~: \begin{equation} P_{mec}=C\cdot \omega=F\cdot r\cdot \omega \end{equation} où, \(F\) est la force exercée sur l'axe de rotation et \(r\) la distance du centre de rotation à la position à laquelle s'exerce la force. La mesure du rayon se fait avec un pied à coulisse et celle de la force en enroulant une ficelle sur une petite poulie attachée à l'axe du moteur à laquelle on met un poids connu pendant dans le vide d'un côté et de l'autre en reliant celle-ci à un dynamomètre. Ainsi, par différence du poids et de la mesure du dynamomètre, on obtient la force totale de frottement exercée sur la poulie par la ficelle. Le bras de levier du moment de force est alors le rayon de la poulie. \end{enumerate} \end{enumerate} \section{Résultats} \subsection{Résistances} Le résultat des mesures effectuées sur cinq résistance de \SI{50}{}, \SI{100}{}, \SI{180}, \SI{500}{} et \SI{1200}{\ohm} est donné à la figure~\ref{pic:latex}. Les résistances sont identifiées par leur code de couleur, puis mesurées à l'aide d'un ohmmètre dont la précision est de 1\% ± 2 digits, valeurs reportées sur le graphe de la figure~\ref{pic:latex}. L'écart entre la valeur mesurée par l'ohmmètre et l'INA est reporté sous \(e_{mes.}\) dans la figure~\ref{pic:latex}. Les incertitudes sur les mesures de la tension et du courant ont été choisies selon les spécifications de l'INA219 qui sont données à 0,5\% de la valeur (voir l'annexe~\ref{annexe:driver}, page \pageref{annexe:driver}), tant pour le courant que pour la tension. Mais d'autres sources mentionnent 5\%, ce qui me paraît beaucoup au vu des écarts obtenus. Sur le graphe de la figure~\ref{pic:latex}, on ne voit pas les barres d'incertitudes qui sont trop petites. Quoi qu'il en soit, l'objectif n'est pas ici d'analyser finement l'incertitude de façon à déterminer la meilleures valeur de résistance possible. %\begin{figure} %\centering %\includegraphics[scale=0.6]{images/GraphePeriodeMasse.eps} %\caption[Période vs masse]{Le pendule simple\par \small Période vs masse (L~=~\SI{1}{\metre} ; \(\alpha = \SI{30}{\degres}\))}\label{figure:periode_masse} %\end{figure} \begin{sidewaysfigure} %\begin{figure}% \centering% \begin{gnuplot}[terminal=epslatex,scale=1.5, terminaloptions=font 8 color dashed] set key top right Left set key width 1 set key heigh 1 set key spacing 1.5 #set sample 1000 #set xr [0:11] #set yr [0:11] set xlabel 'Courant I (\si{\milli\ampere})' # attention il faut parfois utiliser certains guillemets # notamment quand on utilise la commande \si, il faut impérativement des primes '...' set ylabel 'Tension U (\si{\volt})' # Création du fit des données # --- # la fonction de fit f(x)=a*x+b g(x)=c*x+d h(x)=e*x+f i(x)=g*x+h j(x)=i*x+j # l'index 0 indique que les données sont dans le premier tableau du fichier # on utilise (u) les deux premières colonnes et les paramètres de fit sont a et b fit f(x) 'data9.txt' index 0 u 2:1 via a,b fit g(x) 'data9.txt' index 1 u 2:1 via c,d fit h(x) 'data9.txt' index 2 u 2:1 via e,f fit i(x) 'data9.txt' index 3 u 2:1 via g,h fit j(x) 'data9.txt' index 4 u 2:1 via i,j #,\ f(x) title 'Régres. linéaire.' lc 'blue' R1 = a*1000 e1 = (47-R1) / 47 *100 title_f(a,b) = sprintf('\(R_{pente}\;\;\;\,\) = \SI{%.1f}{\ohm} ; \(e_{mes.}\) = %.1f\%', R1, e1) R2 = c*1000 e2 = (100-R2) / 100 *100 title_g(c,d) = sprintf('\(R_{pente}\;\;\;\,\) = \SI{%.1f}{\ohm} ; \(e_{mes.}\) = %.1f\%', R2, e2) R3 = e*1000 e3 = (177-R3) / 177 *100 title_h(c,d) = sprintf('\(R_{pente}\;\;\;\,\) = \SI{%.1f}{\ohm} ; \(e_{mes.}\) = %.1f\%', R3, e3) R4 = g*1000 e4 = (454-R4) / 454 *100 title_i(c,d) = sprintf('\(R_{pente}\;\;\;\,\) = \SI{%.1f}{\ohm} ; \(e_{mes.}\) = %.1f\%', R4, e2) R5 = i*1000 e5 = (1193-R5) / 1193 *100 title_j(c,d) = sprintf('\(R_{pente}\;\;\;\,\) = \SI{%.1f}{\ohm} ; \(e_{mes.}\) = %.1f\%', R5, e5) plot [0:50][0:12]\ 'data9.txt' index 0 u 2:1:4:3 title '\(R_{anneaux}=\SI{50}{\ohm}\) ; \(R_{mes.}=\SI{47}{}\pm\SI{2.5}{\ohm}\)' pt 4 w xyerrorbars,\ f(x) title title_f(a,b) lc 'green',\ 'data9.txt' index 1 u 2:1:4:3 title '\(R_{anneaux}=\SI{100}{\ohm}\) ; \(R_{mes.}=\SI{100}{}\pm\SI{3}{\ohm}\)' pt 4 w xyerrorbars,\ g(x) title title_g(c,d) lc 'red',\ 'data9.txt' index 2 u 2:1:4:3 title '\(R_{anneaux}=\SI{180}{\ohm}\) ; \(R_{mes.}=\SI{177}{}\pm\SI{4}{\ohm}\)' pt 4 w xyerrorbars,\ h(x) title title_h(e,f) lc 'blue',\ 'data9.txt' index 3 u 2:1:4:3 title '\(R_{anneaux}=\SI{500}{\ohm}\) ; \(R_{mes.}=\SI{454}{}\pm\SI{6,6}{\ohm}\)' pt 4 w xyerrorbars,\ i(x) title title_i(g,h) lc 'violet',\ 'data9.txt' index 4 u 2:1:4:3 title '\(R_{anneaux}=\SI{1200}{\ohm}\) ; \(R_{mes.}=\SI{1193}{}\pm\SI{14}{\ohm}\)' pt 4 w xyerrorbars,\ j(x) title title_j(i,j) lc 'orange' \end{gnuplot} \caption[Tension vs courant]{Mesure de résistance avec l'INA219}% \label{pic:latex}% %\end{figure}% \end{sidewaysfigure} %\begin{table} %\centering %\caption[Accélérations]{\centering Accélérations et écarts\par \small Autres paramètres : m~=~\SI{50}{\gram} ; L~=~\SI{50}{\centi\metre}}\label{tableau:accelerations} %\begin{tabular}{|c|c|} %\hline %\(\alpha\) & T \\ %\si{\degres} & puls \\ \hline %10 & 20 \\ %20 & 18 \\ %30 & \dots \\ \hline %\end{tabular} %\end{table} % %Le tableau~\ref{tableau:multiples} est un exemple de placement de tableaux côte à côte, avec pour le tableau~\ref{tableau:periode-masse} la période en fonction de la masse, pour le tableau~\ref{tableau:meriode-angle} la période en fonction de l'angle et pour le tableau~\ref{tableau:periode-longueur}. % %\begin{table} % \centering % \begin{subtable}[b]{0.3\textwidth} % \centering % \begin{tabular}{|c|c|} % \hline % m & T \\ % \si{\gram} & puls \\ \hline % 10 & 20 \\ % 20 & 18 \\ % 30 & \dots \\ \hline % \end{tabular} % \caption[T vs m]{\centering Période vs masse\par \small Autres paramètres : \(\alpha=\SI{50}{\degres}\) ; L~=~\SI{50}{\centi\metre}}\label{tableau:periode-masse} % \end{subtable} % \begin{subtable}[b]{0.3\textwidth} % \centering % \begin{tabular}{|c|c|} % \hline % \(\alpha\) & T \\ % \si{\degres} & puls \\ \hline % 10 & 20 \\ % 20 & 18 \\ % 30 & \dots \\ \hline % \end{tabular} % \caption[T vs \(\alpha\)]{\centering Période vs angle\par \small Autres paramètres : m~=~\SI{50}{\gram} ; L~=~\SI{50}{\centi\metre}}\label{tableau:meriode-angle} % \end{subtable} % \begin{subtable}[b]{0.3\textwidth} % \centering % \begin{tabular}{|c|c|} % \hline % L & T \\ % \si{\centi\metre} & puls \\ \hline % 10 & 20 \\ % 20 & 18 \\ % 30 & \dots \\ \hline % \end{tabular} % \caption[T vs L]{\centering Période vs longueur\par \small Autres paramètres : m~=~\SI{50}{\gram} ; \(\alpha=\SI{50}{\degres}\)}\label{tableau:periode-longueur} % \end{subtable} % \caption{Un environnement pour de multiples tableaux}\label{tableau:multiples} %\end{table} \subsection{Diodes} La figure~\ref{fig:diode1} présente la première série de mesure faite avec une diode en mode direct. L'absence de mesures avant \SI{0,5}{\volt} est due à mon générateur fait maison, bien stabilisé, mais présentant une tension minimale d'un demi volt. La tension de seuil à \SI{0,6}{\volt} est très bien marquée. %\begin{sidewaysfigure} \begin{figure}% \centering% \begin{gnuplot}[terminal=epslatex,scale=0.8, terminaloptions=font 8 color dashed] set key top left Left set key width 1 set key heigh 1 set key spacing 1.5 set xlabel 'Tension U (\si{\volt})' # attention il faut parfois utiliser certains guillemets # notamment quand on utilise la commande \si, il faut impérativement des primes '...' set ylabel 'Courant I (\si{\milli\ampere})' #R = 471000 # Création du fit des données # --- # la fonction de fit #f(x)=(7.484-b)*exp(-(x-2.741)/a)+b #fit f(x) 'condo/data_condo_100µF_8V_471kΩ_time.txt' index 0 u 1:2 via a,b #C=a/R*1000000 #e=(100-C)/100*100 #title_f(a,b) = sprintf('\(\tau = RC = \SI{%.3f}{\second}\) ; \(C = \SI{%.3f}{\micro\farad}\) ; {%.1f}\%', a, C, e) # Pour Gnuplot directement en ligne de commande #plot [0.55:5][0:4] 'data_condo.txt' index 0 u 1:2 plot [0:1][0:11]\ 'diode/data_2.txt' index 0 u 1:2:3:4 title '\(R=\SI{187}{\ohm}\)' pt 4 w xyerrorbars#,\ #f(x) title title_f(a,b) lc 'green' \end{gnuplot} \caption[Courant vs tension]{Caractéristique courant-tension d'une diode avec l'INA219}% \label{fig:diode1}% \end{figure}% %\end{sidewaysfigure} Sur la figure~\ref{fig:diodeL1}, on voit les caractéristiques de plusieurs diodes électroluminescentes (Light Emiting Diode : LED) en mode direct. La résistance donnée est en série avec la diode pour limiter le courant. \begin{sidewaysfigure} %\begin{figure}% \centering% \begin{gnuplot}[terminal=epslatex,scale=1.5, terminaloptions=font 8 color dashed] set key top left Left set key width 2 set key heigh 1 set key spacing 1.7 set xlabel 'Tension U (\si{\volt})' # attention il faut parfois utiliser certains guillemets # notamment quand on utilise la commande \si, il faut impérativement des primes '...' set ylabel 'Courant I (\si{\milli\ampere})' #R = 471000 # Création du fit des données # --- # la fonction de fit #f(x)=(7.484-b)*exp(-(x-2.741)/a)+b #fit f(x) 'condo/data_condo_100µF_8V_471kΩ_time.txt' index 0 u 1:2 via a,b #C=a/R*1000000 #e=(100-C)/100*100 #title_f(a,b) = sprintf('\(\tau = RC = \SI{%.3f}{\second}\) ; \(C = \SI{%.3f}{\micro\farad}\) ; {%.1f}\%', a, C, e) # Pour Gnuplot directement en ligne de commande #plot [0.55:5][0:4] 'data_condo.txt' index 0 u 1:2 plot [0:3][0:30]\ 'diode/data_L1.txt' index 0 u 1:2:3:4 title '\(R=\SI{187}{\ohm}\) LED verte ' pt 4 w xyerrorbars,\ 'diode/data_L1.txt' index 1 u 1:2:3:4 title '\(R=\SI{187}{\ohm}\) LED rouge ' pt 4 w xyerrorbars,\ 'diode/data_L1.txt' index 2 u 1:2:3:4 title '\(R=\SI{187}{\ohm}\) LED jaune ' pt 4 w xyerrorbars,\ 'diode/data_L1.txt' index 3 u 1:2:3:4 title '\(R=\SI{187}{\ohm}\) LED verte sombre ' pt 4 w xyerrorbars \end{gnuplot} \caption[Courant vs tension]{Caractéristique courant-tension d'une LED avec l'INA219}% \label{fig:diodeL1}% %\end{figure}% \end{sidewaysfigure} \subsection{Condensateurs} La figure~\ref{fig:condo0} est un test de décroissance de la tension au bornes de la résistance seule quand on coupe le courant. Aucun condensateur n'a été placé en parallèle des résistances et pourtant on observe bien une décroissance avec cependant une résonance. Cette décroissance est indépendante de la valeur de la résistance. Elle vient d'un condensateur du générateur. En effet, la manière de procéder pour couper la tension ayant simplement été de couper le générateur, le circuit passant par le générateur restait branché. Ainsi, il est important de poser un interrupteur permettant de découpler entièrement le générateur du circuit. En procédant de cette manière, la décroissance n'a plus présenté cette résonance comme on peut le voir sur la figure~\ref{fig:condo1}. %\begin{figure} % \begin{subfigure}[b]{0.24\textwidth} % \includegraphics[width=\linewidth]{gull} % \caption{A gull} % \label{fig:gull} % \end{subfigure}% % \hspace{\fill} % \begin{subfigure}[b]{0.24\textwidth} % \includegraphics[width=\linewidth]{gull} % \caption{A gull2} % \label{fig:gull2} % \end{subfigure}% % \caption{Pictures of animals}\label{fig:animals} %\end{figure} %\end{document} %\begin{sidewaysfigure} \begin{figure}% \centering% \begin{subfigure}[b]{0.45\textwidth} \begin{gnuplot}[terminal=epslatex,scale=0.5, terminaloptions=font 8 color dashed] set key top right Left set key width 1 set key heigh 1 set key spacing 1.5 set xlabel 'Temps t (\si{\second})' # attention il faut parfois utiliser certains guillemets # notamment quand on utilise la commande \si, il faut impérativement des primes '...' set ylabel 'Tension U (\si{\volt})' R = 98000 # Création du fit des données # --- # la fonction de fit f(x)=3.976*exp(-(x-0.022)/a)#+b #g(x)=c*x+d # l'index 0 indique que les données sont dans le premier tableau du fichier # on utilise (u) les deux premières colonnes et les paramètres de fit sont a et b fit f(x) 'condo/data_condo9.txt' index 0 u 1:2 via a#,b #fit g(x) 'data9.txt' index 1 u 2:1 via c,d #,\ f(x) title 'Régres. linéaire.' lc 'blue' C=a/R*1000000 e=(0.15-C)/0.15*100 title_f(a,b) = sprintf('\(\tau = \SI{%.3f}{\second}\) ; \(C = \SI{%.3f}{\micro\farad}\) ; \(e={%.1f}\%\)', a, C, e) #R2 = c*1000 #e2 = (100-R2) / 100 *100 #title_g(c,d) = sprintf('\(R_{pente}\;\;\;\,\) = \SI{%.1f}{\ohm} ; \(e_{mes.}\) = %.1f\%', R2, e2) plot [0.022:0.1][0:4]\ 'condo/data_condo9.txt' index 0 u 1:2:5:4 title '\(R=\SI{98000}{\ohm}\) ; \(C=\SI{0,150}{}\pm\SI{0,03}{\micro\farad}\)' pt 4 w xyerrorbars,\ f(x) title title_f(a,b) lc 'green'#,\ #'data_condo.txt' index 1 u 3:1:5:4 title '\(R_{anneaux}=\SI{100}{\ohm}\) ; \(R_{mes.}=\SI{100}{}\pm\SI{3}{\ohm}\)' pt 4 w xyerrorbars#,\ #g(x) title title_g(c,d) lc 'red',\ \end{gnuplot} \caption[Tension vs courant]{Mesure de chute de tension capacitive avec l'INA219}% \label{fig:condo}% \end{subfigure}% %\end{sidewaysfigure} \hspace{\fill} %\begin{sidewaysfigure} \begin{subfigure}[b]{0.45\textwidth}% %\centering% \begin{gnuplot}[terminal=epslatex,scale=0.5, terminaloptions=font 8 color dashed] set key top right Left set key width 1 set key heigh 1 set key spacing 1.5 set xlabel 'Temps t (\si{\second})' # attention il faut parfois utiliser certains guillemets # notamment quand on utilise la commande \si, il faut impérativement des primes '...' set ylabel 'Tension U (\si{\volt})' R = 10000000 # Création du fit des données # --- # la fonction de fit f(x)=3.976*exp(-(x-0.04)/a)#+b #g(x)=c*x+d # l'index 0 indique que les données sont dans le premier tableau du fichier # on utilise (u) les deux premières colonnes et les paramètres de fit sont a et b fit f(x) 'condo/data_condo11.txt' index 0 u 1:2 via a#,b #fit g(x) 'data9.txt' index 1 u 2:1 via c,d #,\ f(x) title 'Régres. linéaire.' lc 'blue' C=a/R*1000000 e=(0.15-C)/0.15*100 title_f(a,b) = sprintf('\(\tau = \SI{%.3f}{\second}\) ; \(C = \SI{%.3f}{\micro\farad}\)', a, C) #R2 = c*1000 #e2 = (100-R2) / 100 *100 #title_g(c,d) = sprintf('\(R_{pente}\;\;\;\,\) = \SI{%.1f}{\ohm} ; \(e_{mes.}\) = %.1f\%', R2, e2) plot [0.04:0.15][0:4]\ 'condo/data_condo11.txt' index 0 u 1:2:5:4 title '\(R=\SI{10000000}{\ohm}\) ; \(C=\SI{0,0}{}\pm\SI{0,0}{\micro\farad}\)' pt 4 w xyerrorbars,\ f(x) title title_f(a,b) lc 'green',\ 'condo/data_condo11.txt' index 1 u ($1+0.018):2:5:4 title '\(R=\SI{472000}{\ohm}\) ; \(C=\SI{0,0}{}\pm\SI{0,0}{\micro\farad}\)' pt 4 w xyerrorbars#,\ #g(x) title title_g(c,d) lc 'red',\ \end{gnuplot} \caption[Tension vs courant]{Mesure de chute de tension capacitive avec l'INA219}% \label{fig:condo0}% \end{subfigure} \caption{L'influence d'un générateur.} \end{figure}% %\end{sidewaysfigure} On voit par comparaison des figures~\ref{fig:condo3} et~\ref{fig:condo41} que la précision apportée par la méthode \verb|time()| du module \verb|time| n'est pas sans qualité au vu de la qualité de la courbe de régression. Mais, l'écart entre la valeur mesurée de la capacité et la valeur annoncée reste grand. Cela peut avoir plusieurs explications. \begin{itemize} \item L'incertitude sur la valeur donnée sur la résistance. Il faut savoir que l'incertitude minimale sur la valeur de la capacité d'un condensateur est de 20\%, mais on trouve des condensateurs à 30, 40 voir 50\%. Or, il n'a pas été possible de déterminer la valeur de cette incertitude pour les condensateurs utilisés. Elle a donc été annoncée à 20\%. \item Si les condensateurs utilisés l'ont été sous des conditions normales de température, tension, \dots{} il n'avaient pas été utilisés depuis plus de vingt ans. Cela peut-il avoir eu une influence ? \end{itemize} \medskip Par ailleurs, il est très important que le courant de décharge ne soit pas trop faible. Si c'est le cas, on se retrouve dans une situation où la précision de la mesure sur le courant implique l'impression d'une tension résiduelle mesurée pas l'INA. Pour maximiser le courant, avec des résistances de ¼W, la résistance à utiliser avec une tension de \SI{9}{\volt} est de~: \[P=\frac{U^2}{R}\;\rightarrow\;R=\frac{U^2}{P}=\frac{9^2}{0,25}=\SI{324}{\ohm}\] au minimum. Sur la figure~\ref{fig:condo10}, la résistance était de \SI{455}{\ohm} pour une capacité de \SI{2200}{\micro\farad} et, pour une capacité, l'écart entre la valeur de capacité mesurée pas décroissance et la valeur annoncée sur la résistance, soit environ 40\% est correct. Alors que sur la figure~\ref{fig:condo3}, on voit qu'avec une résistance de \SI{471}{\kilo\ohm}, non seulement l'écart est de plus de 80\%, mais une tension résiduelle autour de \SI{1}{\volt} est présente. Avec une tension initiale d'environ \SI{8}{\volt} et cette résistance, le courant était au maximum de \SI{0,02}{\milli\ampere}, soit au-delà de ce que l'INA peut honnêtement mesurer. On peut donc imaginer que le courant effectivement mesuré par l'INA ait été trop important, donc aussi la tension de shunt et par conséquent la tension de bus systématiquement trop faible. Ce qui est compatible avec ce qu'on voit sur la figure~\ref{fig:condo3}. %\begin{sidewaysfigure} \begin{figure}[t]% \centering% \begin{subfigure}[t]{0.45\textwidth} \begin{gnuplot}[terminal=epslatex,scale=0.5, terminaloptions=font 8 color dashed] set key top right Left set key width 1 set key heigh 1 set key spacing 1.5 set xlabel 'Temps t (\si{\second})' # attention il faut parfois utiliser certains guillemets # notamment quand on utilise la commande \si, il faut impérativement des primes '...' set ylabel 'Tension U (\si{\volt})' R = 471000 # Création du fit des données # --- # la fonction de fit f(x)=9.728*exp(-(x-0.25)/a)+b fit f(x) 'condo/data_condo_4.7µF_11V_471kΩ.txt' index 0 u 1:2 via a,b C=a/R*1000000 e=(4.7-C)/4.7*100 title_f(a,b) = sprintf('Fit : \(\tau = RC = \SI{%.3f}{\second}\) ; \(C = \SI{%.3f}{\micro\farad}\) ; {%.1f}\%', a, C, e) # Pour Gnuplot directement en ligne de commande #plot [0.55:5][0:4] 'data_condo.txt' index 0 u 1:2 set style line 1 lt 0 lw 4 plot [0.25:5][0:12]\ 9.728*exp(-(x-0.25)/(R*4.7e-6*1.2)) w filledc y1=0 fc rgb 'grey90' title '',\ 9.728*exp(-(x-0.25)/(R*4.7e-6*0.8)) w filledc y1=0 fc 'white' title '',\ 9.728*exp(-(x-0.25)/(R*4.7e-6)) ls 1 title '\(U(t)=9.78\cdot e^{-(t-0,25)/2,213}\) ; i(C)=20\%',\ 'condo/data_condo_4.7µF_11V_471kΩ.txt' index 0 u 1:2:5:4 title '\(R=\SI{471000}{\ohm}\) ; \(C=\SI{4.7}{}\pm\SI{0.9}{\micro\farad}\) ; \(\tau=\SI{2,213}{\second}\)' pt 4 lc rgb 'grey30' w xyerrorbars,\ f(x) title title_f(a,b) lc 'green' \end{gnuplot} \caption[Tension vs courant]{Chute de tension capacitive avec l'INA219\\\(R=\SI{471}{\kilo\ohm}\) ; \(C=\SI{4,7}{\micro\farad}\)}% \label{fig:condo1}% \end{subfigure}% %\end{sidewaysfigure} \hspace{\fill} %\begin{sidewaysfigure} \begin{subfigure}[t]{0.45\textwidth}% %\centering% \begin{gnuplot}[terminal=epslatex,scale=0.5, terminaloptions=font 8 color dashed] set key top right Left set key width 1 set key heigh 1 set key spacing 1.5 set xlabel 'Temps t (\si{\second})' # attention il faut parfois utiliser certains guillemets # notamment quand on utilise la commande \si, il faut impérativement des primes '...' set ylabel 'Tension U (\si{\volt})' R = 471000 # Création du fit des données # --- # la fonction de fit f(x)=(7.628-b)*exp(-(x-5.5)/a)+b fit f(x) 'condo/data_condo_2200µF_8V_471kΩ_0V.txt' index 0 u 1:2 via a,b C=a/R*1000000 e=(2200-C)/2200*100 title_f(a,b) = sprintf('\(\tau = RC = \SI{%.3f}{\second}\) ; \(C = \SI{%.3f}{\micro\farad}\) ; {%.1f}\%', a, C, e) # Pour Gnuplot directement en ligne de commande #plot [0.55:5][0:4] 'data_condo.txt' index 0 u 1:2 set style line 1 lt 0 lw 4 plot [0:1000][0:10]\ 7.628*exp(-(x-5.5)/(R*2200e-6*1.2)) w filledc y1=0 fc rgb 'grey90' title '',\ 7.628*exp(-(x-5.5)/(R*2200e-6*0.8)) w filledc y1=0 fc 'white' title '',\ 7.628*exp(-(x-5.5)/(R*2200e-6)) ls 1 title '\(U(t)=9.78\cdot e^{-(t-5.5)/1036,2}\) ; i(C)=20\%',\ 'condo/data_condo_2200µF_8V_471kΩ_0V.txt' index 0 u 1:2:5:4 title '\(R=\SI{471000}{\ohm}\) ; \(C=\SI{2200}{}\pm\SI{440}{\micro\farad}\)' pt 4 lc rgb 'grey60' w xyerrorbars,\ f(x) title title_f(a,b) lc 'green' \end{gnuplot} \caption[Tension vs courant]{Mesure de chute de tension capacitive avec l'INA219\\\(R=\SI{471}{\kilo\ohm}\) ; \(C=\SI{2200}{\micro\farad}\)}% \label{fig:condo3}% \end{subfigure}% %\end{sidewaysfigure} \vspace{5mm} \centering% %\begin{sidewaysfigure} \begin{subfigure}[b]{0.45\textwidth}% %\centering% \begin{gnuplot}[terminal=epslatex,scale=0.5, terminaloptions=font 8 color dashed] set key top right Left set key width 1 set key heigh 1 set key spacing 1.5 set xlabel 'Temps t (\si{\second})' # attention il faut parfois utiliser certains guillemets # notamment quand on utilise la commande \si, il faut impérativement des primes '...' set ylabel 'Tension U (\si{\volt})' R = 471000 # Création du fit des données # --- # la fonction de fit f(x)=(7.484-b)*exp(-(x-2.741)/a)+b fit f(x) 'condo/data_condo_100µF_8V_471kΩ_time.txt' index 0 u 1:2 via a,b C=a/R*1000000 e=(100-C)/100*100 title_f(a,b) = sprintf('\(\tau = RC = \SI{%.3f}{\second}\) ; \(C = \SI{%.3f}{\micro\farad}\) ; {%.1f}\%', a, C, e) # Pour Gnuplot directement en ligne de commande #plot [0.55:5][0:4] 'data_condo.txt' index 0 u 1:2 set style line 1 lt 0 lw 4 plot [2.741:100][0:10]\ 7.484*exp(-(x-2.741)/(R*100e-6*1.2)) w filledc y1=0 fc rgb 'grey90' title '',\ 7.484*exp(-(x-2.741)/(R*100e-6*0.8)) w filledc y1=0 fc 'white' title '',\ 7.484*exp(-(x-2.741)/(R*100e-6)) ls 1 title '\(U(t)=9.78\cdot e^{-(t-5.5)/47,1}\) ; i(C)=20\%',\ 'condo/data_condo_100µF_8V_471kΩ_time.txt' index 0 u 1:2:5:4 title '\(R=\SI{471000}{\ohm}\) ; \(C=\SI{100}{}\pm\SI{20}{\micro\farad}\)' pt 4 lc rgb 'blue' w xyerrorbars,\ f(x) title title_f(a,b) lc 'green' \end{gnuplot} \caption[Tension vs courant]{Mesure de chute de tension capacitive avec l'INA219\\\(R=\SI{471}{\kilo\ohm}\) ; \(C=\SI{100}{\micro\farad}\) ; python \emph{time.time} est utilisé ici}% \label{fig:condo41}% \end{subfigure}% %\end{sidewaysfigure} \hspace{\fill} %\begin{sidewaysfigure} \begin{subfigure}[b]{0.45\textwidth}% %\centering% \begin{gnuplot}[terminal=epslatex,scale=0.5, terminaloptions=font 8 color dashed] set key top right Left set key width 1 set key heigh 1 set key spacing 1.5 set xlabel 'Temps t (\si{\second})' # attention il faut parfois utiliser certains guillemets # notamment quand on utilise la commande \si, il faut impérativement des primes '...' set ylabel 'Tension U (\si{\volt})' R = 471000 # Création du fit des données # --- # la fonction de fit f(x)=(9.424-b)*exp(-(x-47.341)/a)+b fit f(x) 'condo/data_condo_2_100µF_471kΩ.txt' index 0 u 1:2 via a,b C=a/R*1000000 e=(100-C)/100*100 title_f(a,b) = sprintf('\(\tau = RC = \SI{%.3f}{\second}\) ; \(C = \SI{%.3f}{\micro\farad}\) ; {%.1f}\%', a, C, e) # Pour Gnuplot directement en ligne de commande #plot [0.55:5][0:4] 'data_condo.txt' index 0 u 1:2 set style line 1 lt 0 lw 4 plot [47.341:130][0:10]\ 9.424*exp(-(x-47.341)/(R*100e-6*1.2)) w filledc y1=0 fc rgb 'grey90' title '',\ 9.424*exp(-(x-47.341)/(R*100e-6*0.8)) w filledc y1=0 fc 'white' title '',\ 9.424*exp(-(x-47.341)/(R*100e-6)) ls 1 title '\(U(t)=9.78\cdot e^{-(t-5.5)/47,1}\) ; i(C)=20\%',\ 'condo/data_condo_2_100µF_471kΩ.txt' index 0 u 1:2:5:4 title '\(R=\SI{471000}{\ohm}\) ; \(C=\SI{100}{}\pm\SI{20}{\micro\farad}\)' pt 4 lc rgb 'blue' w xyerrorbars,\ f(x) title title_f(a,b) lc 'green' \end{gnuplot} \caption[Tension vs courant]{Mesure de chute de tension capacitive avec l'INA219\\\(R=\SI{471}{\kilo\ohm}\) ; \(C=\SI{100}{\micro\farad}\) ; python \emph{time.time} est utilisé ici}% \label{fig:condo42}% \end{subfigure} \caption{Premières séries de mesures.} \end{figure}% %\end{sidewaysfigure} %\begin{sidewaysfigure} \begin{figure}[t]% \centering% \begin{subfigure}[t]{0.45\textwidth} \begin{gnuplot}[terminal=epslatex,scale=0.5, terminaloptions=font 8 color dashed] set key top right Left set key width 1 set key heigh 1 set key spacing 1.5 set xlabel 'Temps t (\si{\second})' # attention il faut parfois utiliser certains guillemets # notamment quand on utilise la commande \si, il faut impérativement des primes '...' set ylabel 'Tension U (\si{\volt})' R = 98.3e3 # Création du fit des données # --- # la fonction de fit f(x)=(9.424)*exp(-(x-4.817)/a) fit f(x) 'condo/data_condo_2_100µF_98.3kΩ.txt' index 0 u 1:2 via a C=a/R*1000000 e=(100-C)/100*100 title_f(a,b) = sprintf('\(\tau = RC = \SI{%.3f}{\second}\) ; \(C = \SI{%.3f}{\micro\farad}\) ; {%.1f}\%', a, C, e) # Pour Gnuplot directement en ligne de commande #plot [0.55:5][0:4] 'data_condo.txt' index 0 u 1:2 set style line 1 lt 0 lw 4 plot [4.8:80][0:9.5]\ 9.424*exp(-(x-4.817)/(R*100e-6*1.2)) w filledc y1=0 fc rgb 'grey90' title '',\ 9.424*exp(-(x-4.817)/(R*100e-6*0.8)) w filledc y1=0 fc 'white' title '',\ 9.424*exp(-(x-4.817)/(R*100e-6)) ls 1 title '\(U(t)=9.424\cdot e^{-(t-4.817)/9,83}\) ; i(C)=20\%',\ 'condo/data_condo_2_100µF_98.3kΩ.txt' index 0 u 1:2:5:4 title '\(R=\SI{98300}{\ohm}\) ; \(C=\SI{100}{}\pm\SI{20}{\micro\farad}\)' pt 4 lc rgb 'blue' w xyerrorbars,\ f(x) title title_f(a,b) lc 'green' \end{gnuplot} \caption[Tension vs courant]{Mesure de chute de tension capacitive avec \(R=\SI{98,3}{\kilo\ohm}\)}% \label{fig:condo7}% \end{subfigure}% %\end{sidewaysfigure} \hspace{\fill} %\begin{sidewaysfigure} \begin{subfigure}[t]{0.45\textwidth}% \centering% \begin{gnuplot}[terminal=epslatex,scale=0.5, terminaloptions=font 8 color dashed] set key top right Left set key width 1 set key heigh 1 set key spacing 1.5 set xlabel 'Temps t (\si{\second})' # attention il faut parfois utiliser certains guillemets # notamment quand on utilise la commande \si, il faut impérativement des primes '...' set ylabel 'Tension U (\si{\volt})' R = 98.3e3 # Création du fit des données # --- # la fonction de fit f(x)=(9.268-b)*exp(-(x-3.81)/a)+b fit f(x) 'condo/data_condo_3_100µF_98.3kΩ.txt' index 0 u 1:2 via a,b C=a/R*1000000 e=(100-C)/100*100 title_f(a,b) = sprintf('\(\tau = RC = \SI{%.3f}{\second}\) ; \(C = \SI{%.3f}{\micro\farad}\) ; {%.1f}\%', a, C, e) # Pour Gnuplot directement en ligne de commande #plot [0.55:5][0:4] 'data_condo.txt' index 0 u 1:2 set style line 1 lt 0 lw 4 plot [5.44:111.6][0:9.5]\ (9.268-0.32)*exp(-(x-3.81)/(R*100e-6*1.2))+0.32 w filledc y1=0 fc rgb 'grey90' title '',\ (9.268-0.32)*exp(-(x-3.81)/(R*100e-6*0.8))+0.32 w filledc y1=0 fc 'white' title '',\ (9.268-0.32)*exp(-(x-3.81)/(R*100e-6))+0.32 ls 1 title '\(U(t)=9.424\cdot e^{-(t-4.817)/9,83}\) ; i(C)=20\%',\ 'condo/data_condo_3_100µF_98.3kΩ.txt' index 0 u 1:2:5:4 title '\(R=\SI{98300}{\ohm}\) ; \(C=\SI{100}{}\pm\SI{20}{\micro\farad}\)' pt 4 lc rgb 'blue' w xyerrorbars,\ f(x) title title_f(a,b) lc 'green' \end{gnuplot} \caption[Tension vs courant]{Mesure de chute de tension capacitive avec \(R=\SI{98,3}{\kilo\ohm}\) ; déchargé}% \label{fig:condo8}% \end{subfigure} %\end{sidewaysfigure} %\begin{sidewaysfigure} \begin{subfigure}[b]{0.45\textwidth}% %\centering% \begin{gnuplot}[terminal=epslatex,scale=0.5, terminaloptions=font 8 color dashed] set key top right Left set key width 1 set key heigh 1 set key spacing 1.5 set xlabel 'Temps t (\si{\second})' # attention il faut parfois utiliser certains guillemets # notamment quand on utilise la commande \si, il faut impérativement des primes '...' set ylabel 'Tension U (\si{\volt})' R = 446 # Création du fit des données # --- # la fonction de fit f(x)=(9.184)*exp(-(x-5.296)/a) fit f(x) 'condo/data_condo_2e_100µF_446Ω.txt' index 0 u 1:2 via a C=a/R*1000000 e=(100-C)/100*100 title_f(a,b) = sprintf('\(\tau = RC = \SI{%.3f}{\second}\) ; \(C = \SI{%.3f}{\micro\farad}\) ; {%.1f}\%', a, C, e) # Pour Gnuplot directement en ligne de commande #plot [0.55:5][0:4] 'data_condo.txt' index 0 u 1:2 set style line 1 lt 0 lw 4 plot [5.296:6][0:10]\ 9.184*exp(-(x-5.296)/(R*100e-6*1.2)) w filledc y1=0 fc rgb 'grey90' title '',\ 9.184*exp(-(x-5.296)/(R*100e-6*0.8)) w filledc y1=0 fc 'white' title '',\ 9.184*exp(-(x-5.296)/(R*100e-6)) ls 1 title '\(U(t)=9.184\cdot e^{-(t-5.296)/0,0446}\) ; i(C)=20\%',\ 'condo/data_condo_2e_100µF_446Ω.txt' index 0 u 1:2:5:4 title '\(R=\SI{446}{\ohm}\) ; \(C=\SI{100}{}\pm\SI{20}{\micro\farad}\)' pt 4 lc rgb 'blue' w xyerrorbars,\ f(x) title title_f(a,b) lc 'green' \end{gnuplot} \caption[Tension vs courant]{Mesure de chute de tension capacitive avec \(R=\SI{446}{\ohm}\)}% \label{fig:condo5}% \end{subfigure}% %\end{sidewaysfigure} \hspace{\fill} %\begin{sidewaysfigure} \begin{subfigure}[b]{0.45\textwidth}% \centering% \begin{gnuplot}[terminal=epslatex,scale=0.5, terminaloptions=font 8 color dashed] set key top right Left set key width 1 set key heigh 1 set key spacing 1.5 set xlabel 'Temps t (\si{\second})' # attention il faut parfois utiliser certains guillemets # notamment quand on utilise la commande \si, il faut impérativement des primes '...' set ylabel 'Tension U (\si{\volt})' R = 1182 # Création du fit des données # --- # la fonction de fit f(x)=(9.232)*exp(-(x-2.831)/a) fit f(x) 'condo/data_condo_2_100µF_1182Ω.txt' index 0 u 1:2 via a C=a/R*1000000 e=(100-C)/100*100 title_f(a,b) = sprintf('\(\tau = RC = \SI{%.3f}{\second}\) ; \(C = \SI{%.3f}{\micro\farad}\) ; {%.1f}\%', a, C, e) # Pour Gnuplot directement en ligne de commande #plot [0.55:5][0:4] 'data_condo.txt' index 0 u 1:2 set style line 1 lt 0 lw 4 plot [2.83:4.63][0:9.3]\ 9.232*exp(-(x-2.831)/(R*100e-6*1.2)) w filledc y1=0 fc rgb 'grey90' title '',\ 9.232*exp(-(x-2.831)/(R*100e-6*0.8)) w filledc y1=0 fc 'white' title '',\ 9.232*exp(-(x-2.831)/(R*100e-6)) ls 1 title '\(U(t)=9.232\cdot e^{-(t-5.296)/0,1182}\) ; i(C)=20\%',\ 'condo/data_condo_2_100µF_1182Ω.txt' index 0 u 1:2:5:4 title '\(R=\SI{1182}{\ohm}\) ; \(C=\SI{100}{}\pm\SI{20}{\micro\farad}\)' pt 4 lc rgb 'blue' w xyerrorbars,\ f(x) title title_f(a,b) lc 'green' \end{gnuplot} \caption[Tension vs courant]{Mesure de chute de tension capacitive avec \(R=\SI{1182}{\ohm}\)}% \label{fig:condo6}% \end{subfigure} \caption{Un condensateur caractéristique \(C=\SI{100}{\micro\farad}\) et python \emph{time.time}.} \end{figure}% %\end{sidewaysfigure} On voit sur la figure~\ref{fig:condo62} une série de mesures réalisées avec une résistance de \SI{455}{\ohm} et un condensateur de \SI{100}{\micro\farad}, puis en remplacement de cette résistance, avec un potentiomètre réglable dont on a changé la résistance de plus de \SI{1}{\kilo\ohm} à \SI{100}{\ohm}. Dans cette plage de résistances, les mesures sont cohérentes, même si l'écart est grand. En ligne traitillée se trouve la courbe correspondant à \SI{455}{\ohm} et \SI{100}{\micro\farad}. L'écart à la valeur de la capacité calculée sur la base des mesures pour cette résistance et donnée dans la légende. La zone grisée correspond à une tolérance de ±20\%. L'écart de plus de 60\% est grand mais du bon ordre de grandeur. \begin{sidewaysfigure} %\begin{figure}% \centering% \begin{gnuplot}[terminal=epslatex,scale=1.5, terminaloptions=font 8 color dashed] set key top right Right set key width 1 set key heigh 1 set key spacing 1.5 set xlabel 'Temps t (\si{\second})' # attention il faut parfois utiliser certains guillemets # notamment quand on utilise la commande \si, il faut impérativement des primes '...' set ylabel 'Tension U (\si{\volt})' R = 455 # Création du fit des données # --- # la fonction de fit f(x)=(9.596)*exp(-(x-14.013)/a) fit f(x) 'condo/data_condo_multiΩ_100µF.txt' index 0 u 1:2 via a C=a/R*1000000 e=(100-C)/100*100 title_f(a,b) = sprintf('\SI{455}{\ohm}→\(C = \SI{%.3f}{\micro\farad}\) ; {%.1f}\%', C, e) # Pour Gnuplot directement en ligne de commande #plot [0.55:5][0:4] 'data_condo.txt' index 0 u 1:2 set style line 1 lt 0 lw 4 plot [0:0.8][0:9.6]\ 9.596*exp(-(x)/(R*100e-6*1.2)) w filledc y1=0 fc rgb 'grey90' title '',\ 9.596*exp(-(x)/(R*100e-6*0.8)) w filledc y1=0 fc 'white' title '',\ 9.596*exp(-(x)/(R*100e-6)) ls 1 title title_f(a,b),\ 'condo/data_condo_multiΩ_100µF.txt' index 1 u ($1-5.592):2:5:4 title '\(R=\SI{1130}{\ohm}\)' pt 4 w xyerrorbars,\ 'condo/data_condo_multiΩ_100µF.txt' index 2 u ($1-3.847):2:5:4 title '\(\SI{800}{\ohm}\)' pt 4 w xyerrorbars,\ 'condo/data_condo_multiΩ_100µF.txt' index 3 u ($1-5.618):2:5:4 title '\(\SI{600}{\ohm}\)' pt 4 w xyerrorbars,\ 'condo/data_condo_multiΩ_100µF.txt' index 0 u ($1-14.013):2:5:4 title '\(\SI{455}{\ohm}\)' pt 4 lc rgb 'blue' w xyerrorbars,\ 'condo/data_condo_multiΩ_100µF.txt' index 4 u ($1-5.114):2:5:4 title '\(\SI{400}{\ohm}\)' pt 4 w xyerrorbars,\ 'condo/data_condo_multiΩ_100µF.txt' index 5 u ($1-5.298):2:5:4 title '\(\SI{200}{\ohm}\)' pt 4 w xyerrorbars,\ 'condo/data_condo_multiΩ_100µF.txt' index 6 u ($1-4.158):2:5:4 title '\(\SI{100}{\ohm}\)' pt 4 w xyerrorbars#,\ f(x) title title_f(a,b) lc 'green' \end{gnuplot} \caption[Tension vs courant]{Chute de tension d'un condensateur \(C=\SI{100}{}\pm\SI{20}{\micro\farad}\) pour de multiples résistances}% \label{fig:condo62}% %\end{figure}% \end{sidewaysfigure} \begin{sidewaysfigure} %\begin{figure}% \centering% \begin{gnuplot}[terminal=epslatex,scale=1.5, terminaloptions=font 8 color dashed] set key top right Left set key width 1 set key heigh 1 set key spacing 1.5 set xlabel 'Temps t (\si{\second})' # attention il faut parfois utiliser certains guillemets # notamment quand on utilise la commande \si, il faut impérativement des primes '...' set ylabel 'Tension U (\si{\volt})' R = 455 # Création du fit des données # --- # la fonction de fit f(x)=(9.376)*exp(-(x-7.544)/a) fit f(x) 'condo/data_condo_4_2200µF_455Ω.txt' index 0 u 1:2 via a C=a/R*1000000 e=(2200-C)/2200*100 title_f(a,b) = sprintf('\(\tau = RC = \SI{%.3f}{\second}\) ; \(C = \SI{%.3f}{\micro\farad}\) ; {%.1f}\%', a, C, e) # Pour Gnuplot directement en ligne de commande #plot [0.55:5][0:4] 'data_condo.txt' index 0 u 1:2 set style line 1 lt 0 lw 4 plot [7.54:25][0:9.38]\ (9.376)*exp(-(x-7.544)/(R*2200e-6*1.2)) w filledc y1=0 fc rgb 'grey90' title '',\ (9.376)*exp(-(x-7.544)/(R*2200e-6*0.8)) w filledc y1=0 fc 'white' title '',\ (9.376)*exp(-(x-7.544)/(R*2200e-6)) ls 1 title '\(U(t)=9.376\cdot e^{-(t-7.544)/1,001}\) ; i(C)=20\%',\ 'condo/data_condo_4_2200µF_455Ω.txt' index 0 u 1:2:5:4 title '\(R=\SI{455}{\ohm}\) ; \(C=\SI{2200}{}\pm\SI{440}{\micro\farad}\)' pt 4 lc rgb 'blue' w xyerrorbars,\ f(x) title title_f(a,b) lc 'green' \end{gnuplot} \caption[Tension vs courant]{Mesure de chute de tension capacitive avec l'INA219\\\(R=\SI{455}{\ohm}\) ; \(C=\SI{2200}{\micro\farad}\) ; python \emph{time.time} ; déchargé}% \label{fig:condo10}% %\end{figure}% \end{sidewaysfigure} %\begin{sidewaysfigure} \begin{figure}[t]% \centering% \begin{subfigure}[t]{0.45\textwidth} \begin{gnuplot}[terminal=epslatex,scale=0.5, terminaloptions=font 8 color dashed] set key top right Left set key width 1 set key heigh 1 set key spacing 1.5 set xlabel 'Temps t (\si{\second})' # attention il faut parfois utiliser certains guillemets # notamment quand on utilise la commande \si, il faut impérativement des primes '...' set ylabel 'Tension U (\si{\volt})' R = 471e3 # Création du fit des données # --- # la fonction de fit f(x)=(9.4-b)*exp(-(x-4.338)/a)+b fit f(x) 'condo/data_condo_3_100µF_471kΩ.txt' index 0 u 1:2 via a,b C=a/R*1000000 e=(100-C)/100*100 title_f(a,b) = sprintf('\(\tau = RC = \SI{%.3f}{\second}\) ; \(C = \SI{%.3f}{\micro\farad}\) ; {%.1f}\%', a, C, e) # Pour Gnuplot directement en ligne de commande #plot [0.55:5][0:4] 'data_condo.txt' index 0 u 1:2 set style line 1 lt 0 lw 4 plot [4.33:111.6][0:9.5]\ (9.4-0.69)*exp(-(x-4.338)/(R*100e-6*1.2))+0.69 w filledc y1=0 fc rgb 'grey90' title '',\ (9.4-0.69)*exp(-(x-4.338)/(R*100e-6*0.8))+0.69 w filledc y1=0 fc 'white' title '',\ (9.4-0.69)*exp(-(x-4.338)/(R*100e-6))+0.69 ls 1 title '\(U(t)=9.4\cdot e^{-(t-4.338)/47,1}\) ; i(C)=20\%',\ 'condo/data_condo_3_100µF_471kΩ.txt' index 0 u 1:2:5:4 title '\(R=\SI{471}{\kilo\ohm}\) ; \(C=\SI{100}{}\pm\SI{20}{\micro\farad}\)' pt 4 lc rgb 'blue' w xyerrorbars,\ f(x) title title_f(a,b) lc 'green' \end{gnuplot} \caption[Tension vs courant]{Mesure de chute de tension capacitive. Pour \(R=\SI{471}{\kilo\ohm}\;\;C=\SI{100}{\micro\farad}\) et \emph{time.time} déchargé} \label{fig:condo9} \end{subfigure}% %\end{sidewaysfigure} \hspace{\fill} %\begin{sidewaysfigure} \begin{subfigure}[t]{0.45\textwidth}% %\centering% \begin{gnuplot}[terminal=epslatex,scale=0.5, terminaloptions=font 8 color dashed] set key top right Left set key width 1 set key heigh 1 set key spacing 1.5 set xlabel 'Temps t (\si{\second})' # attention il faut parfois utiliser certains guillemets # notamment quand on utilise la commande \si, il faut impérativement des primes '...' set ylabel 'Tension U (\si{\volt})' R = 9.94e6 # Création du fit des données # --- # la fonction de fit f(x)=(9.040-b)*exp(-(x-7.309)/a)+b fit f(x) 'condo/data_condo_2_0.15µF_9.94MΩ.txt' index 0 u 1:2 via a,b C=a/R*1000000 e=(0.15-C)/0.15*100 title_f(a,b) = sprintf('\(\tau = RC = \SI{%.3f}{\second}\) ; \(C = \SI{%.3f}{\micro\farad}\) ; {%.1f}\%', a, C, e) # Pour Gnuplot directement en ligne de commande #plot [0.55:5][0:4] 'data_condo.txt' index 0 u 1:2 set style line 1 lt 0 lw 4 plot [7.3:7.4][0:9.1]\ 9.040*exp(-(x-7.309)/(R*0.15e-6*1.2)) w filledc y1=0 fc rgb 'grey90' title '',\ 9.040*exp(-(x-7.309)/(R*0.15e-6*0.8)) w filledc y1=0 fc 'white' title '',\ 9.040*exp(-(x-7.309)/(R*0.15e-6)) ls 1 title '\(U(t)=9.184\cdot e^{-(t-5.296)/0,0446}\) ; i(C)=20\%',\ 'condo/data_condo_2_0.15µF_9.94MΩ.txt' index 0 u 1:2:5:4 title '\(R=\SI{9.94}{\mega\ohm}\) ; \(C=\SI{0.15}{}\pm\SI{0.03}{\micro\farad}\)' pt 4 lc rgb 'blue' w xyerrorbars,\ f(x) title title_f(a,b) lc 'green' \end{gnuplot} \caption[Tension vs courant]{Mesure de chute de tension capacitive avec l'INA219\\\(R=\SI{9.94}{\mega\ohm}\) ; \(C=\SI{0.15}{\micro\farad}\) ; python \emph{time.time} est utilisé ici}% \label{fig:condo11}% \end{subfigure} \caption{Cas problématiques.} \end{figure}% %\end{sidewaysfigure} \subsection{Générateur} Les mesures présentés à la figure~\ref{fig:gene1} montrent la décroissance de la tension aux bornes du générateur constitué par huit accumulateurs NiMH d'environ \SI{1,2}{\volt}. Le courant étant affiché en \si{\milli\ampere}, la pente de la courbe a été multipliée par mille et c'est la valeur en \si{\ohm} qu'on lit dans l'équation de la droite, soit \SI{6,5}{\ohm}, comme résistance interne. \medskip Les mesures présentés à la figure~\ref{fig:gene2} montrent la diminution de la tension aux bornes d'un accumulateur NiMH de \SI{9}{\volt}. La résistance interne de \SI{214,6}{\ohm} est importante comparativement à celle de l'ensemble des huit accumulateurs de la figure~\ref{fig:gene1}. Les raisons de cette différence sont encore à déterminer. %\begin{sidewaysfigure} \begin{figure}% \centering% \begin{subfigure}[t]{0.45\textwidth} \begin{gnuplot}[terminal=epslatex,scale=0.5, terminaloptions=font 8 color dashed] set key bottom right Right set key width 1 set key heigh 1 set key spacing 1.5 set xlabel 'Courant I (\si{\milli\ampere})' # attention il faut parfois utiliser certains guillemets # notamment quand on utilise la commande \si, il faut impérativement des primes '...' set ylabel 'Tension U (\si{\volt})' #Rmaxpot = 46000 # Création du fit des données # --- # la fonction de fit f(x)=-a*x+b fit f(x) 'gene/data_gene_9V_8piles.txt' index 1 u 1:2 via a,b R=a*1000 title_f(a,b) = sprintf('Fit série 1 : \(U(I) = {%.1f}\cdot I+{%.3f}\)', R, b) # Pour Gnuplot directement en ligne de commande #plot [0.55:5][0:4] 'data_condo.txt' index 0 u 1:2 #set style line 1 lt 0 lw 4 plot [0:30][8:9]\ 'gene/data_gene_9V_8piles.txt' index 0 u 1:2:3:4 title 'Série 0' pt 4 lc rgb 'grey60' w xyerrorbars,\ 'gene/data_gene_9V_8piles.txt' index 1 u 1:2:3:4 title 'Série 1' pt 4 lc rgb 'violet' w xyerrorbars,\ f(x) title title_f(a,b) lc 'green' \end{gnuplot} \caption[Tension vs courant]{Mesure de chute de tension avec huit piles \SI{1,2}{\volt}, potentiomètre \SI{46}{\kilo\ohm} \SI{1}{\watt}}% \label{fig:gene1}% \end{subfigure}% %\end{sidewaysfigure} \hspace{\fill} %\begin{sidewaysfigure} \begin{subfigure}[t]{0.45\textwidth}% %\centering% \begin{gnuplot}[terminal=epslatex,scale=0.5, terminaloptions=font 8 color dashed] set key top right Right set key width 1 set key heigh 1 set key spacing 1.5 set xlabel 'Courant I (\si{\milli\ampere})' # attention il faut parfois utiliser certains guillemets # notamment quand on utilise la commande \si, il faut impérativement des primes '...' set ylabel 'Tension U (\si{\volt})' #Rmaxpot = 46000 # Création du fit des données # --- # la fonction de fit f(x)=-a*x+b fit f(x) 'gene/data_gene_9V_accu9V.txt' index 0 u 1:2 via a,b R=a*1000 title_f(a,b) = sprintf('Fit série 1 : \(U(I) = {%.1f}\cdot I+{%.3f}\)', R, b) # Pour Gnuplot directement en ligne de commande #plot [0.55:5][0:4] 'data_condo.txt' index 0 u 1:2 #set style line 1 lt 0 lw 4 plot [0:35][0:9]\ 'gene/data_gene_9V_accu9V.txt' index 0 u 1:2:3:4 title 'Série 0' pt 4 lc rgb 'grey60' w xyerrorbars,\ f(x) title title_f(a,b) lc 'green' \end{gnuplot} \caption[Tension vs courant]{Mesure de chute de tension avec un accu. de \SI{9}{\volt}, potentiomètre \SI{46}{\kilo\ohm} \SI{1}{\watt}}% \label{fig:gene2}% \end{subfigure} \caption{Premières mesures.} \end{figure}% %\end{sidewaysfigure} \medskip Sur la figure~\ref{fig:gene3}, on voit les résultats pour la mesure de quatre accumulateurs NiMH de \SI{9}{\volt}, le même ensemble de huit accu. NiMH \SI{1,2}{\volt} que pour les résultats de la figure~\ref{fig:gene1}, et une pile AAA R03 \SI{1,5}{\volt}. Les accumulateurs de \SI{9}{\volt} n'étaient pas entièrement chargés. Le premier présentait \SI{3,58}{\volt} à vide, le second \SI{6,13}{\volt}, le troisième \SI{6,89}{\volt} et le dernier \SI{1,23}{\volt}. %\begin{sidewaysfigure} \begin{figure}% \centering% \begin{gnuplot}[terminal=epslatex,scale=1, terminaloptions=font 8 color dashed] set key top right Left set key width 1 set key heigh 1 set key spacing 1.5 set xlabel 'Courant I (\si{\milli\ampere})' # attention il faut parfois utiliser certains guillemets # notamment quand on utilise la commande \si, il faut impérativement des primes '...' set ylabel 'Tension U (\si{\volt})' #Rmaxpot = 1200 # Création du fit des données # la fonction de fit f(x)=-a*x+b fit f(x) 'gene/data_gene_s.txt' index 0 u 1:2 via a,b R1=a*1000 title_f(a,b) = sprintf('--> fit : \(U(I) = {%.1f}\cdot I+{%.3f}\)', R1, b) g(x)=-c*x+d fit g(x) 'gene/data_gene_s.txt' index 1 u 1:2 via c,d R2=c*1000 title_g(c,d) = sprintf('--> fit : \(U(I) = {%.1f}\cdot I+{%.3f}\)', R2, d) h(x)=-e*x+f fit h(x) 'gene/data_gene_s.txt' index 2 u 1:2 via e,f R3=e*1000 title_h(e,f) = sprintf('--> fit : \(U(I) = {%.1f}\cdot I+{%.3f}\)', R3, f) i(x)=-g*x+h fit i(x) 'gene/data_gene_s.txt' index 3 u 1:2 via g,h R4=g*1000 title_i(g,h) = sprintf('--> fit : \(U(I) = {%.1f}\cdot I+{%.3f}\)', R4, h) j(x)=-i*x+j fit j(x) 'gene/data_gene_s.txt' index 4 u 1:2 via i,j R5=i*1000 title_j(i,j) = sprintf('--> fit : \(U(I) = {%.1f}\cdot I+{%.3f}\)', R5, j) k(x)=-k*x+l fit k(x) 'gene/data_gene_s.txt' index 5 u 1:2 via k,l R6=k*1000 title_k(k,l) = sprintf('--> fit : \(U(I) = {%.1f}\cdot I+{%.3f}\)', R6, l) #set style line 1 lt 0 lw 4 plot [0:35][0:9]\ 'gene/data_gene_s.txt' index 0 u 1:2:3:4 title 'Accu.1 \SI{9}{\volt}' pt 4 w xyerrorbars,\ f(x) title title_f(a,b),\ 'gene/data_gene_s.txt' index 1 u 1:2:3:4 title 'Accu.2 \SI{9}{\volt}' pt 4 w xyerrorbars,\ g(x) title title_g(c,d),\ 'gene/data_gene_s.txt' index 2 u 1:2:3:4 title 'Accu.3 \SI{9}{\volt}' pt 4 w xyerrorbars,\ h(x) title title_h(e,f),\ 'gene/data_gene_s.txt' index 3 u 1:2:3:4 title '8 accus \SI{1,2}{\volt}' pt 4 w xyerrorbars,\ i(x) title title_i(g,h),\ 'gene/data_gene_s.txt' index 4 u 1:2:3:4 title 'Accu.4 \SI{9}{\volt}' pt 4 w xyerrorbars,\ j(x) title title_j(i,j),\ 'gene/data_gene_s.txt' index 5 u 1:2:3:4 title 'Pile AAA R03 \SI{1,5}{\volt}' pt 4 w xyerrorbars,\ k(x) title title_k(k,l) \end{gnuplot} \caption[Tension vs courant]{Mesure de chute de tension avec plusieurs accu., une pile et un potentiomètre \SI{1,2}{\kilo\ohm} \SI{1}{\watt}}% \label{fig:gene3}% \end{figure}% %\end{sidewaysfigure} \medskip Sur la figure~\ref{fig:gene4} sont présentées les mesures de décroissance de la tension de six générateurs de \SI{9}{\volt} préalablement chargés. Malheureusement, on ne peut comparer avec ceux de la figure~\ref{fig:gene3}, car tous n'étaient pas présents et je n'ai pas pris note du nom de chaque générateur. Mais on voit évidemment l'effet de la charge de chacun. %\begin{sidewaysfigure} \begin{figure}% \centering% \begin{subfigure}[t]{\textwidth} \centering \caption[Tension vs courant]{Mesure de chute de tension}\label{fig:gene4}% \begin{gnuplot}[terminal=epslatex,scale=1, terminaloptions=font 8 color dashed] set key bottom right Left set key width 1 set key heigh 1 set key spacing 1.5 set xlabel 'Courant I (\si{\milli\ampere})' # attention il faut parfois utiliser certains guillemets # notamment quand on utilise la commande \si, il faut impérativement des primes '...' set ylabel 'Tension U (\si{\volt})' #Rmaxpot = 1200 # Création du fit des données # la fonction de fit f(x)=-a*x+b fit f(x) 'gene/data_gene_9V_charge.txt' index 0 u 1:2 via a,b R1=a*1000 title_f(a,b) = sprintf('--> fit : \(U(I) = {%.1f}\cdot I+{%.3f}\)', R1, b) g(x)=-c*x+d fit g(x) 'gene/data_gene_9V_charge.txt' index 1 u 1:2 via c,d R2=c*1000 title_g(c,d) = sprintf('--> fit : \(U(I) = {%.1f}\cdot I+{%.3f}\)', R2, d) h(x)=-e*x+f fit h(x) 'gene/data_gene_9V_charge.txt' index 2 u 1:2 via e,f R3=e*1000 title_h(e,f) = sprintf('--> fit : \(U(I) = {%.1f}\cdot I+{%.3f}\)', R3, f) i(x)=-g*x+h fit i(x) 'gene/data_gene_9V_charge.txt' index 3 u 1:2 via g,h R4=g*1000 title_i(g,h) = sprintf('--> fit : \(U(I) = {%.1f}\cdot I+{%.3f}\)', R4, h) j(x)=-i*x+j fit j(x) 'gene/data_gene_9V_charge.txt' index 4 u 1:2 via i,j R5=i*1000 title_j(i,j) = sprintf('--> fit : \(U(I) = {%.1f}\cdot I+{%.3f}\)', R5, j) k(x)=-k*x+l fit k(x) 'gene/data_gene_9V_charge.txt' index 5 u 1:2 via k,l R6=k*1000 title_k(k,l) = sprintf('--> fit : \(U(I) = {%.1f}\cdot I+{%.3f}\)', R6, l) #set style line 1 lt 0 lw 4 plot [0:54][0:10]\ 'gene/data_gene_9V_charge.txt' index 5 u 1:2:3:4 title 'VARTA' pt 4 lc 'dark-blue' w xyerrorbars,\ k(x) title title_k(k,l) lc 'dark-blue',\ 'gene/data_gene_9V_charge.txt' index 4 u 1:2:3:4 title 'ENERGIZER' pt 4 lc 'blue' w xyerrorbars,\ j(x) title title_j(i,j) lc 'blue',\ 'gene/data_gene_9V_charge.txt' index 3 u 1:2:3:4 title 'ACCU ULTRA' pt 4 lc 'light-blue' w xyerrorbars,\ i(x) title title_i(g,h) lc 'light-blue',\ 'gene/data_gene_9V_charge.txt' index 0 u 1:2:3:4 title 'ANSMAN' pt 4 lc 'light-red' w xyerrorbars,\ f(x) title title_f(a,b) lc 'light-red',\ 'gene/data_gene_9V_charge.txt' index 1 u 1:2:3:4 title 'M POWER' pt 4 lc 'red' w xyerrorbars,\ g(x) title title_g(c,d) lc 'red',\ 'gene/data_gene_9V_charge.txt' index 2 u 1:2:3:4 title 'DURACELL' pt 4 lc 'dark-red' w xyerrorbars,\ h(x) title title_h(e,f) lc 'dark-red' \end{gnuplot} \end{subfigure}% %\end{sidewaysfigure} \vspace{5mm} %\begin{sidewaysfigure} \begin{subfigure}[b]{\textwidth}% \centering% \begin{gnuplot}[terminal=epslatex,scale=1, terminaloptions=font 8 color dashed] set key top right Left set key width 6 set key heigh 1 set key spacing 1.5 set xlabel 'Temps t (\si{\hour})' # attention il faut parfois utiliser certains guillemets # notamment quand on utilise la commande \si, il faut impérativement des primes '...' set ylabel 'Tension U (\si{\volt})' #set style line 1 lt 0 lw 4 plot [0:15][0:10]\ 'gene/Accu_Varta_200mAh_9V.txt' index 0 u ($1/3600):2:3:4 title 'VARTA' pt 2 lc 'dark-blue' w xyerrorbars,\ 'gene/Accu_Energizer_175mAh_9V.txt' index 0 u ($1/3600):2:3:4 title 'ENERGIZER' pt 2 lc 'blue' w xyerrorbars,\ 'gene/Accu+Ultra_150mAh_9V.txt' index 0 u ($1/3600):2:3:4 title 'ACCU ULTRA' pt 2 lc 'light-blue' w xyerrorbars,\ 'gene/Accu_Ansmann_200mAh_8.4V.txt' index 0 u ($1/3600):2:3:4 title 'ANSMAN' pt 2 lc 'light-red' w xyerrorbars,\ 'gene/Accu_Mpower_150mAh_8.4V.txt' index 0 u ($1/3600):2:3:4 title 'M POWER' pt 2 lc 'red' w xyerrorbars,\ 'gene/Accu_Duracell_170mAh_9V.txt' index 0 u ($1/3600):2:3:4 title 'DURACELL' pt 2 lc 'dark-red' w xyerrorbars \end{gnuplot} \caption[Tension vs courant]{Chute de tension vs temps}\label{fig:gene5}% \end{subfigure} \caption{Plusieurs accu. \SI{9}{\volt} et une résistance \SI{455}{\ohm} \SI{0.25}{\watt}} \end{figure}% %\end{sidewaysfigure} \subsection{Moteur} \subsubsection{Résistance interne} Commençons par la détermination de la résistance interne du moteur. Deux moteurs CC vont être utilisés. Un petit moteur très bon marché acheté chez Opitec, dont la documentation technique mentionne : \begin{verbatim} Moteur R20 ou R140 1,5 - 4,5V DC 20g diam 21 mm, 25 mm long, diam 2 mm 1,5V - 8400 trs/min - 230 mA 3V - 14200 trs/min - 280 mA \end{verbatim} et un moteur d'origine inconnue et sans documentation. Après plusieurs essais de mesure de la tension et du courant avec l'INA en mode de mesure du courant maximum de \SI{300}{\milli\ampere} en augmentant la tension de \SI{0}{} à moins de \SI{2}{\volt} de façon à ne pas dépasser le courant maximum de l'INA et avec le moteur inconnu en mode bloqué, le constat est que les mesures sont très peu linéaires au début est à la fin. Il existe bien une zone où une certaine linéarité est présente, mais ce n'est pas évident. En travaillant le problème, on remarque qu'en mode non bloqué, ce moteur ne démarre pas immédiatement. Par ailleurs, il semble non polarisé, c'est-à-dire qu'on peut inverser ses pôles et il fonctionne toujours correctement. \smallskip Pour le moteur d'Opitec, bizarrement, il semble polarisé. Directement branché sur le générateur, il ne fonctionne que dans un sens. Pourtant aucune indication de polarité n'est présente sur le moteur. \smallskip Le constat de mesures faiblement linéaires en mode bloqué, m'a fait tester sur le moteur d'Opitec une capacité en parallèle avec la même polarisation que le moteur et sur le moteur inconnu, une diode de retour de courant classiquement utilisée pour protéger les moteurs. La figure \ref{figure:2mot} présente la situation. Sur la figure \ref{figure:motopitec} la capacité est clairement visible, puisqu'elle est reliée directement aux bornes du moteur. Par contre, sur la figure \ref{figure:motinconnu}, c'est en arrière plan, à côté de la LED qu'on voit la diode. On voit aussi ce deux moteurs non bloqués. En mode bloqués, une pince crocodile se trouvait attachée à leur axe. Pour le moteur inconnu, on voit une structure en bois sur laquelle on peut distinguer la présence d'un petit aimant qui va servir à déterminer sa vitesse de rotation. \begin{figure} \centering \begin{subfigure}{0.45\textwidth} \centering \includegraphics[scale=0.7]{images/MotOpitec.eps} \caption[Moteur]{Le moteur d'Opitec}\label{figure:motopitec} \end{subfigure} \hspace{3mm} \begin{subfigure}{0.45\textwidth} \centering \includegraphics[scale=0.7]{images/MotInconnu.eps} \caption[Moteur]{Le moteur inconnu}\label{figure:motinconnu} \end{subfigure} \caption{Résistance interne de deux moteurs}\label{figure:2mot} \end{figure} Les multiples essais opérés en augmentant la tension en mode bloqué s'étant avéré de mauvaise qualité, l'idée de partir de la tension maximale et de la diminuer est venue. La procédure est la suivante : On fait tourner le moteur pour que le courant tourne autour de \SI{250}{\milli\ampere}. Puis, brutalement on le bloque et rapidement on descend la tension en effectuant des mesures très régulièrement jus qu'à zéro. Si, à priori le résultat devait être le même, ce ne fut pas le cas. Les mesures présentées sur le graphe de la figure \ref{fig:resistancemot} le montrent. %\begin{sidewaysfigure} \begin{figure}% \centering% \begin{gnuplot}[terminal=epslatex,scale=1, terminaloptions=font 8 color dashed] set key top left Left set key width 3.5 set key heigh 1 set key spacing 1.5 set xlabel 'Courant I (\si{\milli\ampere})' # attention il faut parfois utiliser certains guillemets # notamment quand on utilise la commande \si, il faut impérativement des primes '...' set ylabel 'Tension U (\si{\volt})' # Création du fit des données # la fonction de fit f(x)=a*x/1000+b fit f(x) 'moteur/data_2mot_bloques.txt' index 0 u 2:1 via a,b title_f(a,b) = sprintf('\(R = \SI{%.2f}{\ohm}\)', a) # Création du fit des données # la fonction de fit g(x)=c*x/1000+d fit g(x) 'moteur/data_2mot_bloques.txt' index 1 u 2:1 via c,d title_g(c,d) = sprintf('\(R = \SI{%.2f}{\ohm}\)', c) # Création du fit des données # la fonction de fit h(x)=e*x/1000+f fit h(x) 'moteur/data_mot_inconnu_bloque.txt' index 1 u 2:1 via e,f title_h(e,f) = sprintf('\(R = \SI{%.2f}{\ohm}\)', e) plot [0:300][0:1.2]\ 'moteur/data_2mot_bloques.txt' index 0 u 2:1:4:3 title 'Moteur Opitec condo' pt 4 w xyerrorbars,\ f(x) title title_f(a,b) lc 'violet',\ 'moteur/data_2mot_bloques.txt' index 1 u 2:1:4:3 title 'Moteur inconnu diode' pt 4 w xyerrorbars,\ g(x) title title_g(c,d) lc 'blue',\ 'moteur/data_mot_inconnu_bloque.txt' index 1 u 2:1:4:3 title 'Moteur inconnu condo' pt 4 w xyerrorbars,\ h(x) title title_h(e,f) lc 'orange' \end{gnuplot} \caption[Moteurs]{Résistance interne de deux moteurs}% \label{fig:resistancemot}% \end{figure}% %\end{sidewaysfigure} Il faut mentionner que la mesure directe avec un ohmmètre de la résistance interne du moteur Opitec a donné \SI{1}{\ohm} et que celle du moteur inconnu a donné environ \SI{50}{\ohm}. Visiblement la qualité des mesures pour le moteur inconnu dépend surtout de la manière de diminuer la tension. L'utilisation d'un condensateur à la place d'une diode ne change rien. Relevons encore que le blocage des deux moteurs n'a pas posé de problème d'échauffement. Aucun des deux moteurs n'a été endommagé. \subsubsection{Constante de proportionnalité} Pour la détermination de la constante de proportionnalité, il a fallu mélanger les trois système que sont le moteur, l'INA et le compteur de tours magnétique dans la même expérience. Le résultat est présenté à la figure \ref{fig:kmot}, page \pageref{fig:kmot}. %\begin{sidewaysfigure} \begin{figure}% \centering% \begin{gnuplot}[terminal=epslatex,scale=1, terminaloptions=font 8 color dashed] set key top left Left set key width 3.5 set key heigh 1 set key spacing 1.5 set xlabel 'Vitesse angulaire \(\omega\) (\si{\radian\per\second})' # attention il faut parfois utiliser certains guillemets # notamment quand on utilise la commande \si, il faut impérativement des primes '...' set ylabel 'Tension U (\si{\volt})' # Création du fit des données # la fonction de fit f(x)=a*x+b fit f(x) 'moteur/data_mot_hall_inconnu_TOP.txt' index 1 u 1:2 via a,b title_f(a,b) = sprintf('\(k = \SI{%.4f}{\volt\second\per\radian}\)', a) g(x)=c*x+d fit g(x) 'moteur/data_mot_hall_3.txt' index 0 u 1:2 via c,d title_g(c,d) = sprintf('\(k = \SI{%.4f}{\volt\second\per\radian}\)',c) h(x)=e*x+f fit h(x) 'moteur/data_mot_hall_k_Opitec.txt' index 0 u 1:2 via e,f title_h(e,f) = sprintf('\(k = \SI{%.4f}{\volt\second\per\radian}\)',e) k(x)=m*x+n fit k(x) 'moteur/data_mot_hall_k_Opitec.txt' index 1 u 1:2 via m,n title_k(m,n) = sprintf('\(k = \SI{%.4f}{\volt\second\per\radian}\)',m) l(x)=o*x+p fit l(x) 'moteur/data_mot_hall_k_Opitec.txt' index 2 u 1:2 via o,p title_l(o,p) = sprintf('\(k = \SI{%.4f}{\volt\second\per\radian}\)',o) plot [0:450][0:4]\ 'moteur/data_mot_hall_inconnu_TOP.txt' index 1 u 1:2 title 'Moteur inconnu série 1' pt 4,\ f(x) title title_f(a,b) lc 'violet',\ 'moteur/data_mot_hall_3.txt' index 0 u 1:2:5:6 title 'Moteur inconnu série 2' pt 4 w xyerrorbars,\ g(x) title title_g(c,d) lc 'blue',\ 'moteur/data_mot_hall_k_Opitec.txt' index 0 u 1:2:5:6 title 'Moteur Opitec série 0' pt 4 w xyerrorbars,\ h(x) title title_h(e,f) lc 'yellow',\ 'moteur/data_mot_hall_k_Opitec.txt' index 1 u 1:2:5:6 title 'Moteur Opitec série 1' pt 4 w xyerrorbars,\ k(x) title title_k(m,n) lc 'red',\ 'moteur/data_mot_hall_k_Opitec.txt' index 2 u 1:2:5:6 title 'Moteur Opitec série 2' pt 4 w xyerrorbars,\ l(x) title title_l(o,p) lc 'orange' \end{gnuplot} \caption[KMoteur]{Constante k du moteur inconnu}% \label{fig:kmot}% \end{figure}% %\end{sidewaysfigure} Les deux séries de mesures pour le moteur inconnu ont été faites en commençant avec un moteur en rotation maximale. L'abaissement de la tension a permis d'obtenir des vitesses de rotations plus faibles que si on avait démarré avec une tension nulle et élevé celle-ci progressivement. En effet, les frottements entravaient tellement le moteur à faible vitesse de rotation qu'il ne démarrait que par à coup, alors qu'en diminuant sa vitesse, il s'arrêtait avec une vitesse plus faible qu'il ne démarrait. \smallskip Sur le graphe de la figure \ref{fig:kmot}, on voit deux séries de mesures prises dans les mêmes conditions pour le moteur inconnu. Ce sont celles dont les pentes sont les plus importantes. La différence est que sur la première les incertitudes ne sont pas présentes. Si elles le sont sur la seconde, elles sont clairement trop faibles. Cela est certainement dû à une sous estimation de l'incertitude de la résistance interne prise à \SI{0,1}{\ohm}, pour une valeur de celle-ci à \SI{3,17}{\ohm}, soit 3,2\% d'incertitude alors que la figure \ref{fig:resistancemot} présente deux mesures de la résistance interne de ce moteur à \SI{3,17} et \SI{3,47}{\ohm}, soit un écart de \SI{0,3}{\ohm} supplémentaire qui représente presque 10\% supplémentaires. \smallskip On voit aussi trois autres séries de mesures pour le moteur Opitec. Ce sont les trois séries de plus faible pente. Pour ces mesures, la résistance interne utilisée est de \SI{1,18}{\ohm}. Mais, cette fois, son incertitude à été portée à \SI{0,5}{\ohm}, ce qui représente une incertitude relative de 42\% tout de même. De plus, pour des raisons pratiques, le moteur cylindrique étant mal fixée sur la planche, il a fallu augmenter la tension plutôt que de la diminuer dans les deux premiers cas. Seul le dernier correspond à des mesures faites en diminuant la tension. En relevant que le meilleur moyen de faire varier progressivement la tension était simplement d'écouter le moteur dont le bruit changeait clairement avec elle, il faut souligner que le moteur Opitec avec de nombreuses variation de vitesse de rotation pendant la mesure. Enfin, il suffisait d'appuyer sur celui-ci ou de le faire basculer en avant ou arrière pour que la vitesse de rotation change. Les deux dernières série de mesures pour ce moteur ayant été faites en tentant de stabiliser le moteur par appui sur celui-ci pendant la rotation, au son, on a pu constater une légère augmentation de la vitesse qui se traduit sur la figure \ref{fig:kmot} par deux droites légèrement déplacées vers le haut. \subsubsection{Puissance maximale} À l'aide du dispositif expérimental de la figure %\ref{} ... %\begin{sidewaysfigure} \begin{figure}% \centering% \begin{gnuplot}[terminal=epslatex,scale=1, terminaloptions=font 8 color dashed] set key bottom left Left set key width 3.5 set key heigh 1 set key spacing 1.5 set xlabel 'Courant \(I\) (\si{\ampere})' # attention il faut parfois utiliser certains guillemets # notamment quand on utilise la commande \si, il faut impérativement des primes '...' set ylabel 'Puissance \(P_{mec}\) (\si{\milli\watt})' # Création du fit des données # la fonction de fit f(x)=a*x**2+b*x+c fit f(x) 'moteur/data_mot_hall_poids2.txt' index 0 u 4:($2*$4) via a,b,c title_f(a,b,c) = sprintf('Parabolique : \({%.3f}\cdot x^2+{%.1f}\cdot x+{%.1f}\)',a,b,c) plot [100:300][0:800]\ 'moteur/data_mot_hall_poids2.txt' index 0 u 4:($2*$4):8:($4*$6+$2*$8) title 'Moteur inconnu, \(I_{max}=\SI{400}{\milli\ampere}\)' pt 4 w xyerrorbars,\ f(x) title title_f(a,b,c) lc 'violet' \end{gnuplot} \caption[Puissance Moteur]{Puissance maximale du moteur}% \label{fig:pmot}% \end{figure}% %\end{sidewaysfigure} \section{Discussion} \subsection{Résistances} Dans un premier temps les mesures faites n'étaient pas très bonnes, puisqu'un écart d'environ 45\% a été obtenu sur une résistance de \SI{100}{\kilo\ohm}. Or, avec une précision sur le courant de l'ordre de \SI{0,1}{\milli\ampere} et une tension maximum du générateur de \SI{11}{\volt}, comme le courant maximum était : \[I_{max.}=U_{max.}/R=11/100'000=\SI{0,11}{\milli\ampere}\] la précision était insuffisante. En mode \SI{16}{\volt} maximum, soit pour une résolution de \SI{0,1}{\milli\ampere}, la mesure de résistance de valeur aussi importante n'est clairement pas possible. Je n'ai pas testé la mesure en mode \SI{32}{\volt}, avec une résolution annoncée de \SI{0,8}{\milli\ampere}, car mon générateur ne dépassait pas \SI{11}{\volt}. De plus, les générateurs du lycée ne dépassant pas \SI{20}{\volt}, cela m'a semblé inutile. \medskip Avec des valeurs de résistance plus basse, le principal problème devenait de ne pas dépasser la valeur maximale de puissance de ¼W, avec les résistances que j'avais à disposition. Une modification du programme s'est donc avérée nécessaire pour m'avertir d'un éventuel dépassement. Ce dépassement à pourtant été réalisé avec une résistance de \SI{50}{\ohm} soumise à une tension de \SI{11}{\volt}, soit une puissance de \SI{2,42}{\watt} ! Elle a bien noirci, mais la mesure par la pente du graphe \(U=R\cdot I\) n'a donné qu'un écart de 12\% et c'est cette résistance qui a été utilisée par la suite et à donné les mesures du graphe~\ref{pic:latex}, dans un domaine de puissance correct cependant. Cela pour dire que ces résistances sont solides. \medskip Dans l'ensemble les mesures sont de bonne qualité, pour autant qu'on s'en tienne à un domaine de puissance correct ne dépassant pas la valeur maximale admise par chaque résistance. Pour cela, une modification du programme a été réalisée demandant cette puissance (en \si{\milli\watt}) à chaque nouvelle série de mesure. Les résultats sont excellents. Les écarts sont inférieurs ou égaux à 1\% et cela en raison du grand nombre de mesures réalisées. En effet, avec une dizaine de mesures, certains résultats étaient supérieurs à 1\%. On peut même se demander si l'incertitude de l'ohmmètre n'est pas surestimée. \subsection{Générateur} La mesure de la décroissance de la tension a été difficile à réaliser, car la valeur des potentiomètre utilisés était soit trop importante (\SI{46}{\kilo\ohm}) mais avec une puissance maximale de \SI{1}{\watt}, soit avec une puissance inférieure à \SI{100}{\milli\watt} qui fait que deux d'entre eux ont grillés. De plus, quand la résistance devient faible, la linéarité n'est plus bonne et il faut faire très attention, car le courant monte soudainement très vite. \medskip La comparaison des deux graphes des figures~\ref{fig:gene1} et~\ref{fig:gene3}, montre pour les huit accumulateurs NiMH de \SI{1,2}{\volt} la mesure d'une résistance interne de \SI{6,5}{\ohm} et \SI{9,9}{\ohm}. Le graphe de la figure~\ref{fig:gene4}, qui présente la décroissance de la tension avec le courant pour des générateurs chargés au maximum est intéressant. On voit que, chargés, tous présentent une tension à vide de \SI{9}{\volt} si on suit la régression linéaire. Mais pour une même charge initiale (environ \SI{1,2}{\kilo\ohm}), la tension initiale n'est absolument pas la même. De plus, leur résistance interne est totalement différente. Pour trois d'entre eux (Accu Ultra, Mpower et Duracell) elle est importante, voire très importante. On peut supposer que c'est là le signe d'accumulateurs en fin de vie. Les trois autres (Varta, Energizer et Ansman) présentent une tensions élevée quasiment constante et donc une très faible résistance interne. Sur la figure~\ref{fig:gene5}, où les accumulateurs sont identiques à ceux de la figure~\ref{fig:gene4}, les couleurs étant respectées, on voit que la décharge au cours du temps n'est pas toujours continue et varie beaucoup selon les générateurs. Cependant, si on compare les deux graphes, on voit qu'à part le couple Accu Ultra et Ansman qui sont inversés, plus la résistance interne est grande, plus la décroissance de la tension se fait rapidement. \subsection{Moteur} \subsubsection{Résistance interne} \subsubsection{Constante de proportionnalité} On constate une valeur de la constante k quatre fois inférieure pour le moteur Opitec, par rapport au moteur inconnu : env. \SI{0,002}{\volt\second\per\radian} pour le premier, contre \SI{0,008}{\volt\second\per\radian} pour le second. \section{Conclusion} L'INA219 est vraiment un multimètre très performant. Il est particulièrement adapté à des mesures réalisées avec des élèves d'option spécifiques de physique soutenus par des élèves d'option complémentaire informatique. \newpage \begin{thebibliography}{9} \bibitem{MonkS16}S.~Monk, \emph{Mouvement lumière et son avec ARDUINO et RASPBERRY PI}, Eyroles, 2016. \bibitem{KarvinenT14}T.~Karvinen, K.~Karvinen et V. Baltokari, \emph{Les capteurs pour Arduino et Raspberry Pi}, Dunod, 2104. \end{thebibliography} \newpage \section{Annexes} \appendix \section{Drivers INA219}\label{annexe:driver} Cette annexe présente l'installation des drivers pour l'INA219 sur raspberrypi 4. Deux possibilités sont offertes pour utiliser l'INA219 sur cette plateforme : \begin{description} \item[pi-ina219] une librairie python « for Voltage and Current Sensors Using the INA219 » disponible à l'adresse \url{https://github.com/chrisb2/pi_ina219} et compatible python2 et python3. \item[CircuitPhyton] un ensemble de librairies permettant d'utiliser l'INA219 mais aussi l'INA260, non utilisé ici, mais uniquement avec python3. La référence est :\\\url{https://cdn-learn.adafruit.com/downloads/pdf/adafruit-ina219-current-sensor-breakout.pdf?timestamp=1583432707}. \end{description} La seconde solution est développée plus bas, mais sans exemples d'utilisation, puisque l'ensemble de ce travail a été réalisé avec l'INA219. \subsection{INA219 : installation} Conformément à la réfécence donnée ci-dessus au point 1, l'installation se fait avec PIP pour python 3 par : \begin{lstlisting}[language=sh,caption={Installation de la librairie de l'INA.},label={listing:installINA},numbers=right,numberstyle=\tiny,numbersep=6pt] sudo apt-get install python3-pip sudo pip3 install pi-ina219 \end{lstlisting} Il ne faut pas oublier d'activer le bus I2C dans les options avancées de l'outil de configuration du raspberry : \emph{raspi-config} et, toujours selon cette référence, l'utilisation est alors simplement celle donnée par le listing~\ref{listing:utilINA}. On y voit que la déclaration de la librairie est très simple et que l'objet ina créé et configuré, quatre instructions permettent de récupérer le courant, la tension, la puissance et la tension de shunt. Chacune est une méthode de cet objet (\emph{ina.voltage()}, \emph{ina.current()}, \emph{ina.power()} et \emph{ina.shunt\_voltage()}). Il faut relever que la tension de shunt est la tension aux bornes de la résistance éponyme qui est de \SI{0,1}{\ohm}, que la tension de bus, ou tension de charge, est la tension entre la terre et la broche Vin- de l'INA219 (voir figure~\ref{figure:dispos}, page \pageref{figure:dispos}) et donc que la tension entre la borne Vin+ de l'INA219 est la somme des tensions de bus et de shunt. Ces tension sont mesurées en \si{\volt}, alors que le courant est lui mesuré en \si{\milli\ampere}. \begin{lstlisting}[float,language=python,caption={Utilisation de la librairie de l'INA.},label={listing:utilINA},numbers=right,numberstyle=\tiny,numbersep=6pt] #!/usr/bin/env python from ina219 import INA219 from ina219 import DeviceRangeError SHUNT_OHMS = 0.1 # MAX_EXPECTED_AMPS = 2.0 # MAX_EXPECTED_AMPS = 0.3 # ina = INA219(SHUNT_OHMS, MAX_EXPECTED_AMPS) # ina.configure(ina.RANGE_16V, ina.GAIN_1_40MV) # ina.configure(ina.RANGE_16V) def read(): ina = INA219(SHUNT_OHMS) ina.configure() print("Bus Voltage: %.3f V" % ina.voltage()) try: print("Bus Current: %.3f mA" % ina.current()) print("Power: %.3f mW" % ina.power()) print("Shunt voltage: %.3f mV" % ina.shunt_voltage()) except DeviceRangeError as e: # Current out of device range with specified shunt resistor print(e) if __name__ == "__main__": read() \end{lstlisting} L'INA219 est constitué d'un élément permettant de mesurer physiquement la tension aux bornes de la résistance de shunt et celle du bus et d'un convertisseur analogique-logique (ADC : Analogic Digital Converter). La documentation de référence se trouve à l'adresse : \url{https://www.ti.com/lit/ds/symlink/ina219.pdf} et dit ceci à la page 10 : \begin{quotation} \emph{"The INA219 can be used without any programming if it is only necessary to read a shunt voltage drop and bus voltage with the default 12-bit resolution, 320-mV shunt full-scale range (PGA = /8), 32-V bus full-scale range, and continuous conversion of shunt and bus voltage.} \emph{Without programming, current is measured by reading the shunt voltage. The Current register and Power register are only available if the Calibration register contains a programmed value.}" \end{quotation} Conformément au diagramme fonctionnel présenté au paragraphe 8.2 de la page 9 de la documentation de référence et reproduit ici à la figure~\ref{fig:diagfonctina}, ce sont les tensions de bus et de shunt qui sont mesurées et les courant et puissance sont dérivés. \begin{figure} \caption[Diag. fonct.]{Diagramme fonctionnel de l'INA}\label{fig:diagfonctina} \smallskip \centering \includegraphics[scale=0.6]{images/INA219DiagFonct.eps} \end{figure} Plusieurs modes de fonctionnement sont possibles. Ils sont donnés dans le listing~\ref{listing:modesINA} qui est tiré du code source utilisé dans le module ina219.py : \url{https://github.com/chrisb2/pi_ina219/blob/master/ina219.py}. La description des fonctionnalités et des exemples d'utilisation du module sont à l'adresse : \url{https://github.com/chrisb2/pi_ina219}. On constate la possibilité de configurer deux domaines de tension : \SI{16}{\volt} et \SI{32}{\volt} (mode par défaut) et différents gains au niveau du shunt qui permettent une tension maximale de shunt de \SI{320}{\milli\volt}. Avec une résistance de shunt de \SI{0,1}{\ohm}, cela représente un courant de \SI{3,2}{\ampere}. Avec ce mode par défaut, soit avec une amplification de gain programmée (PGA) de 8 fois (\(8\cdot 40=\SI{320}{\milli\volt}\)) et une résolution par défaut de 12 bits, soit \(2^{12}=4096\) niveaux, le courant par bit, soit la résolution de la mesure de courant vaut \(3,2/4096=\SI{0,8}{\milli\ampere}\). Or, la précision de la mesure, tant en tension qu'en courant est annoncée dans la documentation (p. 5), typiquement à 0,2\% et au maximum à 0,5\%, ce qui représente au maximum \SI{16}{\milli\ampere}. On comprends ainsi que le choix du nombre de bits de conversion analogique-digital est surtout important pour les temps de conversion, comme par exemple pour la mesure de la décroissance de condensateurs à faible capacités. \begin{lstlisting}[float,language=python,caption={Modes de fonctionnement de l'INA219.},label={listing:modesINA},numbers=right,numberstyle=\tiny,numbersep=6pt] RANGE_16V = 0 # Range 0-16 volts RANGE_32V = 1 # Range 0-32 volts GAIN_1_40MV = 0 # Maximum shunt voltage 40mV GAIN_2_80MV = 1 # Maximum shunt voltage 80mV GAIN_4_160MV = 2 # Maximum shunt voltage 160mV GAIN_8_320MV = 3 # Maximum shunt voltage 320mV GAIN_AUTO = -1 # Determine gain automatically ADC_9BIT = 0 # 9-bit conversion time 84us ADC_10BIT = 1 # 10-bit conversion time 148us ADC_11BIT = 2 # 11-bit conversion time 2766us ADC_12BIT = 3 # 12-bit conversion time 532us ADC_2SAMP = 9 # 2 samples at 12-bit, conversion time 1.06ms ADC_4SAMP = 10 # 4 samples at 12-bit, conversion time 2.13ms ADC_8SAMP = 11 # 8 samples at 12-bit, conversion time 4.26ms ADC_16SAMP = 12 # 16 samples at 12-bit,conversion time 8.51ms ADC_32SAMP = 13 # 32 samples at 12-bit, conversion time 17.02ms ADC_64SAMP = 14 # 64 samples at 12-bit, conversion time 34.05ms ADC_128SAMP = 15 # 128 samples at 12-bit, conversion time 68.10ms \end{lstlisting} La lecture du document de référence cité ci-dessus est intéressante, mais complexe. Ce rapport étant essentiellement tourné vers l'utilisation de l'INA219 dans le cadre de composants électroniques, il suffira de dire qu'à la création de l'objet ina, la valeur de la résistance de shunt (\SI{0,1}{\ohm}) et le courant attendu maximal peuvent lui être passés. Ces indications serviront à déterminer automatiquement le gain. On peut aussi spécifier la tension maximale admise pour les même raisons, mais au niveau de la procédure de configuration. Pour les mesures effectuées (voir listing~\ref{listing:INA}, page \pageref{listing:INA}), \SI{16}{\volt} au maximum ont été prévus et un courant maximum de \SI{300}{\milli\ampere}. \medskip La documentation de l'INA219 précise que la précision des mesures, tant sur la tension que sur le courant, est de 0.5\% au maximum. Cette indication est importante, mais les conditions de configuration sous lesquelles elles pourrait être plus faible, sont peu claires. Nous en resterons donc là dans ce travail. \subsection{INA260 : installation} Blabla \dots \section{Introduction aux LEDs} \subsection{Les LEDs} Les « Light Emitting Diodes » ou LED sont d'abord des diodes. Une diode est un élément électronique polarisé, c'est-à-dire qu'il a un comportement dans un sens qu'il n'a pas dans l'autre. \subsubsection{Fonctionnement inverse} Dans ce sens, une diode ne laisse pas passer le courant. On peut élever la tension, aucun courant ne circulera. Pour les diodes classiques, on peut fortement élever la tension, dite inverse, avant d'endommager le composant. Pour une LED, une tension inverse maximale se situe de \SI{3}{} à \SI{5}{\volt}. \subsubsection{Fonctionnement direct} Dans ce sens, une diode présente un seuil à partir duquel le courant passe. Pour une diode classique, une valeur typique de seuil est de \SI{0,7}{\volt}. Pour une LED, une valeur typique de seuil est de \SI{2}{\volt}. Il ne s'agit pas d'une transition très franche, mais on passe sur quelques dixièmes de volts d'un courant nul, à des valeurs de quelques dizaines de milli-ampères. \subsubsection{Rayonnement} Une diode classique ne rayonne pas. Une LED émet un rayonnement qui peut être de couleur différente. Il existe des LEDs rouges, jaunes, vertes, bleues, \dots et même infrarouges ou ultraviolettes. \subsubsection{Physique des semi-conducteurs} Une diode est un semi-conducteur électroluminescent. De quoi s'agit-il ? À vous de vous renseigner. \subsubsection{Le composant} Le composant est simple. Le schéma de la figure \ref{fig:composantled} le présente\footnote{Voir Wikimedia Commons : \url{https://commons.wikimedia.org/wiki/File:LED,_5mm,_green_(en).svg}}. \begin{figure} \caption[LES]{Le composant LED}\label{fig:composantled} \smallskip \centering \includegraphics[scale=0.6]{images/LED.eps} \end{figure} On y voit que celui-ci est composé d'une anode et d'une cathode. Physiquement, elles se distinguent par le fait que l'anode a une longueur plus important que la cathode. Or, l'anode est la partie de la LED qui doit se trouver au potentiel le plus haut, soit sur la broche de \SI{3,3}{\volt} du raspberrypi. On constate aussi que la cathode, la broche négative se trouve indiquée par un méplat sur le composant. \subsection{Le GPIO} On parle de ports GPIO pour désigner les entrées/sorties numériques à usage général (General Purpose digital Input/Output) du raspberry (ou d'un autre microordinateur). Il s'agit de broches lui permettant de communiquer avec l'extérieur. La figure \ref{figure:gpioschema} présente l'ensemble des broches avec quelques indications de fonctionnement que nous allons reprendre ci-dessous\footnote{Il faut savoir que les fonctions supplémentaires au fonctionnement GPIO des broches sont en réalité bien plus nombreuses que le montre la figure \ref{figure:gpioschema}. Pour en avoir une idée plus précise, voyez la référence suivante \url{https://microcontrollerslab.com/raspberry-pi-4-pinout-description-features-peripherals-applications/}}. \medskip Il existe deux notations possibles pour les broches du GPIO. L'une est la numérotation dite physique. L'autre est la numérotation Broadcom (BCM ou GPIO) qui permet d'utiliser la librairie RPI.GPIO et dont les numéros correspondent aux registres de la puce ARM BCM. \smallskip Du point de vue logiciel, chacun de ces deux mode de numérotation est accessible par configuration du GPIO. Ainsi, pour la numérotation physique on la déclare grâce aux lignes du listing \ref{listing:declarphys}. Pour la numérotation BCM, on la déclare grâce aux lignes du listing \ref{listing:declarBCM}. \begin{lstlisting}[float,language=python,caption={Le code de clignotement de la LED.},label={listing:declarphys},numbers=right,numberstyle=\tiny,numbersep=6pt] import RPi.GPIO as GPIO # Définition du mode de nommage des broches GPIO.setmode(GPIO.BOARD) \end{lstlisting} \begin{lstlisting}[float,language=python,caption={Le code de clignotement de la LED.},label={listing:declarBCM},numbers=right,numberstyle=\tiny,numbersep=6pt] import RPi.GPIO as GPIO # Définition du mode de nommage des broches GPIO.setmode(GPIO.BCM) \end{lstlisting} \smallskip Évidemment, comme ce sont des entrées sorties, les broches GPIO peuvent être utilisées soit en entrée, soit en sortie\footnote{Voir le meilleurs site de référence : \url{https://microcontrollerslab.com/raspberry-pi-4-pinout-description-features-peripherals-applications/.}}. Quelque soit le mode, ce sont des entrées/sorties numériques. Elles ne délivrent ou ne reçoivent que des niveaux bas (\SI{0}{\volt}) ou haut (\SI{3.3}{\volt}). Le raspberry ne dispose pas d'entrée analogique, mais peut simuler des sorties analogiques grâce notamment au mode PWM (Pulse Width Modulation). \begin{figure} \centering \includegraphics[scale=1]{GPIO.eps} \caption{Le port GPIO} \label{figure:gpioschema} \end{figure} \subsection{GPIO en direct} Avec au plus \SI{20}{\milli\ampere} par broche du GPIO, une connection directe de la LED est envisageable. Mais le courant de fonctionnement normal était généralement de \SI{10}{\milli\ampere}, mettre la LED en série avec une résistance est plus prudent. Les broches de contrôle en sortie du raspberry délivrant une tension de \SI{3,3}{\volt} et la tension de fonctionnement des LEDs utilisées se situant aux alentours de \SI{2}{\volt}, la tension couverte par la résistance constitue la différence, soit \SI{1,3}{\volt}. Pour qu'un courant de \SI{10}{\milli\ampere} la traverse, il faut une résistance de~: \[R=\frac{U}{I}=\frac{1,3}{10\cdot 10^{-3}}=\SI{130}{\ohm}\] Le branchement se fait donc entre la broche 17 du GPIO (11\ieme broche) et l'une des broches GND (6\ieme broche), qui est la terre, avec une résistance normalisée à \SI{180}{\ohm} en série, comme le montre la figure \ref{figure:led180ohm} et le schéma de la figure \ref{figure:rpiresistdiodeschema}. \begin{figure} \centering \input{images/RPI_resistance_diode.eps_tex} \caption{Diode commandée à travers une résistance} \label{figure:rpiresistdiodeschema} \end{figure} Pour comparaison, la figure \ref{figure:led50ohm} montre la luminosité obtenue avec une résistance de \SI{50}{\ohm}. Avec une telle résistance, le courant traversant la résistance change. Pour comparaison, on a~: \[I_{\SI{180}{\ohm}}=\frac{1,3}{180}=\SI{7,2}{\milli\ampere}\;\text{;}\;I_{\SI{50}{\ohm}}=\frac{1,3}{50}=\SI{26}{\milli\ampere}\] \begin{figure} \centering \begin{subfigure}{0.45\linewidth} \includegraphics[scale=0.5]{led180ohm.eps} \caption{Résistance de \SI{180}{\ohm}} \label{figure:led180ohm} \end{subfigure} \hfill \begin{subfigure}{0.45\linewidth} \includegraphics[scale=0.5]{led50ohm.eps} \caption{Résistance de \SI{50}{\ohm}} \label{figure:led50ohm} \end{subfigure} \caption{LED et résistances} \label{figure:ledsetresistances} \end{figure} Le code nécessaire pour faire clignoter cette LED est simple. Il est donné au listing \ref{listing:ledresistance}. \begin{lstlisting}[float,language=python,caption={Le code de clignotement de la LED.},label={listing:ledresistance},numbers=right,numberstyle=\tiny,numbersep=6pt] import RPi.GPIO as GPIO (*@\label{listing:declargpio}@*) import time (*@\label{listing:declartime}@*) # Définition du mode de nommage des broches GPIO.setmode(GPIO.BCM) (*@\label{listing:declarbcm}@*) # Définition de la broche utilisée control_pin = 17 (*@\label{listing:controlpin}@*) # Déclaration du mode de sortie pour cette broche GPIO.setup(control_pin, GPIO.OUT) (*@\label{listing:pininout}@*) try: while True: (*@\label{listing:boucle}@*) # Boucle ininterrompue # Extinction GPIO.output(control_pin, False) (*@\label{listing:eteint}@*) time.sleep(5) (*@\label{listing:pause}@*) # Allumage GPIO.output(control_pin, True) (*@\label{listing:allume}@*) time.sleep(2) finally: # Si problème, remise à entrée de toutes # les broches évitant des cours circuit print('Nettoyage') GPIO.cleanup() (*@\label{listing:clean}@*) \end{lstlisting} Le code \ref{listing:ledresistance} se comprend comme suit~: \begin{enumerate} \item ligne \ref{listing:declargpio}~: on déclare la bibliothèque nécessaire pour la gestion du GPIO et on lui donne le nom GPIO, \item ligne \ref{listing:declartime}~: on déclare la bibliothèque nécessaire pour faire attendre le programme via time.sleep, \item ligne \ref{listing:declarbcm}~: on déclare comment on va nommer les pins, ici selon BroadCoM, c'est-à-dire selon les numéros GPIO et pas le numéro des broches, \item ligne \ref{listing:controlpin}~: on met la valeur de la broche choisie pour alimenter la LED dans la variable control\_pin, \item ligne \ref{listing:pininout}~: on définit le mode sortie pour cette broche, \item ligne \ref{listing:boucle}~: on lance la boule principale du programme, \item ligne \ref{listing:eteint}~: on éteint la LED, \item ligne \ref{listing:pause}~: on patiente, \item ligne \ref{listing:allume}~: on allume la LED et \item ligne \ref{listing:clean}~: si un problème est constaté, on met toutes les broches en mode entrée, ce qui évite les courts-circuits. En effet, si on met accidentellement le câble d'une broche à la terre et que celle-ci est en mode sortie haute, un court-circuit se produit\footnote{Voir \og Why cleanup the GPIO pins\fg{} : \url{https://raspberrypi.stackexchange.com/questions/34363/why-cleanup-the-gpio-pins\#34370} et le site de référence, section \og Digital Input/Output Pins \fg{} : \url{https://microcontrollerslab.com/raspberry-pi-4-pinout-description-features-peripherals-applications/.}}. \end{enumerate} Pour terminer le programme, il suffit de presser Ctrl C. \subsection{Via un transistor} Nous allons ici utiliser un transistor pour commander l'alimentation d'une led. Le schéma de l'expérience est celui présenté à la figure \ref{figure:ledresistransschema}. \begin{figure} \centering \input{images/RPI_resistance_transist_diode.eps_tex} \caption{LED, résistances et transistor} \label{figure:ledresistransschema} \end{figure} Le calcul des valeur des composant du circuit de la figure \ref{figure:ledresistransschema} débute avec le choix du courant qui va traverser la LED. Une broche du GPIO ne peut dépasser un courant maximum de \SI{20}{\milli\ampere}. Nous allons choisir \SI{15}{\milli\ampere}. Il faut savoir que la tension entre la base et l'émetteur d'un transistor comme le TO-92 ou 2N2222A qui a été choisi vaut environ \SI{0,5}{\volt}. Ainsi, entre la broche à \SI{5}{\volt} et la terre, les tensions sont de \SI{0,5}{\volt} au niveau du transistor, de \SI{2}{\volt} au bornes de la LED et, en conséquence de \SI{2,5}{\volt} au niveau de la résistance R. Comme le courant choisi est de \SI{15}{\milli\ampere}, la résistance R nécessaire vaut~: \[R=\frac{U}{I}=\frac{2,5}{15\cdot 10^{-3}}=\SI{167}{\ohm}\] Par ailleurs, la documentation du TO-92 spécifie que le facteur de gain (hFE) est de 75 pour un courant de collecteur de \SI{10}{\milli\ampere}. Ainsi, pour avoir un tel courant du collecteur à l'émetteur, il faut que la base délivre un courant de~: \[I_{base}=\frac{10}{75}=\SI{0,13}{\milli\ampere}\] Ainsi, en considérant que la broche de commande GPIO 17 délivre une tension de \SI{3,3}{\volt}, à laquelle il faut soustraire les \SI{0,5}{\volt} du transistor, on a une tension de \SI{2,8}{\volt} aux bornes de la résistance \(R_{base}\). Sa valeur pour un courant de \SI{0,13}{\milli\ampere} vaut donc~: \[R_{base}=\frac{2,8}{0,13\cdot 10^{-3}}=\SI{22}{\kilo\ohm}\] \smallskip Il n'est pas possible en réalité de disposer de résistances de valeurs rigoureusement exactes. Il faut utiliser les valeurs normalisées les plus proches. Ainsi, on a utilisé \(R=\SI{180}{\ohm}\) et \(R_{base}=\SI{22}{\kilo\ohm}\). La figure \ref{figure:ledresistransdiodeallume} présente le résultat, parfaitement fonctionnel avec exactement le même code que celui du listing \ref{listing:ledresistance}. \begin{figure} \centering \includegraphics[scale=0.7]{LedResistTransistorCommente.eps} \caption{LED avec un transistor} \label{figure:ledresistransdiodeallume} \end{figure} \subsection{Le T-Cobbler Plus} Pour éviter les contacts avec les pins du GPIO, Adafruit propose un dispositif physique qui permet de relier, via une nappe, le GPIO à la breadboard (voir la figure \ref{figure:tcobblerrpi}). De plus, l'extrémité du côté de la breadbord présente un T ou est reporté l'ensemble des numéros des pins du GPIO (voir la figure \ref{figure:tcobblerno}). Cela permet de se connecter aux pins facilement avec des câbles mâle-mâle et de situer facilement les pins désirés. Il s'agit du T-Cobbler Plus. Le Plus traduit un T-Cobbler permettant une connection aux GPIO avec 40 pins. Il existe aussi le T-Cobbler pour des GPIO à 26 broches. Évidemment ce type de dispositif sécurise l'accès au GPIO, mais prend de la place sur la breadboard. Sur les figures \ref{figure:tcobblerrpi} et \ref{figure:tcobblerno}, on voit aussi à droite l'INA219, ainsi que comment le brancher sur le T-Cobbler Plus. \begin{figure} \centering \includegraphics[scale=0.7]{T-Cobbler-Plus.eps} \caption{Le T-Cobbler et le RPI} \label{figure:tcobblerrpi} \end{figure} \begin{figure} \centering \includegraphics[scale=0.7]{T-Cobbler-Plus-Seul.eps} \caption{Le T-Cobbler et son affichage} \label{figure:tcobblerno} \end{figure} \subsection{Arduino}\label{subsection:arduino} La même réalisation peut être faite avec un arduino. Ici nous allons utiliser une \og RedBoard \fg{} de Sparkfun qui est une carte équivalente à la carte Arduino Uno. L'éditeur de code prévu pour Arduino est parfaitement utilisable pour cette carte et les pins sont les mêmes. On voit cette carte faisant fonctionner une led sur la figure \ref{figure:ledredboard}. Pour faire fonctionner cette carte, il faut d'abord la brancher sur un ordinateur. Puis y installer \og Arduino IDE \fg{}, le lancer et dans le menu outil, sous type de carte, choisir Arduino uno, sous port série, choisir \emph{/dev/ttyUSB0}. La carte est alors connectée à l'ordinateur et on va pouvoir y verser le code en C permettant de gérer la LED. Celui-ci est donné dans le listing \ref{listing:ledcoderedboard}. \begin{figure} \centering \includegraphics[scale=0.7]{RedBoardLEDgreen.eps} \caption{La RedBoard avec une LED verte.} \label{figure:ledredboard} \end{figure} \begin{lstlisting}[float,language=python,caption={Le code de clignotement de la LED.},label={listing:ledcoderedboard},numbers=right,numberstyle=\tiny,numbersep=6pt] /* Clignottement d'une LED verte Fait clignoter une LED toute les demi-secondes. */ // On utilise le pin 9 (digital) int led = 9; // La fonction d'initialisation lancée par le reset void setup() { // initialise le pin led digital comme une sortie pinMode(led, OUTPUT); } // La boucle principale void loop() { digitalWrite(led, HIGH); // enclanche la LED (HIGH est le niveau de tension) delay(500); // attend une demi-seconde digitalWrite(led, LOW); // éteint la LED en mettant sa tension à LOW delay(500); // attend une demi-seconde } \end{lstlisting} À l'aide d'Arduino IDE, on compile ce code (bouton vu vert) et on l'envoie sur la RedBoard avec le bouton flèche droite. Le montage physique est extrêmement simple, puisque la longue patte de la LED est directement branchée sur le pin 9, sa patte la plus courte sur la résistance est l'autre extrémité de la résistance sur le pin GND. Avec une résistance de \SI{330}{\ohm}, la LED éclaire raisonnablement, comme le montre la figure \ref{figure:ledredboard}. Attention, la LED verte qui se trouve sur la RedBoard est le témoin de fonctionnement de la carte. La LED pilotée par la broche 9 se trouve en haut à droite de la figure. \begin{comment} \section{Placement des flottants} Techniquement, le placement des éléments graphiques flottants\footnote{Voir l'excellent site :\\\url{https://en.wikibooks.org/wiki/LaTeX/Floats,_Figures_and_Captions}} se fait par l'intermédiaire des environnements \verb|figure|, \verb|table|, \verb|subfigure| et \verb|subtable|, pour autant que le module \verb|subcaption| soit chargé. Ce placement peut être influencé par les éléments : \begin{description} \item [h] pour placer l'élément ici, approximativement, \item [t] pour placer l'élément en haut de page, \item [b] pour placer l'élément en bas de page, \item [p] pour placer l'élément sur une page de flottants, \item [~!] pour tenter de forcer \LaTeX\ à faire ce qu'on veut et \item [H] pour placer l'élément exactement ici (nécessite le paquel \verb|float|). \end{description} placés entre crochets de la manière suivante : \begin{verbatim} \begin{figure}[tbh...] \end{verbatim} \begin{figure} \centering \includegraphics[scale=0.2]{../electique.eps} \caption{Circuit éléctrique}\label{figure:electique} \end{figure} \section{Gnuplot}\label{annexe:gnuplot} L'utilisation de gnuplot, si elle n'est pas complexe, nécessite des connaissances de base pour obtenir des graphes de bonne qualité. L'objectif de cette annexe est de présenter par deux exemples concrets la manière de réaliser des graphes à partir de données chiffrés. Elle est généralement celle utilisée par la physique, puisque la plupart des graphes dans ce domaine se basent sur des mesures\footnote{La chaine de traitement des données est ici basée sur des mesures enregistrées dans des fichiers textes. Les cartes d'acquisitions actuelles livrent leurs mesures directement dans de tels fichiers et cela généralement sans aucune entête de colonne. Il est donc bien plus simple de ne pas passer par un tableur pour réaliser des graphes, surtout avec un très grand nombre de mesures. Par ailleurs, l'acquisition de données et leur intégration automatique dans des rapports \LaTeX est très facile}. L'utilisation de siunitx (du métapaquet texlive-science) est intéressante, car elle permet d'utiliser le module des unités dans gnuplot. Elle est activée en paramètre de l'utilisation du package gnuplottex qui permet lui d'utiliser gnuplot directement dans \LaTeX. Pour pouvoir utiliser gnuplot avec latex, il faut permettre à \LaTeX d'utiliser gnuplot. Pour cela, il faut lancer \LaTeX avec les deux arguments \verb|-enable-write18 -shell-escape|. Par exemple pour Texmaker, dans les \emph{Commandes} de \emph{Configurer Texmaker} du menu \emph{Options} pour \LaTeX, il faut mettre~: \begin{verbatim} latex -enable-write18 -shell-escape -interaction=nonstopmode %.tex \end{verbatim} Les données sont celles de la table~\ref{table:donnees}. \begin{table} \centering \begin{tabular}{lllll} 1 & 1 & 0.1 & 1 & 2 \\ 2 & 4 & 0.4 & 2 & 4 \\ 3 & 11 & 0.2 & 3 & 6 \\ 4 & 18 & 0.5 & 4 & 8 \\ 5 & 26 & 0.3 & 5 & 10 \\ 6 & 31 & 0.1 & 6 & 12 \\ &&&&\\ &&&&\\ 10 & 16 & 5 &&\\ 20 & 45 & 10 &&\\ 30 & 53 & 15 &&\\ 40 & 89 & 20 &&\\ 50 & 110 & 25 &&\\ 60 & 135 & 30 &&\\ 70 & 140 & 35 &&\\ 80 & 155 & 40 &&\\ 90 & 170 & 45 &&\\ 100 & 200 & 50 && \end{tabular} \caption{Les donnée séparées par des tabulations}\label{table:donnees} \end{table} \begin{figure}[h] \centering \begin{gnuplot}[terminal=epslatex, terminaloptions=color dashed, scale=0.9] # Le terminal epslatex (excellent) est utilisé pour faire le graphe # on utilise des couleurs et éventuellement des traitillés # on diminue légèrement la taille du graphe par rapport à la pleine page # --- # Déclaration du titre # --- # ici désactivé car c'est LaTeX qui le fait #set title 'Équivalent Joule-Calorie\\ \small Une belle expérience' # Placement de la légende (key) # --- # avec un cadre (box) # à gauche (left), aligné à gauche (Left) avec un espace interligne de 1,5 set key box left Left spacing 1.5 # Création du fit des données # --- # la fonction de fit f(x)=a*x**2+b*x # l'index 0 indique que les données sont dans le premier tableau du fichier # on utilise (u) les deux premières colonnes et les paramètres de fit sont a et b fit f(x) 'test.txt' index 0 u 1:2 via a,b # Placement des légendes des axes # --- # le rotate est là pour montrer qu'on peut éventuellement tourner les légendes # remarquez l'utilisation de siunitx via \si set ylabel '\rotatebox{0}{$\Delta \theta$ (\si{\celsius})}' set xlabel 'Nombre de tours N' # Tracé des graphes # --- # les intervalles sur x et y sont spécifiés en premier [...][...] # le fichier des données est spécifié (test.txt) # le premier bloc de données est utilisé (index 0) # les quatre premières colonnes sont utilisées u 1:2:3:4 # le titre de la légende est spécifié title ... # les barres d'erreurs sont demandées (par défaut il s'agit des colonnes 3 et 4 # --- # puis un deuxième graphe est demandé sur la base des même données test.txt # utilisant pour x la première colonne et pour y la cinquième # noté dans la légende "Une droite" # --- # puis le fit des données est demandé comme troisième graphe avec la fonction f(x) # légendé "Regres. polynom." # --- # remarquez l'utilisation d'un backslash (\) pour passer à la ligne et les # abréviations comme u, t, w et lc pour using, title, with et linecolor plot [0:7][0:45]\ 'test.txt' index 0 u 1:2:3:4 t 'Une puissance' w xyerrorbars,\ 'test.txt' index 0 using 1:5 title 'Une droite' linecolor 'red',\ f(x) title 'Régres. polynom.' lc 'blue' \end{gnuplot} \caption{Le titre du premier graphe}\label{figure:premiergraphe} \end{figure} \medskip Le code utilisé (et commenté pour le comprendre) pour produire le premier graphe (figure~\ref{figure:premiergraphe}) est le suivant : \begin{verbatim} \begin{figure}[h] \centering \begin{gnuplot}[terminal=epslatex, terminaloptions=color dashed, scale=0.9] # Le terminal epslatex (excellent) est utilisé pour faire le graphe # on utilise des couleurs et éventuellement des traitillés # on diminue légèrement la taille du graphe par rapport à la pleine page # --- # Déclaration du titre # --- # ici désactivé car c'est LaTeX qui le fait #set title 'Équivalent Joule-Calorie\\ \small Une belle expérience' # Placement de la légende (key) # --- # avec un cadre (box) # à gauche (left), aligné à gauche (Left) avec un espace interligne de 1,5 set key box left Left spacing 1.5 # Création du fit des données # --- # la fonction de fit f(x)=a*x**2+b*x # l'index 0 indique que les données sont dans le premier tableau du fichier # on utilise (u) les deux premières colonnes et les paramètres de fit sont a et b fit f(x) 'test.txt' index 0 u 1:2 via a,b # Placement des légendes des axes # --- # le rotate est là pour montrer qu'on peut éventuellement tourner les légendes # remarquez l'utilisation de siunitx via \si set ylabel '\rotatebox{0}{$\Delta \theta$ (\si{\celsius})}' set xlabel 'Nombre de tours N' # Tracé des graphes # --- # les intervalles sur x et y sont spécifiés en premier [...][...] # le fichier des données est spécifié (test.txt) # le premier bloc de données est utilisé (index 0) # les quatre premières colonnes sont utilisées u 1:2:3:4 # le titre de la légende est spécifié title ... # les barres d'erreurs sont demandées (par défaut il s'agit des colonnes 3 et 4 # --- # puis un deuxième graphe est demandé sur la base des même données test.txt # utilisant pour x la première colonne et pour y la cinquième # noté dans la légende "Une droite" # --- # puis le fit des données est demandé comme troisième graphe avec la fonction f(x) # légendé "Regres. polynom." # --- # remarquez l'utilisation d'un backslash (\) pour passer à la ligne et les # abréviations comme u, t, w et lc pour using, title, with et linecolor plot [0:7][0:45]\ 'test.txt' index 0 u 1:2:3:4 t 'Une puissance' w xyerrorbars,\ 'test.txt' index 0 using 1:5 title 'Une droite' linecolor 'red',\ f(x) title 'Régres. polynom.' lc 'blue' \end{gnuplot} \caption{Le titre du premier graphe} \end{figure} \end{verbatim} \begin{figure}[h] \begin{gnuplot}[terminal=epslatex, terminaloptions=color dashed] # Placement de la légende set key Left bottom # Placement des légendes des axes set ylabel 'Accélération a (\si{\metre\per\second\squared})' set xlabel 'Nombre de tours N' # Placement de la flèche et du texte set arrow 1 from 50,175 to 58,140 set label 'Un point particulier sur $x=2\cdot x^2$' at 10,185 # Création du graphe # --- # on utilise le second bloc de données (index 1) # la colonne 3 est celle des erreurs sur y # on utilise le point numéro 4 (un petit carré) pour positionner la mesure plot [0:110][0:250] 'test.txt'\ index 1 u 1:2:3 title 'Second bloc' w yerrorbars pt 4 \end{gnuplot} \caption{Le titre du second graphe}\label{figure:secondgraphe} \end{figure} \medskip Le code utilisé (et commenté pour le comprendre) pour produire le second graphe (figure~\ref{figure:secondgraphe}) est le suivant : \begin{verbatim} \begin{figure}[h] \begin{gnuplot}[terminal=epslatex, terminaloptions=color dashed] # Placement de la légende set key Left bottom # Placement des légendes des axes set ylabel 'Accélération a (\si{\metre\per\second\squared})' set xlabel 'Nombre de tours N' # Placement de la flèche et du texte set arrow 1 from 50,175 to 58,140 set label 'Un point particulier sur $x=2\cdot x^2$' at 10,185 # Création du graphe # --- # on utilise le second bloc de données (index 1) # la colonne 3 est celle des erreurs sur y # on utilise le point numéro 4 (un petit carré) pour positionner la mesure plot [0:110][0:250] 'test.txt'\ index 1 u 1:2:3 title 'Second bloc' w yerrorbars pt 4 \end{gnuplot} \caption{Le titre du second graphe} \end{figure} \end{verbatim} \end{comment} \section{Introduction aux mesures avec l'INA 219} \subsection{Le dispositif expérimental} En supposant les drivers de l'INA déjà installé et l'INA 219 parfaitement fonctionnel, voici la procédure pour bien démarrer la série de mesures permettant d'obtenir le graphe tension-courant pour des résistances ohmiques. Le dispositif expérimental est présenté la figure~\ref{figureannexe:dispos}. On y voit à gauche le GPIO du Raspberrypi4, au centre l'INA219, la résistance R et le générateur externe à droite. La résistance de shunt permettant à l'INA de mesurer le courant est représentée en noir contre les ports de mesure. Celle-ci doit se placer en mode \og high side \fg{}, c'est-à-dire entre la tension positive du générateur continu (Vin+) et le pôle de tension la plus élevée de la résistance R (Vin-). Ainsi, en reliant la masse du générateur, du pôle de tension la plus basse de la résistance R et le Ground (GND) du GPIO, étant donné la faible valeur de la résistance de schunt (Rs = \SI{0,1}{\ohm}), la précision de la mesure de la tension aux bornes de R va peu fluctuer et sera de meilleure qualité qu'avec une mesure \og low side \fg. \medskip Du côté du bus I2C, à part l'alimentation (VCC 3,3V) et la terre (GND) de l'INA, les données sont transmises par la broche SDA et l'horloge par la broche SCL. \begin{figure} \caption[Rail]{Le RPI4, l'INA219 en mode high side et la résistance R}\label{figureannexe:dispos} \smallskip \centering \includegraphics[scale=0.8]{images/RPI_INA.eps} \end{figure} \medskip La figure~\ref{figureannexe:disposcobblerresistanceimage} presente le dispositif expérimental concrètement. On y remarque la présence du T-Cobbler plus, permettant une lecture des fonctions des ports du GPIO et un branchement facilité sur le RPI4. \begin{figure} \centering \includegraphics[scale=0.3]{InaResistCobbler.eps} \caption{INA, résistance et T-Cobbler plus} \label{figureannexe:disposcobblerresistanceimage} \end{figure} \subsection{Les mesures de résistance} La procédure expérimentale consiste en séries de mesures successives sur différentes résistances. Les données sont récupérées sur le bus I2C (voir annexe~\ref{annexe:driver}, page \pageref{annexe:driver}) à l'aide du programme Python du listing~\ref{listingannexe:INA}. Il faut relever que le programme enregistre la mesure de la puissance dissipée dans la résistance et suivant la valeur du maximum possible, ici les résistances utilisées étaient des ¼W, annonce le dépassement. Le réglage de la tension se fait en tournant le potentiomètre du générateur et chaque mesure est effectuée en pressant la touche ENTER. La figure \ref{figureannexe:codefonctgraphresistance} présente en arrière plan le code python permettant les mesures de tension en fonction du courant pour une résistance, l'affichage des mesures faites par ce code et le graphe gnuplot correspondant. \begin{figure} \centering \includegraphics[scale=0.25]{softresistance.eps} \caption{Code, fonctionnement et graphe des mesures de résistances} \label{figureannexe:codefonctgraphresistance} \end{figure} Par ailleurs, Gnuplot permettant la réalisation d'un graphe comportant plusieurs courbes pour chaque résistance à partir du même fichier, pour autant que chaque série de données soit séparées par deux lignes vides, le programme utilisé (listing~\ref{listingannexe:INA}) permet de demander une nouvelle série de mesures en pressant la touche n (pour nouvelle) et cela autant de fois qu'on le désire jusqu'à la fin déclarée par la touche q (pour quitter). \smallskip Détaillons ce code. \smallskip Les trois modules importés sont celui de l'\verb|INA219|, \verb|DeviceRangeError| et \verb|sleep|. Nous verrons pourquoi par la suite. En majuscule figurent ensuite la déclaration des constantes qui sont la valeur du shunt de l'INA, obligatoirement celle-ci, et la valeur du courant maximal qu'on s'autorise. À la ligne \ref{listingannexe:objetina}, on instancie, c'est-à-dire on crée, un objet qu'on nomme \verb|ina|, grace au constructeur d'objet INA219(). Puis, on configure cet objet avec la méthode qui lui est liée \verb|.configure()|, selon les variables spécifiées plus haut. À la ligne \ref{listingannexe:maxpower0}, on spécifie la limite de puissance en \si{\milli\watt} qu'on s'impose pour ne pas dépasser le quart de watt des résistances classiques utilisées. On définit enfin une variable \verb|marchearret| qui va nous permettre d'interrompre ou de poursuivre le programme. Vient ensuite la fonction chargée des mesures, nommée \verb|read_ina219()|. Elle est constituée d'un try-except basé sur le module \verb|DeviceRangeError| permettant d'interrompre le programme à la moindre erreur. Les quatre instructions \verb|print| qui suivent permettent d'afficher dans la console les mesure de tension aux bornes de la résistance, de courant à travers elle, de puissance dans la résistance, et si celle-ci dépasse la valeur qu'on s'est autorisée (ligne \ref{listingannexe:maxpower1}, de le signaler clairement, et enfin de tension aux bornes de la résistance de shunt. Cette dernière étant monitorée pour information. Puis, à la ligne \ref{listingannexe:ouverturefichier}, on ouvre un fichier \emph{data.txt} en mode ajout (a) de ligne (et non en mode remplacement) pour y écrire les mesures. On y met la tension aux bornes de la résistance, le courant qui la traverse, l'incertitude sur la tension et l'incertitude sur le courant (les deux incertitudes étant calculée dans les variables iv et ia). Enfin, on ferme le fichier. Remarquons que l'écriture des mesures \verb|ina.voltage()|, \verb|ina.current()|, \dots est formatée par la méthode \verb|.format()| qui s'applique à la chaine de caractère qui la précède. Cette méthode remplace dans la chaine les accolades par un nombre suivi d'un nombre de chiffres après la virgule spécifié avant la lettre f. \smallskip Enfin vient le programme principal constitué d'une boucle dont l'arrêt est spécifié par la présence de la lettre q dans la variable \verb|marchearret| récupérée à chaque itération de la boucle par un \verb|input()|. À la ligne \ref{listingannexe:lancementfonction}, on lance la fonction de mesure. Sans le test suivant, à chaque pression de la touche \emph{Enter}, une nouvelle mesure est affichée et enregistrée dans le fichier. Le test de la ligne \ref{listingannexe:nouvelleserie}, permet de tester si, après avoir fait une série de mesures sur une résistance, on veut en faire une autre. Auquel cas, on redemande la puissance maximale et on réouvre le fichier pour y écrire deux lignes vides (\verb|\n\n|). En effet, grace à ces lignes, Gnuplot saura qu'il a à faire avec une nouvelle série de mesures. \begin{lstlisting}[float,language=python,caption={Le code de mesure avec l'INA.},label={listingannexe:INA},numbers=right,numberstyle=\tiny,numbersep=6pt] from ina219 import INA219, DeviceRangeError from time import sleep SHUNT_OHMS = 0.1 #MAX_EXPECTED_AMPS = 2.0 MAX_EXPECTED_AMPS = 0.3 ina = INA219(SHUNT_OHMS, MAX_EXPECTED_AMPS)(*@\label{listingannexe:objetina}@*) #ina.configure(ina.RANGE_16V, ina.GAIN_1_40MV) ina.configure(ina.RANGE_16V) max_power_R_mW = 230(*@\label{listingannexe:maxpower0}@*) marchearret = '' def read_ina219(): try: print('Bus Voltage: {0:0.3f}V'.format(ina.voltage())) print('Bus Current: {0:0.3f}mA'.format(ina.current())) if ina.power() < max_power_R_mW:(*@\label{listingannexe:maxpower1}@*) print('Power: {0:0.3f}mW'.format(ina.power())) else: print('!!!! Dépassement de puissance !!!! Coupez tout !')(*@\label{listingannexe:maxpower2}@*) print('Shunt Voltage: {0:0.3f}mV\n'.format(ina.shunt_voltage())) fichier = open("data.txt", "a")(*@\label{listingannexe:ouverturefichier}@*) fichier.write('{0:0.3f}'.format(ina.voltage())) fichier.write(' {0:0.3f}'.format(ina.current())) iv = ina.voltage()*0.005 fichier.write(' {0:0.3f}'.format(iv)) ia = ina.current()*0.005 fichier.write(' {0:0.3f}\n'.format(ia)) fichier.close() except DeviceRangeError as e: print(e) max_power_R_mW = int(input('Entrez la puissance max. de la résistace en mW : '))(*@\label{listingannexe:maxpower3}@*) while marchearret != 'q': marchearret = input('Tapez ENTER pour enregistrer une mesure, q pour quitter et n pour une nouvelle série de mesure : ') read_ina219()(*@\label{listingannexe:lancementfonction}@*) if marchearret == 'n':(*@\label{listingannexe:nouvelleserie}@*) max_power_R_mW = int(input('Entrez la puissance max. de la résistace en mW : '))(*@\label{listingannexe:maxpower4}@*) fichier = open("data.txt", "a") fichier.write('\n\n') fichier.close() \end{lstlisting} \subsection{Graphes} Pour réaliser les graphes des mesures, on commence par utiliser Gnuplot en mode direct. Il faut pour cela ouvrir une console et entrer \emph{gnuplot} à l'invite de commande. Ensuite, à l'invite de commande de Gnuplot (\verb|gnuplot>|), il faut demander un graphe~: \begin{verbatim} plot [0:11][0:11] 'data.txt' index 0 using 1:2 \end{verbatim} pour autant que cette commande soit lancée dans le même répertoire que le fichier de données. Ainsi, un graphe sommaire sera réalisé qui permettra de se faire un idée des résultats et notamment de la pente du graphe pour la comparer avec la résistance. \medskip Ensuite, il faut bien conserver, archiver, nommer les fichiers de mesures pour pouvoir ensuite les utiliser directement dans \LaTeX. Pour cela, on se référera à ce qui a été vu dans les précédents rapports. \subsection{Arduino} Pour comparaison, nous allons ici utiliser l'Arduino pour réaliser les mêmes mesures. La différence dans l'utilsation de l'Arduino par rapport au paragraphe \ref{subsection:arduino} est que l'IDE utilisé sera mis-à-jour. En effet, l'INA nécessite plusieurs librairies qui ne sont pas installées par défaut et l'installation de celles-ci avec la dernière version de l'IDE d'Arduino est grandement facilitée. Néanmoins, cela pose le problème de l'installation hors du cadre des paquets se trouvant dans les dépôts de Debian, car cette nouvelle version n'y figure pas. On peut donc penser soit à rétroporter le paquet de la version \emph{Testing} de Debian, soit à l'installer avec le script d'installation d'Arduino. La page dédiée à cette installation sous linux est la suivante~: \url{https://www.arduino.cc/en/Guide/Linux} et celle permettant le téléchargement est~: \url{https://www.arduino.cc/en/software}. En suivant cette procédure et éventuellement en réglant quelques problèmes de droits mentionné à la fin de la première référence, on se retrouve avec un IDE fonctionnel. Il faut alors comme précédemment y sélectionner la carte et le port utilisés avec par exemple \lstinline|/dev/ACM0|. Il faut ensuite installer la librairie de l'INA219. Pour cela, la nouveauté de cette version de l'IDE est qu'elle permet un installation en ligne. En effet, en se rendant dans le menu \verb|Croquis| et en y sélectionnant l'entrée \verb|Inclure une bibliothèque|, on peut ouvrir un gestionnaire de bibliothèques en choisissant \verb|Gérer les bibliothèques|. La figure \ref{figure:bibliothequearduino} montre le gestionnaire qui est lancé. \begin{figure}[t] \centering \includegraphics[width=0.6\textwidth]{images/BibliothequesArduino.eps} \caption{Le gestionnaire de bibliothèques} \label{figure:bibliothequearduino} \end{figure} On y voit qu'il existe quatre bibliothèques pour l'INA219, dont la première est celle d'Adafruit. C'est celle-ci que nous avons choisie et dont on a demandé l'installation avec le bouton apparaissant sur la figure \ref{figure:bibliothequearduino}. Il est alors demandé d'installer quatre autres librairies, ce qu'il faut impérativement faire. L'installateur met alors en place tout ce qui est nécessaire au fonctionnement de l'INA et notamment un script permettant de vérifier le fonctionnement de l'INA, disponible dans les \verb|Exemples| du menu \verb|Fichier| sous \verb|Adafruit INA219|, \verb|getcurrent|. \medskip Pour le montage de l'INA sur l'Arduino, la figure \ref{figure:arduinoina219montage} présente la situation. \begin{figure}[t] \centering \includegraphics[width=0.8\textwidth]{images/ArduinoINA219Montage.eps} \caption{Le montage physique de l'INA sur l'Arduino.} \label{figure:arduinoina219montage} \end{figure} On y voit que le bus I2C est câblé avec la broche Vcc \SI{5}{\volt} de l'Arduino au premier plan à gauche, fil bleu-clair, une terre juste à côté de la tension d'alimentation, le SCL en arrière plan avec un fil orange et le SDA à côté en jaune. On y voit aussi le montage de l'INA avec la résistance et le générateur qu'on devine tout à droite alimentant les deux fils en bas à droite. Le schéma du montage est identique à celui de la figure \ref{figureannexe:dispos} de la page \pageref{figureannexe:dispos}. \medskip Le code permettant la mesure de résistances est celui présenté à la figure \dots \pagebreak \subsection{Travail pratique LED} \subsubsection{Objectif} Pour apprendre à utiliser le raspberrypi et son port GPIO, vous allez l'utiliser pour faire clignotter une LED. Plus précisément, il faudra lui faire émettre un SOS en morse. \subsubsection{Préalable} Pour faire fonctionner un raspberrypi, il faut le microordinateur lui-même, une alimentation \SI{5}{\volt}, un clavier, une souris et un câble HDMI qu'il faut brancher sur l'écran. Vous utiliserez un raspberrypi 3. C'est une machine lente, mais parfaitement adaptée pour son utilisation en physique. Le système d'exploitation est Raspbian OS, un dérivé de la célèbre distribution Debian, avec une interface graphique très légère. Ce système est installé sur la carte SD qui se trouve sous le raspberrypi. Pour relier les composants électroniques au raspberrypi, il faut utiliser une interface nommée GPIO et une plaque permettant de les enficher facilement : la breakboard. Pour programmer le GPIO, nous allons utiliser le langage Python et l'interface de programmation Geany. \medskip \emph{Attention, au préalable de tout branchement sur le GPIO, il faut impérativement savoir ce qu'on fait, sous peine d'une destruction du raspberrypi par court-circuit. Ne faites donc rien sans avoir au préalable la CERTITUDE qu'aucun problème ne survienne. Pour cela, il est nécessaire de très bien se documenter.} \subsubsection{À réaliser} Commencez donc par vous documenter sur les éléments suivants : \begin{itemize} \item l'ensemble des broches du GPIO et, notamment, les deux systèmes notation pour la numérotation de celles-ci, mais aussi le courant maximum qu'elles peuvent fournir, \item ce qu'est une LED, comment elle fonctionne, comment elle se branche dans un circuit, quelle est la tension et le courant maximal qu'elle admet et pourquoi il est nécessaire de l'utiliser avec une résistance, \item comment se font les connexions sur la breakboard, c'est-à-dire comment sont reliés les connecteurs qui la composent, \item quel est la tension et le courant maximal ou la puissance maximale qu'une résistance peut supporter, \item quel sont les modules python nécessaire pour gérer le GPIO et faire clignoter la LED. \end{itemize} \subsubsection{Fonctionnement continu} Il s'agit de dessiner et de réaliser un circuit permettant d'allumer en continu la LED grâce au GPIO. Dessinez et montez le circuit avec le raspberrypi éteint. Avant toute chose, faite vérifier votre circuit par l'enseignant. \subsubsection{Fonctionnement clignottant} Une fois le fonctionnement continu réalisé, écrivez avec Geany le code nécessaire pour faire clignoter indéfiniment la LED avec un intervalle de 3 secondes allumée et 2 secondes éteinte. Mais ne lancez pas le code sans vérification de l'enseignant. \subsubsection{Le SOS} Réalisez enfin par vous-même le SOS demandé. \subsubsection{Documentation} Dans l'optique d'un rapport de physique sur un composant électronique, commencez un rapport sous \LaTeX en rédigeant une annexe comprenant touts les éléments importants de votre expérience sur l'émission d'un SOS. L'idée est de documenter au mieux vos connaissances sur les LEDs et sur le GPIO. \subsection{INA219, mesures de résistances} Le raspberrypi ne dispose pas d'entrée analogiques. La mesure directe de tension et/ou courant n'est donc pas possible. Pour la réaliser, il est donc nécessaire d'utiliser un convertisseur analogique-numérique. L'INA219 est un voltmètre-ampèremètre muni d'un tel convertisseur. C'est donc lui que nous allons utiliser. \subsubsection{Documentation} Documentez-vous sur ce circuit intégré. Trouvez notamment sur quel bus il fonctionne, comment en réaliser le branchement sur le raspberrypi et comment réaliser le circuit high-side lui permettant de faire la mesure du courant et de la tension au bornes d'une simple résistance alimentée par un générateur. Trouvez ensuite sa plage de fonctionnement en tension et courant, sa précision pour ces deux grandeurs et trouvez la puissance maximale que peut supporter une résistance classique. À quoi doit-on faire attention au sujet de la terre des instruments ? \subsubsection{Schéma du dispositif} Réalisez un schéma de branchement et faites-le vérifier par votre enseignant. \subsubsection{Programmation} Déterminez la/les bibliothèques nécessaire à une utilisation de l'INA219 avec Python3. Préparez un code permettant de faire une première mesure de tension-courant pour la résistance. Faites valider ce code par votre enseignant. \subsubsection{Réalisation} Réalisez le montage, enclenchez les appareils et effectuez une mesure. Vérifiez qu'elle correspond bien à la valeur de la résistance obtenue avec un ohmmètre. \end{document}