- Componenti richiesti
- Modulo sensore MPU6050 - Una breve introduzione
- Schema del circuito del contapassi Attiny85
- PCB di fabbricazione per contapassi Attiny85
- Ordinazione di PCB da PCBWay
- Assemblaggio della PCB del contapassi ATtiny85
- ATtiny85 Spiegazione del codice del contatore di passi
- Facciamo una passeggiata con il nostro contapassi Arduino
In questo tutorial, costruiremo un contapassi facile ed economico utilizzando l'IC ATtiny85, l'accelerometro e giroscopio MPU6050 e il modulo display OLED. Questo semplice contapassi basato su Arduino è alimentato da una cella a bottone da 3V, che lo rende facile da trasportare quando esci per una passeggiata o per fare jogging. Richiede anche pochissimi componenti per la compilazione e anche il codice è relativamente semplice. Il programma in questo progetto utilizza l'MPU6050 per misurare l'ampiezza dell'accelerazione lungo i 3 assi (X, Y e Z). Quindi calcola la differenza dell'intensità dell'accelerazione tra i valori precedenti e quelli correnti. Se la differenza è maggiore di una certa soglia (per camminare più di 6 e per correre più di 10), aumenta il conteggio dei passi di conseguenza. I passi totali effettuati vengono quindi visualizzati sul display OLED.
Per costruire questo contapassi portatile su un PCB, abbiamo fabbricato le nostre schede PCB da PCBWay e assembleremo e testeremo lo stesso in questo progetto. Se desideri aggiungere più funzionalità, puoi anche aggiungere un monitor Heartbeat a questa configurazione e abbiamo anche precedentemente costruito un contapassi accelerometro Arduino utilizzando ADXL335, dai un'occhiata se sei interessato.
Componenti richiesti
Per costruire questo contapassi usando Arduino, avrai bisogno dei seguenti componenti.
- Attiny85 IC
- MPU6050
- Modulo display OLED
- 2 × pulsanti
- Resistori 5 × 10KΩ (SMD)
Modulo sensore MPU6050 - Una breve introduzione
MPU6050 si basa sulla tecnologia MEMS (Micro-Mechanical Systems). Questo sensore ha un accelerometro a 3 assi, un giroscopio a 3 assi e un sensore di temperatura integrato. Può essere utilizzato per misurare parametri come Accelerazione, Velocità, Orientamento, Spostamento, ecc. In precedenza abbiamo interfacciato MPU6050 con Arduino e Raspberry pi e abbiamo anche costruito alcuni progetti che lo utilizzano come: Robot di bilanciamento automatico, Goniometro digitale Arduino e Inclinometro Arduino.
Il modulo MPU6050 è di piccole dimensioni e ha un basso consumo energetico, elevata ripetizione, elevata tolleranza agli urti e bassi prezzi per l'utente. L'MPU6050 è dotato di un bus I2C e di un'interfaccia bus I2C ausiliaria e può facilmente interferire con altri sensori come magnetometri e microcontrollori.
Schema del circuito del contapassi Attiny85
Di seguito è riportato lo schema per il contapassi MPU6050:
L'immagine sopra mostra lo schema del circuito per l'interfacciamento di MPU6050 e display OLED con Attiny85 IC. L'interfaccia tra MPU6050, display OLED e Arduino deve essere implementata utilizzando il protocollo I2C. Quindi, SCLPin (PB2) dell'ATtiny85 è collegato rispettivamente allo SCLPin dell'MPU6050 e del display OLED. Allo stesso modo, SDAPin (PB0) di ATtiny85 è collegato a SDAPin di MPU6050 e display OLED. Due pulsanti sono anche collegati al pin PB3 e PB4 dell'IC ATtiny85. Questi pulsanti possono essere utilizzati per scorrere il testo o modificare il testo sul display.
Nota: segui il nostro tutorial precedente Programmazione IC ATtiny85 direttamente tramite USB utilizzando Digispark Bootloader per programmare l'IC ATtiny85 tramite USB e Bootloader Digispark.
PCB di fabbricazione per contapassi Attiny85
Lo schema è fatto e possiamo procedere con la disposizione del PCB. Puoi progettare il PCB utilizzando qualsiasi software PCB di tua scelta. Abbiamo utilizzato EasyEDA per fabbricare PCB per questo progetto.
Di seguito sono riportate le viste del modello 3D dello strato superiore e dello strato inferiore del PCB contapassi:
Il layout PCB per il circuito sopra è anche disponibile per il download come Gerber dal link indicato di seguito:
- File Gerber per ATtiny85 Step Counter
Ordinazione di PCB da PCBWay
Ora dopo aver finalizzato il progetto, puoi procedere con l'ordinazione del PCB:
Passaggio 1: accedi a https://www.pcbway.com/, registrati se è la prima volta. Quindi, nella scheda Prototipo PCB, inserisci le dimensioni del tuo PCB, il numero di strati e il numero di PCB richiesto.
Passaggio 2: procedi facendo clic sul pulsante "Cita ora". Verrai indirizzato a una pagina in cui impostare alcuni parametri aggiuntivi come Tipo di scheda, Livelli, Materiale per PCB, Spessore e Altro, la maggior parte di essi è selezionata per impostazione predefinita, se stai optando per parametri specifici, puoi selezionare qui dentro.
Passaggio 3: il passaggio finale è caricare il file Gerber e procedere con il pagamento. Per assicurarsi che il processo sia fluido, PCBWAY verifica se il file Gerber è valido prima di procedere con il pagamento. In questo modo, puoi essere certo che il tuo PCB è facile da fabbricare e ti raggiungerà come impegnato.
Assemblaggio della PCB del contapassi ATtiny85
Dopo alcuni giorni, abbiamo ricevuto il nostro PCB in un pacchetto pulito e la qualità del PCB era buona come sempre. Lo strato superiore e lo strato inferiore del tabellone sono mostrati di seguito:
Dopo esserti assicurato che le tracce e le impronte fossero corrette. Ho proceduto con l'assemblaggio del PCB. La scheda completamente saldata si presenta come la seguente:
ATtiny85 Spiegazione del codice del contatore di passi
Il codice completo del contapassi Arduino è fornito alla fine del documento. Qui stiamo spiegando alcune parti importanti del codice.
Il codice utilizza le librerie TinyWireM.he TinyOzOLED.h. La libreria TinyWireM può essere scaricata da Library Manager nell'IDE di Arduino e installata da lì. Per questo, apri l'IDE di Arduino e vai a Sketch <Include Library <Manage Libraries . Ora cerca TinyWireM.he installa la libreria TinyWireM di Adafruit.
Mentre la libreria TinyOzOLED.h può essere scaricata dai collegamenti forniti.
Dopo aver installato le librerie sull'IDE di Arduino, avvia il codice includendo i file delle librerie necessari.
#include "TinyWireM.h" #include "TinyOzOLED.h"
Dopo aver incluso le librerie, definire le variabili per memorizzare le letture dell'accelerometro.
intaccelX, accelY, accelZ;
All'interno del loop setup () , inizializza la libreria dei cavi e resetta il sensore tramite il registro di gestione dell'alimentazione inizializza anche la comunicazione I2C per il display OLED. Quindi nelle righe successive impostare l'orientamento del display e inserire l'indirizzo del registro per i valori dell'accelerometro e del giroscopio.
TinyWireM.begin (); OzOled.init (); OzOled.clearDisplay (); OzOled.setNormalDisplay (); OzOled.sendCommand (0xA1); OzOled.sendCommand (0xC8); TinyWireM.beginTransmission (mpu); TinyWireM.write (0x6B); TinyWireM.write (0b00000000); TinyWireM.write (0x1B);
Nella funzione getAccel () , inizia leggendo i dati dell'accelerometro. I dati per ogni asse vengono memorizzati in due byte (superiore e inferiore) o registri. Per leggerli tutti, inizia con il primo registro e, utilizzando la funzione requiestFrom () , chiediamo di leggere tutti e 6 i registri per gli assi X, Y e Z. Quindi leggiamo i dati da ciascun registro e, poiché le uscite sono un complemento a due, combiniamole in modo appropriato per ottenere i valori completi dell'accelerometro.
voidgetAccel () {TinyWireM.beginTransmission (mpu); TinyWireM.write (0x3B); TinyWireM.endTransmission (); TinyWireM.requestFrom (mpu, 6); accelX = TinyWireM.read () << 8-TinyWireM.read (); accelY = TinyWireM.read () << 8-TinyWireM.read (); accelZ = TinyWireM.read () << 8-TinyWireM.read (); }
Ora all'interno della funzione loop, leggi prima i valori degli assi X, Y e Z e dopo aver ottenuto i valori degli assi 3, calcola il vettore di accelerazione totale prendendo la radice quadrata dei valori degli assi X, Y e Z. Quindi calcolare la differenza tra il vettore corrente e il vettore precedente e se la differenza è maggiore di 6, aumentare il conteggio dei passi.
getAccel (); vettore = sqrt ((accelX * accelX) + (accelY * accelY) + (accelZ * accelZ)); totalvector = vector - vectorprevious; if (totalvector> 6) {Steps ++; } OzOled.printString ("Steps", 0, 4); OzOled.printNumber (Passi, 0, 8, 4); vectorprevious = vettore; ritardo (600);
Facciamo una passeggiata con il nostro contapassi Arduino
Una volta finito di assemblare il PCB, collega l'ATtiny85 alla scheda del programmatore e carica il codice. Ora prendi la configurazione del contapassi nelle tue mani e inizia a camminare passo dopo passo, dovrebbe visualizzare il numero di passi su OLED. A volte aumenta il numero di passaggi quando l'installazione vibra molto rapidamente o molto lentamente.
È così che puoi costruire il tuo contapassi usando ATtiny85 e MPU6050. Il funzionamento completo del progetto si trova anche nel video linkato di seguito. Spero ti sia piaciuto il progetto e che sia stato interessante crearne uno tuo. Se hai domande, lasciale nella sezione commenti qui sotto.