Bienenzähler – Konfiguration & Test

Der Bienenzähler des Arduino Datenlogger mit Stockwaage für Imker kommuniziert mit dem Arduino über I2C, wobei bis zu vier Module pro beelogger im Programmcode vorgesehen sind.

Jedes Modul muss dabei eine eindeutige Adresse erhalten, die über das Patchfeld auf der Platine durch Verbindungen einzustellen ist.
Die Adressbeschaltung kann mit dem SystemCheck-Sketch kontrolliert werden.

Adressierung für das 1. Modul Adressierung für das 2. Modul
beelogger Bienenzaehler I2C 1
rote Brücken, Beschaltung: I2C Adresse 0x24
beelogger Bienenzaehler I2C 2
rote Brücken, Beschaltung: I2C Adresse 0x25
Adressierung für das 3. Modul Adressierung für das 4. Modul
beelogger Bienenzaehler I2C 3
rote Brücken, Beschaltung: I2C Adresse 0x26
beelogger Bienenzaehler I2C 4
rote Brücken, Beschaltung: I2C Adresse 0x27

Libraries

<Wire.h> – in der Arduino-Software bereits enthalten
<Adafruit_MCP23017.h> – https://github.com/adafruit/Adafruit-MCP23017-Arduino-Library
Die Version für den beelogger ist im Library-Paket enthalten.

Test-Programmcode

beelogger Bienenzaehler ZaehlergaengeDer Arduino Datenlogger bietet mit dem Bienenzähler eine einfache Möglichkeit, eingehende und ausgehende Bienen separat zu zählen. Dabei wird davon ausgegangen, dass eine Biene beim kompletten durchschreiten des Zählerganges erst die eine und dann die andere Lichtschranke aktiviert. Natürlich hat man mit dieser Methode keine hunderprozentige Zählergebnisse, beispielsweise, wenn der Zählergang nicht komplett durchschritten wird, oder wenn zwei Bienen von je einer Seite den Zählergang gleichzeitg betreten. Ein ausreichend genauer Wert, grade bei der großen Anzahl der zu zählenden Bienen, sollte jedoch erreicht werden. Für die Umsetzung im Programmcode, gibt es sicherlich nicht nur eine Möglichkeit. Für den beelogger haben wir uns entschieden, den Zähler für eine Richtung zu erhöhen, wenn die jeweilige Lichtschranke eines Zählerganges zuerst und exklusiv aktiviert wird.      

beelogger Bienenzaehler IR LEDDie Reflexlichtschranke QRE1113GR besteht aus einer Infrarotdiode und einer Fotodiode. Das von der Infrarotdiode ausgesendete Licht wird von der Biene reflektiert und kann so von der Fotodiode empfangen werden. Nachdem das Bienenzähler-Modul mit Strom versorgt wird, leuchten die integrierten Infrarotdioden dauerhaft. Da die Kameras von Smartphones in der Regel über keinen Infrarotfilter verfügen, dann die Funktion der Infrarotdioden hiermit einfach überprüft werden (siehe Foto).

Nach dem Aufspielen des Test-Programmcodes wird in der Ausgabe seriellen Monitors der Status jeder Lichtschranke von vier Modulen angezeigt. Für jedes Modul werden 8 Wertepaare angezeigt, wobei der erste Wert der Status der eingehenden Lichtschranke und der zweite Wert der Status der ausgehenden Lichtschranke darstellt. Der Wert ‚1‘ steht dabei für eine aktivierte Lichtschranke. Für nicht angeschlossene Module ist der angezeigte Status der Lichtschranken jeweils ‚1‘.

Um die Funktion jeder einzelnen Lichtschranke zu testen, können diese nacheinander aktiviert werden. Bewährt hat sich hierbei die Verwendung eines Q-Tips. Bei jeder Statusänderung einer Lichtschranke wird eine neue Zeile mit allen aktuellen Stati ausgegeben.

Am Ende einer Zeile wird der aktuelle Zählerstand für ‚BienenIn‘ und BienenOut‘ angezeigt. Beim Neustart ist für beide Variablen der Wert ‚-1‘ gesetzt.

/*
 * (C) 2015 Thorsten Gurzan - beelogger.de
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
 
// beelogger.de - Arduino Datenlogger für Imker
// Erläuterungen dieses Programmcodes unter https://beelogger.de

#include <Wire.h>
#include <Adafruit_MCP23017.h>

const byte Anzahl_Sensoren_Bienenzaehler = 4; // Mögliche Werte: '0','1','2','3','4'

Adafruit_MCP23017 mcp[Anzahl_Sensoren_Bienenzaehler];

byte SensorAktuell[16];
byte LetzterSensor[Anzahl_Sensoren_Bienenzaehler][16]; 
               
long BienenIn = -1;
long BienenOut = -1;

byte Aktualisierung = 0;


void setup() { 
  Serial.begin(9600);
 
  if ((Anzahl_Sensoren_Bienenzaehler > 0) and (Anzahl_Sensoren_Bienenzaehler < 5)) {
    for (byte j=0; j < Anzahl_Sensoren_Bienenzaehler; j++) {
      mcp[j].begin(j+4); 
      for (byte i=0; i < 16; i++) {
        mcp[j].pinMode(i, INPUT);
        mcp[j].pullUp(i, LOW);
        LetzterSensor[j][i] = 0;
      }   
    }  
  }
}  


void loop() {
  if ((Anzahl_Sensoren_Bienenzaehler > 0) and (Anzahl_Sensoren_Bienenzaehler < 5)) {  
    for (byte j = 0; j < Anzahl_Sensoren_Bienenzaehler; j++) {     
      
      for (byte i = 0; i < 16; i++) { 
        SensorAktuell[i] = mcp[j].digitalRead(i);
      } 
    
      for (byte i = 0; i < 8; i++) { 
        if (SensorAktuell[i] != LetzterSensor[j][i]) {
          if (SensorAktuell[i] > SensorAktuell[i+8]) {
            if (BienenIn == -1) BienenIn = 1;
            else  BienenIn++;
          }
          Aktualisierung = 1;  
        }
        if (SensorAktuell[i+8] != LetzterSensor[j][i+8]){ 
          if (SensorAktuell[i+8] > SensorAktuell[i]) {
            if (BienenOut == -1) BienenOut = 1;
            else BienenOut++;
          }
          Aktualisierung = 1;
        }          
        LetzterSensor[j][i] = SensorAktuell[i];
        LetzterSensor[j][i+8] = SensorAktuell[i+8];
      }
    } 
    
    if (Aktualisierung > 0) { 
      for (byte j = 0; j < Anzahl_Sensoren_Bienenzaehler; j++) {  
        for (byte i = 0; i < 8; i++) {
          Serial.print(LetzterSensor[j][i]);
          Serial.print(LetzterSensor[j][i+8]);
          Serial.print(" ");
        }
        Serial.print(" --- ");
      }
      Serial.print(" ");
      Serial.print("BienenIn: "); 
      Serial.print(BienenIn); 
      Serial.print("  ");
      Serial.print("BienenOut: "); 
      Serial.println(BienenOut); 
    }  
    Aktualisierung = 0;
    delay(10);
  }
}

Ausgabe des seriellen Monitors (9600 baud) – ein Modul angeschlossen:

00 00 00 00 00 00 00 10  --- 11 11 11 11 11 11 11 11  --- 11 11 11 11 11 11 11 11  --- 11 11 11 11 11 11 11 11  ---  BienenIn: 1  BienenOut: -1
00 00 00 00 00 00 00 00  --- 11 11 11 11 11 11 11 11  --- 11 11 11 11 11 11 11 11  --- 11 11 11 11 11 11 11 11  ---  BienenIn: 1  BienenOut: -1
00 00 00 00 00 00 00 01  --- 11 11 11 11 11 11 11 11  --- 11 11 11 11 11 11 11 11  --- 11 11 11 11 11 11 11 11  ---  BienenIn: 1  BienenOut: 1
00 00 00 00 00 00 00 00  --- 11 11 11 11 11 11 11 11  --- 11 11 11 11 11 11 11 11  --- 11 11 11 11 11 11 11 11  ---  BienenIn: 1  BienenOut: 1

Testprogrammcode herunterladen

 

Der komplette Programmcode für den Arduino Datenlogger mit Stockwaage für Imker ist unter Programmcode zu finden.

Nach oben scrollen