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).
1. Płytka ESP8266
2. Akcelerometr GY521 (MPU6050)
3. Cztery przewody żeńsko-żeńskie
4.kabel USB
5.komputer PC z oprogramowaniem Thonny
Ewentualnie lutownica do polutowania pinów GY521
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!
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)
https://microcontrollerslab.com/micropython-mpu-6050-esp32-esp8266/
https://randomnerdtutorials.com/micropython-esp32-esp8266-access-point-ap/