Jak pracujemy w okresie świąt Bożego Narodzenia?
Jak pracujemy w okresie świąt Bożego Narodzenia?
Wszystkie zakupy na Nettigo są chronione 14-sto dniowym prawem do zwrotu. Bez zbędnych pytań.
Szczegółowe informacje o dostawie i zwrotachRaz, góra dwa razy w miesiącu możesz otrzymać newsletter o nowościach w naszej ofercie, promocjach, a także porcję wiadomości ze świata DIY i Arduino.
HMC5883L to trójosiowy magnetometr. Mierzy pole elektromagnetyczne w 3 różnych kierunkach. Jego głównym zastosowaniem jest praca jako elektroniczny kompas.
Zastąpiony przez: Moduł 3-osiowego magnetometru I2C HMC5883L
</div><div class="techdata"><ul>
</ul> </div><div class="pinouts"><p>Opis wyprowadzeń:</p>
</div><div class="connect"><p>Podłączenie do Arduino:</p>
Przykładowe podłączenie do Arduino UNO R3:
</div><div class="testcode"><p>Program testowy:</p>
#include <Wire.h> // Adres czujnika w magistrali TWI #define HMC_ADDR 0x1e // Funkcja zapisujaca do rejestrow czujnika void twiSetRegister(int address, byte reg, byte data) { Wire.beginTransmission(address); Wire.write(reg); Wire.write(data); Wire.endTransmission(); delay(5); } // Funkcja czytajaca rejestry czujnika byte twiGetRegisters(int address, byte reg, byte *buffer, byte length) { byte count = 0; Wire.beginTransmission(address); Wire.write(reg); Wire.endTransmission(); Wire.beginTransmission(address); Wire.requestFrom(address, (int) length); while (Wire.available()) { buffer[count] = Wire.read(); count++; } Wire.endTransmission(); return count; } // Wysyla wyniki pomiarow czujnika do komputera void sendMeasurement() { byte buffer[6]; byte readed = twiGetRegisters(HMC_ADDR, 0x03, buffer, 6); if (readed != 6) { Serial.println(F("ERROR")); } else { int resultX = (int) word(buffer[0], buffer[1]); int resultZ = (int) word(buffer[2], buffer[3]); int resultY = (int) word(buffer[4], buffer[5]); float gX = resultX * 0.00256; float gY = resultY * 0.00256; float gZ = resultZ * 0.00256; Serial.print(gX); Serial.print(","); Serial.print(gY); Serial.print(","); Serial.print(gZ); Serial.println(); } } void setup() { Serial.begin(57600); Wire.begin(); // Ustawienie 15 pomiarow na sekunde // Ustawienie usredniania 8 pomiarow // Ustawienie sztucznego, testowego, dodatniego pola magnetycznego twiSetRegister(HMC_ADDR, 0x00, 0x71); // Ustawienie czulosci +/- 4.7 Ga twiSetRegister(HMC_ADDR, 0x01, 0xa0); // Ustawienie trybu ciaglego pomiaru twiSetRegister(HMC_ADDR, 0x02, 0x00); } void loop() { // Ustawienie sztucznego, testowego, dodatniego pola magnetycznego twiSetRegister(HMC_ADDR, 0x00, 0x71); // Oczekiwanie na wynik pomiaru delay(67); // Wyslanie wyniku do komputera Serial.print(F("PT=")); sendMeasurement(); // Ustawienie sztucznego, testowego, ujemnego pola magnetycznego twiSetRegister(HMC_ADDR, 0x00, 0x72); delay(67); Serial.print(F("NT=")); sendMeasurement(); }
Jeśli czujnik jest prawidłowo podłączony i działa dobrze, to program powinien zwrócić do komputera wartości około 1.1 dla pomiarów testów dodatnich "PT" i około -1.1 dla pomiarów testów ujemnych "NT" dla każdej osi czujnika.
</div><div class="workcode"><p>Program prezentujący normalne działanie czujnika:</p>
#include <Wire.h> // Adres czujnika w magistrali TWI #define HMC_ADDR 0x1e // Funkcja zapisujaca do rejestrow czujnika void twiSetRegister(int address, byte reg, byte data) { Wire.beginTransmission(address); Wire.write(reg); Wire.write(data); Wire.endTransmission(); delay(5); } // Wysyla wyniki pomiarow czujnika do komputera void sendMeasurement() { byte buffer[6]; // Czyta 6 rejestrow pomiarowych i zapisuje je w tablicy buffer byte readed = twiGetRegisters(HMC_ADDR, 0x03, buffer, 6); if (readed != 6) { Serial.println(F("ERROR")); } else { // Przetwarza 8 bitowe dane z rejestrow na 16 bitowe cyfrowe wyniki pomiarow int resultX = (int) word(buffer[0], buffer[1]); int resultZ = (int) word(buffer[2], buffer[3]); int resultY = (int) word(buffer[4], buffer[5]); // Zamienia cyfrowe wyniki pomiarow na wyniki w jednostkach Gauss float gX = resultX * 0.00092; float gY = resultY * 0.00092; float gZ = resultZ * 0.00092; // Wysyla dane do komputera Serial.print("#MAG="); Serial.print(gX); Serial.print(","); Serial.print(gY); Serial.print(","); Serial.print(gZ); Serial.println(); } } // Funkcja czytajaca rejestry czujnika byte twiGetRegisters(int address, byte reg, byte *buffer, byte length) { byte count = 0; Wire.beginTransmission(address); Wire.write(reg); Wire.endTransmission(); Wire.beginTransmission(address); Wire.requestFrom(address, (int) length); while (Wire.available()) { buffer[count] = Wire.read(); count++; } Wire.endTransmission(); return count; } void setup() { Serial.begin(57600); Wire.begin(); // Ustawienie trybu ciaglego pomiaru twiSetRegister(HMC_ADDR, 0x02, 0x00); // Ustawienie 75 pomiarow na sekunde twiSetRegister(HMC_ADDR, 0x00, 0x18); } void loop() { sendMeasurement(); delay(20); }
Program odczytuje wartości pomiarów czujnika i przesyła je do komputera w formacie jednostek Gaussa dla każdej z osi.
</div><div class="links"><p>Linki:</p>
Wszystkie zakupy na Nettigo są chronione 14-sto dniowym prawem do zwrotu. Bez zbędnych pytań.
Szczegółowe informacje o dostawie i zwrotachRaz, góra dwa razy w miesiącu możesz otrzymać newsletter o nowościach w naszej ofercie, promocjach, a także porcję wiadomości ze świata DIY i Arduino.