Skocz do zawartości

Czy można podłączyć drugi żyroskop DFRobot SEN0386 w jednym arduino UNO


MKopec

Pomocna odpowiedź


#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,20,4);  

#include <DFRobot_WT61PC.h>
#include <SoftwareSerial.h>

//Use software serial port RX:10,TX:11
SoftwareSerial mySerial(10, 11);

DFRobot_WT61PC sensor(&mySerial);


void setup()
{
   //Use Serial as debugging serial port 
  Serial.begin(115200);
  //Use software serial port mySerial as communication seiral port 
  mySerial.begin(9600);
  //Revise the data output data frequncy of sensor FREQUENCY_0_1HZ for 0.1Hz, FREQUENCY_0_5HZ for 0.5Hz, FREQUENCY_1HZ for 1Hz, FREQUENCY_2HZ for 2Hz, 
  //                        FREQUENCY_5HZ for 5Hz, FREQUENCY_10HZ for 10Hz, FREQUENCY_20HZ for 20Hz, FREQUENCY_50HZ for 50Hz, 
  //                        FREQUENCY_100HZ for 100Hz, FREQUENCY_125HZ for 125Hz, FREQUENCY_200HZ for 200Hz.
  sensor.modifyFrequency(FREQUENCY_50HZ);
}


void loop()
{
  if (sensor.available()) {
   
    Serial.print("Angle\t"); Serial.print(sensor.Angle.X); Serial.print("\t"); Serial.print(sensor.Angle.Y); Serial.print("\t"); Serial.println(sensor.Angle.Z); //angle information of X, Y, Z 
    Serial.println(" ");
  }
  lcd.init();                      // initialize the lcd 
 
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("X "); lcd.print(sensor.Angle.X);
  lcd.setCursor(0,1);
  lcd.print("Y "); lcd.print(sensor.Angle.Y);
  lcd.setCursor(0,2);
  lcd.print("Z "); lcd.print(sensor.Angle.Z);
  lcd.setCursor(0,3);
  lcd.print("kat");
}

Witam,

Jestem początkującym elektronikiem i niedawno rozpocząłem swoją przygodę z Arduino.

Postanowiłem skonstruować urządzenie do pomiaru geometrii przedmiotów w oparciu o 6-osiowy czujnik ruchu - akcelerometr i żyroskop - DFRobot SEN0386. Urządzenie działa i interesujące mnie wyniki wyświetla na wyświetlaczu (wymazałem z programu nie potrzebne dla mnie wyniki i pozostawiłem tylko pomiar połów +-180stopni) . Problem polega na tym, że chciałbym podłączyć drugi identyczny żyroskop aby podawał surowe dane które następnie odejmowało by się albo dodawało do wyników z pierwszego żyroskopu. Chodzi o to, że żyroskop nr 1 podaje mi np nachylenie o kącie 20 stopni ale jest to wartość bezwzględna związana z grawitacją ziemi. Chciałbym żeby moje urządzenie podawało wynik względny (względem żyroskopu nr 2) wtedy jeżeli dokonywałbym pomiaru jakiegoś przedmiotu czy płaszczyzny nie musiałbym martwić się o jego wcześniejsze wypoziomowanie. Przykład chciałbym dokonać pomiaru kąta "w ręku" lub np w warsztacie który znajduję się wewnątrz samochodu dostawczego i  nie mam możliwości wypoziomować stołu na którym dokonuję pomiaru. Wtedy np mając tylko jeden żyroskop najpierw dokonuję pomiaru stołu warsztatu i okazuję że jest nachylony np 2 stopnie na osi x i -3 stopnie na osi y. Następnie dokonuję pomiaru interesującego przedmiotu i okazuję się że będąc przytwierdzonym do warsztatu jest on nachylony 2 stopnie na osi x i -25 stopni na osi y. Znając te wyniki obliczam że nachylenie osi x równoważy się (2 stopnie - 2 stopnie równa się zero) natomiast na osi y różnica wynosi 25 - 3 czyli 22 stopnie. W tym momencie pojawia się problem czy jedno arduino uno obsłuży 2 identyczne żyroskopy na raz (interesuję mnie konkretnie ten model żyroskopu który podałem ze względu na to że znajduję się on w poręcznej obudowie którą łatwo przytwierdzić do badanego przedmiotu oraz warsztatu lub imadła). Spodziewam się napotkać problemy z przedefiniowaniem pinów w bibliotece gdyż standardowo jest to pin 10 i 11, drugi żyroskop musiałbym podłączyć np na pin 12 i 13. Następny spodziewany problem to, że oba żyroskopy podają wyniki dla osi X, Y i Z więc np drugi żyroskop musiałby mieć w bibliotece wpisaną oś X1, Y1 i Z1 aby wyniki nie nakładały się. Pomiary miałyby się wyświetlać na wyświetlaczu lcd 20x4 w postaci np

kąt X; kąt X1; kąt X - kąt X1;

kąt Y; kąt Y1; kąt Y - kąt Y1;

kąt Z; kąt Z1; kąt Z - kąt Z1;

Czy da radę to zrobić przy pomocy jednego arduino UNO, a może jest inny sposób o którym nie wiem?

Pytanie dodatkowe w tym konkretnym żyroskopie który posiadam poziom 0 stopni osi X i Y ustala grawitacja natomiast nie wiem co ustala poziom początkowy "0" dla osi Z?

Z góry dziękuję za pomoc i odpowiedź. Nadmieniam, że ukończyłem dopiero I poziom podstaw elektroniki z arduino i na ten moment moja wiedza nie jest zbyt duża.

Marcin

 

20210503_114308.jpg

Link do komentarza
Share on other sites

Witam ponownie,

Mam już drugi żyroskop oraz dodatkową płytkę Shield V7.1 dzięki której nie będę potrzebował płytki stykowej na tym etapie.

Urządzenie nie działa z 2 żyroskopami.

Próbowałem zdublować sterownik do drugiego żyroskopu przez dopisanie do jego nazwy oraz wewnątrz pliku cyfry "2" np: DFRobot_WT61PC2 zamiast standardowego DFRobot_WT61PC. Zmieniłem w plikach sterujących w DFRobot_WT61PC2 oś X na O, Y na P, Z na R.

Problem pojawił się z plikiem Software.serial gdyż nie można zdefiniować dla niego portu 10, 11 oraz 12 i 13 tak jak to sobie wyobrażałem. Nie wiem czy ma sens dublować plik Software.serial na Software.serial2.

Nie chce mostkować pinów RXD i TXD od dwóch żyroskopów bo obawiam się ich uszkodzenia.

Zastanawiam się jak by drugi żyroskop używał innej prędkości komunikacji np zamiast standardowych 115200 może 230400.

Mógłbym nawet zrezygnować z monitoru portu szeregowego i używać wyłącznie wyświetlacza lub dwóch wyświetlaczy.

Podpowiedzcie czy można zbudować takie urządzenie jak sobie wymyśliłem na jednym Arduino Uno czy może trzeba mieć 2 szt Arduino no ale następny problem czy z dwóch Arduino można pokazać wynik na jednym wyświetlaczu?

Z góry dziękuję za pomoc.

Marcin

 

20210504_142304.jpg

Link do komentarza
Share on other sites

Cytat

Próbowałem zdublować sterownik do drugiego żyroskopu przez dopisanie do jego nazwy oraz wewnątrz pliku cyfry "2" np: DFRobot_WT61PC2 zamiast standardowego DFRobot_WT61PC. Zmieniłem w plikach sterujących w DFRobot_WT61PC2 oś X na O, Y na P, Z na R.

Problem pojawił się z plikiem Software.serial gdyż nie można zdefiniować dla niego portu 10, 11 oraz 12 i 13 tak jak to sobie wyobrażałem. Nie wiem czy ma sens dublować plik Software.serial na Software.serial2.

Nie mam takich modułów do testów, więc nie mam pojęcia czy to będzie działać, ale spróbuj:

#include <DFRobot_WT61PC.h>
#include <SoftwareSerial.h>

SoftwareSerial czujnik_1_serial(10, 11);
DFRobot_WT61PC czujnik_1(&czujnik_1_serial);

SoftwareSerial czujnik_2_serial(12, 13);
DFRobot_WT61PC czujnik_2(&czujnik_2_serial);

void setup()
{

  Serial.begin(115200);

  czujnik_1_serial.begin(9600);
  czujnik_2_serial.begin(9600);

  czujnik_1.modifyFrequency(FREQUENCY_10HZ);
  czujnik_2.modifyFrequency(FREQUENCY_10HZ);
}
void loop()
{
  if (czujnik_1.available()) {
    Serial.print("Acc\t"); Serial.print(czujnik_1.Acc.X); Serial.print("\t"); Serial.print(czujnik_1.Acc.Y); Serial.print("\t"); Serial.println(czujnik_1.Acc.Z); //acceleration information of X,Y,Z
    Serial.print("Gyro\t"); Serial.print(czujnik_1.Gyro.X); Serial.print("\t"); Serial.print(czujnik_1.Gyro.Y); Serial.print("\t"); Serial.println(czujnik_1.Gyro.Z); //angular velocity information of X,Y,Z
    Serial.print("Angle\t"); Serial.print(czujnik_1.Angle.X); Serial.print("\t"); Serial.print(czujnik_1.Angle.Y); Serial.print("\t"); Serial.println(czujnik_1.Angle.Z); //angle information of X, Y, Z
    Serial.println(" ");
  }

  if (czujnik_2.available()) {
    Serial.print("Acc\t"); Serial.print(czujnik_2.Acc.X); Serial.print("\t"); Serial.print(czujnik_2.Acc.Y); Serial.print("\t"); Serial.println(czujnik_2.Acc.Z); //acceleration information of X,Y,Z
    Serial.print("Gyro\t"); Serial.print(czujnik_2.Gyro.X); Serial.print("\t"); Serial.print(czujnik_2.Gyro.Y); Serial.print("\t"); Serial.println(czujnik_2.Gyro.Z); //angular velocity information of X,Y,Z
    Serial.print("Angle\t"); Serial.print(czujnik_2.Angle.X); Serial.print("\t"); Serial.print(czujnik_2.Angle.Y); Serial.print("\t"); Serial.println(czujnik_2.Angle.Z); //angle information of X, Y, Z
    Serial.println(" ");
  }

}

Generalnie arduino uno może działać z dwoma programowymi serialami, ale nie wiem jak się zachowa biblioteka do modułów. Prędkość komunikacji z żyroskopami polecam ustawić na max 9600 baud, bo softwareserial jest strasznie kapryśny. 

 

Link do komentarza
Share on other sites

In file included from C:\Users\Mercin\Documents\Arduino\sketch_may04a\sketch_may04a.ino:1:0:
C:\Users\Mercin\Documents\Arduino\libraries\DFRobot_WT61PC-master/DFRobot_WT61PC.h:82:0: warning: "XL" redefined
 #define XL 2
 
In file included from c:\program files\windowsapps\arduinollc.arduinoide_1.8.42.0_x86__mdqgnx93n4wtt\hardware\tools\avr\avr\include\avr\io.h:717:0,
                 from c:\program files\windowsapps\arduinollc.arduinoide_1.8.42.0_x86__mdqgnx93n4wtt\hardware\tools\avr\avr\include\avr\pgmspace.h:90,
                 from C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.42.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino/Arduino.h:28,
                 from sketch\sketch_may04a.ino.cpp:1:
c:\program files\windowsapps\arduinollc.arduinoide_1.8.42.0_x86__mdqgnx93n4wtt\hardware\tools\avr\avr\include\avr\common.h:215:0: note: this is the location of the previous definition
 #  define XL  r26
 
In file included from C:\Users\Mercin\Documents\Arduino\sketch_may04a\sketch_may04a.ino:1:0:
C:\Users\Mercin\Documents\Arduino\libraries\DFRobot_WT61PC-master/DFRobot_WT61PC.h:83:0: warning: "XH" redefined
 #define XH 3
 
In file included from c:\program files\windowsapps\arduinollc.arduinoide_1.8.42.0_x86__mdqgnx93n4wtt\hardware\tools\avr\avr\include\avr\io.h:717:0,
                 from c:\program files\windowsapps\arduinollc.arduinoide_1.8.42.0_x86__mdqgnx93n4wtt\hardware\tools\avr\avr\include\avr\pgmspace.h:90,
                 from C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.42.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino/Arduino.h:28,
                 from sketch\sketch_may04a.ino.cpp:1:
c:\program files\windowsapps\arduinollc.arduinoide_1.8.42.0_x86__mdqgnx93n4wtt\hardware\tools\avr\avr\include\avr\common.h:216:0: note: this is the location of the previous definition
 #  define XH  r27
 
In file included from C:\Users\Mercin\Documents\Arduino\sketch_may04a\sketch_may04a.ino:1:0:
C:\Users\Mercin\Documents\Arduino\libraries\DFRobot_WT61PC-master/DFRobot_WT61PC.h:84:0: warning: "YL" redefined
 #define YL 4
 
In file included from c:\program files\windowsapps\arduinollc.arduinoide_1.8.42.0_x86__mdqgnx93n4wtt\hardware\tools\avr\avr\include\avr\io.h:717:0,
                 from c:\program files\windowsapps\arduinollc.arduinoide_1.8.42.0_x86__mdqgnx93n4wtt\hardware\tools\avr\avr\include\avr\pgmspace.h:90,
                 from C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.42.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino/Arduino.h:28,
                 from sketch\sketch_may04a.ino.cpp:1:
c:\program files\windowsapps\arduinollc.arduinoide_1.8.42.0_x86__mdqgnx93n4wtt\hardware\tools\avr\avr\include\avr\common.h:217:0: note: this is the location of the previous definition
 #  define YL  r28
 
In file included from C:\Users\Mercin\Documents\Arduino\sketch_may04a\sketch_may04a.ino:1:0:
C:\Users\Mercin\Documents\Arduino\libraries\DFRobot_WT61PC-master/DFRobot_WT61PC.h:85:0: warning: "YH" redefined
 #define YH 5
 
In file included from c:\program files\windowsapps\arduinollc.arduinoide_1.8.42.0_x86__mdqgnx93n4wtt\hardware\tools\avr\avr\include\avr\io.h:717:0,
                 from c:\program files\windowsapps\arduinollc.arduinoide_1.8.42.0_x86__mdqgnx93n4wtt\hardware\tools\avr\avr\include\avr\pgmspace.h:90,
                 from C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.42.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino/Arduino.h:28,
                 from sketch\sketch_may04a.ino.cpp:1:
c:\program files\windowsapps\arduinollc.arduinoide_1.8.42.0_x86__mdqgnx93n4wtt\hardware\tools\avr\avr\include\avr\common.h:218:0: note: this is the location of the previous definition
 #  define YH  r29
 
In file included from C:\Users\Mercin\Documents\Arduino\sketch_may04a\sketch_may04a.ino:1:0:
C:\Users\Mercin\Documents\Arduino\libraries\DFRobot_WT61PC-master/DFRobot_WT61PC.h:86:0: warning: "ZL" redefined
 #define ZL 6
 
In file included from c:\program files\windowsapps\arduinollc.arduinoide_1.8.42.0_x86__mdqgnx93n4wtt\hardware\tools\avr\avr\include\avr\io.h:717:0,
                 from c:\program files\windowsapps\arduinollc.arduinoide_1.8.42.0_x86__mdqgnx93n4wtt\hardware\tools\avr\avr\include\avr\pgmspace.h:90,
                 from C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.42.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino/Arduino.h:28,
                 from sketch\sketch_may04a.ino.cpp:1:
c:\program files\windowsapps\arduinollc.arduinoide_1.8.42.0_x86__mdqgnx93n4wtt\hardware\tools\avr\avr\include\avr\common.h:220:0: note: this is the location of the previous definition
 #define ZL  r30
 
In file included from C:\Users\Mercin\Documents\Arduino\sketch_may04a\sketch_may04a.ino:1:0:
C:\Users\Mercin\Documents\Arduino\libraries\DFRobot_WT61PC-master/DFRobot_WT61PC.h:87:0: warning: "ZH" redefined
 #define ZH 7
 
In file included from c:\program files\windowsapps\arduinollc.arduinoide_1.8.42.0_x86__mdqgnx93n4wtt\hardware\tools\avr\avr\include\avr\io.h:717:0,
                 from c:\program files\windowsapps\arduinollc.arduinoide_1.8.42.0_x86__mdqgnx93n4wtt\hardware\tools\avr\avr\include\avr\pgmspace.h:90,
                 from C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.42.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino/Arduino.h:28,
                 from sketch\sketch_may04a.ino.cpp:1:
c:\program files\windowsapps\arduinollc.arduinoide_1.8.42.0_x86__mdqgnx93n4wtt\hardware\tools\avr\avr\include\avr\common.h:221:0: note: this is the location of the previous definition
 #define ZH  r31
 

Arduino odpisało mi w ten sposób. Nie wiem co robić dalej.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Nie wiem....ale sie wypowiem..😉 nie tak dawno robilem "takie cos" i mialem dokladnie ta sama kombinacje co Ty czyli;

SoftSerial-1

SoftSerial-2

HardwareSerial

I2c

W skrocie? Nie dzialalo...wiec wniknalem troszke w temat i okazalo sie ze SoftSerial jest poprostu slaby/blokujacy/wolny itp...(nie mowie ze zly!) poprostu nie chcialo to chodzic...mialem taki problem ze nie dzialalo i2c lub jeden Serial w zaleznosci od konfiguracji...a przerobilem ich tyle ze teraz ciezko mi przypomniec jak to bylo...😕 w kazdym raze tak jak powyzej to nie dzialalo...dwa Seriale nie moga dzialac jednoczesnie. Na bibliotece NeoSwSerial zaczelo mi to dzialac, ale trzeba bylo sie przelaczac miedzy nimi funkcja "listen()" czyli tylko jeden uart aktywny..

 

  • Lubię! 1
Link do komentarza
Share on other sites

8 minut temu, farmaceuta napisał:

Nie wiem....ale sie wypowiem..😉 nie tak dawno robilem "takie cos" i mialem dokladnie ta sama kombinacje co Ty czyli;

SoftSerial-1

SoftSerial-2

HardwareSerial

I2c

W skrocie? Nie dzialalo...wiec wniknalem troszke w temat i okazalo sie ze SoftSerial jest poprostu slaby/blokujacy/wolny itp...(nie mowie ze zly!) poprostu nie chcialo to chodzic...mialem taki problem ze nie dzialalo i2c lub jeden Serial w zaleznosci od konfiguracji...a przerobilem ich tyle ze teraz ciezko mi przypomniec jak to bylo...😕 w kazdym raze tak jak powyzej to nie dzialalo...dwa Seriale nie moga dzialac jednoczesnie. Na bibliotece NeoSwSerial zaczelo mi to dzialac, ale trzeba bylo sie przelaczac miedzy nimi funkcja "listen()" czyli tylko jeden uart aktywny..

 

Też coś takiego przerabiałem, z tego co pamiętam to dwa seriale chodziły jeszcze znośnie. Padło, jak dodałem termometr na 1-wire 😉

Link do komentarza
Share on other sites


#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,20,4);  

#include <DFRobot_WT61PC.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);

// software serial #2: RX = digital pin 8, TX = digital pin 9
// on the Mega, use other pins instead, since 8 and 9 don't work on the Mega

SoftwareSerial portTwo(8, 9);
//Use software serial port RX:10,TX:11


DFRobot_WT61PC sensor(&mySerial);
DFRobot_WT61PC sensor(&portTwo);

void setup()
{
   //Use Serial as debugging serial port 
  Serial.begin(115200);
  //Use software serial port mySerial as communication seiral port 
  mySerial.begin(9600);
  //Revise the data output data frequncy of sensor FREQUENCY_0_1HZ for 0.1Hz, FREQUENCY_0_5HZ for 0.5Hz, FREQUENCY_1HZ for 1Hz, FREQUENCY_2HZ for 2Hz, 
  //                        FREQUENCY_5HZ for 5Hz, FREQUENCY_10HZ for 10Hz, FREQUENCY_20HZ for 20Hz, FREQUENCY_50HZ for 50Hz, 
  //                        FREQUENCY_100HZ for 100Hz, FREQUENCY_125HZ for 125Hz, FREQUENCY_200HZ for 200Hz.
  sensor.modifyFrequency(FREQUENCY_50HZ);
}


void loop()
{
  if (sensor.available()) {
   
    Serial.print("Angle\t"); Serial.print(sensor.Angle.X); Serial.print("\t"); Serial.print(sensor.Angle.Y); Serial.print("\t"); Serial.println(sensor.Angle.Z); //angle information of X, Y, Z 
    Serial.println(" ");
  }
  lcd.init();                      // initialize the lcd 
 
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("X "); lcd.print(sensor.Angle.X);
  lcd.setCursor(0,1);
  lcd.print("Y "); lcd.print(sensor.Angle.Y);
  lcd.setCursor(0,2);
  lcd.print("Z "); lcd.print(sensor.Angle.Z);
  lcd.setCursor(0,3);
  lcd.print("kat");
}

Witam ponownie,

Jak już wspominałem na początku jestem jeszcze mocno zielony.

Spróbowałem za poradą FlyingDutch zmodyfikować mój program ale na ten moment znów mam błąd.


zyroskop3:19:22: error: redefinition of 'DFRobot_WT61PC sensor'
 DFRobot_WT61PC sensor(&portTwo);
                      ^
C:\Users\Mercin\Documents\Arduino\zyroskop3\zyroskop3.ino:18:16: note: 'DFRobot_WT61PC sensor' previously declared here
 DFRobot_WT61PC sensor(&mySerial);
                ^~~~~~
exit status 1
redefinition of 'DFRobot_WT61PC sensor'

Na ten moment nie mam za dużej wiedzy z Arduino ale bardzo dziękuje za waszą pomoc. Wydaje mi się że problem leży w tym że to 2 identyczne żyroskopy gdyby to były różne urządzenia które miały by dzielić tylko port szeregowy to wszystko by już było skończone. 

Nie wiem czy w tym momencie można inaczej zdefiniować drugi sensor albo bibliotekę do niego żeby nie wyskoczył taki błąd jak wyżej.

Prawdę powiedziawszy może ten temat można ugryź w jeszcze inny sposób nie wiem jaki ale ważniejszy problem jest z tym żeby np żyroskop nr 1 miał dane startowe z żyroskopu nr 2 tak jak wam pisałem na początku. 

Wyobraźcie sobie kostkę Rubika. Do jej podstawy przytwierdzam żyroskop nr 1 a do jej bocznej krawędzi żyroskop nr 2. Wiadomo że w sześcianie Rubika ściany są pod kątem 90 stopni. W ten sposób mogę dokonywać pomiary w ręku nie ważne jak ustawie przedmiot względem podłoża to wynik zawsze będzie 90. Mając tylko jeden żyroskop musze wszystko poziomować. A jeżeli miałbym do opomiarowania czworościan nierównościenny to była by już duża zagwozdka do pomiaru "w ręku". 

Wybrałem Arduino i 2 identyczne czujniki może podpowiedzcie jak inaczej rozwiązać ten problem.

Jak pisałem na początku wybór żyroskopów był podyktowany ergonomią obudowy i jej możliwością montażu i trzymania w ręku.

 

 

Link do komentarza
Share on other sites

Definiujesz tak samo oba sensory, spróbuj:

DFRobot_WT61PC sensor_1(&mySerial);	//definicja sensora podpiętego do pinów (10, 11)
DFRobot_WT61PC sensor_2(&portTwo);	//definicja sensora podpiętego do pinów (8, 9)

Zmień w programie każde "sensor" na "sensor_1".

  • Lubię! 2
Link do komentarza
Share on other sites


#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,20,4);  

#include <DFRobot_WT61PC.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);

// software serial #2: RX = digital pin 8, TX = digital pin 9
// on the Mega, use other pins instead, since 8 and 9 don't work on the Mega

SoftwareSerial portTwo(8, 9);
//Use software serial port RX:10,TX:11


DFRobot_WT61PC sensor_1(&mySerial);
DFRobot_WT61PC sensor_2(&portTwo);

void setup()
{
   //Use Serial as debugging serial port 
  Serial.begin(115200);
  //Use software serial port mySerial as communication seiral port 
  mySerial.begin(9600);
  //Revise the data output data frequncy of sensor FREQUENCY_0_1HZ for 0.1Hz, FREQUENCY_0_5HZ for 0.5Hz, FREQUENCY_1HZ for 1Hz, FREQUENCY_2HZ for 2Hz, 
  //                        FREQUENCY_5HZ for 5Hz, FREQUENCY_10HZ for 10Hz, FREQUENCY_20HZ for 20Hz, FREQUENCY_50HZ for 50Hz, 
  //                        FREQUENCY_100HZ for 100Hz, FREQUENCY_125HZ for 125Hz, FREQUENCY_200HZ for 200Hz.
  sensor_1.modifyFrequency(FREQUENCY_50HZ);
}


void loop()
{
  if (sensor_1.available()) {
   
    Serial.print("Angle\t"); Serial.print(sensor_1.Angle.X); Serial.print("\t"); Serial.print(sensor_1.Angle.Y); Serial.print("\t"); Serial.println(sensor_1.Angle.Z); //angle information of X, Y, Z 
    Serial.println(" ");
  }
  lcd.init();                      // initialize the lcd 
 
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("X "); lcd.print(sensor_1.Angle.X);
  lcd.setCursor(0,1);
  lcd.print("Y "); lcd.print(sensor_1.Angle.Y);
  lcd.setCursor(0,2);
  lcd.print("Z "); lcd.print(sensor_1.Angle.Z);
  lcd.setCursor(0,3);
  lcd.print("kat");
}

No i nowe błędy 

java.io.IOException: jssc.SerialPortException: Port name - COM4; Method name - setEventsMask(); Exception type - Can't set mask.
    at processing.app.Serial.dispose(Serial.java:171)
    at processing.app.SerialMonitor.close(SerialMonitor.java:147)
    at processing.app.AbstractMonitor.suspend(AbstractMonitor.java:113)
    at processing.app.Editor$UploadHandler.run(Editor.java:2049)
    at java.lang.Thread.run(Thread.java:748)
Caused by: jssc.SerialPortException: Port name - COM4; Method name - setEventsMask(); Exception type - Can't set mask.
    at jssc.SerialPort.setEventsMask(SerialPort.java:279)
    at jssc.SerialPort.removeEventListener(SerialPort.java:1064)
    at jssc.SerialPort.closePort(SerialPort.java:1090)
    at processing.app.Serial.dispose(Serial.java:168)
    ... 4 more
 

Link do komentarza
Share on other sites

Dla ułatwienia sprawy jeśli by to coś pomogło może by to zrobić to na 2 Arduino ale jeden wyświetlacz. Nie wiem.

Link do komentarza
Share on other sites

14 minut temu, MKopec napisał:

Dla ułatwienia sprawy jeśli by to coś pomogło może by to zrobić to na 2 Arduino ale jeden wyświetlacz. Nie wiem.

Nie no raczej na jednym ardu...po to sa te uarty programowe zeby mozna bylo sobie dolozyc urzadzen...spruboj pobrac tego NeoSWserial...i sprawdz...minutke Ci zejdzie..

Link do komentarza
Share on other sites

53 minuty temu, MKopec napisał:

No i nowe błędy 

java.io.IOException: jssc.SerialPortException: Port name - COM4; Method name - setEventsMask(); Exception type - Can't set mask.

Olać i skompilować jeszcze raz - to nie Twoje błędy a błędy autorów IDE.

Link do komentarza
Share on other sites


#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,20,4);  

#include <DFRobot_WT61PC.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);

// software serial #2: RX = digital pin 8, TX = digital pin 9
// on the Mega, use other pins instead, since 8 and 9 don't work on the Mega

SoftwareSerial portTwo(8, 9);
//Use software serial port RX:10,TX:11


DFRobot_WT61PC sensor_1(&mySerial);
DFRobot_WT61PC sensor_2(&portTwo);

void setup()
{
   //Use Serial as debugging serial port 
  Serial.begin(115200);
  //Use software serial port mySerial as communication seiral port 
  mySerial.begin(9600);
  //Revise the data output data frequncy of sensor FREQUENCY_0_1HZ for 0.1Hz, FREQUENCY_0_5HZ for 0.5Hz, FREQUENCY_1HZ for 1Hz, FREQUENCY_2HZ for 2Hz, 
  //                        FREQUENCY_5HZ for 5Hz, FREQUENCY_10HZ for 10Hz, FREQUENCY_20HZ for 20Hz, FREQUENCY_50HZ for 50Hz, 
  //                        FREQUENCY_100HZ for 100Hz, FREQUENCY_125HZ for 125Hz, FREQUENCY_200HZ for 200Hz.
  sensor_1.modifyFrequency(FREQUENCY_50HZ);
sensor_2.modifyFrequency(FREQUENCY_50HZ);
}

void loop()
{
  if (sensor_1.available());(sensor_2.available()); {
   
    Serial.print("Angle\t"); Serial.print(sensor_1.Angle.X); Serial.print("\t"); Serial.print(sensor_1.Angle.Y); Serial.print("\t"); Serial.println(sensor_1.Angle.Z); //angle information of X, Y, Z
    Serial.print("Angle\t"); Serial.print(sensor_2.Angle.X); Serial.print("\t"); Serial.print(sensor_2.Angle.Y); Serial.print("\t"); Serial.println(sensor_2.Angle.Z); //angle information of X, Y, Z 
    Serial.println(" ");
  }
  lcd.init();                      // initialize the lcd 
 
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("X "); lcd.print(sensor_1.Angle.X); lcd.print(sensor_2.Angle.X);
  lcd.setCursor(0,1);
  lcd.print("Y "); lcd.print(sensor_1.Angle.Y);
  lcd.setCursor(0,2);
  lcd.print("Z "); lcd.print(sensor_1.Angle.Z);
  lcd.setCursor(0,3);
  lcd.print("kat");
}

Monitor portu ożył ale z drugiego czujnika nie podaje danych. Nie wiem co jest nie tak. Rzeczywiście należało drugi raz komplikować. Dziękuje za tą radę.

monitor port.jpg

  • Lubię! 1
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.