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)”

Menedżer urządzeń – odnalezione urządzenie USB
Menedżer urządzeń – szczegóły potwierdzają, że jest to mój konwenter FTDI

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:

Schemat podłączenia Arduino Pro Mini z FTDI232

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:

  1. https://www.youtube.com/watch?v=Vawhrr4COjI&ab_channel=JulianIlett

2. https://github.com/rfetick/MPU6050_light

Podobne wpisy

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *