.. note::
Ciao, benvenuto nella SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.
**Perché unirti a noi?**
- **Supporto esperto**: Risolvi problemi post-vendita e sfide tecniche con l'aiuto della nostra comunità e del nostro team.
- **Impara e condividi**: Scambia consigli e tutorial per migliorare le tue competenze.
- **Anteprime esclusive**: Ottieni accesso anticipato a nuovi annunci di prodotti e anteprime speciali.
- **Sconti speciali**: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
- **Promozioni festive e omaggi**: Partecipa a concorsi e promozioni durante le festività.
👉 Pronto a esplorare e creare con noi? Clicca su [|link_sf_facebook|] e unisciti oggi stesso!
.. _4.1.11_py:
4.1.11 Indicatore di Batteria
===================================
.. note::
.. image:: ../img/mcp3008_and_adc0834.jpg
:width: 25%
:align: left
A seconda della versione del tuo kit, identifica se hai **ADC0834** o **MCP3008** e procedi con la sezione corrispondente.
Introduzione
--------------
In questo progetto, realizzeremo un dispositivo indicatore di batteria che può
isualizzare il livello della batteria su un LED Bargraph.
.. warning::
Non utilizzare componenti della batteria che superano i 3,3V per evitare sovraccarichi, che potrebbero danneggiare il chip o il Raspberry Pi.
Componenti necessari
------------------------------
In questo progetto, avremo bisogno dei seguenti componenti.
.. image:: ../img/list_Battery_Indicator.png
:align: center
È sicuramente conveniente acquistare un kit completo, ecco il link:
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Nome
- ELEMENTI IN QUESTO KIT
- LINK
* - Kit Raphael
- 337
- |link_Raphael_kit|
Puoi anche acquistarli separatamente dai link sottostanti.
.. list-table::
:widths: 30 20
:header-rows: 1
* - INTRODUZIONE AI COMPONENTI
- LINK PER L'ACQUISTO
* - :ref:`cpn_gpio_extension_board`
- |link_gpio_board_buy|
* - :ref:`cpn_breadboard`
- |link_breadboard_buy|
* - :ref:`cpn_wires`
- |link_wires_buy|
* - :ref:`cpn_resistor`
- |link_resistor_buy|
* - :ref:`cpn_bar_graph`
- \-
* - :ref:`cpn_adc0834`
- \-
Schema elettrico
-------------------
============ ======== ======== ===
T-Board Name physical wiringPi BCM
GPIO17 Pin 11 0 17
GPIO18 Pin 12 1 18
GPIO27 Pin 13 2 27
GPIO25 Pin 22 6 25
GPIO12 Pin 32 26 12
GPIO16 Pin 36 27 16
GPIO20 Pin 38 28 20
GPIO21 Pin 40 29 21
GPIO5 Pin 29 21 5
GPIO6 Pin 31 22 6
GPIO13 Pin 33 23 13
GPIO19 Pin 35 24 19
GPIO26 Pin 37 25 26
============ ======== ======== ===
.. image:: ../img/Schematic_three_one5.png
:align: center
Procedure sperimentali
-------------------------
**Passo 1:** Costruisci il circuito.
.. image:: ../img/image248.png
**Passo 2:** Accedi alla cartella del codice.
.. raw:: html
.. code-block::
cd ~/raphael-kit/python/
**Passo 3:** Esegui il file eseguibile.
.. raw:: html
.. code-block::
sudo python3 4.1.11_BatteryIndicator.py
Dopo aver eseguito il programma, collega separatamente un filo di uscita al
3° pin di ADC0834 e al GND, quindi collegali ai due poli di una batteria.
Vedrai che i LED corrispondenti sul LED Bargraph si accendono per mostrare il
livello di carica della batteria (intervallo di misurazione: 0-5V).
**Codice**
.. note::
Puoi **Modificare/Resettare/Copiare/Eseguire/Fermare** il codice qui sotto. Ma prima di farlo, devi accedere al percorso del codice sorgente come ``raphael-kit/python``. Dopo aver modificato il codice, puoi eseguirlo direttamente per vedere l'effetto.
.. raw:: html
.. code-block:: python
import RPi.GPIO as GPIO
import ADC0834
import time
ledPins = [25, 12, 16, 20, 21, 5, 6, 13, 19, 26]
def setup():
GPIO.setmode(GPIO.BCM)
ADC0834.setup()
for i in ledPins:
GPIO.setup(i, GPIO.OUT)
GPIO.output(i, GPIO.HIGH)
def LedBarGraph(value):
for i in ledPins:
GPIO.output(i,GPIO.HIGH)
for i in range(value):
GPIO.output(ledPins[i],GPIO.LOW)
def destroy():
GPIO.cleanup()
def loop():
while True:
analogVal = ADC0834.getResult()
LedBarGraph(int(analogVal/25))
if __name__ == '__main__':
setup()
try:
loop()
except KeyboardInterrupt: # Quando viene premuto 'Ctrl+C', il programma destroy() verrà eseguito.
destroy()
Spiegazione del Codice
--------------------------
.. code-block:: python
def LedBarGraph(value):
for i in ledPins:
GPIO.output(i,GPIO.HIGH)
for i in range(value):
GPIO.output(ledPins[i],GPIO.LOW)
Questa funzione serve per controllare l'accensione o lo spegnimento dei **10**
LED sul LED Bargraph. Inizialmente, diamo a questi **10** LED un livello alto
per spegnerli, poi decidiamo quanti LED accendere cambiando il valore analogico
ricevuto.
.. code-block:: python
def loop():
while True:
analogVal = ADC0834.getResult()
LedBarGraph(int(analogVal/25))
analogVal genera valori (**0-255**) con diversi valori di tensione (**0-5V**),
ad esempio, se viene rilevata una tensione di 3V su una batteria, il valore
corrispondente **152** viene visualizzato sul voltmetro.
I **10** LED sul LED Bargraph vengono utilizzati per visualizzare le letture di
**analogVal**. 255/10=25, quindi ogni **25** l'incremento del valore analogico
accende un altro LED, ad esempio, se "analogVal=150 (circa 3V), ci sono 6 LED accesi."
Immagine del fenomeno
------------------------------
.. image:: ../img/image249.jpeg
:align: center