- Flux del projecte:
- Requisits del projecte
- Esquema de connexions:
- Instal·leu dependències per a l'oscil·loscopi Raspberry Pi:
- Codi Python per a l'oscil·loscopi Raspberry Pi:
- Oscil·loscopi Raspberry Pi en acció:
Hola nois, benvinguts al post d’avui. Una de les coses més fascinants de ser creador és saber desenvolupar eines improvisades; mai no us quedareu atrapats treballant en cap projecte quan tingueu aquest tipus de versatilitat. Avui, doncs, compartiré com construir una versió improvisada basada en Raspberry Pi d’una de les eines més importants en enginyeria elèctrica / electrònica; L’oscil·loscopi.
L'oscil·loscopi és un instrument de prova electrònic que permet la visualització i l'observació de diferents tensions de senyal, generalment com a gràfic bidimensional amb un o més senyals traçats contra el temps. El projecte d’avui intentarà replicar les capacitats de visualització del senyal de l’oscil·loscopi mitjançant el Raspberry Pi i un mòdul convertidor analògic a digital.
Flux del projecte:
Per reproduir la visualització del senyal de l’oscil·loscopi mitjançant el Raspberry Pi caldrà fer els passos següents;
1. Realitzeu una conversió digital a analògica del senyal d'entrada
2. Prepareu les dades resultants per a la representació
3. Representa les dades en un gràfic en temps real
Un diagrama de blocs simplificat per a aquest projecte s’assemblaria al diagrama següent.

Requisits del projecte
El requisit d’aquest projecte es pot classificar en dos:
- Requisits de maquinari
- Requisits de programari
Requisits de maquinari
Per construir aquest projecte, es requereixen els components / peça següents;
- Raspberry pi 2 (o qualsevol altre model)
- Targeta SD de 8 o 16 GB
- Cable LAN / Ethernet
- Font d'alimentació o cable USB
- ADS1115 ADC
- LDR (opcional per a la prova)
- Resistència de 10k o 1k
- Filferros de pont
- Taula de pa
- Monitor o qualsevol altra forma de veure l'escriptori del pi (VNC inclòs)
Requisits de programari
Els requisits de programari d’aquest projecte són bàsicament els mòduls python ( matplotlib i drawow ) que s’utilitzaran per a la visualització de dades i el mòdul Adafruit per a la interfície amb el xip ADS1115 ADC. Mostraré com instal·lar aquests mòduls al Raspberry Pi a mesura que avancem.
Tot i que aquest tutorial funcionarà independentment del sistema operatiu raspberry pi utilitzat, faré servir el sistema operatiu stretch Raspberry Pi i suposo que esteu familiaritzat amb la configuració del Raspberry Pi amb el sistema operatiu stretch Raspbian i ja sabeu com fer SSH al raspberry pi utilitzant un programari de terminal com la massilla. Si teniu problemes amb això, hi ha un munt de tutorials de Raspberry Pi en aquest lloc web que us poden ajudar.
Amb tots els components de maquinari al seu lloc, creem els esquemes i connectem els components junts.
Esquema de connexions:
Per convertir els senyals d’entrada analògica en senyals digitals que es poden visualitzar amb el Raspberry Pi, farem servir el xip ADS1115 ADC. Aquest xip esdevé important perquè el Raspberry Pi, a diferència d’Arduino i la majoria de microcontroladors, no disposa d’un convertidor analògic a digital (ADC) incorporat. Tot i que podríem haver utilitzat qualsevol xip ADC compatible amb raspberry pi, prefereixo aquest xip a causa de la seva alta resolució (16 bits) i el seu full de dades i les instruccions d’ús ben documentades d’Adafruit. També podeu consultar el nostre tutorial ADC de Raspberry Pi per obtenir més informació.
L’ADC és un dispositiu basat en I2C i s’hauria de connectar al Raspberry Pi tal com es mostra als esquemes següents.
Per més claredat, la connexió de pin entre els dos components també es descriu a continuació.

Connexions ADS1115 i Raspberry Pi:
VDD - 3.3v
GND - GND
SDA - SDA
SCL - SCL
Un cop fetes les connexions, engegueu el pi i procediu a instal·lar les dependències esmentades a continuació.

Instal·leu dependències per a l'oscil·loscopi Raspberry Pi:
Abans de començar a escriure l’escriptura python per extreure dades de l’ADC i representar-les en un gràfic en viu, hem d’ habilitar la interfície de comunicació I2C del raspberry pi i instal·lar els requisits de programari que s’han esmentat anteriorment. Això es farà en els passos següents, de manera que és fàcil de seguir:
Pas 1: activeu la interfície Raspberry Pi I2C
Per habilitar l'I2C, des del terminal, executeu;
sudo raspi-config
Quan s'obrin els panells de configuració, seleccioneu les opcions de la interfície, seleccioneu I2C i feu clic a activar.
Pas 2: actualitzeu el Raspberry pi
El primer que faig abans de començar qualsevol projecte és actualitzar el Pi. A través d’això, estic segur que tot el sistema operatiu està actualitzat i no experimentaré cap problema de compatibilitat amb cap programari més recent que triï instal·lar al Pi. Per fer-ho, executeu sota dues ordres:
sudo apt-get update sudo apt-get upgrade
Pas 3: instal·leu la biblioteca Adafruit ADS1115 per a ADC
Un cop feta l’actualització, ja estem preparats per instal·lar les dependències començant pel mòdul Adafruit python per al xip ADS115. Assegureu-vos que esteu al directori inicial de Raspberry Pi executant;
cd ~
a continuació, instal·leu els elements essencials de construcció executant;
sudo apt-get install build-essential python-dev python-smbus git
A continuació, cloneu la carpeta git Adafruit per a la biblioteca executant;
git clon https://github.com/adafruit/Adafruit_Python_ADS1x15.git
Canvieu al directori del fitxer clonat i executeu el fitxer de configuració;
cd Adafruit_Python_ADS1x1z sudo python setup.py install
Després de la instal·lació, la pantalla hauria de semblar a la imatge següent.

Pas 4: proveu la biblioteca i la comunicació 12C.
Abans de continuar amb la resta del projecte, és important provar la biblioteca i assegurar-se que l'ADC pugui comunicar-se amb el raspberry pi a través d'I2C. Per fer-ho utilitzarem un exemple de guió que s'inclou amb la biblioteca.
Encara estigueu a la carpeta Adafruit_Python_ADS1x15, canvieu el directori al directori d'exemples executant;
exemples de cd
A continuació, executeu l'exemple sampletest.py que mostra el valor dels quatre canals a l'ADC en forma tabular.
Executeu l'exemple amb:
python simpletest.py
Si el mòdul I2C està habilitat i les connexions són bones, hauríeu de veure les dades tal com es mostra a la imatge següent.

Si es produeix un error, comproveu que l'ADC estigui ben connectat al PI i que la comunicació I2C estigui habilitada al Pi.
Pas 5: instal·leu Matplotlib
Per visualitzar les dades hem d’instal·lar el mòdul matplotlib que s’utilitza per representar tot tipus de gràfics en python. Això es pot fer executant;
sudo apt-get install python-matplotlib
Hauríeu de veure un resultat com la imatge següent.

Pas 6: instal·leu el mòdul Python Drawnow
Per últim, hem d’instal·lar el mòdul python drawow . Aquest mòdul ens ajuda a proporcionar actualitzacions en temps real de la trama de dades.
Instal·larem drawow mitjançant l’instal·lador de paquets de Python; pip , per tant, hem d’assegurar-nos que estigui instal·lat. Això es pot fer executant;
sudo apt-get install python-pip
A continuació, podem utilitzar pip per instal·lar el paquet drawow executant:
sudo pip instal·la drawow
Després d’executar-lo, hauríeu d’obtenir un resultat com la imatge següent.

Amb totes les dependències instal·lades, ja estem preparats per escriure el codi.
Codi Python per a l'oscil·loscopi Raspberry Pi:
El codi python per a aquest oscil·loscopi Pi és bastant senzill, sobretot si coneixeu el mòdul python matplotlib . Abans de mostrar-nos el codi sencer, intentaré dividir-lo en part i explicar-vos què fa cada part del codi perquè pugueu tenir prou coneixement per ampliar el codi per fer més coses.
En aquesta etapa, és important canviar a un monitor o utilitzar el visor VNC, qualsevol cosa a través de la qual pugueu veure l'escriptori del vostre Raspberry Pi, ja que el gràfic que es dibuixa no es mostrarà al terminal.
Amb el monitor com a interfície, obriu un nou fitxer python. Podeu anomenar-lo com vulgueu, però jo el diré scope.py.
sudo nano scope.py
Amb el fitxer creat, el primer que fem és importar els mòduls que farem servir;
temps d' importació d'importació matplotlib.pyplot com a plt des de la importació de dibuixos * importació Adafruit_ADS1x15
A continuació, creem una instància de la biblioteca ADS1x15 que especifica l'ADS1115 ADC
adc = Adafruit_ADS1x15.ADS1115 ()
A continuació, establim el guany de l'ADC. Hi ha diferents rangs de guany i s’han d’escollir en funció del voltatge que espereu a l’entrada de l’ADC. Per a aquest tutorial, estimem un 0 - 4.09v, de manera que farem servir un guany d'1. Per obtenir més informació sobre el guany, podeu consultar el full de dades ADS1015 / ADS1115.
GUANYA = 1
A continuació, hem de crear les variables de matriu que s’utilitzaran per emmagatzemar les dades a traçar i una altra que serveixi de recompte.
Val = cnt = 0
A continuació, donem a conèixer les nostres intencions de donar a conèixer la trama interactiva per permetre’ns traçar les dades en directe.
plt.ion ()
A continuació, iniciem la conversió ADC contínua especificant el canal ADC, en aquest cas, el canal 0 i també especifiquem el guany.
Cal tenir en compte que els quatre canals ADC de l'ADS1115 es poden llegir alhora, però amb 1 canal n'hi ha prou per a aquesta demostració.
adc.start_adc (0, gain = GAIN)
A continuació, creem una funció def makeFig , per crear i configurar els atributs del gràfic que mantindrà la nostra trama en viu. Primer de tot, establim els límits de l'eix y mitjançant ylim , després dels quals introduïm el títol de la trama i el nom de l'etiqueta abans d'especificar les dades que es representaran i el seu estil i color de trama mitjançant plt.plot (). També podem indicar el canal (tal i com s’ha indicat el canal 0), de manera que podem identificar cada senyal quan s’utilitzen els quatre canals de l’ADC. plt.legend s'utilitza per especificar on volem que es mostri la informació sobre aquest senyal (per exemple, Canal 0) a la figura.
plt.ylim (-5000.5000) plt.title ('Osciloscopi') plt.grid (True) plt.ylabel ('Sortides ADC') plt.plot (val, 'ro-', label = 'lux') plt.legend (loc = 'inferior dret')
A continuació anem a escriure el temps de bucle que serà utilitzat constantment les dades llegides de l'ADC i actualitzar en conseqüència la trama.
El primer que fem és llegir el valor de conversió ADC
value = adc.get_last_result ()
A continuació, imprimim el valor al terminal només per donar-nos una altra forma de confirmar les dades representades. Esperem uns segons després d’imprimir i afegim les dades a la llista (val) creada per emmagatzemar les dades d’aquest canal.
print ("Canal 0: {0}". format (valor)) time.sleep (0,5) val.append (int (valor))
A continuació, cridem drawow per actualitzar la trama.
dibuixat (makeFig)
Per assegurar-nos que les dades més recents estan disponibles a la trama, suprimim les dades de l’índex 0 després de cada 50 recompte de dades.
cnt = cnt + 1 if (cnt> 50): val.pop (0)
Això és tot!
El codi complet de Python es dóna al final d’aquest tutorial.
Oscil·loscopi Raspberry Pi en acció:
Copieu el codi complet de Python i enganxeu-lo al fitxer Python que hem creat anteriorment. Recordeu que necessitarem un monitor per veure la trama, de manera que tot això hauria de ser realitzat per VNC o amb un monitor o pantalla connectats.
Deseu el codi i executeu amb;
sudo python scope.py
Si heu utilitzat un nom diferent a scope.py, no oblideu canviar-lo perquè coincideixi.
Al cap d’uns minuts, hauríeu de veure com s’imprimeixen les dades de l’ADC al terminal. De tant en tant, podeu rebre un avís de matplotlib (com es mostra a la imatge següent) que s'hauria de suprimir, però no afecta les dades que es mostren ni la trama. No obstant això, per suprimir l'advertència, es poden afegir les línies de codi següents després de les línies d'importació al nostre codi.
Importa avisos importa matplotlib.cbook warnings.filterwarnings ("ignora", categoria = matplotlib.cbook.mplDeprecation)


Això és tot per a aquest tutorial, per provar completament el vostre oscil·loscopi, podeu connectar un dispositiu analògic com un potenciòmetre a un canal de l'ADC i hauríeu de veure canviar les dades a cada volta del potenciòmetre. O podeu introduir ona sinusoïdal o ona quadrada per provar la sortida.
Gràcies per llegir, si teniu alguna pregunta o alguna cosa que voldríeu afegir, deixeu-me un comentari.
Fins a la propera, seguiu fent!
