Rafiki Wa Kupanda. EITF11, Digitala projekt VT18. Linnea Håkansson, Anton Gunneberg, Ruben Schultz

Relevanta dokument
Växtviskaren EITF11 Digitala projekt VT15, I12

Larmcentral. Digitala Projekt. Cecilia Olsson & Erika Björck Handledare: Bertil Lindvall LUNDS TEKNISKA HÖGSKOLA

Feeding Daisy. EITF11 Lunds Tekniska Högskola. Grupp 12: Pontus Akervall Louise Landare Anton Schölin. En automatisk blomvattnare

LARMANLÄGGNING. Digitala Projekt, EITF11. Oskar von Knorring Emin Karimov Henrik Akej Handledare: Bertil Lindvall

Lunds Tekniska Högskola Elektro- och informationsteknik Digitala projekt (EITF11)

Effektpedal för elgitarr

Rapport. Fyra i rad-spel. Rapport Digitala Projekt EITF11 Grupp 9 Emma Rasmusson & Louise Ragnarsson Handledare: Bertil Lindvall

Digitala Projekt (EITF11) Hemlarm

Digitala Projekt(EITF40) - Larm

TEMPERATURMÄTARE MED GRAFRITARE

PlantPuppy Räddaren för den som inte kan hålla växterna vid liv

Digitala Projekt(EITF40) - Larm

Projektrapport Målgång

EITF11 - Digitala projekt. Hastighetsmätare. Hugo Backmyr Mattias Karlsson

Källkod. #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define green_diode PD5. #define RS PD4

Projektrapport - Roterande digital LED-klocka

The Secure Light. Digitala Projekt EITF11. Hanna Tinglöf, I-12 Anna Horvath, I-12 Filippa Österlin, I-12. Handledare: Bertil Lindvall

Temperaturmätare med lagringsfunktion DIGITALA PROJEKT EITF11 GRUPP 14, ERIK ENFORS, LUDWIG ROSENDAL, CARL MIKAEL WIDMAN

The Phenomenal Doorbell Bilaga 2. Källkod

EITF11 Digitala Projekt TIC TAC TOE. Lukas Ljungblom & Johan Lyckenvik I-13 Handledare: Bertil Lindvall

DIGITALA PROJEKT (EITF40) Fartmätare

Rapportsammanfattning. Optima Sous Vide

Bilen som inte kan krocka

The Intelligent Timer

Projektrapport - Feststation

Digitala Projekt (EITF11) Larmanläggning

Thunder s Truck projektrapport

Lunds Tekniska Högskola EITF11 Digitala projekt. Bandspelaren

Digitala Projekt (EITF11)

Digitala Projekt: Digitala Projekt, EITF11 - VT17 Oscar Ahlgren, Patrik Lorentsson och Sten Hellberg Handledare: Bertil Lindvall

1 Bakgrund 4. 2 Kravspecifikation Definitioner Grundläggande krav Användarfall 5

Väderstation. Digitala Projekt EITF11 Institutionen för Elektro- och Informationsteknik Lunds Tekniska Högskola

DIGITALA PROJEKT Väderstation

ETSA01 Digitala Projekt (I) VT- 13. Projektarbete AC Handledare Bertil Lindvall

EITF40 - RFID-terminal. Joakim Marculescu (dt08jm6), Eric Johansson (dt08ej6)

Digitala Projekt EITF11 Grupp 9 Projektarbete Hanna Bondesson Marcus Skog. Reaktionsspel EITF11

Pulsmätare med varningsindikatorer

Rapport Digitala Projekt EITF Grupp 12 Elin Blomstergren, Victor Sundgren Handledare: Bertil Lindvall. Fyra i rad

Digitala System Projekt - EITA15 VT *SUPER DUPER KLOCKAN*

LARMANLÄGGNING. Digitala Projekt, EITF11. Oskar von Knorring Emin Karimov Henrik Akej Handledare: Bertil Lindvall

Snake. Digitala Projekt (EITF11) Fredrik Jansson, I-12 Lunds Tekniska Högskola,

Digitala projekt Linjeföljande bil

Innehållsförteckning. Figur- och tabellförteckning. Figure 1 Blockschema över hårdvaran...4 Figure 2 Blockschema över programet...

Liftmaestro. Lunds Tekniska Högskola Elektro- och informationsteknik. Olle Gemfors, I13 Dayanand Sagar, I13 Mattias Wendler, I13

LUNDS TEKNISKA HÖGSKOLA. Väderstation. Digitala Projekt, EITF11. Martin Olofsson, I08 & Fredrik Oher, I08 Vt 2012

Digitala projekt, EDI021 Rapport Handledare: Bertil Lindvall

EIT. Digitala projekt EITF11. Larmanläggning. Handledare Bertil Lindvall Anna Lindberg I-11 Caroline Vitasp I-11 Eric Eliason I-10

DIGITALA PROJEKT - EITF11

Pulsmätare. EITF11 Digitala Projekt VT15. Grupp 9: Emma Albertz, Mathilde Hagander & Alexandra Mansner Handledare: Andreas Johansson & Bertil Lindvall

THE VISUAL EGGTIMER. Skola: Lunds Tekniska Högskola Institution: Elektro- och informationsteknik Kurs: Digitala projekt (EITF11)

/* * dancing3.c * * Created: :53:20 * Author: digpi10 */ #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.

Väderstation. EITF11, Digitala projekt RAPPORT. Isabella Bergvik, Emma Sandén & Hanna Åberg

LOOKY LUKE. Caroline Hellström och Ville Orlander Arvola Industriell ekonomi I10. - Att välja en lyckosam väg EITF11 Digitala projekt

PROJEKTTYP: Rapportsammanfattning STUDENTER: Larsson, J. ( ) och Oredsson, J. ( ) DATUM: 26 april, 2015

Projekt EITA15. Väckarklocka. LTH Ingenjörshögskolan vid Campus Helsingborg Datateknik

Rörelse- och temperaturkänsligt larmsystem

JOFEN-Prototypes. Målsökande pansarvagn. Projektarbete i Kursen EITA15. Jonatan Claesson, Olle Jonasson, Felix Rödén, Edvin Rossi & Nils Olén

EITF11 - Digitala Projekt

Pulsmätare Digitala Projekt EITF11

Laboration 4: Knappstuds Drivrutiner för att eliminera störningar.

Kla ggvisarskylt. -med en underton av rassel. av Jonathan So nnerup & Gabriel Jo nsson

#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> unsigned char num;

EITF11. WormFight. Axel Eriksson, Felix Geuken Handledare: Bertil Lindvall EITF11

LTH. EITF11- Digitalaprojekt. Projektrapport WEB

Gustaf Backman, Anton Nystedt, Nicholas Peebo Battleships. Lunds tekniska högskola. EITF11 Digitala projekt

High Core Remote Car X8000 Cool

Projektrapport i Digitala System

TETRIS. LTH, Campus Helsingborg EITA15 Digitala System

EITF11: Bandkanon Grp 05

Linjeföljare Digitala projekt Johan Engström e02je Henrik Persson e02hp

SIMON SAYS Projekt i EITF11 Digitala Projekt

Från idé till skapelse av en äkta RoomBot

TEMPERATUR OCH VINDMÄTARE MED HÖGTALARFUNKTION

Rapport i Digitala Projekt (EDI021)

RAPPORT: DIGITALA PROJEKT

Rapport Digitala Projekt EITF11 Grupp 4 Axel Sundberg, Jakob Wennerström Gille Handledare: Bertil Lindvall

Jan Babor och Oscar Ågren Handledare: Bertil Lindvall 5/16/2011

WALL E. WALL EVADER EDI021 DIGITALA PROJEKT

Laboration 5. Temperaturmätning med analog givare. Tekniska gränssnitt 7,5 p. Förutsättningar: Uppgift: Temperatur:+22 C

Projektrapport - RoboWalter

Digitala Projekt VT13. PING-Pong

Rapport: Väderstation

Department of Information Technology Digitala Projekt Frysboxregulator. 10 december 2007

Aml Abbas, Ali Darwish, Ehsanolah Hafezi, Fatima Zahra Doussi Grupp 15

Helena Harrysson och Linnéa Wickberg

Lunds Tekniska Högskola. I-10 Grupp 11: David Sundström Max Schulz Albert Lundberg Handledare: Bertil Lindvall

Avståndsmätare. Digitala System EITA Grupp 7. Abdelsalem Yabrag, Abdulhadi kikar, Fredrik Peterson, Jesper Annefors

Guitar tuner Digitala Projekt (EITF40)

Väderstation. Datum: Projektarbete vid elektro och informationstekniks institution

LTH Ingenjörhögskolan vid Campus Helsingborg. Mastermindspel

Datorteknik 1 (AVR 1)

Guitar Tuner EITF11 Digitala Projekt, Projektrapport Elektro- och informationsteknik

Digitala projekt VT Myran

Digitalt Projekt: Radiostyrd Bil

Innehåll. 1 Inledning 3

RemoteBud. Inlämnas: Patrik Johnsson, e01pjo Viktor Karlsson, e01vk

EDI021 Digitala projekt. Rapport LARMSYSTEM. Utförd av: Niklas Eklund E03 David Olsson E04. Inlämnad:

Blinkande discogolv. Lunds Tekniska Högskola, LTH Elektro- och informationsteknik. EITF11 Digitala Projekt VT 2014

Projekt Digitala system. Rörelsekänsligt Larmsystem

Digitala Projekt, EITF40

Transkript:

Rafiki Wa Kupanda EITF11, Digitala projekt VT18 Linnea Håkansson, Anton Gunneberg, Ruben Schultz Lunds Tekniska Högskola Institutionen för elektro- och informationsteknik Handledare: Bertil Lindvall och Christoffer Cederberg 2018-05-21 1

Abstract Rafiki Wa Kupanda - Or Friend of plant as it is called on the English market, is what every home has been missing. Our innovation combines the raw power of the top of the line processor, ATmega16, with the alphanumerical display SHARP DotMatrix to make sure you get a crystal clear view of what your plant needs in real time. The settings are adjustable to meet your plant s needs, so you can be sure that no plant has to suffer at your watch. 2

Innehållsförteckning 1. Inledning... 1 2. Kravspecifikation... 1 3. Hårdvara... 1 3.1 Processor - ATmega16... 1 3.2 Display - SHARP DotMatrix... 1 3.3 Keypad... 1 3.4 Key Encoder... 2 3.5 Fuktsensor - Moisture Sensor v1.3... 2 3.6 Fukt- och temperatursensor - DHT11... 2 3.7 JTAG - Atmel JTAG ICE... 2 3.8 Lysdiod... 2 3.9 Övrigt... 2 4. Mjukvara... 2 5. Utförande... 3 5.1 Planering... 3 5.2 Montering... 3 5.3 Kodning och testning... 3 6. Resultat... 3 7. Diskussion och slutsats... 3 8. Referenser... 4 9. Bilagor... 5 9.1 Bilaga 1: Kopplingsschema... 5 9.2 Bilaga 2: Källkod... 6 3

1. Inledning I kursen Digitala Projekt EITF11 fick vi som uppgift att konstruera en prototyp av något slag för att illustrera industriellt utvecklingsarbete. Som start på arbetet fick vi själva bestämma vad prototypen skulle ha för funktioner. Vi valde att bygga en modell som vi kallar Rafiki Wa Kupanda, en växtvårdare. Denna består bland annat av en LCD-skärm som visar temperatur och fuktighet, en fuktighetsmätare för jord, en temperatur- och fuktighetssensor för luft och ett tangentbord som används för att göra diverse inställningar. Arbetsprocessen som ledde fram till den färdiga prototypen var både frustrerande och utmanande men också väldigt givande. Denna rapport innehåller en kravspecifikation som tydliggör projektets mål och riktlinjer. Därefter följer korta beskrivningar av både hård- och mjukvara. Utöver detta beskrivs arbetsprocessen och till sist förs en diskussion om arbetet och dess resultat. 2. Kravspecifikation Nedan följer de krav som prototypen ska uppfylla: 1. Modellen ska kunna mäta fuktighet i jord. 2. Modellen ska kunna mäta luftfuktighet och temperatur. 3. Det ska finnas en varningslampa som talar om när växten behöver vattnas. 4. Modellen ska ha en LCD-skärm som talar om hur växten mår. Den ska: a. Tala om vilken temperatur det är. b. Tala om hur fuktig luften är. c. Tala om vad som är fel när lampan lyser, t.ex. om jorden är för torr och behöver vattnas. 3. Hårdvara 3.1 Processor - ATmega16 ATmega16 är en MPU (MicroProcessing Unit) med 40 pinnar och kan ta emot digitala signaler samt omvandla analoga signaler till digitala med hjälp av processorn A/Dkonverterare. Processorn är kopplad till alla andra komponenter i prototypen då den styr inputs och outputs av signaler. Processorn programmeras i programmeringsspråket C med hjälp av en Atmel JTAG ICE, som gör att den vet hur den ska hantera in och utsignaler vid olika scenarion. 3.2 Display - SHARP DotMatrix SHARP DotMatrix är en alfanumerisk LCD-display där kontrasten kan justeras genom en justerbar resistor. Displayen kopplas till processorns digitala Input/Output-pinnar samt till spänningsmatning och jordning. 3.3 Keypad En keypad med 4x4 knappar används för att användaren ska kunna justera modellens inställningar efter sina behov. 1

3.4 Key Encoder För att tolka signalerna från knappsatsen används en Key encoder som gör det möjligt att kunna koda vektorerna av SPST-switchar. 3.5 Fuktsensor - Moisture Sensor v1.3 Fukten mäts genom att två metallplattor med en mellanliggande spänning sticks ner i jord varpå resistansen mellan de två mäts. En fuktig jord leder ström bättre och ger därför en lägre resistans. Eftersom signalerna från fuktsensorn är analoga skickas de in i processorn till ben 40, som är en A/D-konverterare. 3.6 Fukt- och temperatursensor - DHT11 DHT11 använder en kalibrerad digital signal som output för temperaturen och luftfuktigheten. Sensorn består av två delar, en termistor och en kapacitiv fuktsensor. Modellen innehåller även en A/D-konverterare som omvandlar de analoga signalerna till digitala innan de skickas in till processorn, därför kan insignalen till processorn kopplas till en digital I/O-port. Processorn tar emot ettor och nollor som representeras av två olika insignaler med varierande tid med hög respektive låg signal. Dessa läses sedan av och kontrolleras med hjälp av en paritetsbit med vars hjälp man räknar ut en checksum för att kontrollera att informationen mottagits korrekt. Den binära insignalen omvandlas sedan till ett decimalt luftfuktighetsvärde i procent och en temperatur med enhet celsius. 3.7 JTAG - Atmel JTAG ICE För att kunna exekvera mjukvaran behövs en JTAG som överför koden som programmeras på en dator i programmeringsspråket C till processorn. 3.8 Lysdiod En lysdiod med rött ljus används för att varna användaren när något inte står rätt till. Dioden är kopplad till en resistor på 10kΩ. 3.9 Övrigt I övrigt så användes resistorer, kondensatorer och diverse sladdar. 4. Mjukvara Mjukvaran programmerades i C i programmet Atmel Studio 7. 2

5. Utförande 5.1 Planering Efter en del efterforskning och idéspånande så beslutades att en växtvårdare skulle byggas. Innan det fysiska arbetet satte igång togs en kravspecifikation fram för att tydliggöra vad målet med projektet var. Utifrån specifikationen valdes sedan de nödvändiga komponenterna till prototypen ut och ett kopplingsschema ritades. För att se till att inget var fel i detta tidiga skede av projektet studerades även komponenternas datablad, för att i största möjliga mån undvika att få problem efter monteringsfasen. Efter att kopplingsschemat godkänts av projektets handledare Bertil Lindvall inleddes arbetets nästa fas, monteringen. 5.2 Montering I detta steg så hanterades den hårdvara som skulle användas. Komponenter kopplades ihop enligt det kopplingsschema som tagits fram. Sladdar virades och vissa delar, såsom LCDskärmen, löddes fast. 5.3 Kodning och testning När hårdvaran var färdigmonterad påbörjades testningen. Först testades att det inte fanns några uppenbara monteringsfel som kunde leda till kortslutning eller att komponenter saknade strömtillförsel. När en spänning på 5 volt kopplats in och det verifierats att samtliga delar tycktes fungera i grova drag fortsatte arbetet med att de olika komponenternas funktioner undersökas så att de fungerade. Det visade sig att encodern inte fungerade som förväntat. Problemet var att ett av encoderns pinnar varierade mellan högt och lågt utan uppenbar anledning och för att lösa detta kopplades ett extra motstånd in. Även fukt- och temperatursensorn DHT11 behövde kopplas om. Denna drogs då till PD3 (INT1) vilket gjorde att avbrott kunde användas. I övrigt fungerade kopplingarna bra och med hjälp av databladen för respektive komponenter kunde koden för de önskade funktionerna skrivas. 6. Resultat Modellen blev en helt funktionsduglig produkt som kan läsa av fukt i jord och luft samt lufttemperatur. Den är interaktiv och tillåter användaren att anpassa önskad temperatur och fuktighet. En varningslampa är installerad för att snabbt dra till sig uppmärksamhet från användaren om något inte står rätt till. Lyser lampan finns det information på skärmen om vad som ska göras, om den behöver mer eller mindre vatten eller en miljö med högre eller lägre temperatur. 7. Diskussion och slutsats Att programmera var något vi kände oss bekväma med innan kursen, och den stora utmaningen trodde vi skulle bli att koppla hårdvaran rätt och att koden skulle skrivas i ett för oss nytt språk: C. Vår uppfattning om detta var, som så mycket annat under arbetets gång, helt fel. Det svåra var istället att koppla ihop mjukvara med hårdvara och förstå hur koden mer handgripligt påverkade hur våra enheter agerade. Det är svårt att uppskatta komplexiteten av ett problem då ens kunskap inom området är bristfälligt, vilket vi ofta märkte under arbetet. 3

Ett av de svåraste problemen som vi stötte på var när vi skulle hantera signalen från DHT11, vår temperatur- och luftfuktighetsmätare. Den första enheten var defekt och fick bytas ut. När den nya enheten var på plats var kunde vi börja klura på hur signalen skulle läsas av på bästa sätt. Efter en del diskussion tycker vi att vi relativt självständigt kom fram till en bra lösning och tog oss över hindret. Slutligen så lyckades vi ta fram en fullt funktionell prototyp och med den har vi också fått grundläggande kunskaper inom ämnet och stor förståelse för utmaningarna med produktutveckling. 8. Referenser Datablad för processor, ATmega16 High-performance AVR 8-bit Microcontroller https://www.eit.lth.se/fileadmin/eit/courses/edi021/datablad/processors/atmega16.pdf Datablad för LCD-skärm, SHARP Dot-Matrix LCD Units Alfanumerisk teckendisplay https://www.eit.lth.se/fileadmin/eit/courses/edi021/datablad/display/lcd.pdf Datablad för Key Encoder, 16-Key Encoder https://www.eit.lth.se/fileadmin/eit/courses/edi021/datablad/periphery/other/mm54c922.pdf Datablad för temperatur- och fuktsensor, DHT11 Humidity and Temperature Sensor http://robocraft.ru/files/datasheet/dht11.pdf https://akizukidenshi.com/download/ds/aosong/dht11.pdf Video om fuktsensor, Moisture Sensor v1.3 https://www.youtube.com/watch?v=roov-gf28n4 4

9. Bilagor 9.1 Bilaga 1: Kopplingsschema 5

9.2 Bilaga 2: Källkod /* * GccApplication2.c * * Created: 2018-05-15 10:33:46 * Author : ine15rsc */ #define F_CPU 8000000UL #define set_bit(port,px) #define clear_bit(port,px) #define _BV(bit) (PORT = _BV(px)) (PORT &= ~_BV(px)) (1<<(bit)) #include <avr/io.h> #include <stdlib.h> #include <avr/interrupt.h> #include <util/delay.h> #include <inttypes.h> volatile uint16_t count; unsigned int settemp_enable=0; unsigned int setmoist_enable=0; unsigned int readmoist_enable=0; unsigned int temperature; unsigned int humidity; unsigned int dhc[150]; unsigned char realtemp[4]; unsigned char realhum[4]; unsigned int write_enable=0; unsigned char keytest; unsigned int mintemp; unsigned int minmoist; unsigned char moistval; unsigned char LCD_clear = 0b00000001; unsigned int keyval; unsigned int tempval; unsigned int new_input; unsigned int keycode; unsigned int dhc_counter= 0; unsigned int parity[6]; unsigned int moistset; void command_lcd(char cmd){ PORTD = _BV(PD6); // E hög PORTD &= ~_BV(PD4); // RS låg PORTD &= ~_BV(PD5); // R/W låg PORTB = cmd; _delay_ms(5); PORTD &= ~_BV(PD6); // E låg //_delay_ms(5); PORTD = _BV(PD6); // E Hög void writedata(char d){ PORTD = _BV(PD6); // E hög PORTD = _BV(PD4); // RS hög 6

PORTD &= ~_BV(PD5); // R/W låg PORTB = d; _delay_ms(10); PORTD &= ~_BV(PD6); // E låg PORTD = _BV(PD6); // E hög void write_string(char list[]){ int i = 0; while(list[i]!=null){ writedata(list[i]); i++; void initdhc(){ MCUCR = _BV(ISC11); MCUCR &= ~_BV(ISC10); // set up timer with prescaler = 8 TCCR1B =_BV(CS11); count= 0; void DHC_run(){ ADCSRA &= ~_BV(ADIE); DDRD = _BV(PD3); PORTD = _BV(PD3); PORTD &= ~_BV(PD3); _delay_ms(25); PORTD = _BV(PD3); DDRD &= ~_BV(PD3); _delay_us(80); TCNT1 = 0; GICR = _BV(INT1); void DHC_translate(){ ADCSRA = 1<<ADIE; int c = 0; dhc[0]=0; for(int i=0; i<5; i++){ for(int e = 0; e<8;e++){ if(dhc[c]==1){ parity[i] = _BV(7-e); else if(dhc[c]==0){ parity[i] &= ~_BV(7-e); 7

c++; if((parity[0]+parity[1]+parity[2]+parity[3]) == parity[4]){ if((parity[0]==0) (parity[2]==0)){ DHC_run(); else{ humidity=parity[0]; temperature=parity[2]; dhc_counter=0; ADCSRA = 1<<ADIE; else{ DHC_run(); void startadc(){ //starta prescaler - klocka dividera 1 000 000 med 50-200 khz för att klockan ska vara rätt inställd, prescaler mellan 5 och 20 //vi använder 16 prescaler - se datablad ADCSRA = 1 << ADPS2; // väljer om 8bit eller 10bit //ADMUX = 1<<ADLAR; //Voltage reference mha AVCC vid AREF pinne ADMUX = 1<<REFS0; //Enable interrupt ADCSRA = 1<<ADIE; //startar ADC ADCSRA = 1<<ADEN; //conversion ADCSRA = 1<<ADSC; void init(){ DDRD = 0b01110010; DDRB = 0b11111111; command_lcd(0b00111100); //function set command_lcd(0b00001111); //clear display char list[9] = "Welcome"; write_string(list); _delay_ms(1000); 8

DDRA = 0b00000000; PORTD =0b00000000; GICR = _BV(INT0); MCUCR =_BV(ISC01); MCUCR =_BV(ISC00); startadc(); initdhc(); sei(); void set_main_screen(){ write_string("temperature: "); write_string("c"); command_lcd(0b11000000); write_string("humidity: "); write_string(" %"); void settemp(){ command_lcd(0b00001111); char list2[19] = "Set Temperature:"; write_string(list2); command_lcd(0b11000000); int v[2]; v[1]= 100; write_enable = 1; new_input=0; for(int f = 0; f<2;f++){ while(new_input== 0){ new_input = 0; if(keyval!=10){ v[f] = keyval; write_enable = 0; while(keyval!=10){ if(v[1]!=100){ tempval = v[0]*10+ v[1]; else{ tempval = v[0]; _delay_ms(500); 9

void setmoist(){ char list[16] = "Set Moisture"; write_string(list); _delay_ms(1000); char list2[19] = "1=dry 2=moist"; write_string(list2); command_lcd(0b11000000); char list3[8] = "3=wet"; write_string(list3); write_enable = 2; while (!((keyval==1) (keyval==2) keyval==3)){ while(new_input== 0){ new_input = 0; moistset = keyval; write_enable = 0; while(keyval!=10){ if(moistset==1){ minmoist=20; char list4[6] = "DRY"; write_string(list4); if(moistset==2){ minmoist=100; char list4[9] = "MOIST"; write_string(list4); if(moistset==3){ minmoist=500; char list4[6] = "WET"; write_string(list4); _delay_ms(500); char button(int val){ switch(val){ case 0b00000000: keyval= 1; if((write_enable == 1) (write_enable==2) (write_enable==3)){ 10

writedata('1'); return '1'; case 0b00100000: keyval= 2; if( (write_enable == 1) (write_enable==2) (write_enable==3)){ writedata('2'); return '2'; case 0b00010000: keyval= 3; if((write_enable == 1) (write_enable==2) (write_enable==3)){ writedata('3'); return '3'; case 0b00110000: keyval= 4; if(write_enable == 1 (write_enable==3)){ writedata('4'); return '4'; case 0b00001000: keyval= 5; if(write_enable == 1 (write_enable==3)){ writedata('5'); return '5'; case 0b00101000: keyval= 6; if(write_enable == 1 (write_enable==3)){ writedata('6'); return '6'; case 0b00011000: keyval= 7; if(write_enable == 1 (write_enable==3)){ writedata('7'); return '7'; case 0b00111000: keyval= 8; if(write_enable == 1 (write_enable==3)){ writedata('8'); return '8'; case 0b00000100: keyval= 9; if(write_enable == 1 (write_enable==3)){ writedata('9'); return '9'; case 0b00100100: keyval= 0; if(write_enable == 1 (write_enable==3)){ writedata('0'); 11

return '0'; case 0b00010100: keyval= 10; return 'k'; case 0b00110100: if(write_enable==3){ readmoist_enable=1; return; case 0b00001100: return; case 0b00101100: return; case 0b00011100: if(write_enable==3){ settemp_enable=1; return; case 0b00111100: if(write_enable==3){ _delay_ms(50); setmoist_enable=1; return; default : return; void readmoist(){ _delay_ms(30); command_lcd(0b1000000); if(moistset == 1){ if(moistval<20){ unsigned char list[10] = "Vattna"; write_string(list); _delay_ms(1000); else{ unsigned char list[6] ="Bra"; write_string(list); _delay_ms(1000); if(moistset == 2){ if(moistval<100){ unsigned char list[10] = "Vattna"; write_string(list); _delay_ms(1000); 12

else{ unsigned char list[6] ="Bra"; write_string(list); _delay_ms(1000); if(moistset == 3){ if(moistval<500){ unsigned char list[10] = "Vattna"; write_string(list); _delay_ms(1000); else{ unsigned char list[6] ="Bra"; write_string(list); _delay_ms(1000); int main(void){ init(); settemp(); setmoist(); DHC_run(); _delay_ms(20); if(dhc_counter>38){ dhc_counter=0; DHC_translate(); write_string("temperature: "); write_string("c"); command_lcd(0b11000000); write_string("humidity: "); write_string(" %"); while(1){ startadc(); write_enable=3; if(setmoist_enable==1){ setmoist(); setmoist_enable=0; set_main_screen(); if(settemp_enable==1){ settemp(); 13

settemp_enable=0; set_main_screen(); if(readmoist_enable==1){ readmoist(); readmoist_enable=0; set_main_screen(); itoa(temperature, realtemp,10); command_lcd(0b00001100); command_lcd(0b10001100); write_string(realtemp); _delay_ms(200); command_lcd(0b11001001); itoa(humidity, realhum, 10); write_string(realhum); DHC_run(); if(dhc_counter>38){ dhc_counter=0; DHC_translate(); command_lcd(0b00001100); if((moistval<minmoist) (tempval>temperature)){ DDRD =_BV(PD7); PORTD =_BV(PD7); else{ DDRD &=~_BV(PD7); //ISR - Interrupt service routine ISR(ADC_vect){ int res = ADC; moistval=res; ADCSRA = 1<<ADSC; ISR(INT0_vect){ GIFR = _BV(INTF0); _delay_ms(30); new_input = 1; button(pina & 0b00111100); _delay_ms(30); ISR(INT1_vect){ if(tcnt1>70&&tcnt1<90){ dhc[dhc_counter]=0; TCNT1=0; dhc_counter++; 14

else if ((TCNT1>90) && (TCNT1 <140)){ TCNT1=0; dhc[dhc_counter]=1; dhc_counter++; GIFR = _BV(INTF1); 15