# Jordfuktighetssensor Intro to IoT William von Heland - wv222ag En jordfuktighetssensor som är uppkopplad genom Wi-Fi och som live sänder signaler om jordfuktigheten i en växt eller kruka. Tiden för att slutföra projektet är ungefär en arbetsdag såvida man har förståelse för hur mjukvaran och hårdvaran fungerar. För mig som nybörjare har det tagit långt mycket längre tid men när man väl förstår hur det fungerar borde man kunna slutföra detta projektet på några timmar. Jag valde att genomföra det här projektet då det kändes lagom i svårighetsgrad för en nybörjare och med den utrustningen jag hade. Jag köpte ett standardkit från Electro:kit och köpte efter det till en jordfuktighetssensor. Jag ville skapa ett projekt som ändå kunde bidra med någonting till min vardag för en rimlig summa pengar och i lagom svårighet. Nu kan jag ha en uppkopplad sensor som mäter fuktigheten i en växt på landet. Jag tror att projektet ger en insyn i hur det fungerar med såväl mjukvara som hårdvara och hur en sensor fungerar. ***Materiallista:*** -Jordfuktighetssensor kapacitiv Analog (electro:kit 118 kronor) -Usb kabel -Expansion board Pycom -Kopplingsdäck Pycom -Pycom LoPy4 -Tre-fyra kopplingstrådar Allt detta köptes på electro:kit och jag köpte ett kit för 995 kronor där allt detta ingick och mycket mer som jag inte använde. Sensorn ovan köpte jag separat från kitet för 100 kronor. USB kabeln användes för att ge min LoPy4 ström, egentligen hade jag velat ha en batterihållare och det kommer jag nog köpa in i efterhand. Sensorn användes för att faktiskt mäta fuktighetsgraden. Expansion boarden behövdes till min LoPy4 för att ge fler funktioner om man exempelvis hade haft en anten till LoRa. Kopplingsdäcket användes mellan LoPyn och sensorn, jag hade inte behövt använda det nu men om man hade velat involvera fler sensorer och häftigare grejer så är det nödvändigt att använda. Den avlastar helt enkelt LoPyn och skapar fler kopplingvägar. Kopplingstrådarna anslöt mellan komponenterna. LoPy4n är själva Pycom enheten som är uppkopplad till Wi-Fi och kommunicerar med den kod jag skriver i Atom. Jag valde att använda Atom som min IDE. Läraren rekommenderade denna och det kändes enkelt. Min kod skrevs i Atom och kommunicerades till min enhet genom Wi-Fi. Jag hade en Main-metod där jag skrev koden som hjälpte sensorn att fånga upp rätt värden. För att få detta att fungera installerade jag Pycom Firmware Updater på min dator, denna behövde uppdateras några gånger. Jag registrerade mig på Pybytes hemsida och registrerade där mitt lokala wifi och fick koder till såväl Wi-Fi anslutningen som Firmware uppdateraren. Kopplingen till Pybytes skedde automatiskt efter att ha angett koden jag fick för uppdateraren. **Såhär såg min koppling ut mellan hårdvaran:** ![](https://i.imgur.com/1xsge9D.jpg) **Sensorn:** Gul-P15 Röd-P9 Svart-Minus på kopplingsdäcket. **Kopplingsdäcket:** Svart-Ground Röd-3V3 Den sensorn jag har använt, en "Capacitive Soil Moisture Sensor SKU:SEN0193",har volt mellan 3,3 och 5,5. Den är perfekt för lågvolts MCUs. Både 3.3V och 5V fungerar att använda. **Specifikationer för sensorn:** -Operating Voltage: 3.3 ~ 5.5 VDC -Output Voltage: 0 ~ 3.0VDC -Operating Current: 5mA -Interface: PH2.0-3P -Dimensions: 3.86 x 0.905 inches (L x W) -Weight: 15g Som plattform valde jag att använda Pybytes 2.0. Det är en gratis cloud-baserad platform som är tillgänglig för alla Pycom enheter. För mig har det fungerat effektivt och jag kan rekommendera den men samtidigt har jag inte så många att jämföra med. Jag tycker Pybytes hade bra guider och instruktioner och gjorde det enkelt att förstå. I framtiden kommer jag även att använda Ubidots.com då jag därigenom kan skicka email-notifikationer när en växt behöver vattnas. Denna funktion har inte Pybytes. ***Koden i min main metod*:** from time import sleep #from network import LoRa #import socket #import binascii from pycom import heartbeat,rgbled #from pybytes import Pybytes from machine import Pin,ADC #from pysense import Pysense #684 dry, 635 water p_out = Pin('P9', mode = Pin.OUT)#, pull = Pin.PULL_DOWN) mosturePin = Pin('P16', mode=Pin.IN) # set up pin mode to input adc = ADC(bits=10) # create an ADC object bits=10 means range 0-1024 the lower value the less light detected apin = adc.channel(attn=ADC.ATTN_11DB, pin=mosturePin) # create an analog pin on P16; attn=ADC.ATTN_11DB measures voltage from 0.1 to 3.3v #adc = ADC() #apin = adc.channel(pin='P16',attn=ADC.ATTN_11DB) #global py #py = Pysense() print('starting up...') #py.setup_sleep(30) #USERNAME = "WILLIAMVONHELAND@GMAIL.COM" #DEVICE_ID = "67fc94de-1777-4cdb-9de2-5de3c4467583" #SERVER = "mqtt.pybytes.pycom.io" #pybytes = Pybytes(USERNAME, DEVICE_ID, SERVER) #pybytes.connect_wifi() def moist_sensor(): p_out.value(1) # Turns on the sensor' sleep(3) volts = apin.value() # Measures value p_out.value(0) # Turns of the sensor return volts # returns values def getMoisture(): p_out.value(1) # Turns on the sensor' sleep(1) val = apin() # read an analog value p_out.value(0) ### Transfer to % val = int((1023-val)/10.23) print("Moisture", val) sleep(1) # wait 1 sec return val while True: #volts = int(moist_sensor()) volts = getMoisture() pybytes.send_signal(1, volts) #pybytes.send_virtual_pin_value(False, 1, volts) print(volts) sleep(10) #py.go_to_sleep() Jag använde enbart WiFi som wireless protocol då jag hade problem att ansluta till LoRa. Då min enhet är ansluten sparas och skickas data kontinuerligt, var 5e sekund. Som transport protokol använde jag MQTT. **Min dashboard i Pybytes:** ![](https://i.imgur.com/gpcVEKm.png) **Signal 1, jordfuktighet:** ![](https://i.imgur.com/tXaHDel.png) Detta var ett kul projekt som jag kommer fortsätta jobba vidare på och utveckla. Jag hade dålig koll inför projektets start men har lärt mig succesivt och önskar att jag hade spenderat ännu mer tid på att lära mig grunderna. I framtiden kommer jag involvera fler sensorer, bland annat en temperaturmätare. Jag kommer också genom att registrera mig på Ubidots.com involvera email-notiser när min växt behöver vattnas.