Uutiset:

Tervetuloa mehiläisien kasvatukseen, yhdyskunnan automaatioon, suojaamiseen ja tiedonkeruuseen keskittyneelle sivustolle

Main Menu

Tuoreimmat viestit

#81
Tikkurilan Teho öljymaalia pintaan ruiskulla, ilman ohenninta ja pinnasta tulee liiankin hyvä pelkäksi UV-suojaksi. Tikkurilan Teho 580x

Mehiläispesien huoltomaalaus osa 1/2
http://youtu.be/vR0bRXMngKs

Mehiläispesien huoltomaalaus osa 2/2
http://youtu.be/5ycQ_5fmndM





📐 Tiedekulma:
UV-säteily (aallonpituus 100–400 nm) hajoittaa puun ligniiniä fotokemiallisesti, mikä aiheuttaa harmaantumista ja halkeilua. Öljymaalit suojaavat puuta tunkeutumalla syvälle syihin ja täyttämällä huokoset, jolloin ne estävät kosteuden ja UV-säteilyn pääsyn puurakenteeseen. Pellavaöljypohjaisten maalien öljyhappoketjut (C18) absorboivat UV-fotoneja ja hajoavat hitaasti itse, säästäen alla olevan puuaineksen. Mehiläispesille maalaus on tärkeää myös siksi, että kosteus kiihdyttää lahottajasienten (esim. Coniophora puteana) kasvua jo yli 20 %:n puun kosteuspitoisuudessa.
#82
Pesien tiedonkeruu ja automaatio / Vs: Mehiläispesän talvi-lämmit...
Last post by Tomask - Toukokuu 30, 2013, 10:17:43 AP
Lämmitin on toteutettu seuraavilla osilla:
- Purettu Motonetin 12V penkinlämmitin
- Arduino (tässä ohjeessa Mega)
- Meisei PS-5 Rele ( http://www.partco.biz/verkkokauppa/product_info.php?products_id=11331 )
- 12V Akku lämmittimelle
- Arduinolle joko oma akku tai muuntaja 12V->5V

Arduinon sisäisen kellon puutteen vuoksi lämmitin  laskee tunteja ennustaakseen vuorokauden kylmimmät tunnit.
Lämpötilaa mitataan minuutin välein, ja saaduista arvoista lasketaan jokaiselle tunnille keskiarvo.
Lämpötilan noustessa verrattuna kahteen edelliseen tuntiin, laitetaan odotustila päälle, jonka aikana mitataan lämpötilaa.
Tässä ohjelmassa odotusaika on 20 tuntia.
Odotuksen päättyttyä kytketään lämmitin käyettäväksi.
Lämmitin lämmittää kuusi minuuttia tunnissa kuuden tunnin ajan.


Penkinlämmittimestä irroitettiin lämmityselementit.

Lämmittimen virtajohdon ja piirilevyn väliin laitettiin rele, jota arduino ohjaa.

Releen pinnit kytkettiin seuraavasti:
-Releen pinni 1: Arduinon pinni 53
-Releen pinni 10: Arduinon pinni GND
-Releen pinni 3: Virtajohto akulta
-Releen pinni 4: Virtajohto lämmittimeen
  (katso datalehti: http://www.partco.biz/verkkokauppa/datasheet/meisei_ps5.pdf)

Lämpöanturin kytkentä (DS1820):
Anturin pinnit 1 ja 3 kytkettiin yhteen ja johdotettiin Arduinon GND pinniin
Anturin pinni 2 kytkettiin arduinon pinniin 2, josta 4,7k ohmin vastus +5V pinniin
(Katso piirros viestin lopusta)

Lämmitimeen koodi vaatii toimiakseen arduinon tavallisen asennuksen lisäksi kolme erillistä kirjastoa, löytyvät liitteinä tämän viestin lopusta: Average.zip, dallas.zip, OneWire.zip


Tämä ohjelma tulostaa minuutin välein lämpötilan sarjaportille, lämmityksen ohella, joten sitä voi käyttää ohjelman jatkokehittelyynkin.

Käytimme projektissa Coolterm -sarjaporttiohjelmaa, josta saa datan helposti talteen.



// Project needs three libraries that are not part of arduino install.
#include <Average.h>
#include <OneWire.h>
#include <DallasTemperature.h>

//Define used variables

#define MLuku 60 // The amount of minutes in an hour
#define TLuku 24 // The amount of hours in a day
#define WLuku 6  // The amount of hours to warm
#define HLuku 6  // The amount of minutes to warm
#define ONE_WIRE_BUS 2 // Data wire is plugged into pin 2 on the Arduino
#define Rele 53 //Pin for the relay

float Minuutti[MLuku];  // Slot to hold the measuring data for the minutes
float Tunti[TLuku];     // Slot to hold hourly data
float TempKA;           // Variable for Average amount
int LEsto = 0;          // Variable to indicate blocking of heating
int EstoAika = 15;      // Variable to hold the time of blocking of heating
int Timma;              // Variable to store the hour
int z = 0;              // Counter for the heater
long lastminute = 0;
long minute = 59700;      // Variable for the delay time, a minute for this project
boolean Warn;           // Variable for enabling the heater

void setup()
{
  // start serial port
  Serial.begin(19200);
  pinMode(Rele, OUTPUT);
}

void loop()
{
  for (int j=0; j<TLuku; j++){  //
   
  Mittaus(); // Jump to the measuring part
  TempKA = mean(Minuutti,MLuku);  // Measure the average temp of the minutes
  Serial.print("Tunti: "); 
  Serial.print(j);
  Serial.print("  Avg: ");
  Serial.print(TempKA);
  Serial.print("\n");
  delay(100);
  Reset1();     //Reset the temp of the stored minutes
  delay(100);
  Tunti[j] = TempKA;   //Store the average temp of the minutes to the Vector
                      //Serial.print("Hourly averages's check \n");
                      //Serial.print(Tunti[j]);
                      //Serial.print("\n");
                      //Serial.print(Tunti[j-1]);
                      //Serial.print("\n");
                      //Serial.print(Tunti[j-2]);
                      //Serial.print("\n");
  Serial.print(LEsto);
  Serial.print(" Estobitti\n");
  Serial.print(EstoAika);
  Serial.print(" Eston tunti \n");
  Timma = j; //Store the number of the current hour
  NoWarm();  //Check if the 20 hour delay has passed
  if (LEsto == 0 && Tunti[j-1] != 0 && Tunti[j-2] != 0) //If the restrictor of the heater is not on, enable the heater
  {
    Warm();
  }
  if (Tunti[j-1] > Tunti[j-2] && Tunti[j] > Tunti[j-1] && Tunti[j-2] != 0 && Tunti[j-1] != 0 && z >= 6) {
    //If current hours temp has risen since the two ones before: delay heating for 20h
   if (LEsto == 0) {
    LEsto = 1;    //Set blocking on
    EstoAika = j; //set the hour of the blocking
    z=0;          //reset the counter
   Warn = false;  //disable the heater
       Serial.print("No Warming for 20h");
       Serial.print("\n ");
   }
   }
        else if ( Tunti[j-1] == 0 && Tunti[j-2] == 0) {  //If the hour counter goes from 23 -> 0 the check needs to be done slightly different.
        Serial.print("\n Midnight \n");
        if (Tunti[TLuku-1] > Tunti[TLuku-2] && Tunti[j] > Tunti[TLuku-1] && z >= 6) {
                   Serial.print("\n ");
                   if (LEsto == 0) {
                    LEsto = 1;
                    EstoAika = j;
                    z=0;
                   Warn = false;
                   Serial.print("No Warming for 20h");
                   Serial.print("\n ");
                   }   
                   }
                   }
  }

} // End of the main loop



void Mittaus()
{
  for (int i=0; i<MLuku; i++){  //for 60 times
   
  OneWire oneWire(ONE_WIRE_BUS);        //Enable the OneWireBus
  DallasTemperature sensors(&oneWire);  //Enable the Dallas Library
  sensors.begin();                      //Start the bus 
  delay(10);
  sensors.requestTemperatures();        //Request temp from the sensor
  delay(10);
  Minuutti [i] = sensors.getTempCByIndex(0); //Get and store the value from the first (and only) sensor on the bus
 
  Serial.print(Minuutti[i]);
  Serial.print("\n");
  if (i < HLuku && Warn == true)    //If usage of heater is enabled: switch it on
{
  Serial.print(" Warn ");
   digitalWrite(Rele, HIGH); //Modify this to control the relay
}
else
{
   digitalWrite(Rele, LOW);
}
  delay(minute);
}
}

int NoWarm()  //Count when the 20 hours have passed
{
if ( EstoAika == 0 && Timma == 20 ) LEsto = 0;
if ( EstoAika == 1 && Timma == 21 ) LEsto = 0;
if ( EstoAika == 2 && Timma == 22 ) LEsto = 0;
if ( EstoAika == 3 && Timma == 23 ) LEsto = 0;
if ( EstoAika == 4 && Timma == 0 ) LEsto = 0;
if ( EstoAika == 5 && Timma == 1 ) LEsto = 0;
if ( EstoAika == 6 && Timma == 2 ) LEsto = 0;
if ( EstoAika == 7 && Timma == 3 ) LEsto = 0;
if ( EstoAika == 8 && Timma == 4 ) LEsto = 0;
if ( EstoAika == 9 && Timma == 5 ) LEsto = 0;
if ( EstoAika == 10 && Timma == 6 ) LEsto = 0;
if ( EstoAika == 11 && Timma == 7 ) LEsto = 0;
if ( EstoAika == 12 && Timma == 8 ) LEsto = 0;
if ( EstoAika == 13 && Timma == 9 ) LEsto = 0;
if ( EstoAika == 14 && Timma == 10 ) LEsto = 0;
if ( EstoAika == 15 && Timma == 11 ) LEsto = 0;
if ( EstoAika == 16 && Timma == 12 ) LEsto = 0;
if ( EstoAika == 17 && Timma == 13 ) LEsto = 0;
if ( EstoAika == 18 && Timma == 14 ) LEsto = 0;
if ( EstoAika == 19 && Timma == 15 ) LEsto = 0;
if ( EstoAika == 20 && Timma == 16 ) LEsto = 0;
if ( EstoAika == 21 && Timma == 17 ) LEsto = 0;
if ( EstoAika == 22 && Timma == 18 ) LEsto = 0;
if ( EstoAika == 23 && Timma == 19 ) LEsto = 0;
}


void Warm()
{
  z=z++;
 
if (z >= WLuku) { //Warming has been on for the desired time (6h)
   Serial.print("\n No Warming (6h full) \n");
   Warn = false;   //disable warming
}
else if (z < WLuku) { //Warming hasn't been on for the desired time (6h)
   Warn = true;
   Serial.print(" \n ..Warming.. \n");
}
}




void Reset1()  //Reset the temps stored on the minutes vector
{
  for (int y=0; y<MLuku; y++){
    Minuutti[y] = 0;
  }
}






Kuvia aiheesta:
#83
Tällä videolla on italialaiset mehiläiset puolustamassa pesäänsä pesäkaluston vaihdon yhteydessä.

Eli vaihdoin pesäkaluston puisesta styroksiseen ja pesä ilmeisesti tulkitsi sen siksi, että olisin
hajottanut heidän hienon vanhan puisen version.

http://www.youtube.com/watch?feature=player_detailpage&v=EOAPdWLVNUY#t=0s



📐 Tiedekulma:
Mehiläiset tunnistavat pesänsä pääasiassa hajuaistin avulla. Vartiomehiläiset erittävät hälytysfermoneja, joista tärkein on isopentyyliasetraatti (IPA, C₇H₁₄O₂), kun pesä kokee uhkan. Tämä feromonin vapautuminen voi laukaista ketjureaktion: jo 1–2 ng IPA:ta riittää herättämään vartijoiden puolustusreaktion. Styroksi materiaalina ei ime hajuja samoin kuin puu, joten tutut pesän hajusignaalit muuttuivat äkisti – pesä tulkitsi tilanteen uhkaksi. Italialaisilla mehiläisillä (Apis mellifera ligustica) puolustuskynnys on geneettisesti matalampi kuin esim. buckfast-risteytymillä, mutta korkeampi kuin afrikkalaistaustaisia geenejä kantavilla kannoilla.
#84

"Since 2006 bee expert Professor Dr. Jürgen Tautz has been developing HOBOS (Honey Bee Online Studies) as a novel and interactive teaching concept. A preliminary stage of HOBOS came about on June 1, 2009 and made ​​it possible for school classes from nine countries to delve into a real honeybee colony via the Internet. These countries included Germany, USA, China, Luxembourg, Northern Ireland, Italy, South Africa, Switzerland and Jordan."

Tässä alla olevista linkeistä pääsee tutkimaan, mitä mehiläiset puuhailevat, livenä

http://www.hobos.de/en/lehrer-schueler/hobos-daten/bienenstock.html

http://www.hobos.de/en/teachers-pupils/hobos-data/beehive/endoskopkamera-zarge.html



📐 Tiedekulma:
Mehiläisyhdyskunnan lämpötalous on hämmästyttävä esimerkki kollektiivisesta homeostaasista. Talvella mehiläisparvi ylläpitää pesän ytimen lämpötilan noin +20–30 °C:ssa — jopa −20 °C:n ulkolämpötilassa. Kesällä, munintakauden aikana, kennosto pidetään tarkasti +35 °C:ssa (±0,5 °C), koska toukkien kehitys vaatii tämän tarkan lämpötilan.

Lämpöä tuotetaan lentolihaksia värähtelemällä: yksittäinen mehiläinen voi nostaa rintakehänsä lämpötilan jopa +44 °C:een. Koko parven yhteinen lämmöntuotto voi olla kymmeniä watteja.

Pesän CO₂-pitoisuus on myös tarkasti säädelty: normaali ilmakehä sisältää CO₂:ta noin 0,04 % (400 ppm), mutta mehiläispesässä pitoisuus voi nousta 1–6 %:iin. HOBOS-anturit mittaavatkin juuri näitä parametreja — lämpötilaa, kosteutta, CO₂:ta ja jopa pesän painoa (±1 g tarkkuudella) — tarjoten reaaliaikaisen ikkunan siirtokunnan fysiologiaan.
#85
Tänään 3.5.2013  kävin heikkoja pesiä läpi. Yllätys oli se, että vielä löytyi kolme pesää, jotka olivat selkeästi heikentyneet parissa viikossa.
Yhden pesän nostin vahvan pesän päälle, pesien väliin laitoin propoliksen keruulevyn ja sulkuristikon. Kaksi pesää otin
parilla kehällisellä pieneen parituspesään.




📐 Tiedekulma:
Mehiläisyhdyskuntien heikkeneminen keväällä liittyy usein ns. kevätromahdukseen (spring dwindle). Talven yli eläneen yhdyskunnan vanhat mehiläiset kuolevat, ja uuden sukupolven kasvu riippuu täysin kuningattaren muninnasta ja lämpimän pesän ylläpidosta. Kriittinen raja-arvo on noin 10 000 yksilöä (≈ 4–5 kehällistä mehiläisiä): tätä pienempi yhdyskunta ei pysty ylläpitämään pesälämpöä +35 °C:ssa, jota toukkien kehitys vaatii. Sulkuristikon (queen excluder, rakoväli 4,2 mm) käyttö pesien yhdistämisessä estää kuningatarten kohtaamisen samalla kun työläiset pääsevät kulkemaan vapaasti. Propolis koostuu pääosin flavonoideista ja fenolihappojen estereistä (n. 50 % hartsia, 30 % vahaa, 10 % eteerisiä öljyjä) ja sillä on osoitettu antimikrobisia vaikutuksia useita mehiläisten patogeeneja vastaan.
#86
Pesien tiedonkeruu ja automaatio / Vs: Mehiläispesän painon tarkk...
Last post by Mikaim - Huhtikuu 24, 2013, 06:32:01 AP
Tämänhetkinen järjestelmä sisältää
Colinen henkilövaaka http://www.clasohlson.com/fi/Henkil%C3%B6vaaka-Coline/Pr341551000
Arduino Mega 2560 http://arduino.cc/en/Main/ArduinoBoardMega2560
Transistori
Pari vanerilevyä

Tarkoituksemme on siis lukea arduinon avulla henkilövaa'an mittaamia arvoja ja mielestämme helpoin ratkaisu on lukea lcd-näytölle meneviä signaaleja, samalla tavoin kuin Dušan Stojković teki blogissaan. Siirtämällä piirilevyn ja näytön välissä olevaa kontaktiliuskaa saimme määriteltyä mitkä levyn pinneistä vaikuttivat mihinkin näytön segmenttiin.



Onneksemme piirilevyssä oli testipaikat jokaiselle näyttöön menevälle pinnille, joten "vakoilujohdot" oli helppo juottaa kiinni. Juotimme kaikkiaan 19 johtoa vaa'an piirilevyyn: 15 johtoa näytön lukemiseen, 2 johtoa syöttääksemme virtaa ja 2 johtoa vaa'an kontrolloimiseen. Antureilta tulevat johdot oli tehdasjuotettu melko heikosti, joten niitä piti jatkuvasti korjailla. Varovaisuudella säästää aikaa :)
Testatessamme järjestelmää, huomasimme että vaa'an yksiköiden vaihtamiseen tarkoitettu nappi myös pakottaa vaa'an päälle. Laitoimme transistorin napin paikalle jotta pystyisimme kontrolloimaan vaakaa arduinolla.






Johdot liitettiin arduinoon siten, että segmenttipinnit menevät digitaalipaikkoihin 23 - 45, taustasignaalit analogipaikkoihin 0, 1 ja 2, transistori analogipaikkaan 4 ja virtajohdot omille paikoilleen.

Ohjelma lukee näytölle meneviä signaaleja, tulkitsee niiden perusteella näytöllä lukevan arvon ja lähettää sen seriaalia käyttäen eteenpäin tietokoneelle, jossa Seriot lähettää tiedon eteenpäin thingspeakiin. Koodi on tehty arduoinon omalla ohjelmalla.



// Näytön pinnissä 6 vika. kymmenissä ysistä tulee kolmonen.
//
//25.6 KG --> Vaaka vaihtaa LB:hin!
//
//


#include <SoftwareSerial.h>


// Determination of waiting times
const long wtime = 51200; // Waiting time when the measurement is done correctly (in milliseconds, 30min = 1800000ms) Program cycle is about 8,7 seconds.
const long ctime = 891100;   // Waiting time when measurement errors, zeroes etc., occur (milliseconds)               
//291300 5min
//891300 15min
//1791300 30min
//
// Creating variables
int lcdA=0,lcdB=0,lcdC=0;
bool lcd1,lcd2,lcd3,lcd4,lcd5,lcd6,lcd7,lcd8,lcd9,lcd10,lcd11,lcd12;
bool a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12;
bool b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12;
bool c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12;
bool lb,st,kg, kalat;
bool pin3;
unsigned int x[6], y[6], z[6], c[5];
int dec, ones, tens, hund;
float weight;
float weight0;
float weight1;
float weight2;
float weight3;
float weight4;
float tester[10];

// Creating a serial connection
void setup() {
  Serial.begin(57600);   
}

// A check to ensure that the scale is using the correct unit (kg)
void Kilos() {
  while (pin3 == false) {
    while (kalat == 0) {
      lcdA  = analogRead(A0);
      lcdB  = analogRead(A1);
      lcdC  = analogRead(A2);
      lcd3  = digitalRead(41);

      if (lcdA>200 && lcdB>200 && lcdC<100) {
        pin3=lcd3;
        kalat=1;
      }
    }
    if (pin3 == false) {
      digitalWrite(A3, HIGH);
      delay(200);
      digitalWrite(A3, LOW);
      delay(1000);
      kalat=0;         
    }

  }
}


// Measuring program
void Measure() {
  for (int i=0; i<6; i++){

    // Zeroing the pin values
    lcdA  = 0;
    lcdB  = 0;
    lcdC  = 0;
    lcd1  = 0;
    lcd2  = 0;
    lcd3  = 0;
    lcd4  = 0;
    lcd5  = 0;
    lcd6  = 0;
    lcd7  = 0;
    lcd8  = 0;
    lcd9  = 0;
    lcd10 = 0;
    lcd11 = 0;
    lcd12 = 0;

    // Reading the pins of the lcd
    lcdA  = analogRead(A0);
    lcdB  = analogRead(A1);
    lcdC  = analogRead(A2);
    lcd1  = digitalRead(45);
    lcd2  = digitalRead(43);
    lcd3  = digitalRead(41);
    lcd4  = digitalRead(39);
    lcd5  = digitalRead(37);
    lcd6  = digitalRead(35);
    lcd7  = digitalRead(33);
    lcd8  = digitalRead(31);
    lcd9  = digitalRead(29);
    lcd10 = digitalRead(27);
    lcd11 = digitalRead(25);
    lcd12 = digitalRead(23);

    // Saving A-level segments into variables a1-a12
    if (lcdA<100 && lcdB>200 && lcdC>200) {
      a1=lcd1;
      a2=lcd2;
      a3=lcd3;
      a4=lcd4;
      a5=lcd5;
      a6=lcd6;
      a7=lcd7;
      a8=lcd8;
      a9=lcd9;
      a10=lcd10;
      a11=lcd11;
      a12=lcd12;
    }

    // Saving B-level segments into variables b1-b12
    if (lcdA>200 && lcdB<100 && lcdC>200) {
      b1=lcd1;
      b2=lcd2;
      b3=lcd3;
      b4=lcd4;
      b5=lcd5;
      b6=lcd6;
      b7=lcd7;
      b8=lcd8;
      b9=lcd9;
      b10=lcd10;
      b11=lcd11;
      b12=lcd12;
    }

    // Saving C-level segments into variables c1-c12
    if (lcdA>200 && lcdB>200 && lcdC<100) {
      c1=lcd1;
      c2=lcd2;
      c3=lcd3;
      c4=lcd4;
      c5=lcd5;
      c6=lcd6;
      c7=lcd7;
      c8=lcd8;
      c9=lcd9;
      c10=lcd10;
      c11=lcd11;
      c12=lcd12;
    }

    // Checking the number in the decimal
    // if ( a1 &&  a2 ==  true &&  b1 && !b2 && b3 == true &&  c1 &&  c2 ==  true) x[i]=0;
    if ( a1 && !a2 ==  true &&  b1 && !b2 ==  true && !c1 && !c2 ==  true) x[i]=1;
    if ( a1 &&  a2 ==  true && !b1 &&  b2 ==  true &&  c1 &&  c2 ==  true) x[i]=2;
    if ( a1 &&  a2 ==  true &&  b1 &&  b2 && !b3 == true &&  c1 && !c2 ==  true) x[i]=3;
    if ( a1 && !a2 ==  true &&  b1 &&  b2 ==  true && !c1 && !c2 ==  true) x[i]=4;
    if (!a1 &&  a2 ==  true &&  b1 &&  b2 ==  true &&  c1 && !c2 ==  true) x[i]=5;
    if (!a1 &&  a2 ==  true &&  b1 &&  b2 ==  true &&  c1 &&  c2 ==  true) x[i]=6;
    if ( a1 &&  a2 ==  true &&  b1 && !b2 && !b3==  true && !c1 && !c2 ==  true) x[i]=7;
    if ( a1 &&  a2 ==  true &&  b1 &&  b2 ==  true &&  c1 &&  c2 ==  true) x[i]=8;
    if ( a1 &&  a2 ==  true &&  b1 &&  b2 &&  b3 == true &&  c1 && !c2 ==  true) x[i]=9;

    // Checking the number in ones
    if ( a4 &&  a5 ==  true &&  b4 && !b5 && b6 == true &&  c4 &&  c5 ==  true) y[i]=0;
    if ( a4 && !a5 ==  true &&  b4 && !b5 ==  true && !c4 && !c5 ==  true) y[i]=1;
    if ( a4 &&  a5 ==  true && !b4 &&  b5 ==  true &&  c4 &&  c5 ==  true) y[i]=2;
    if ( a4 &&  a5 ==  true &&  b4 &&  b5 && !b6 == true &&  c4 && !c5 ==  true) y[i]=3;
    if ( a4 && !a5 ==  true &&  b4 &&  b5 ==  true && !c4 && !c5 ==  true) y[i]=4;
    if (!a4 &&  a5 ==  true &&  b4 &&  b5 ==  true &&  c4 && !c5 ==  true) y[i]=5;
    if (!a4 &&  a5 ==  true &&  b4 &&  b5 ==  true &&  c4 &&  c5 ==  true) y[i]=6;
    if ( a4 &&  a5 ==  true &&  b4 && !b5 && !b6 ==  true && !c4 && !c5 ==  true) y[i]=7;
    if ( a4 &&  a5 ==  true &&  b4 &&  b5 ==  true &&  c4 &&  c5 ==  true) y[i]=8;
    if ( a4 &&  a5 ==  true &&  b4 &&  b5 &&  b6 == true &&  c4 && !c5 ==  true) y[i]=9;

    // Checking the number in tens
    if ( a7 &&  a8 ==  true &&  b7 && !b8 && b9 == true &&  c7 &&  c8 ==  true) z[i]=0;
    if ( a7 && !a8 ==  true &&  b7 && !b8 ==  true && !c7 && !c8 ==  true) z[i]=1;
    if ( a7 &&  a8 ==  true && !b7 &&  b8 ==  true &&  c7 &&  c8 ==  true) z[i]=2;
    if ( a7 &&  a8 ==  true &&  b7 &&  b8 && !b9 == true &&  c7 && !c8 ==  true) z[i]=3;
    if ( a7 && !a8 ==  true &&  b7 &&  b8 ==  true && !c7 && !c8 ==  true) z[i]=4;
    if (!a7 &&  a8 ==  true &&  b7 &&  b8 ==  true &&  c7 && !c8 ==  true) z[i]=5;
    if (!a7 &&  a8 ==  true &&  b7 &&  b8 ==  true &&  c7 &&  c8 ==  true) z[i]=6;
    if ( a7 &&  a8 ==  true &&  b7 && !b8  && !b9 ==  true && !c7 && !c8 ==  true) z[i]=7;
    if ( a7 &&  a8 ==  true &&  b7 &&  b8 ==  true &&  c7 &&  c8 ==  true) z[i]=8;
    if ( a7 &&  a8 ==  true &&  b7 &&  b8 &&  b9 == true &&  c7 && !c8 ==  true) z[i]=9;

    // Checking hundreds
    if ( a10 && !a11 ==  true &&  b10 && !b11 && !b12  ==  true && !c10 && !c11 ==  true) c[i]=1;

    delay(3); //default 5. 4 WORKS better (3-6 ?)

  } // End of for-loop

  // Analysis of decimals
  if ( x[3] == x[4] ) dec = x[4];

  // Analysis of ones
  if ( y[3] == y[4] ) ones = y[4];

  // Analysis of tens
  if ( z[3] == z[4] ) tens = z[4];

  // Analysis of hundreds
  //if ( c[1] == c[4] ) hund = c[4];

                                     /*
                                    // DEBUGGING PART
                                    Serial.print(z[0]);
                                    Serial.print(" ");
                                    Serial.print(z[1]);
                                    Serial.print(" ");
                                    Serial.print(z[2]);
                                    Serial.print(" ");
                                    Serial.print(z[3]);
                                    Serial.print(" ");
                                    Serial.print(z[4]);
                                    Serial.print(" ");
                                    Serial.print(z[5]);
                                    Serial.print("   ");
                                    Serial.print(y[0]);
                                    Serial.print(" ");
                                    Serial.print(y[1]);
                                    Serial.print(" ");
                                    Serial.print(y[2]);
                                    Serial.print(" ");
                                    Serial.print(y[3]);
                                    Serial.print(" ");
                                    Serial.print(y[4]);
                                    Serial.print(" ");
                                    Serial.print(y[5]);
                                    Serial.print("   ");
                                    Serial.print(x[0]);
                                    Serial.print(" ");
                                    Serial.print(x[1]);
                                    Serial.print(" ");
                                    Serial.print(x[2]);
                                    Serial.print(" ");
                                    Serial.print(x[3]);
                                    Serial.print(" ");
                                    Serial.print(x[4]);
                                    Serial.print(" ");
                                    Serial.print(x[5]);
                                    Serial.print("   ");                                   
                                    // DEBUGGING END
                                    */
 
  delay(50); //default 30
}    // End of the measuring program


void reset() {

  // Zeroes all used variables
  x[0] = 0;
  x[1] = 0;
  x[2] = 0;
  x[3] = 0;
  x[4] = 0;
  y[0] = 0;
  y[1] = 0;
  y[2] = 0;
  y[3] = 0;
  y[4] = 0;
  z[0] = 0;
  z[1] = 0;
  z[2] = 0;
  z[3] = 0;
  z[4] = 0;
  x[5] = 0;
  y[5] = 0;
  z[5] = 0;
  a1=a2=a3=a4=a5=a6=a7=a8=a9=a10=a11=a12=0;
  b1=b2=b3=b4=b5=b6=b7=b8=b9=b10=b11=b12=0;
  c1=c2=c3=c4=c5=c6=c7=c8=c9=c10=c11=c12=0;
  dec = 0;
  ones = 0;
  tens = 0;
  weight = 0;
  weight = 0.0;
  pin3=0;
  tester[0] = 0;
  tester[1] = 0;
  tester[2] = 0;
  tester[3] = 0;
  tester[4] = 0;
  tester[5] = 0;
  tester[6] = 0;
  tester[7] = 0;
  tester[8] = 0;
  tester[9] = 0;
  tester[10] = 0;
}

void rassi() {

  // Zeroes all used variables
  x[0] = 0;
  x[1] = 0;
  x[2] = 0;
  x[3] = 0;
  x[4] = 0;
  y[0] = 0;
  y[1] = 0;
  y[2] = 0;
  y[3] = 0;
  y[4] = 0;
  z[0] = 0;
  z[1] = 0;
  z[2] = 0;
  z[3] = 0;
  z[4] = 0;
  x[5] = 0;
  y[5] = 0;
  z[5] = 0;
  a1=a2=a3=a4=a5=a6=a7=a8=a9=a10=a11=a12=0;
  b1=b2=b3=b4=b5=b6=b7=b8=b9=b10=b11=b12=0;
  c1=c2=c3=c4=c5=c6=c7=c8=c9=c10=c11=c12=0;
  dec = 0;
  ones = 0;
  tens = 0;
  weight = 0;
  weight = 0.0;
}


// Main program
void loop()
{
  delay(1000); //default 1000

  // Zeroing
  reset();

  // Transistor acts as a "reset switch" for the scale
  digitalWrite(A3, HIGH);
  delay(200);  //default 200
  digitalWrite(A3, LOW);
  delay(500); //default 500

  // Checking the unit
  Kilos();
  delay(1400); //default 3000. 3005 HYVÄ

  // Measuring, loops 5 times
  for (int m=0; m<11; m++){
    Measure();

    weight = 10.0*tens + 1.0*ones + 0.1*dec;
    tester[m] = weight;    // Saving the weight into a vector
    //Serial.print(tester[m]);
    //Serial.print("\n");   
    delay(100); //default 400
    //rassi();
  }


  // Checks the similarity between gotten values           
  float Reading;
    //Serial.print(tester[0]);
    //Serial.print(" ");
    // Serial.print(tester[1]);
    // Serial.print(" ");
    //  Serial.print(tester[2]);
    //  Serial.print(" ");
       Serial.print(tester[3]);
       Serial.print(" ");
        Serial.print(tester[4]);
        Serial.print(" ");
         Serial.print(tester[5]);
         Serial.print(" ");
          Serial.print(tester[6]);
          Serial.print(" ");
           Serial.print(tester[7]);
           Serial.print(" ");
            Serial.print(tester[8]);
         //   Serial.print(" ");
         //    Serial.print(tester[9]);
          //   Serial.print(" ");
          //    Serial.print(tester[10]);
              Serial.print("\n");
  if (tester[3] == tester[4] && tester[4] == tester[5] && tester[5] == tester[6] && tester[6] == tester[7] && tester[7] == tester[8] && tester[8] != 0.00 ){ 
    Reading = (tester[3] + tester[4] + tester[5] + tester[6] + tester[7] + tester[8]);
    Reading = (Reading/6);

    Serial.print("\n");
    Serial.print("###BOD");
    Serial.print("\n");
    Serial.print("Vaaka1,");
    delay(100);
    Serial.print(Reading);
   Serial.print("\n");
    Serial.print("###EOD");
    Serial.print("\n");
    delay(ctime);     // Values were correct, program waits the set amount of time                             
  }
  else if (tester[3] == 0 || tester[4] == 0 || tester[5] == 0 || tester[6] == 0) {
    Serial.print("\n");
    Serial.print("###BOD");
    Serial.print("\n");
    Serial.print("Vaaka1, 0");
    Serial.print("\n");
    Serial.print("###EOD");
    Serial.print("\n");
    delay (wtime);  // The values were not correct, program waits set time and measures again
  }

  else {     
    delay (wtime);  // The values were not correct, program waits set time and measures again
  }



}    // End of the main program



Virrankulutus on vielä mittaamatta, mutta sen ei pitäisi olla kovin suuri.

Otimme vaa'asta sen anturit ja osan kuoresta irti ja kiinnitimme ne vanerilevyjen väliin, jotta saisimme tasapainotettua pesän paremmin vaa'an päälle. Tämä aiheutti hieman vaihtelevuutta järjestelmän toiminnassa, mutta yritämme korjata aiheutuneita bugeja.

#87
Pesien tiedonkeruu ja automaatio / Mehiläispesän painon tarkkailu
Last post by Mikaim - Huhtikuu 24, 2013, 05:30:16 AP
Tässä threadissa olisi tarkoitus seurata minun ja 2 muun opiskelijan tiedonkeruuprojektia ja samalla kirjoitella ohjetta samanlaisen järjestelmän rakentamiseen kiinnostuneille.

Aluksi vähän taustaa:
Meille annettiin projektiksi kasata mehiläispesän painoa autonomisesti tarkkaileva systeemi mahdollisimman alhaisin kustannuksin.
Projektin ensimmäisenä päivänä käyttöömme annettiin henkilövaaka, Arduino Mega 2560 ja raaka suunnitelma siiitä, miten voisimme toimia. Tarkoitus olisi siis liittää Arduino jotenkin henkilövaakaan, kerätä sen mittaama paino ja lähettää se eteenpäin.

Tällä hetkellä järjestelmä toimii vaihtelevasti, mutta aiemmat versiot ovat olleet melko luotettavia. Liitteenä 4. toukokuuta käynnissä oleva mittaus.

Inspiraatiota projektiin olemme saaneet Dušan Stojkovićin blogista, jossa hän rakentaa järjestelmän, joka lukee vaa'an lcd-näyttöä.
http://quo.vadis.stojkovic.ch/hacking-a-weighing-scale/
#88
Sunnuntaina 21.04.2013 mehiläiset tulivat kaikista pesistä yhtäaikaa ulkoilemaan. Lämpö +10 varjossa

Video pesästöltä:
http://www.youtube.com/watch?v=_94xkn6Tja4&feature=youtu.be

...vielä 22.04.2012 jouduin antamaan lisäruokaa ruiskeen parille pesälle



📐 Tiedekulma:
Mehiläisten (Apis mellifera) puhdistuslento keväällä on fysiologisesti tärkeä tapahtuma. Talven aikana mehiläiset pidättelevät ulostettaan pesässä jopa useita kuukausia – ulostemäärä voi kasvaa jopa 30–40 % mehiläisen omasta painosta. Lennon minimälämpötila on noin +8–10 °C, sillä mehiläisen lentolihakset tarvitsevat riittävän lämpötilan toimiakseen; rintakehän sisälämpötilan tulee olla noin +35 °C lenron aikana, ja mehiläinen lämmittää lihaksiaan värisemällä ennen lähtöä. Koko yhdyskunnan samanaikainen ulostulo on merkki siitä, että pesässä on riittävästi eläviä yksilöitä ylläpitämään yhteisöllistä lämpötilaa (+34–35 °C) talven yli.
#89
Pesien tiedonkeruu ja automaatio / Mehiläispesän talvi-lämmittime...
Last post by qwerty - Huhtikuu 20, 2013, 01:53:25 AP
Tässä aiheessa olisi tarkoitus käsitellä mehiläispesään tulevaa talvilämmitintä.

Mehiläispesään alempaan osastoon tulee molemmille äärilaidoille kaksi lämpölevyä, joita lämmitetään talvisen vuorokauden kylmimpinä jaksoina.

Tästä saisi hyötyä etenkin talveuttaessa vaikkapa kolme yhdyskuntaa samassa tornissa.

Automatiikka toteutetaan Arduino Megalla





📐 Tiedekulma:
Mehiläistalvi on energiatalouden kannalta kiinnostava ilmiö. Mehiläisparvi muodostaa talveksi tiiviin talvipallon (halkaisija noin 20–35 cm), jossa lämpötila pidetään keskellä noin +20–35 °C:ssa ulkolämpötilasta riippumatta. Parvi tuottaa lämmön lihastärinällä kuluttaen talven aikana 15–25 kg hunajaa.

Lämpölevyn mitoituksessa kannattaa huomioida Fourierin lämmönjohtumislaki:
Q = λ · A · ΔT / d
missä λ on materiaalin lämmönjohtavuus (W/m·K), A pinta-ala (m²), ΔT lämpötilaero (K) ja d paksuus (m).

Arduino Megan analogitulo (10-bittinen ADC, 0–5 V) yhdistettynä esim. NTC-termistoriin tai DS18B20-anturiin (tarkkuus ±0,5 °C) mahdollistaa PID-säädön, jolla ylikuumeneminen vältetään. Liian korkea pesälämpö (+36 °C+) häiritsee talvipalloa ja voi altistaa pesän homeelle.
#90
Ensiksi varmistin erikseen, että saan kuningattaren eloon.

...ja hyvin onnistui: Kuvasin kaksi videota selvittämään toimenpidettä ja sen laajuutta:

Nyt vaan harmittaa niiden yhdyskuntien puolesta, jotka olen heittänyt tuhoon tuomittuna menemään ja joille olisi voinut yrittää samaa. Epäilin herätyksen lähtökohdan olevan se, että pesä ei ole saanut käydä hirveästi plussan puolella mehiläiset sisällään. Eikä liikaa miinuksen puolella. Mehiläiset eivät tyypillisesti talvella horrosta, vaan ovat normaalisti hereillä koko talvijakson ajan, lämmittäen toisiaan.  Mehiläisillä on mahdollisesti pistiäisten sukupuusta peritty ominaisuus horrokselle (kimalaiskuningatar, ampiaiskuningatar).

Saattaa olla, että jos pystyisi takaamaan yhdyskunnalle horroksen + tasaisen miedon pakkasen, selvisivät talvesta ilman lisäruokintaa + nosema ei pääsisi yllättämään pesää, mahdollisesti pakkasesta on haittaa myös varroapunkille. Kaukaa haettuna esimerkkinä Rovaniemen tienoon mehiläistenhoitajilla ei ole varroa-ongelmaa ollenkaan (varroa-vapaa alue). Se taas saattaa osaltaan johtua kylmästä ilmanialasta. Tämän selvitän henkiin herätetyistä pesistä lähettämällä Eviran labraan tutkittavaksi tautipitoisuudet:

Henkiin herättämisen metodi (kuumailmapuhaltimella):
http://www.youtube.com/watch?v=HEm0zPGqdBI

Lopputulos kolmen yön jälkeen:
http://www.youtube.com/watch?v=yoPWTHvymUo

...pitää huomata varata paljon ruokaa herätettävään pesään ennen herätystä. Herätyksen jälkeen tämä ei ole viileillä ilmoilla enää missään muussa kohtaa järkevästi mahdollista.



📐 Tiedekulma:
Mehiläisyhdyskunta on erinomainen esimerkki biologisesta lämmönsäätelystä eli homeotermiasta ryhmätasolla. Talvikimpussa (n. 10 000–20 000 yksilöä) mehiläiset tuottavat lämpöä supistamalla rintakehän lentolihaksia ilman siipien liikettä. Kimpun ydinlämpötila pysyy noin 20–35 °C:ssa, vaikka ulkolämpötila olisi −30 °C. Lämmöntuotto perustuu glykolyysin ja sitruunahappokierron kautta tapahtuvaan hunajan (sakkaroosin ja fruktoosin) hapettamiseen: C₆H₁₂O₆ + 6 O₂ → 6 CO₂ + 6 H₂O + ~2 800 kJ/mol. Kimpun ulkokuori toimii eristeenä: reuna-alueen mehiläiset tiivistävät sijoittumistaan, jolloin lämmönjohtavuus pienenee. Varroa destructor -punkin lisääntyminen tapahtuu suljetuissa käyttäjäkennoissa (8–9 vrk), ja sen on havaittu hidastuvan alle 10 °C:ssa – mutta koska punkit ovat suojassa mehiläisen kennossa, pelkkä ulkolämpötila ei riitä hävittämään niitä. Pohjoisten alueiden alhaisempi varroa-paine selittyy todennäköisemmin maantieteellisellä eristyneisyydellä kuin suoralla pakkaskuolleisuudella.