cophysique.py

Created by slowzuu1

Created on December 18, 2025

3.68 KB


1. Rappels essentiels Arduino
# -------------------------------
# Microcontrôleur : ATmega328P
# Tension logique : 5 V
# Entrées analogiques : A0 à A5 (6 entrées)
# ADC (CAN) : 10 bits → valeurs de 0 à 1023

# -------------------------------
# 2. ADC / CAN
# -------------------------------
# ADC = Analog to Digital Converter
# CAN = Convertisseur Analogique Numérique
# Fonction : transforme une tension analogique (0–5 V) en un nombre numérique 
#(0–1023)

# Relation tension / nombre :
Upe = 5.0       # Tension pleine échelle en volts
Nmax = 1023      # Valeur max ADC
Nmin = 0         # Valeur min ADC

# Quantum (LSB) : plus petite variation détectable
quantum = Upe / Nmax  # ≈ 4,9 mV

def nombre_to_tension(N):
    """Convertit un nombre ADC en tension (V)"""
    return N * Upe / Nmax

def tension_to_nombre(U):
    """Convertit une tension (V) en nombre ADC"""
    return int(U * Nmax / Upe)

# Exemple de conversion :
N_exemple = 512
U_exemple = nombre_to_tension(N_exemple)
print(f"ADC {N_exemple} → Tension {U_exemple:.3f} V")

# -------------------------------
# 3. Pont diviseur de tension
# -------------------------------
# Principe : deux résistances en série pour obtenir une fraction de la tension
# Formule générale : Uout = Uin * R2 / (R1 + R2)
Uin = 5.0
R1 = 10000
R2 = 5000
Uout = Uin * R2 / (R1 + R2)
print(f"Tension divisée : {Uout:.2f} V")

# -------------------------------
# 4. Potentiomètre
# -------------------------------
# Définition : résistance variable à 3 bornes
# La borne centrale (curseur) → entrée analogique (A0)
# Rôle : faire varier une tension entre 0 V et 5 V

# -------------------------------
# 5. Résistance de pull-up
# -------------------------------
# Déf : relie une entrée au +5 V pour éviter une broche "en l'air"
# Rôle :
# - Fixe l’état logique quand l’entrée n’est pas connectée
# - Evite les parasites (bruit)
# Fonctionnement :
# Interrupteur  | Tension entrée
# Ouvert        | 5 V (HIGH)
# Fermé         | 0 V (LOW)

# -------------------------------
# 6. Pull-up interne Arduino
# -------------------------------
# Arduino possède des pull-ups internes (~20 kΩ à 50 kΩ)
# Activation : pinMode(A0, INPUT_PULLUP)
# Logique inversée : Appui bouton → LOW, Relâché → HIGH

# -------------------------------
# 7. Mesure avec pull-up
# -------------------------------
# Si résistance R reliée à la masse avec pull-up RPU :
# Uin = 5V * R / (R + RPU)
RPU = 20000       # Pull-up interne ~20 kΩ
Uin_mesuree = 2.5
R_calculee = RPU * (5 - Uin_mesuree) / Uin_mesuree
print(f"Résistance mesurée avec pull-up : {R_calculee:.1f} Ω")

# -------------------------------
# 8. Conversion nombre ↔ tension Arduino
# -------------------------------
# Lecture analogique :
# int N = analogRead(A0);  → en Python on simule :
N = 600
U = nombre_to_tension(N)
print(f"ADC {N} → Tension {U:.3f} V")

# Conversion tension → nombre :
U_test = 3.3
N_test = tension_to_nombre(U_test)
print(f"Tension {U_test} V → ADC {N_test}")

# -------------------------------
# 9. Erreurs & précision
# -------------------------------
# Sources d’erreurs :
# - Erreur de quantification ±0,5 LSB
# - Erreur d’offset
# - Erreur de gain / linéarité
# Précision absolue ATmega328P : ±2 LSB (~±10 mV)
# Quantum : 4,9 mV → on comprend la limite de précision

# -------------------------------
# 10. Points clés à retenir
# -------------------------------
# - ADC 10 bits : valeurs 0-1023
# - Quantum = 4,9 mV
# - Pont diviseur : Uout = Uin * R2 / (R1 + R2)
# - Potentiomètre : borne centrale → entrée analogique
# - Pull-up externe ou interne fixe l'entrée HIGH si flottante
# - Conversion tension ↔ nombre : N = U*1023/5, U = N*5/1023
# - Toujours penser au pull-up si entrée "en l'air"

During your visit to our site, NumWorks needs to install "cookies" or use other technologies to collect data about you in order to:

With the exception of Cookies essential to the operation of the site, NumWorks leaves you the choice: you can accept Cookies for audience measurement by clicking on the "Accept and continue" button, or refuse these Cookies by clicking on the "Continue without accepting" button or by continuing your browsing. You can update your choice at any time by clicking on the link "Manage my cookies" at the bottom of the page. For more information, please consult our cookies policy.