Pomiar przyspieszenia z wykorzystaniem WiFi, ESP8266 Micropython

Typ_projektu
microPython
Zdjecie główne
Proste połączenie - akcelerometr i esp8266 - ma tak dużo zastosowań, ile tylko sobie wyobrazisz!
Krótki opis projektu

Pomiar przyspieszenia wózka jadącego z równi pochyłej, biegnącego kolegi czy jego pięści, wszystko to wykonasz przy pomocy tego prostego zestawu. Pozwala on na dokonanie 17tu pomiarów w czasie 8 sekund i wizualizację ich w przeglądarce z wykorzystaniem WiFi (acces point).

Niezbędne elementy

1. Płytka ESP8266

2. Akcelerometr GY521 (MPU6050)

3. Cztery przewody żeńsko-żeńskie

4.kabel USB

5.komputer PC z oprogramowaniem Thonny

Sprzęt

Ewentualnie lutownica do polutowania pinów GY521

Opis projektu

Na początek trzeba zacząć od stworzenia układu tak jak na schemacie. Cztery kable, nic skomplikowanego :).

Kolejnym krokiem będzie podpięcie naszej płytki ESP8266 do komputera i uruchomienie oprogramowania Thonny. Pierwszym elementem niezbędnym do działania programu będzie wgranie na płytkę biblioteki mpu6050. W tym celu należy pobrać plik mpu6050.py i otworzyć w Thonnym. Następnie należy zapisać go jako nowy plik pod tą samą nazwą, tym razem jednak na płytce (MicroPython device). 

Skoro już płytkę mamy przygotowaną, czas zająć się kodem głównym. W tym celu należy otworzyć plik boot.py (znajdujący się na płytce - open - from MicroPython device) i skopiować tam kod, który możesz znaleźć pod opisem. Jest to swego rodzaju fuzja zakładania acces pointa i obsługi akcelerometru MPU6050 (o których możesz dowiedzieć się więcej z linków poniżej) oraz wykorzystanie wbudowanej diody led do komunikacji z użytkownikiem. Dodatkowo w celu zwiększenia dokładności pomiarów zastosowano prosty filtr który liczy średnią z 10ciu pomiarów i dopiero ją prezentuje użytkownikowi.

Teraz, po wgraniu pliku na płytkę możemy uruchomić program. Potrzebujemy jednak jeszcze uzyskać dostęp do naszych danych. W tym celu należy na urządzeniu typu laptop/tablet/telefon (po uprzednim podłączeniu płytki ESP8266) odnaleźć sieć Przyspieszenie_ST3AM i wpisać hasło 123456789 . Następnie na przeglądarce należy otworzyć adres http://192.168.4.1 pod którym znajdziemy tabelkę z danymi. 

Jesteśmy więc już przygotowani do korzystania z naszego urządzenia i przeprowadzania pomiarów przyspieszenia! Teraz możemy już odłączyć naszą płytkę od komputera i wykorzystać powerbank do zwiększenia jej możliwości.

Aby wykonać pomiar należy podłączyć płytkę do zasilania - zacznie wówczas mrugać dioda wbudowana w ESP8266. Dziesiąte mrugnięcie sygnalizuje rozpoczęcie pomiaru podczas którego dioda będzie paliła się cały czas. Kiedy pomiar się zakończy dioda zgaśnie. Po odświeżeniu strony w przeglądarce pojawią się nowe dane w tabeli.

Pomiar przyspieszenia odbywa się zgodnie z kierunkiem strzałki x na płytce GY521.

Zwiększanie dokładności pomiarów (dla chętnych!):

W celu zwiększenia dokładności pomiarów uruchom plik kalibracja.py (musisz jego kod wrzucić do pliku boot.py na płytce). Wartości a i b zmień na 0. Uruchom program. Program wyrzuci wartości w oknie dialogowym. Po ustawieniu akcelerometru pionowo - strzałka x w górę, oraz pionowo - strzałka x w dół odejmij od siebie te wartości, a następnie ich różnicę podzieloną na 2 wpisz w miejsce wartości a. Teraz, uruchom program jeszcze raz i odczytaj wartość po ustawieniu akcelerometru pionowo raz jeszcze (wartości powinny być te same w obu kierunkach). Podziel tą wartość przez 9.81 i wpisz w miejsce b.

Gratulacje, zmusiłeś przyspieszenie ziemskie do pomocy Ci w skalowaniu czujnika! Teraz wystarczy znaleźć w kodzie głównym miejsce oznaczone skalowanie czujnika i podmienić wartości tam wpisane na Twoje.

Możesz już używać Twojego czujnika!

Zdjęcia
kod programu
from machine import I2C
from machine import Pin
import time
import mpu6050

try:
  import usocket as socket
except:
  import socket

import network

import esp
esp.osdebug(None)

import gc
gc.collect()

ssid = 'Przyspieszenie_ST3AM'
password = '123456789'

ap = network.WLAN(network.AP_IF)
ap.active(True)
ap.config(essid=ssid, password=password)

d = Pin(2, Pin.OUT) #deklarowanie diody

i2c = I2C(scl=Pin(5), sda=Pin(4))       #initializing the I2C method for ESP8266
mpu= mpu6050.accel(i2c)

while ap.active() == False:
    pass

print('Connection successful')
print(ap.ifconfig())

def web_page():
    html0 = """<html><head><meta name="viewport" content="width=device-width, initial-scale=1.2"></head>
    <body><style> td { border: 1px solid black; } </style><table>
    <tr>
    <td>Czas</td> <td>Przyspieszenie</td>
    </tr>"""
    html1 = """<tr>
      <td>"""
    html2 = """</td> <td>"""
    html3 = """</td>
   </tr>"""
    html4 = """</table></body></html>"""
    
    html = html0;
    for i in range (0,17):
        html = html + html1 + str(0.5*i) + html2 + str(ACX[i+1]) + html3;
    html = html + html4;
    return html

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 80))
s.listen(5)

for i in range (1,10):   #mruganie diody na początku
    d.value(0)
    time.sleep(0.3)
    d.value(1)
    time.sleep(0.7)
    
ACX = [0];
d.value(0)    
for i in range (1,18):
    AcX=0;
    for i in range(9):         #uśrednenie wartości pomiarów
        AcX=AcX+mpu.get_AcX();
        time.sleep(0.05)
    AcX=AcX/10;
    AcX=-(AcX-379)/1500;  #skalowanie czujnika
    ACX.append(AcX)
d.value(1)

conn, addr = s.accept()
print('Got a connection from %s' % str(addr))
request = conn.recv(1024)
print('Content = %s' % str(request))
response = web_page()
conn.send(response)
Schemat
Tagi
Akcelerometr Accel ESP8266 MPU6050 GY521
Odnośniki zewnętrzne
https://github.com/adamjezek98/MPU6050-ESP8266-MicroPython/blob/master/README.md
https://microcontrollerslab.com/micropython-mpu-6050-esp32-esp8266/
https://randomnerdtutorials.com/micropython-esp32-esp8266-access-point-ap/