VIDI Project X #58:
VIDI X i APDS-9960 senzor – kiselo ili lužnato?

Sigurno ste na satovima kemije ili prirode uz pomoć lakmus-papira određivali je li nešto kiselo ili lužnato. U ovoj radionici VIDI X mikroračunalo će uz pomoć APDS-9960 senzora to učiniti za vas

Kod ove radionice pronađite na linku: https://github.com/VidiLAB-com/Vidi-X/tree/master/APDS-9960_color_senzor_kiselosti

 

 

Lakmus papir se koristi kao kiselo-bazni indikator koji se u kiselome mediju oboji crveno, a u lužnatome tamno plavo.

U ovoj radionici senzor će očitavati boju te će na osnovu pročitane vrijednosti javiti radi li se o kiselome ili lužnatom mediju.

 

Za ovu radionicu biti će nam potrebno:

VIDI X mikroračunalo – Više informacija o Vidi X mikroračunalu pronađite na linku https://vidi-x.org/

 

 

APDS-9960 senzor – senzor pokreta i boja koji koristi I2C komunikaciju za spajanje na VIDI X

https://e-radionica.com/hr/senzor-gesti-blizine-i-rgb-boja-apds-9960-breakout-made-by-e-radionica.html

 

Bijela LED dioda – kao izvor svijetlosti

https://e-radionica.com/hr/paket-5mm-led-dioda-13-komada.html

 

330 ohm otpornik – za limitiranje napona koji dolazi do LED diode

https://e-radionica.com/hr/25x-330ohm-otpornik-za-ledice.html

 

Kućište – u koje ćemo smjestiti senzor i LED diodu kako bi eliminirali vanjski utjecaj svijetlosti na senzor. Napravili smo ga od papirnate kutijice za kapi za oči te oblijepili izolirbandom kako bi dobili na njegovoj čvrstini

 

Indikator-papir – lakmus-papir je jednostavnije koristiti, no kako ga nismo uspjeli nabaviti, koristili smo univerzalni indikator-papir za pH vrijednosti od 0 do 14

 

Nešto spojnih žica – koristili smo žensko-ženske kabliće jer i na VIDI X-u i na senzoru imamo muške pinove

https://e-radionica.com/hr/set-kablica-zenko-zenski.html

 

 

 

 

APDS-9960 je mali senzor koji mjeri četiri stvari odjednom. Sposoban je prepoznati pokrete koje napravite ispred njega, a to su pokret prema gore, dolje, lijevo i desno, a može prepoznati i blizinu objekta, pa tako mjeri još dva pokreta, prema senzoru i od njega. Pokret se mjeri uz pomoć promijene u boji, no u ovoj radionici nećemo se baviti pokretom nego njegovim RGB senzorom boje i ambijentalnim senzorom osvjetljenja.

Senzor će putem I2C komunikacije očitati vrijednosti svake od boja iz RGB spektra kao i razinu ambijentalnog osvjetljenja te će vratiti 16 bitnu vrijednost svake od njih.

 

 

 

Benefit tako velike rezolucije je taj što će senzor raditi i kada se nalazi u uvjetima smanjenog osvjetljenja.

Naš cilj je senzor zaštititi od vanjskog utjecaja svijetlosti jer se zrake svjetlosti i razne refleksije odbijaju od raznih predmeta. Zatim je potrebno osvijetliti predmet tj. u našem slučaju papir za očitavanje pH vrijednosti kako bi senzor što točnije očitao boju, jer u nedostatku svijetlosti sve boje budu crne.

 

 

Shema spajanja

Senzor spajamo, kao i u ostalim radionicama koje su koristile I2C komunikaciju, na pinove GPIO32 i GPIO33 koje na VIDI X-u koristimo kao tipke A i B, pa je stoga potrebno prebaciti mikroprekidače oznaka BTN_A i BTN_B u poziciju USE EXP: Bijelu LED diodu spojili smo direktno na izvor napajanja od tri volte tj. na pinove označene oznakom 3V3. Između LED i GND pina spojili smo otpornik od 330 ohma. Svejedno je spojimo li otpornik na anodu ili katodu LED diode, dobiti ćemo isti efekt, tj. ograničiti ćemo jakost struje koja dolazi do diode.

 

Shema spajanja APDS 9960 senzora. Bijelu LE diodu spojili smo da svijetli trajno

 

Nikako ne smijemo zaboraviti postaviti switcheve u poziciju za korištenje expansion slota, kao na slici lijevo

 

Kada je senzor spojen potrebno ga je zaštititi od utjecaja vanjske svjetlosti.

Mi smo senzor zašarafili na kut VIDI X-a, no vaše rješenje može se razlikovati od ovoga. Na ovaj način nam je bilo lakše pokriti senzor kutijicom napravljenom od kutije za kapi za oči koju smo izolirbandom fiksirali za VIDI X. Na jednoj stranici kućišta nalazi se maleni otvor u koji možemo ugurati indikator-papir.

 

Programski kod:

Za I2C komunikaciju koristiti ćemo biblioteku #include “Wire.h”.

Sada definiramo pinove na koje je spojen senzor, narednim linijama koda:

#define I2C_SDA 32
#define I2C_SCL 33

 

Unutar setup petlje ne smijemo zaboraviti definirati pri kojoj brzini komunikacije koristimo koje pinove linijom koda:

  Wire.begin(I2C_SDA, I2C_SCL, 100000);

 

Putem uvjeta gledamo može li senzor očitati iznose svjetline prostora, te iznose crvene, zelene i plave boje:

  if (  !apds.readAmbientLight(kolcinaSvjetlosti) ||
        !apds.readRedLight(crvenaBoja) ||
        !apds.readGreenLight(zelenaBoja) ||
        !apds.readBlueLight(plavaBoja) )

 

Očitane iznose pospremili smo u varijable navedene unutar uvjeta. Radi lakšeg prikaza dobivene boje, a kako se radi o 16-bitnim vrijednostima, pretvorit ćemo ih u 8-Bitne vrijednosti interpolacijom. Kao maksimum uzeti ćemo varijablu kolcinaSvjetlosti te boje interpolirati funkcijom map ovim linijama koda:

    int c = map(crvenaBoja, 0, kolcinaSvjetlosti, 0, 255);
    int z = map(zelenaBoja, 0, kolcinaSvjetlosti, 0, 255);
    int p = map(plavaBoja, 0, kolcinaSvjetlosti, 0, 255);

 

Sada možemo pozadinu ekrana obojati u dobivene interpolirane vrijednosti linijom koda:

    TFT.fillScreen(TFT.color565(c, z, p));

 

Kada imamo senzor u kućištu s osvjetljenjem, očitat ćemo nekoliko indikator-papira (tj. lakmus-papira) kako bi dobili referentne vrijednosti senzora za kiselu, odnosno lužnatu tekućinu.

Vrijednosti boja ispisali smo na serijsku konzolu.

Tako ispisanim vrijednostima utvrdili smo da najveću razliku kada stavimo papir u kućište te ga izvadimo dobivamo u zelenoj boji. Stoga smo postavili uvjet ukoliko je zelena boja veća od 25, utoliko pročitaj crvenu boju, a ukoliko je manja ili jednaka 25, utoliko javi da je kućište prazno.

 

 

Nastavljamo sa testiranjem indikator-papira. Jedan indikator-papir umočili smo u otopinu vode i sode bikarbone kako bismo dobili vrijednosti kod lužine, a drugi u ocat kako bismo dobili vrijednosti kod kiseline. Indikator-papir je poplavio u doticaju s otopinom sode bikarbone dok je u doticaju s octom postao zelenkasto žuti.

Očitavanjem vrijednosti boja na serijskoj konzoli s ta dva papira, utvrdili smo najveću razliku u očitavanju crvene boje pa smo programski provjeravali vrijednost crvene boje koja nam kaže da je otopina kisela ako vrijednost prelazi broj 30. U suprotnom javlja da je otopina lužnata.

 

 

Dokumentaciju senzora proučite na linku: https://docs.broadcom.com/doc/AV02-4191EN

 

Kod izgleda ovako:

    if ( zelenaBoja > 25 ) {
      if ( crvenaBoja > 30 ) { //ako JE
        TFT.setTextColor(ILI9341_RED); // postavljamo boju teksta
        TFT.setCursor(90, 20);
        TFT.print("KISELO");
      } else { //ako NIJE
        TFT.setTextColor(ILI9341_YELLOW); // postavljamo boju teksta
        TFT.setCursor(80, 20);
        TFT.print("LUZNATO");
      }
    } else { //ako NIJE
      TFT.setTextColor(ILI9341_WHITE); // postavljamo boju teksta
      TFT.setCursor(90, 20);
      TFT.print("PRAZNO");
    }

 

Zelenu i crvenu boju uzeli smo kao one koje uspoređujemo jer nam dokumentacija senzora govori kako su baš te dvije boje osjetljivije spram plave, pa je vjerojatnije da ćemo koristeći ih dobiti točnije rezultate.

 

Lijevo imamo ocat i indikator-papir koji pokazuje kiselo, a desno otopinu sode bikarbone koja je lužnata kako pokazuje indikator-papir

 

Kada biste napravili kompaktnije kućište od ovoga našeg kartonskog, mogli biste uz pomoć referentnih boja indikator-papira pročitati točne pH vrijednosti otopina te ih programski definirati, a onda interpolacijom mjeriti i pH vrijednosti između tih referentnih koje smo dobili mjerenjem.

Pogledajte video, kako radi detektor:

 

PRIJTELJI PROJEKTA

bez kojih sve ovo ne bi bilo moguće.

SVA PRAVA PRIDRŽANA - VIDI TO 2020.

Niti jedan dio ovog web site-a ne smije se u bilo kojem obliku ili radi bilo koje namjene reproducirati bez prethodne pismene suglasnosti izdavača, Svi tekstovi objavljeni na www.vidi-x.com pripremljeni su s osobitom pažnjom i kontrolirani na više razina. Redakcija www.vidi-x.com međutim, ni u kojem slučaju ne može odgovarati za moguće štete bilo kakve vrste nastale na osnovu savjeta, tekstova, slika ili drugog redakcijskog ili oglašivačkog materijala objavljenog na www.vidi-x.com ili na drugi način datog od strane zaposlenika ili suradnika izdavača.