Jako inżynierowie / programiści zawsze polegamy na zebranych danych przy projektowaniu lub ulepszaniu systemu. Rejestrowanie danych i ich analiza jest powszechną praktyką w większości branż, tutaj budujemy projekt Arduino Data Logger, w którym dowiemy się, jak możemy rejestrować dane w określonych odstępach czasu. Wykorzystamy płytkę Arduino do odczytu niektórych danych (tutaj temperatury, wilgotności, daty i czasu) i zapisania ich na karcie SD i komputerze jednocześnie.
Zapisane dane można łatwo otworzyć w arkuszu Excel do dalszych analiz. Aby zachować datę i godzinę, użyjemy słynnego modułu RTC DS3231, a do uzyskania temperatury i wilgotności użyjemy czujnika DHT11. Pod koniec projektu nauczysz się
- Jak zarejestrować dane na karcie SD z datą, godziną i wartościami czujnika.
- Jak zapisywać dane bezpośrednio do arkusza Excel na komputerze PC za pośrednictwem komunikacji szeregowej.
Wymagane materiały:
- Płytka prototypowa
- Arduino UNO (dowolna płyta Arduino)
- DHT11 Czujnik temperatury
- Moduł DS3231 RTC
- Moduł karty SD
- karta SD
- Przewody łączące
- Komputer / laptop
Schemat obwodu:
Schemat obwodu dla tego projektu rejestratora temperatury Arduino pokazano poniżej.
Jak pokazano na schemacie połączeń, połączenia są bardzo proste, ponieważ użyliśmy ich jako modułów, możemy je bezpośrednio zbudować na płytce stykowej. Połączenia są dalej sklasyfikowane w poniższej tabeli
Pin Arduino |
Pin modułu |
Czujnik temperatury - DHT11 |
|
Vcc |
5V |
Gnd |
Gnd |
Nc |
Nc |
Na zewnątrz |
Pin 7 |
Moduł RTC DS3231 |
|
Vcc |
5V |
Gnd |
Gnd |
SCL |
Pin A5 |
SDA |
Szpilka A4 |
Moduł karty SD |
|
Vcc |
5V |
Gnd |
Gnd |
MISO |
Kołek 12 |
MOSI |
Pin 11 |
SCK |
Kołek 13 |
CS |
Pin 4 |
Możesz zastąpić czujnik temperatury DHT11 dowolnym czujnikiem, z którego chcesz rejestrować wartości. Możesz sprawdzić LM35 z Arduino, aby odczytać temperaturę.
Moduł RTC DS3231 jest połączony z Arduino za pomocą komunikacji I2C (SCL, SDA), a moduł karty SD za pomocą komunikacji SPI (MISO, MOSI, SCK, CS). Piny 4 i 7 są zdefiniowane jako pin CS i pin wyjściowy przez program Arduino, w razie potrzeby możesz je zmienić na dowolny inny pin. Wcześniej połączyliśmy kartę SD z projektem Arduino w odtwarzaczu muzyki.
Objaśnienie programu Arduino:
Musimy napisać program Arduino, który może wykonać następujące czynności.
- Odczytaj dane z czujnika DTH11 (lub inne dane, które chcesz rejestrować).
- Zainicjuj magistralę I2C, aby odczytać dane z modułu RTC.
- Zainicjuj magistralę SPI, aby połączyć moduł karty SD z Arduino.
- Przechowuj datę, godzinę, temperaturę i wilgotność na karcie SD.
- Przechowuj datę, godzinę, temperaturę i wilgotność w arkuszu Excel uruchomionym na komputerze / laptopie.
Powyższe kroki mogą wydawać się skomplikowane, ale są bardzo łatwe, ponieważ mamy biblioteki, które wykonują za nas ciężką pracę. Musisz pobrać następujące dwie biblioteki
- Biblioteka czujników DHT11 z GitHub
- Biblioteka modułów DS3231 RTC firmy Rinky-Dink Electronics
Po pobraniu biblioteki dodaj je do swojego Arduino IDE, wykonując następujące czynności
Szkic -> Dołącz bibliotekę -> Dodaj bibliotekę.ZIP
Aby wprowadzić dane z Arduino na żywo do arkusza Excela na komputerze, będziemy również musieli zainstalować oprogramowanie o nazwie PLX-DAQ dostarczone przez Parallax Inc. Kliknij łącze, aby pobrać plik i zainstalować je w oparciu o system operacyjny. Powinno to utworzyć folder o nazwie PLS-DAQ na pulpicie. Zajmiemy się tym później w naszej sekcji roboczej.
Teraz, po dodaniu obu bibliotek i zainstalowaniu oprogramowania, możesz użyć pełnego kodu (podanego na dole samouczka) i przesłać je do swojego Arduino. Starałem się, aby kod był tak prosty, jak to tylko możliwe, a wyjaśnienia są również podawane w sekcjach komentarzy. Ponadto wyjaśnię poniżej ważne segmenty.
1. Odczytywanie danych z DS3231:
DS3231 to moduł RTC (Real Time Clock). Służy do utrzymywania daty i godziny dla większości projektów elektroniki. Ten moduł ma własny zasilacz do baterii pastylkowej, za pomocą którego utrzymuje datę i godzinę, nawet po odłączeniu głównego zasilania lub gdy MCU przeszedł twardy reset. Więc kiedy ustawimy datę i godzinę w tym module, będzie to zawsze śledzić.
Korzystanie z tego modułu jest bardzo łatwe ze względu na bibliotekę dostarczoną przez Arduino.
// Zainicjuj DS3231 za pomocą interfejsu sprzętowego DS3231 rtc (SDA, SCL); void Initialize_RTC () {// Zainicjuj obiekt rtc rtc.begin (); // #### następujące wiersze można odkomentować, aby ustawić datę i godzinę po raz pierwszy ### / * rtc.setDOW (PIĄTEK); // Ustaw dzień tygodnia na SUNDAY rtc.setTime (18, 46, 45); // Ustaw godzinę na 12:00:00 (format 24-godzinny) rtc.setDate (6, 30, 2017); // Ustaw datę na 1 stycznia 2014 * /}
Uwaga: Korzystając z tego modułu po raz pierwszy, musisz ustawić datę i godzinę. Można to zrobić, po prostu usuwając komentarze, jak wspomniano powyżej, i wpisując datę i godzinę. Upewnij się, że je z powrotem skomentowałeś i załadujesz, w przeciwnym razie za każdym razem, gdy uruchomisz forum, data i godzina zostaną ustawione ponownie. Możesz również użyć RTC IC DS1307 do odczytu czasu za pomocą Arduino.
2. Odczytywanie danych z DHT11:
DHT11 to czujnik temperatury i wilgotności. Wysyła wartości temperatury i wilgotności w postaci 8-bitowych danych szeregowo przez pin wyjściowy modułu. Biblioteka odczytuje te dane za pomocą funkcji szeregowej oprogramowania Arduino.
# zdefiniować DHT11_PIN 7 // Pin wyjściowy czujnika jest podłączony do pinu 7 dht DHT; // Obiekt czujnika nazwany jako DHT void Read_DHT11 () {int chk = DHT.read11 (DHT11_PIN); }
Tutaj podłączyłem pin wyjściowy do pinu 7, jako przykład możesz wybrać dowolny pin, który obsługuje oprogramowanie szeregowe. Wywołanie DHT.read (numer pinu); odczyta wartość temperatury i wilgotności i zapisze ją odpowiednio w parametrach Temperatura DHT i Wilgotność DHT . Sprawdź również ten pomiar temperatury Arduino oparty na DHT11.
3. Inicjalizacja modułu karty SC:
void Initialize_SDcard () {// sprawdź, czy karta jest obecna i może zostać zainicjowana: if (! SD.begin (chipSelect)) {Serial.println ("Karta nie działa lub nie jest obecna"); // nic więcej nie rób: return; } // otwórz plik. zwróć uwagę, że w danym momencie może być otwarty tylko jeden plik, // więc musisz zamknąć ten plik przed otwarciem kolejnego. Plik dataFile = SD.open ("LoggerCD.txt", FILE_WRITE); // jeśli plik jest dostępny, zapisz do niego: if (dataFile) {dataFile.println ("Data, godzina, temperatura, wilgotność"); // Napisz pierwszy wiersz w pliku programu Excel dataFile.close (); }}
Korzystanie z karty SD z Arduino jest łatwe ze względu na bibliotekę kart SD, która zostanie domyślnie dodana do Arduino IDE. W funkcji inicjalizacji karty SD utworzymy plik tekstowy o nazwie „LoggerCD.txt” i napiszemy pierwszy wiersz naszej zawartości. Tutaj oddzielamy wartości za pomocą „,” jako separatora. Oznacza to, że umieszczenie przecinka oznacza, że musimy przejść do następnej komórki w arkuszu Excela.
4. Zapisywanie danych na karcie SD
void Write_SDcard () {// otwórz plik. zwróć uwagę, że w danym momencie może być otwarty tylko jeden plik, // więc musisz zamknąć ten plik przed otwarciem kolejnego. Plik dataFile = SD.open ("LoggerCD.txt", FILE_WRITE); // jeśli plik jest dostępny, zapisz do niego: if (dataFile) {dataFile.print (rtc.getDateStr ()); // Przechowuj datę na karcie SD dataFile.print (","); // Przejdź do następnej kolumny za pomocą "," dataFile.print (rtc.getTimeStr ()); // Przechowuj datę na karcie SD dataFile.print (","); // Przejdź do następnej kolumny za pomocą "," dataFile.print (DHT.temperature); // Przechowuj datę na karcie SD dataFile.print (","); // Przejdź do następnej kolumny za pomocą "," dataFile.print (DHT.humidity); // Przechowuj datę na karcie SD dataFile.print (","); // Przejdź do następnej kolumny za pomocą "," dataFile.println (); // Koniec wiersza przejdź do następnego wiersza dataFile.close ();// Zamknij plik} else Serial.println ("OOPS !! Zapis na karcie SD nie powiódł się"); }
Jak wspomniano wcześniej, naszym zamiarem jest zapisanie daty, godziny, temperatury i wilgotności na naszej karcie SD. Z pomocą biblioteki DS3231 i biblioteki DHT11 nasze Arduino będzie w stanie odczytać wszystkie te cztery parametry i zapisać je w następujących parametrach, jak pokazano w tabeli poniżej
Data |
rtc.getDateStr ()); |
Czas |
rtc.getTimeStr ()); |
Temperatura |
Temperatura DHT |
Wilgotność |
DHT. Wilgotność |
Teraz możemy bezpośrednio użyć tych parametrów do przechowywania ich na karcie SD za pomocą linii drukowania
dataFile.print (parametr);
Możesz zauważyć, że każdy parametr jest oddzielony przecinkiem, aby wyglądał czytelnie, oraz właściwość dataFile.println (); służy do wskazania końca wiersza.
5. Zapis danych do PLX-DAQ
PLX-DAQ to oprogramowanie Microsoft Excel Plug-in, które pomaga nam zapisywać wartości z Arduino bezpośrednio do pliku Excel na naszym laptopie lub komputerze. To mój osobisty faworyt z dwóch powodów:
1. Możesz zapisywać i monitorować dane w tym samym czasie i zapewnia nam sposób na wykreślanie ich w postaci wykresów.
2. Do śledzenia daty i czasu nie jest potrzebny moduł RTC, taki jak DS3231. Możesz po prostu użyć daty i godziny uruchomionej na Twoim laptopie / komputerze i zapisać je bezpośrednio w programie Excel.
Aby używać tego oprogramowania z Arduino, musimy przesyłać dane szeregowo w określonym wzorze, podobnie jak wyświetlanie wartości na monitorze szeregowym. Kluczowe kwestie wyjaśniono poniżej:
void Initialize_PlxDaq () {Serial.println ("CLEARDATA"); // czyści wszystkie dane pozostałe z poprzednich projektów Serial.println ("ETYKIETA, Data, Czas, Temperatura, Wilgotność"); // zawsze pisz LABEL, aby wskazać go jako pierwszą linię} void Write_PlxDaq () {Serial.print ("DATA"); // zawsze pisz "DANE", aby zidentyfikować następujące dane jako Data Serial.print (","); // Przejdź do następnej kolumny za pomocą "," Serial.print ("DATE"); // Przechowuj datę w Excelu Serial.print (","); // Przejdź do następnej kolumny za pomocą "," Serial.print ("TIME"); // Przechowuj datę w Excelu Serial.print (","); // Przejdź do następnej kolumny za pomocą "," Serial.print (DHT.temperature); // Przechowuj datę w Excelu Serial.print (","); // Przejdź do następnej kolumny za pomocą "," Serial.print (DHT.humidity);// Przechowuj datę w Excelu Serial.print (","); // Przejdź do następnej kolumny za pomocą "," Serial.println (); // End of Row move to next row}
Oprogramowanie rozpoznaje słowa kluczowe, takie jak ETYKIETA, DANE, CZAS, DATA itp. Jak pokazano w funkcji inicjalizacji, słowo kluczowe „ETYKIETA” jest używane do zapisania pierwszego WIERSZU arkusza Excel. Później w funkcji Write używamy słowa kluczowego „DANE”, aby wskazać, że poniższe informacje należy traktować jako DANE. Aby wskazać, że musimy przejść do następnego wiersza, musimy użyć przecinka („,”). Aby wskazać koniec wiersza, musimy wysłać Serial.println ();.
Jak wspomniano wcześniej, możemy zapisać datę i godzinę systemową, wysyłając odpowiednio słowa kluczowe „DATA” i „CZAS”, jak pokazano powyżej.
Uwaga: Nie używaj monitora szeregowego podczas korzystania z tego oprogramowania PLX_DAQ.
Objaśnienie robocze:
Działanie Arduino Data Logger jest proste. Gdy sprzęt i oprogramowanie są gotowe, nadszedł czas, aby wypalić program na płycie Arduino. Gdy tylko program zostanie załadowany, wartości temperatury i wilgotności zaczną być zapisywane na karcie SD. Musisz wykonać poniższe kroki, aby umożliwić PLX-DAQ zalogowanie się do arkusza Excel na komputerze.
Krok 1: Otwórz plik „Plx-Daq Spreadsheet”, który został utworzony na pulpicie podczas instalacji.
Krok 2: Jeśli istnieje blokada zabezpieczeń, kliknij Opcje-> Włącz zawartość -> Zakończ -> OK, aby wyświetlić następujący ekran.
Krok 3: Teraz wybierz prędkość transmisji na „9600” i port, do którego jest podłączone Twoje Arduino i kliknij Połącz. Twoje wartości powinny zacząć się rejestrować, jak pokazano na poniższym obrazku.
Możesz zostawić ten arkusz Excela otwarty i monitorować wartości w miarę ich rejestrowania. Gdy tak się dzieje, nasza karta SD również zapisałaby te same wartości. Aby sprawdzić, czy działa, po prostu wyjmij kartę SD i otwórz ją na swoim komputerze. Powinieneś znaleźć w nim plik tekstowy o nazwie „LoggerCD.txt” . Po otwarciu wyglądałoby to mniej więcej tak.
Ten plik zawiera dane, ale trudno byłoby je przeanalizować w notatniku. Dlatego możemy go otworzyć w Excelu jako plik CSV (wartości rozdzielane przecinkami), dzięki czemu jest bardziej efektywny. Aby otworzyć w programie Excel
1. Otwórz Excel. Kliknij File-> Open i wybierz „All file” w prawym dolnym rogu i wybierz plik „LoggerCD” z karty SD. Otworzy się kreator importu tekstu.
2. Kliknij „Dalej” i wybierz przecinek jako separator. Kliknij ponownie „Dalej”. Następnie zakończ.
3.Teraz twoje wartości zostaną otwarte w pliku Excel, jak pokazano poniżej
Zapisałem wartości co 5 sekund; możesz je rejestrować przez dowolny czas, zmieniając funkcję opóźnienia w programie. Aby uzyskać szczegółowe zrozumienie działania, obejrzyj poniższy film.
Mam nadzieję, że spodobał Ci się projekt, jeśli masz jakiekolwiek wątpliwości, napisz je w sekcji komentarzy poniżej, a pomogę Ci.
Ulepszenie premii - bezprzewodowe rejestrowanie danych za pomocą Arduino:
Po osiągnięciu sukcesu do tego momentu, po wprowadzeniu kilku ulepszeń i dodaniu kilku wierszy kodu możesz bezprzewodowo rejestrować dane.
Po prostu podłącz urządzenie Bluetooth, takie jak HC-05 i zapisz dane do PLX-DAQ przez Bluetooth zamiast szeregowego. To znaczy zastąpić Serial.print (parametr); z BluetoothName.print (parametr); i podłącz laptopa do modułu Bluetooth i wybierz port COM, do którego podłączony jest twój laptop Bluetooth i Taadaaa…… Masz działający bezprzewodowy system rejestracji danych w mgnieniu oka.