garden monitoring

  • Mastern klar

    Tjo

    Nu är jag klar med den del av projektet som kommer fungera som master med tillhörande moduler. Till arduino kortet har jag även skrivit en rad olika funktioner i arduinos integrerade utvecklingsmiljö.  

    void data_gate( const int &data, const byte &slave );
    void error( const byte &err_number );
    void user_data( const byte &slave );
    void bluetooth_blueterm_print( const char* str1, byte data );
    void lcd_row_print( const char* str1, const char* str2, const byte &data );

    Där data gate kontrollerar att korrekt data skickas ifrån slaven error skriver ut felmeddelanden antingen via bluetooth eller på den monterade LCD:n, user_data skriver ut all inhämtad data ifrån slaven på både LCD:n och via bluetooth. 

    De två sista funktionerna är formatering funktioner vilket nyttjas för att få en snygg formatering på LCD:n och på den applikation för android telefonen som jag för närvarande kör vid namn BlueTerm

    Mastern förenklade schemaritning gjort i programmet Fritzing:

     

    och i verkligheten under full körning:

  • Slaven klar

    Såhär ser kretschemat och den faktiska slaven ut efter ihoplödning

    mvh. KJ

  • Konstruktion av slave

    Tjo

    Nu har jag tagit fram en första modell av slaven efter ett kretschema som jag använt mig av vid lödning. Båda parametrarna fungerar nu ihop med microprocessorn vilket betyder att både soltiden (för närvarande i sekunder) mäts och att ett stickprov av jordfuktigheten kan tas (utefter en simpel skala).

    I min första modell fungerar det nu som så att då mastern anropas slaven via XBeen kommer ett avbrott att triggas i vilket slaven mäter jordfuktigheten och kontrollerar soltids-statusen. 

    Jordfuktigheten mäts genom följande spänningsdelning och registreras i ATmegans analog till digital omvandlare.

    Där Soil R helt enkelt är motståndet mellan två ledningar vilka är placerade i exempelvis blomkrukejord. Skalan vilket i skrivande stund är ganska hårddraget (endast tre nivåer) baserar sig då spänningen V i figuren.

    Funktionen vilket retunerar ett värde utifrån skalan baserat på ADC värdet (10 bits upplösning) ser ut på följande vis

    void MasterSoilToHuman( uint16_t val ) {

    if ( val >= 0 && val <= 315 )
    send_text("WET\n");
    else if( val >= 315 && val <= 1000 )
    send_text("WET->DRY\n");
    else if ( val >= 1000 && val <= 1024 )
    send_text("DRY\n");
    else
    send_text("NOGO\n");

    }

    Soltiden i sekunder retuneras mastern endast ifall det är så att solen har gått ner ifrån att tidigare varit uppe, på så sätt får mastern soltiden i hela paket och kan logga denna som hela dagar. ATmegan registrerar solens läge genom ett externt avbrott som triggar ytterligare ett timer avbrott. Då solen sedan går ner triggas samma avbrott igen dock så stängs nu timer avbrottet nu ner vilket kan beskådas nedan.

    ISR( PCINT0_vect ) {

    if( sun_mode )
    //enable timer0 interrupts
    TIMSK0 |= ( 1 << OCIE0A );

    else {
    //disable timer interrupts, clear everything
    TIMSK0 &= ~( 1 << OCIE0A );
    counter = 0;
    }

    }

    mvh. KJ

  • Kommunikation del 2

    Tjo

    Den andra kommunikationen är nu upprättad efter USART denna gång trådlöst med hjälp av XBee S1 enkelt monterad på
    min breadboard med hjälp det medköpta adapterkitet. Det hittils väldigt simpla nätverket har med hjälp av Digis mjukvara X-CTU vilket främst nyttjas till parametersättning och testning av XBeen fått ett specifikt Personal Area Network (PAN) id vilket varje enskild XBee måste ställas in med i X-CTU för att vara en del av mitt nätverk. I nuläget nyttjas PAN endast som en simpel säkerhetsåtgärd för att störningar inte ska uppstå i nätverket, bland annat då alla fabrikstillverkade XBees är förkonfigurerade med samma PAN id.

    Nätverket som det ser ut nu består av fyra stycken moduler vilka alla kan skicka och ta emot information hur som helst utan någon form av prioritering eller master-slave relation efter den modell det slutgiltiga nätverket är tänkt att byggas efter. Detta första nätverk fungerar dock bra för de simpla tester jag för tillfället utför.

    Tillsammans med den inbyggda AD omvandlaren som finns på ATmega328P så har slaven möjlighet att sampla en analog signal vilket varierar efter hur blött det är då en gaffel vilken leder ström sänks ner i ett vattenglas. Principen liknar den efter DC-motor testet skillnaden denna gång är att kommunikationen går trådlöst och är byggd efter hur jordfuktigheten i ett senare skede är tänkt att mätas, då med en mindre hårddragen skala (vilket nu endast går mellan extremt torrt/blött).

    ATmega328P på slaven kopplad till en XBee, även två stycken ej ännu nyttjade XBees och gaffeln vilken sticks ner i vattenglaset kan beskådas i bakgrunden.

    Vad som sker då den sista XBeen (vilken ej syns på bilden) men som är kopplas till en Windows maskin körandes X-CTU skickar ett tecken är att alla XBees på nätverket tar emot tecknet och den XBeen vilken är kopplad till slaven triggar ett avbrott i processorn som samplar värdet på AD omvandlaren och retunerar sedan detta till avsändaren. Värdet tolkas då antingen som extremt torrt eller extremt blött. Vilket kan beskådas nedan:

     

    mvh. KJ

     

  • Kommunikation del 1

    Tjo

    Den första kommunikationen är nu upprättad men hjälp av trådad USART vilket senare kommer utmynna i den trådlösa ZigBee kommunikationen. Den bakomliggande principen som nu tagits i bruk är densamma då ZigBee modulerna ska implementeras skillnaden kommer främst vara att "tråden" som nu går mellan master och slave är utbytt mot två stycken ZigBee moduler vilka levererar samma typ av information fast trådlöst.

    USART signalen levererar data på 1-byte vilket passar sig bra inom mitt projekt då det är precis vad Atmega328P som både utgör slaven och som sitter på Arduino kortet rymmer i sitt register. 1-byte vilket rymmer ett värde mellan 0 - 255 kommer även kunna utgöra ett tillräckligt stort intervall för att representera ett värde på jordfuktighet och soltid vilket är det som kommer levereras via USART.    

    Ett exempel på när jag testade min USART var då jag anslöt en liten DC-motor till min slave för att sedan leverera en start/stopp signal representerade av 10000000bin = 128dec för start och 01000000bin = 64dec för stopp. Signalerna såg alltså ut enligt följande:


    Resultatet kan beskådas nedan

    mvh. KJ

KarriärTjänsterOm ossBloggar