Digitālais hidrometrs Floaty

Floaty hidrometrsNomainot alus brūvēšanas programmu no dizainiski briesmīgā Beersmith uz moderno Brewfather un izpētot tā iespējas, uzzināju, ka eksistē digitālie hidrometri. Ir gan gatavi produkti, gan arī diezgan elementārs DIY variants.  Tā nu situ augšā AliExpress un veicu pasūtījumu ar detaļām.  Papildus tam bija jāātrod, kurš Latvijā man ar 3D printeri izdrukās detaļu, kur visus štrumus savietot.

Nepieciešamais:

Kopā likšanas process diezgan elementārs (Youtubē piemērs). Ar lodāmuru nokasa/novelk nost lieko diodi no žirosensora. Pielodē sensoru pie kontroliera. Pielodē pinu vai vadu pie 15. GPIO (pieskaroties aktivizē Bluetooth uz 5min). Pieslēdz sensoru pie datora un ielādē Floaty programmatūru. Iesprauž vadus ar JST konnektoru kontrolierī, otrus galus vadiem nomizo un satin 3D detaļā vietās, kur būs baterijas poli. Manā gadījumā sarkanais plusam, melnais mīnusam. Visu ieriktē 3D detāļā, kuru tālāk ieslidina PET pudeles formā. Ielādē Android telefonā Floaty app, piestartē kontrolierim Bluetooth pieskaroties GPIO 15 pinam un veic pirmo konfigurāciju – Wifi info, datu sūtīšanas biežums, Webhook ID no Brewfather app, ja nepieciešama datu nosūtīšana uz Brewfather.

Jāņem verā, ka dati uz mākoni tiek sūtīti tikai brīdī, kad PET forma nav horizontālā vai apgrieztā stāvoklī ar vāciņu uz leju. Pārējā laikā iekārtā aiziet “deep sleep” rēžīmā un taupa bateriju. Piespraužot mikrokontrolieri pie USB, tiek uzsākta baterijas lādēšana.

Pirms iekārtu var sākt lietot reālā raudzēšanas procesā, to vēl nepieciešams nokalibrēt. Blīvumu kalibrēju izmantojot spaini, ūdeni, kādus 4kg cukura un parasto hidrometru. Pielej spaini ar istabas temperatūras ūdeni, nomēra blīvumu, ievada datus Floaty app kalibrēšanas formā. Pieber pus kilo cukuru, nomēra blīvumu, ievada Floaty.  Atkārto līdz beidzas cukurs. Vēlams gan sasniegt maksimālo blīvumu, kādu varētu sasniegt topošā misa. Temperatūru nokalibrē vienkārši nomērot ūdens temperatūru ar parasto termometru un ievadot Floaty.

Pēc tam atliek uzvārīt alus misu, saliet spainī, iemest digitālo hidrometru un piestartēt jaunu fermentāciju Floaty lietotnē. Pēc 15min dati būs redzami gan Floaty lietotnē, gan Brewfather.

Pilnais apraksts ar programmatūras uzstādīšanu, konfigurēšanu un citiem sīkumiem atrodams šeit – https://www.diyhomebrewers.com

P.S. Tā kā šis ir DIY projekts, brīnos par ierīces stabilitāti un labi nostrādāto Android lietotni.

CO2 mērītājs

Slēguma shēma

Jau sen bija vēlme nomērīt ikdienas CO2 līmeni dzīvoklī. It īpaši tagad, kad 2 pieaugušie strādājam no mājām. Maksāt par Aranet4 baigi nebija vēlmes, bet ņemšanās ap elektroniku man vienmēr bijis labs brīvā laika pavadīšanas veids. Ņemot piemēru no šī raksta, uzbūvēju pats savu mērītāju.

Par pamatu ņēmu tajā  pašā rakstā minētās izejvielas – populāro un salīdzinoši lēto MH-Z19B sensoru, Arduino Pro Micro (ATmega32U4), OLED ekrānu, plastmasas korpusu, bateriju turētāju, slēdzi, divus 5.1k rezistorus un 47nF kondensatoru. Kopējās izmaksas ap 30 EUR.

Apvienojot savas “profesionālās” lodēšanas prasmes un LEGO likšanas tehniku galu galā sanāca ne pārāk estētisks, bet lietošanā ērts CO2 mērītājs.

Secinājumi un novērojumi pēc 2 nedēļu ilgas ikdienas lietošanas:

  • Arduino varēju ievietot korpusā tā, lai no ārpuses varētu pieslēgties Micro USB ligdzai, ja nu rodas vēlme turēt visu laiku ieslēgtu, vai arī uzlabot programmas kodu.
  • Lai sensors nokalibrētos, bija nepieciešams savienot Hd un GND pinus uz 10s un atstāt sensoru uz diennakti ieslēgtu.
  • Ja baterijas gandrīz izlādējušās, tad senors rādīs 400PPM visu laiku, jo pietrūkst jaudas. Sākumā domāju, ka jākalibrē pa jaunam.
  • 3 cilvēkiem brīvdienu vakaros izdevās CO2 līmenī dzīvojamā istabā uzcelt pat līdz 1400ppm, kā rezultātā izdomāju veidu, kā uzlabot gaisa kvalitāti – sakārtot ventilāciju. Noslēgtu ventilācijas difuzoru aizvietot ar vārstu, kas pie ieslēgta tvaika nosūcēja nobloķē tvaika ieplūšanu atpakaļ telpā. Kad tvaika nosūcēju izslēdz, tad vārsts atveras un nodrošina dabisku gaisa nosūci no telpas. Svaigā gaisa pieplūdi nodrošina aiz radiatoriem montēts āra gaisa pieplūdes risinājums.
  • Pēc ventilācijas uzlabošanas CO2 līmenis vairs neuzkāpj augstāk par 1000ppm.

Arduino programmas kods ņemts no sākumā minētā bloga. Iztulkoju tik pa savam.

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

#define pwmPin 7
int preheatSec = 120;
int prevVal = LOW;
long th, tl, h, l, ppm = 0;

void PWM_ISR() {
  long tt = millis();
  int val = digitalRead(pwmPin);
  
  if (val == HIGH) {    
    if (val != prevVal) {
      h = tt;
      tl = h - l;
      prevVal = val;
    }
  }  else {    
    if (val != prevVal) {
      l = tt;
      th = l - h;
      prevVal = val;
      ppm = 2000 * (th - 2) / (th + tl - 4);      
    }
  }
}

void setup()   {     
  Serial.begin(115200);
  pinMode(pwmPin, INPUT);
  attachInterrupt(digitalPinToInterrupt(pwmPin), PWM_ISR, CHANGE);  
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3C (for the 128x64)
  display.setTextColor(WHITE);
}

void displayPreheating(int secLeft) {
  display.setTextSize(2);    
  display.println("IESILDOS..");
  display.setTextSize(1);    
  display.println();    
  display.setTextSize(5);          
  display.print(" ");
  display.print(secLeft);  
  display.display();   
}

void displayPPM(long ppm) {
  display.setTextSize(2);    
  display.println("CO2    PPM");    
  display.setTextSize(1);    
  display.println();    
  display.setTextSize(4);    
  if (ppm < 1000) {
    display.print(" ");
  }
  display.print(ppm);  
  display.println();
  if (ppm < 1000) {
    display.setTextSize(1);    
    display.println("SUPER LABS GAISS");
  }
  if ((ppm > 1000) && (ppm < 1400)) {
    display.setTextSize(1);    
    display.println("PA VIDAM");
  }
  if (ppm > 1400) {
    display.setTextSize(1);    
    display.println("ATVER LOGU!");
  }
  display.display();
  Serial.println(ppm);
}

void loop() {    
    display.clearDisplay(); 
    display.setCursor(0,0); 
    if (preheatSec > 0) {
      displayPreheating(preheatSec);       
      preheatSec--;
    }
    else {      
      displayPPM(ppm);
    }
    delay(1000);  
}

Paštaisīts digitālais fotorāmis, versija 2.0

Iepriekš jau biju aprakstījis, kā uzmeistaroju digitālo fotorāmi. Tā kā pašam nepatika izskats, kā arī gļuki un lēndarbība, kas saistīta ar RPi Zero W veiktspēju, tapa digitālā fotorāmja otrā versija.

IKEA papīra rāmis tika aizvietots ar paštaisītu koka konstrukciju. Koks nobeicēts ar lineļļu. RPi Zero W aizvietoju ar jaudīgāku single-board datoriņu – RPi Pi 2 Model B. Laika taupības nolūkos izmantoju chilipie-kiosk operētājsistēmu, kas jau saknē nodrošina visu man nepieciešamo.

OpenWeatherMap funkciju aizvācu, jo informācija bija pārāk neprecīza.

Paštaisīts digitālais fotorāmis

Beidzot pabeidzu veidot paštaisīto fotorāmi. Izejvielas:

  • Raspberry Pi Zero W
  • Pirms 4 gadiem no portatīvā datora  izravēts 14” LCD ekrāns
  • Pirms 4 gadiem no AliExpress sūtīts LCD Controller Board
  • LCD strāvas barošanas bloks
  • Strāvas Step Down modulis, lai atdalītu un nobarotu Raspberry ar strāvu, kas domāta LCD
  • Aukstas gaismas LED virtene
  • Slēdzis LCD un LED virtenes izslēgšanai
  • IKEA fotorāmis
  • Montāžas līme un stiprinājumi

Rāmja aizmugurē neiespringu uz skaistu izkārtojumu un tīrību, jo, pieliekot pie sienas, tas nav redzams.

Uz Raspberry Pi uzstādīts Raspbian Lite OS un iestatīts kioska režīms – pie katras piestartēšanas tiek atvērts Chromium pārlūks ar iepriekš iestatītu mājaslapu. Lokālajā tīklā uz citas iekārtas darbojas Openmediavault, kas papildus pamatdarbam hostē arī mājaslapu fotorāmim.

Mājaslapa ir vienkāršs uz Uikit front-end framework veidots bilžu slaidšovs.  Papildus tiek ielādēts: Google kalendārs izmantojot FullCalendar, informācija par laika apstākļiem no OpenWeatherMap un foto uzņemšanas datums ar PHP exif_read_data funkciju. Visa tekstuālā papildus informācija tiek pārlādēta reizi stundā ar Javascript setInterval. Pats Raspberry ar Crontab tiek pārstartēts katru nakti, lai izvairītos no atmiņas problēmām Chromium cache dēļ.

Tā kā mājaslapa stāv uz lokālā NAS, tad bilžu papildināšana ir tik vienkārša, kā Adobe Lightroom programmā uzspiest pogu Export to Fotorāmis.

Pašlaik mazjaudīgais Zero bez problēmām sagremo slaidšovu ar ~300 fotoattēliem.