Projekt Arduino – część 3 – zmiana na płytkę Pro Mini z konwenterem FTDI
W pierwotnym planie chciałam wykorzystać płytkę Arduino Nano. Ze względu na mnogość tzw. „klonów”, kupiłam jeden z nich, bo pomyślałam, że nie ma co przepłacać. Niestety, sporo się namęczyłam zanim udało mi się wgrać cokolwiek na tą płytkę (MH-Tiny ATTINY88 ATmega328 Arduino Nano) – Moje Arduino IDE nie rozpoznawało podłączonego urządzenia, wygrzebałam gdzieś w sieci sterowniki do ATTiny88 (już nawet nie pamiętam gdzie) i udało mi się wgrać program…. Ale nie tak jak „standardowo” – program się wgrał, ale nie było opcji podglądu co się dzieje na Serial Monitorze. Ponieważ spędziłam nad tym naprawdę duuużo czasu, uznałam, że wystarczy.
Płytka ProMini i testowe podłączenie z programem Blink
Dlatego zamiast Arduino Nano zdecydowałam się wykorzystać płytkę, którą wcześniej kupił już mój mąż – też klon – Arduino Pro Mini (z chipem Atmel Mega328P). Pomyślałam też, że może nawet- jak zadziała – będzie lepsza, bo jeszcze mniejsza :D.
Najpierw podłączyłam do komputera samą płytkę konwentera i sprawdziłam w Menedżerze urządzeń, czy mój system odnalazł urządzenie (szukałam pod „Porty (COM i LPT)”) – moje urządzenie było jako „USB Serial Port (COM4)”


Szybciutko więc przylutowałam dostarczone w zestawie „nóżki” i podłączyłam płytkę FTDI232 do mojego Arduino Pro Mini wg poniższego schematu:

A tak wygląda to „na żywo”:

Następnie otworzyłam Arduino IDE i załadowałam projekt przykładowy „Blink” (File->Examples->Basics->Blink). Następnie wybrałam Tools->Boards i wyszukałam Arduino Pro or Pro Mini oraz wybrałam port COM4 (zgodnie z tym, który był w Menedżerze urządzeń. Moje Arduino IDE pokazywało wykrzyknik przy urządzeniu, ale program się kompilował i dał wgrać. Żeby potwierdzić, że program się wgrywa, zmodyfikowałam częstotliwość migania diody:
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(50); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(100); // wait for a second
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(50); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000);
}Tak zmodyfikowany program wgrałam na płytkę i zobaczyłam nieregularnie migającą diodę – zgodnie z oczekiwaniami. A więc wszystko działa. I poszło naprawdę sprawnie w porównaniu z moim Arduino Nano!
A teraz pora podłączyć żyroskop
Zatem teraz pozostaje podłączyć żyroskop i sprawdzić, czy nadal wszystko działa. Ja niestety złapałam małe opóźnienie – bo okazało się, że nie wlutowałam nóżek do pinów A4 i A5, które to właśnie są potrzebne do żyroskopu. Po podłączeniu (i na mniejszej płytce stykowej) całość wygląda tak:
Przy okazji znalazłam też gotowe biblioteki do obsługi płytki żyroskopu. W Arduino IDE można je dołączyć/zainstalować za pomocą Tools->Manage libraries. Tam wystarczy odszukać bibliotekę „MPU6050_light” i ją zainstalować. Po zmianach program wygląda tak:
#include <Wire.h>
#include <MPU6050_light.h>
const int gyroDataProbeDelay = 1000; //1 second
//////////// GYROSCOPE ////////////
MPU6050 gyro(Wire);
long timer = 0;
////////// PULSE & SPO2 ////////////
// TODO
///////// AMBIENT LIGHT MAGNITUDE ///////////////
// TODO
//////// NOISE /////////////
// TODO
//////// TGAM EEG /////////////
// TODO
//////// BLUETOOTH ///////////////
// TODO
//////// BATTERY & CHARGER /////
// TODO
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Wire.begin();
byte status = gyro.begin();
Serial.print(F("MPU6050 status: "));
Serial.println(status);
while(status!=0) { status = gyro.begin(); } //stop everything if could not connect to MPU6050
Serial.println("Status OK.");
Serial.println(F("Calculating offsets, do not move MPU6050"));
delay(1000);
gyro.calcOffsets(true, true); // gyroscope and acceleromenter
Serial.println("Done!\n");
}
void loop() {
/// gyro ////
gyro.update();
if(millis() - timer > gyroDataProbeDelay) { //print data every second
Serial.print(F("TEMPERATURE: "));Serial.println(gyro.getTemp());
Serial.print(F("ACCELERO X: "));Serial.print(gyro.getAccX());
Serial.print("\tY: ");Serial.print(gyro.getAccY());
Serial.print("\tZ: ");Serial.println(gyro.getAccZ());
Serial.print(F("GYRO X: "));Serial.print(gyro.getGyroX());
Serial.print("\tY: ");Serial.print(gyro.getGyroY());
Serial.print("\tZ: ");Serial.println(gyro.getGyroZ());
Serial.print(F("ACC ANGLE X: "));Serial.print(gyro.getAccAngleX());
Serial.print("\tY: ");Serial.println(gyro.getAccAngleY());
Serial.print(F("ANGLE X: "));Serial.print(gyro.getAngleX());
Serial.print("\tY: ");Serial.print(gyro.getAngleY());
Serial.print("\tZ: ");Serial.println(gyro.getAngleZ());
Serial.println(F("=====================================================\n"));
timer = millis();
}
Serial.println();
}
A oto wyniki programu:

Źródła:
- https://www.youtube.com/watch?v=Vawhrr4COjI&ab_channel=JulianIlett
2. https://github.com/rfetick/MPU6050_light

