Inhaltsverzeichnis:

IOT123 - I2C MQ2 BRICK - Gunook
IOT123 - I2C MQ2 BRICK - Gunook

Video: IOT123 - I2C MQ2 BRICK - Gunook

Video: IOT123 - I2C MQ2 BRICK - Gunook
Video: MQ-2 датчик газов и дыма подключаем к Arduino 2024, November
Anonim
IOT123 - I2C MQ2-ZIEGEL
IOT123 - I2C MQ2-ZIEGEL
IOT123 - I2C MQ2-ZIEGEL
IOT123 - I2C MQ2-ZIEGEL
IOT123 - I2C MQ2-ZIEGEL
IOT123 - I2C MQ2-ZIEGEL
IOT123 - I2C MQ2-ZIEGEL
IOT123 - I2C MQ2-ZIEGEL

Die IOT123 BRICKS sind modulare DIY-Einheiten, die mit anderen IOT123 BRICKS kombiniert werden können, um einem Knoten oder Wearable Funktionalität hinzuzufügen. Sie basieren auf den quadratischen, doppelseitigen Protoboards mit miteinander verbundenen Durchgangslöchern.

Es wird erwartet, dass sich eine Reihe dieser BRICKS auf mehreren Knoten (Master-MCUs – ESP8266 oder ATTINY84) an einem Standort befinden. Die MCU benötigt keine Vorkenntnisse über den Sensorzweck oder die Softwareanforderungen. Es sucht nach I2C-Knoten und fordert dann von jedem Slave einen Property-Dump (Sensordaten) an. Diese BRICKs liefern 5.0V, 3.3V und eine weitere AUX-Leitung, die anpassbar ist.

Dieser I2C MQ2 BRICK dumpt 3 Eigenschaften:

LPG (Teile pro Million), CO (PPM), RAUCHEN (PPM)

Dieser Sensor bietet ein interessantes Szenario: Er benötigt mindestens 2 Minuten (bis zu 5 Minuten) zum Aufwärmen, dann muss er sich vor der Verwendung 20 Sekunden lang kalibrieren. Da die Host-MCU nur daran interessiert ist, Name/Wert-Paare (und eine Fortsetzungsnachricht) zu erhalten, haben wir eine "PREPARE"-Eigenschaft eingeführt. Da seine Fortsetzungsnachricht "1" ist (weitere folgen), wird die Host-MCU den BRICK so lange abfragen, bis er bereit ist. Außerdem wird empfohlen, den MQ2 vor der Verwendung "einzubrennen", d.h. 24 Stunden lang an Ihrem 5V-Stromkreis angeschlossen zu lassen.

Die Sensorbausteine vom Typ Keyes werden zuerst abstrahiert, da sie mit Vitaminen (zusätzliche Komponenten benötigt) geliefert werden und relativ günstig sind (ich habe 37 für 10 AUD gekauft). Andere Boards/Schaltungen werden in die I2C BRICKS eingeführt.

Die Durchgangslöcher neben dem ATTINY85 wurden ungenutzt gelassen, um einen Pogo-Pin-Programmierer zu ermöglichen, während der DIP8 an die Leiterplatte gelötet wird.

Eine weitere Abstraktion, bei der die BRICKS in kleine Zylinder verpackt werden, die an einen D1M WIFI BLOCK-Hub angeschlossen werden und die Werte an einen MQTT-Server pumpen, wird entwickelt.

Schritt 1: Material und Werkzeuge

Material und Werkzeuge
Material und Werkzeuge
Material und Werkzeuge
Material und Werkzeuge
Material und Werkzeuge
Material und Werkzeuge

Es gibt eine vollständige Stücklisten- und Beschaffungsliste.

  1. MQ2 Sensorbaustein (1)
  2. ATTINY85 20PU (1)
  3. 1" Doppelseitiges Protoboard (1)
  4. Stiftleiste 90º (3P, 3P)
  5. Stiftleiste (2P, 2P)
  6. Jumper-Shunt (1)
  7. Anschlusskabel (~7)
  8. Löten und Eisen (1)

Schritt 2: Bereiten Sie das ATTINY85. vor

Bereiten Sie den ATTINY85 vor
Bereiten Sie den ATTINY85 vor
Bereiten Sie den ATTINY85 vor
Bereiten Sie den ATTINY85 vor
Bereiten Sie den ATTINY85 vor
Bereiten Sie den ATTINY85 vor
Bereiten Sie den ATTINY85 vor
Bereiten Sie den ATTINY85 vor

AttinyCore vom Boards Manager wird benötigt. Brennen Sie den Bootloader "EEPROM Retained", "8mHZ Internal" (alle Konfiguration oben gezeigt).

Verwenden Sie die mitgelieferte Quelle; kompilieren und programmieren auf dem ATtiny85.

Das GIST ist hier:

gist.github.com/IOT-123/4c501046d365d01a60…

Weitere Details finden Sie in diesen instructables:

www.instructables.com/id/Programming-the-A…

www.instructables.com/id/How-to-Program-AT…

www.instructables.com/id/How-to-program-th…

www.instructables.com/id/Programming-the-A…

www.instructables.com/id/Programming-an-At…

Testen Sie am besten über ein Steckbrett, bevor Sie fortfahren.

Wenn Sie über ASSIMILATE SENSORS verfügen, stellen Sie sicher, dass die Slave-Adresse bei einer SENSOR/MCU-Host-Kombination unterschiedlich ist, d. h. alle Temperatursensoren können dieselbe Adresse haben, solange Sie nur einen Temperatursensor auf einer MCU/einem Knoten haben.

Schritt 3: Bauen Sie die Schaltung zusammen

Bauen Sie die Schaltung zusammen
Bauen Sie die Schaltung zusammen
Bauen Sie die Schaltung zusammen
Bauen Sie die Schaltung zusammen
Bauen Sie die Schaltung zusammen
Bauen Sie die Schaltung zusammen
  1. Auf der Vorderseite die Komponenten ATTINY85 (1), 3P 90deg Stiftleisten (2)(3), 2P Stiftleisten (4)(5) einsetzen und auf der Rückseite ablöten.
  2. Auf der Rückseite einen orangefarbenen Draht von ORANGE1 zu ORANGE2 verfolgen und verlöten.
  3. Auf der Rückseite ein blaues Kabel von BLUE1 zu BLUE2 verfolgen und verlöten.
  4. Auf der Rückseite einen grünen Draht von GREEN1 zu GREEN2 verfolgen und löten.
  5. Auf der Rückseite einen blanken Draht von SILVER1 zu SILVER2 verfolgen und verlöten.
  6. Auf der Rückseite einen blanken Draht von SILVER3 zu SILVER4 verfolgen und verlöten.
  7. Auf der Rückseite ein schwarzes Kabel von BLACK1 zu BLACK2 verfolgen und verlöten.
  8. Auf der Rückseite ein schwarzes Kabel von BLACK3 zu BLACK4 verfolgen und verlöten.
  9. Auf der Rückseite einen roten Draht von RED1 zu RED2 verfolgen und löten.
  10. Auf der Rückseite einen roten Draht von RED3 zu RED4 verfolgen und löten.
  11. Auf der Rückseite ein gelbes Kabel von GELB1 zu GELB2 verfolgen und löten.

Der Sensor kann nun direkt über seine Pins mit der Platine oder über Drähte an den im Pinvertrag angegebenen Punkten verbunden werden.

Schritt 4: Testen

Testen
Testen
Testen
Testen
Testen
Testen

Es wird erwartet, dass sich eine Reihe dieser BRICKS auf mehreren Knoten (MCUs – ESP8266 oder ATTINY84) in einer Umgebung befinden. Dies ist ein Unit-Test: überprüft die UNO-Anfragen/-Antworten, bis alle Daten ausgegeben wurden, vernachlässigt dann den I2C-Slave.

  1. Laden Sie den UNO-Code in Ihren UNO-Testkabelbaum hoch. Stellen Sie sicher, dass ADDRESS_SLAVE mit der I2C-Adresse des BRICK übereinstimmt.
  2. Verbinden Sie die 5.0V von UNO mit einem VCC auf BRICK.
  3. Stellen Sie sicher, dass der Jumper für diesen Pin eingeschaltet ist.
  4. Verbinden Sie GND von UNO mit GND von BRICK.
  5. Verbinden Sie A5 auf UNO mit SCL auf BRICK.
  6. Verbinden Sie die A4 auf UNO mit SDA auf BRICK.
  7. Schließen Sie einen 4K7-Pull-up-Widerstand von SDA an VCC an.
  8. Schließen Sie einen 4K7-Pull-up-Widerstand von SCL an VCC an.
  9. Verbinden Sie Ihr UNO über USB mit Ihrem Dev-PC.
  10. Öffnen Sie die Arduino Console. Choose 9600 Baud (starten Sie die UNO neu und öffnen Sie die Konsole erneut, wenn Sie müssen).
  11. Die Eigenschaftsnamen und -werte sollten einmal auf der Konsole ausgegeben werden, dann wird das Wort sleep wiederholt.

Wenn Sie "Setup" sehen, werden 3 Müllzeilen wiederholt, und Sie haben möglicherweise Ihre SDA- und SCL-Zeilen von hinten nach vorne.

I2C-Master-Logging vom I2C-Slave mit Plotter-/Metadaten-Unterstützung

#enthalten
#defineADDRESS_SLAVE10
bool _outputPlotterOnly = false;
bool _confirmedMetadata = false;
int_packetSegment = 0;
bool _i2cNodeProcessed = false;
char_property[2][24] = {"Name", "Wert"};
voidsetup() {
Wire.begin(); // i2c-Bus beitreten (Adresse optional für Master)
Serial.begin (9600); // seriell für die Ausgabe starten
Verzögerung (1000);
if (!_outputPlotterOnly){
Serial.println("Setup");
Serial.println();
}
}
Leerschleife () {
if (_i2cNodeProcessed){
if (!_confirmedMetadata){// lass den Slave wissen, dass er mit dem Senden von Sensordaten beginnen soll
Verzögerung(1);
Wire.beginTransmission(ADDRESS_SLAVE);
Wire.write(1);
Wire.endTransmission();
Verzögerung (100);
_confirmedMetadata = true;
}
_i2cNodeProcessed = false;
if (!_outputPlotterOnly){
Serial.println();
}
Rückkehr;
}
Wire.requestFrom(ADDRESS_SLAVE, 16);
_PaketSegment++;
char-Paket[16];
intindex = 0;
bool isContinueSegment = false; // continueSegment (der 3.) 1=mehr, 0=letzter
while (Wire.available()) {// Slave sendet möglicherweise weniger als angefordert
Zeichen c = Wire.read();
Paket[index] = int(c) > -1 ? c: ''; // ungültige Zeichen durch Leerzeichen ersetzen
if (_paketSegment == 3){
_PaketSegment = 0;
isContinueSegment = true;
//Seriell.println("-------------");
//Seriell.println(int(c));
//Seriell.println("-------------");
if (int(c) == 48 || int(c) == 86){// 0 auf der letzten Eigenschaft
_i2cNodeProcessed = wahr;
// Werte an MQTT senden
brechen;
}
}
index++;
}
if (!isContinueSegment){
if (!_outputPlotterOnly){
Serial.println (Paket);
}
strcpy(_property[_packetSegment - 1], packet); // lokale Variable mit Name/Wert setzen
}anders{
if (_outputPlotterOnly && _confirmedMetadata){
if (_i2cNodeProcessed){
Serial.println (_property[1]);
}anders{
Serial.print (_property[1]);
Serial.print("");
}
}
}
}

rawuno_i2c_generic_sensor_test_w_plotter_v2.ino anzeigen, gehostet mit ❤ von GitHub

Schritt 5: Nächste Schritte

Das Grundlayout der Schaltung und der I2C-Schicht der Software ist auf viele verschiedene Sensoren bezogen. Das Wichtigste für den Anfang ist der Paketvertrag zwischen Master und Slave.

Ich habe ein (3D-gedrucktes) verpacktes Netzwerk von Sensoren geplant/gestartet, die dieses Framework verwenden und mit ihm verlinken, wenn Teile veröffentlicht werden.

Dieser BLOCK wird vom MQ2 ASSIMILATE SENSOR verwendet.

Empfohlen: