Habe eine Vorlage dazu von Mo bekommen.
Der obere Teil ist zum Testen.
Die Funktion gibt ein Wert zurück, der dem CRC entspricht.
let data = pins.createBuffer(2)
data[1] = 0xEF
data[0] = 0xBE
//hier muss die Dezimalzahl 146 rauskommen!
//data[0] ist immer das höchste Byte!
basic.showNumber(generate_crc(data))
function generate_crc(data: Buffer): number {
let current_byte;
let crc = pins.createBuffer(1)
crc.setNumber(NumberFormat.UInt8LE, 0, 0xFF)
let crc_bit;
//calculates 8-Bit checksum with given polynomial
for (current_byte = 0; current_byte < data.length; ++current_byte) {
crc.setNumber(NumberFormat.UInt8LE, 0, crc.getNumber(NumberFormat.UInt8LE, 0) ^ data.getNumber(NumberFormat.UInt8LE, current_byte))
for (crc_bit = 8; crc_bit > 0; --crc_bit) {
if (crc.getNumber(NumberFormat.UInt8LE, 0) & 0x80)
crc.setNumber(NumberFormat.UInt8LE, 0, (crc.getNumber(NumberFormat.UInt8LE, 0) << 1) ^ 0x31)
else
crc.setNumber(NumberFormat.UInt8LE, 0, (crc.getNumber(NumberFormat.UInt8LE, 0) << 1))
}
}
return crc.getNumber(NumberFormat.UInt8LE, 0);
}
1 „Gefällt mir“
super, dann kann ich das nachher mal ausprobieren.
1 „Gefällt mir“
Danke für die Unterstützung hier im Forum!
Die Lib für den SCD30 bringt jetzt alle Funktionalität mit, die man braucht:
joernalraun/pxt-SCD30: SCD30 CO2 Sensor (github.com)
Damit konnte ich jetzt meine CO2-Ampel realisieren:
rdmueller/co2-ampel at v2 (github.com)
Video auf Twitter: https://twitter.com/RalfDMueller/status/1332226297997692928?s=20
2 „Gefällt mir“
Es gibt ja zwei verschieden Sensortypen. Zum einen die Sensoren die IR Absorption messen und zum anderen die Sensoren, die elektrische Leitfähigkeit messen. Der CCS811 gehört zu zweiter Gruppe.
Ich habe gerade einen Vortrag der Technologiestifftung Berlin/Citylab Berlin gehört. Da hat mal ein Chemiker erklärt, wie die Sensoren funktionieren. Ergebnis: Die MOX Sensoren (elektrische Leitfähigkeit) sind denkbar ungeeignet für unsere CO2 Ampeln. Die messen ja nicht direkt CO2, sondern alles mögliche an organischen Gasen und versuchen daraus den CO2 Wert zu errechnen. Der Sensor hat bei mir unter keinen Umständen vernünftige Werte gemeldet. Er muss lange kalibriert werden und er „altert“ chemisch. Wenn der also bei Euch „im Moment“ funktioniert, heißt das nicht, das er an anderer Stelle genauso verlässlich CO2 anzeigt. Die Sensoren an sich sind gut - aber eben nicht um den CO2 Gehlat zu bestimmen.
Wer also vernünftige CO2 Werte haben will, sollte auf einen IR Sensor setzen. Die günstigste Lösung dafür scheint der MH-Z19B zu sein.
Hallo @Speerwerfer,
ja, im Artikel der Make wird ja auch darauf eingegangen. Es geht eher darum die Luftqualität als solches zu messen. Ein CO2 Sensor misst den CO2 Gehalt direkt. Das es da einen Unterschied gibt ist sicherlich allen klar – und für ChemikerInnen ist das natürlich nicht zu vergleichen und ausreichend.
Aus meiner Sicht sind die aber trotzdem zu gebrauchen, wenn man mit den Werten etwas anders arbeitet (ungewöhnliche Ausreißer rausrechnen und einen Durchschnittswert nehmen). So kommt man zu einem guten Ergebnis – es ist aber sicherlich nicht für den Laboreinsatz geeignet. In meinen bisherigen Versuchen und im Vergleich mit zwei CO2 Sensoren (die auch Kalibriert werden müssen) wird häufiger eine zu hohe Konzentration angezeigt und das finde ich gut, denn gutes Lüften ist ja etwas, was wir damit erreichen wollen. Kurz gesagt, du hast recht, ich würde die eCO2 Sensoren aber für diesen Einsatz (erstmal) nicht ignorieren. Vor allem, weil sie leicht verfügbar und günstig sind. Man sollte aber immer beachten, dass man nicht direkt CO2 misst.