- Com funciona
- Components necessaris
- Esquemes
- Codi oscil·loscopi Arduino
- Script Python (Plotter)
- Codi Arduino
- Oscil·loscopi Arduino en acció
L’oscil·loscopi és una de les eines més importants que trobareu al banc de treball de qualsevol enginyer o fabricant en electrònica. S'utilitza principalment per visualitzar la forma d'ona i determinar els nivells de tensió, freqüència, soroll i altres paràmetres dels senyals aplicats a la seva entrada que poden canviar amb el pas del temps. També l’utilitzen els desenvolupadors de programari incrustats per a la depuració de codi i els tècnics per resoldre problemes de dispositius electrònics durant la reparació. Aquests motius fan que l’oscil·loscopi sigui una eina obligatòria per a qualsevol enginyer. L’únic problema és que poden ser molt cars, els oscil·loscopis que realitzen les funcions més bàsiques amb la mínima precisió poden costar entre 45 i 100 dòlars, mentre que els més avançats i eficients costen més de 150 dòlars. Avui demostraré com utilitzar l' Arduinoi un programari, que es desenvoluparà amb el meu llenguatge de programació preferit Python, per construir un oscil·loscopi Arduino de 4 canals de baix cost capaç de realitzar les tasques per a les quals es desplegen alguns dels oscil·loscopis barats com la visualització de formes d'ona i la determinació dels nivells de voltatge per a senyals.
Com funciona
Hi ha dues parts per a aquest projecte;
- El convertidor de dades
- El Plotter
Els oscil·loscopis solen implicar la representació visual d’un senyal analògic aplicat al seu canal d’entrada. Per aconseguir-ho, primer hem de convertir el senyal d’analògic a digital i després dibuixar les dades. Per a la conversió, aprofitarem l’ ADC (convertidor analògic a digital) del microcontrolador atmega328p que fa servir l’Arduino per convertir les dades analògiques de l’entrada de senyal a un senyal digital. Després de la conversió, el valor per temps s’envia via UART des de l’Arduino al PC, on el programari del traçador que es desenvoluparà mitjançant python convertirà el flux entrant de dades a una forma d’ona traçant cada dada contra temps.
Components necessaris
Els components següents són necessaris per construir aquest projecte;
- Arduino Uno (es pot utilitzar qualsevol de les altres taules)
- Taula de pa
- Resistència de 10 k (1)
- LDR (1)
- Filferros de pont
Programaris obligatoris
- IDE Arduino
- Python
- Biblioteques Python: Pyserial, Matplotlib, Drawnow
Esquemes
L’esquema de l’ oscil·loscopi Arduino és senzill. Tot el que hem de fer és connectar el senyal que s’examinarà al pin analògic especificat de l’Arduino. Tanmateix, utilitzarem el LDR en una configuració simple de divisor de voltatge per generar el senyal a examinar, de manera que la forma d'ona generada descrigui el nivell de voltatge, en funció de la intensitat de la llum al voltant del LDR.
Connecteu els components tal com es mostra als esquemes següents;

Després de la connexió, la configuració hauria de semblar a la imatge següent.

Amb les connexions fetes, podem procedir a escriure el codi.
Codi oscil·loscopi Arduino
Escriureem codis per a cadascuna de les dues seccions. Per al Plotter, tal com s’ha esmentat anteriorment, escriurem un script Python que accepti les dades de l’Arduino mitjançant UART i Plots, mentre que per al convertidor, escriurem un esbós d’Arduino que agafi les dades de l’ADC i les converti a nivells de tensió que s’envien al traçador.
Script Python (Plotter)
Com que el codi python és més complex, començarem per ell.
Farem servir un parell de biblioteques incloses; drawow, Matplotlib i Pyserial amb l’escriptura python com s’ha esmentat anteriorment. Pyserial ens permet crear un script Python que es pugui comunicar a través del port sèrie, Matplotlib ens dóna la possibilitat de generar gràfics a partir de les dades rebudes a través del port sèrie i Drawow ens proporciona un mitjà per actualitzar la trama en temps real.
Hi ha diverses maneres d’instal·lar aquests paquets al vostre PC, la més senzilla és mitjançant pip . Pip es pot instal·lar mitjançant la línia d’ordres en una màquina Windows o Linux. PIP està empaquetat amb python3, així que us aconsellaré que instal·leu python3 i marqueu la casella sobre com afegir python al camí d'accés. Si teniu problemes amb la instal·lació de pip, consulteu aquest lloc web oficial de Python per obtenir consells.
Amb pip instal·lat, ara podem instal·lar les altres biblioteques que necessitem.
Obriu el símbol del sistema per a usuaris de Windows, terminal per a usuaris de Linux i introduïu el següent;
pip instal·lar pyserial
Fet això, instal·leu matplotlib utilitzant;
pip instal·lar matplotlib
Drawnow s'instal·la de vegades al costat de matplotlib, però per estar segur, executeu;
pip instal·lar dibuix
Un cop finalitzada la instal·lació, ja estem preparats per escriure l’escriptura python.
L’escriptura python d’aquest projecte és similar a la que vaig escriure per a l’oscil·loscopi basat en Raspberry Pi.
Comencem per importar totes les biblioteques necessàries per al codi;
temps d'importació d'importació matplotlib.pyplot com a plt des de la importació de dibuixos * importació pyserial
A continuació, creem i inicialitzem les variables que s’utilitzaran durant el codi. La matriu val s'utilitzarà per emmagatzemar les dades rebudes del port sèrie i s'utilitzarà cnt per comptar. Les dades de la ubicació 0 se suprimiran després de cada 50 recompte de dades. Això es fa per mantenir les dades que es mostren a l'oscil·loscopi.
val = cnt = 0
A continuació, creem l'objecte de port sèrie a través del qual l'Arduino es comunicarà amb el nostre script Python. Assegureu-vos que el port de com especificat a continuació sigui el mateix port de com a través del qual la vostra placa Arduino es comunica amb l’IDE. La taxa de 115200 baud utilitzada anteriorment es va utilitzar per assegurar una comunicació a alta velocitat amb l'Arduino. Per evitar errors, el port sèrie Arduino també ha d’estar habilitat per comunicar-se amb aquesta velocitat de transmissió.
port = serial.Serial ('COM4', 115200, timeout = 0,5)
A continuació, fem que la trama sigui interactiva mitjançant;
plt.ion ()
hem de crear una funció per generar la trama a partir de les dades rebudes, creant el límit màxim i mínim que esperem, que en aquest cas és 1023 basat en la resolució de l’ADC d’Arduino. També establim el títol, etiquetem cada eix i afegim una llegenda per facilitar la identificació de la trama.
#create the function function def makeFig (): plt.ylim (-1023,1023) plt.title ('Osciloscope') plt.grid (True) plt.ylabel ('Sortides ADC') plt.plot (val, 'ro - ', label =' Canal 0 ') plt.legend (loc =' inferior dret ')
Un cop fet això, ja estem preparats per escriure el bucle principal que pren les dades del port sèrie quan estigui disponible i les representi. Per sincronitzar-lo amb l'Arduino, s'envia una informació d'aproximació de mans a l'Arduino mitjançant l'escriptura python per indicar la seva disposició a llegir les dades. Quan l’Arduino rep les dades d’aprimat de mans, respon amb dades de l’ADC. Sense aquesta encaixada de mans, no podrem representar les dades en temps real.
while (True): port.write (b's ') #handshake amb Arduino if (port.inWaiting ()): # si l'arduino contesta value = port.readline () # llegeix la resposta imprimeix (value) #print perquè puguem superviseu-lo número = int (valor) # converteix les dades rebudes a la impressió sencera ("Canal 0: {0}". format (nombre)) # Dormiu durant mig segon. time.sleep (0,01) val.append (int (nombre)) drawow (makeFig) # actualització gràfica per reflectir l'entrada de dades nova plt.pause (.000001) cnt = cnt + 1 if (cnt> 50): val.pop (0) # Mantingueu la trama actualitzada suprimint les dades de la posició 0
El codi python complet per a l’oscil·loscopi arduino es dóna al final d’aquest article que es mostra a continuació.
Codi Arduino
El segon codi és l’esbós d’Arduino per obtenir les dades que representen el senyal de l’ADC i, a continuació, espereu a rebre el senyal d’enllaç de mans del programari del traçador. Tan bon punt rep el senyal d’estrenyiment de mans, envia les dades adquirides al programari del traçador mitjançant UART.
Comencem declarant el pin del pin analògic de l'Arduino al qual s'aplicarà el senyal.
int sensorpin = A0;
A continuació, inicialitzem i iniciem la comunicació en sèrie amb una velocitat en bauds de 115200
void setup () { // inicialitza la comunicació en sèrie a 115200 bits per segon perquè coincideixi amb la de l'escriptura python: Serial.begin (115200); }
Finalment, la funció voidloop () que gestiona la lectura de les dades i envia les dades per sèrie al traçador.
void loop () { // llegiu l'entrada del pin analògic 0: float sensorValue = analogRead (sensorpin); byte data = Serial.read (); if (data == 's') { Serial.println (sensorValue); retard (10); // retard entre les lectures per obtenir estabilitat } }
A continuació es mostra el codi complet de l’oscil·loscopi Arduino i al final d’aquest article que es mostra a continuació.
int sensorpin = A0; void setup () { // inicialitza la comunicació en sèrie a 115200 bits per segon perquè coincideixi amb la de l'escriptura python: Serial.begin (115200); } void loop () { // llegeix l'entrada del pin analògic 0: ##################################### ####################### float sensorValue = analogRead (sensorpina); byte data = Serial.read (); if (data == 's') { Serial.println (sensorValue); retard (10); // retard entre les lectures per obtenir estabilitat } }
Oscil·loscopi Arduino en acció
Pengeu el codi a la configuració d'Arduino i executeu l'script python. Hauríeu de veure com les dades comencen a transmetre’s a través de la línia d’ordres de Python i la trama varia amb la intensitat de la llum, tal com es mostra a la imatge següent.

Així doncs, es pot fer servir Arduino com a oscil·loscopi, també es pot fer amb Raspberry pi, consulteu aquí el tutorial complet sobre l’oscil·loscopi basat en Raspberry Pi.
