Åpen-kilde (open source)

Åpen-kilde har blitt stadig mer populært de siste årene, og fordelene ved å bruke åpen kildekode programvare og maskinvare er mange.

En av de viktigste fordelene med åpen kildekode er at det ofte er gratis eller betydelig rimeligere enn proprietær programvare eller maskinvare. Dette betyr at enkeltpersoner og organisasjoner kan spare penger på lisensavgifter, noe som gjør det tilgjengelig for et bredere spekter av mennesker. I tillegg er programvare og maskinvare med åpen kildekode ofte mer fleksibel og tilpassbar enn proprietære alternativer, noe som kan være viktig for brukere som har spesifikke behov eller krav.

En annen fordel med åpen kildekode er den samarbeidende karakteren av utviklingen. Fordi kildekoden eller designet er tilgjengelig for alle, kan utviklere fra hele verden bidra til forbedring og utvikling. Dette betyr at åpen kildekode-prosjekter kan dra nytte av et bredere spekter av ekspertise og kan utvikle seg raskere enn proprietær programvare eller maskinvare.

Åpen kildekode fremmer også åpenhet og tillit. Fordi alle kan se og endre kildekoden eller designen, kan brukere være trygge på at programvaren eller maskinvaren gjør det den hevder å gjøre og at det ikke er noen skjulte funksjoner eller bakdører. Dette kan være spesielt viktig for organisasjoner som håndterer sensitive data eller stoler på integriteten til programvaren eller maskinvaren deres.

Spesielt åpen kildekode-maskinvare har den ekstra fordelen av å være mer miljøvennlig. Fordi utformingen av maskinvaren er åpen og tilgjengelig, kan brukere reparere eller oppgradere enhetene sine selv i stedet for å måtte kaste dem når de går i stykker eller blir utdaterte. Dette kan redusere e-avfall betydelig og fremme bærekraft.

Avslutningsvis tilbyr åpen kildekode programvare og maskinvare en rekke fordeler, inkludert kostnadsbesparelser, fleksibilitet, samarbeid, åpenhet og bærekraft. Som et resultat blir åpen kildekode stadig mer populær og forventes å fortsette å vokse i de kommende årene.

HC-SR04 Ultralydsensor

Tilkoblingen av mikrokontrolleren (i dette tilfellet D1 mini) og HC-SR04 ultralydsensor.

For å generere ultralyd må vi sette utløserpinnen (trig) til en høy tilstand i 10 µs. Den vil sende ut en 8-syklus sonisk burst som vil bevege seg med lydhastigheten, og den vil bli mottatt i echo (echo) pinne. Ekko pinnen sender ut tiden i mikrosekunder.

For eksempel, hvis objektet er 20 cm unna sensoren, og lydhastigheten er 340 m/s eller 0.034 cm/µs, må lydbølgen bevege seg rundt 588 mikrosekunder. Men det mann får fra Echo-pinnen vil være det dobbelte av det tallet, fordi lydbølgen må gå fremover og sprette bakover. Så for å få avstanden i cm må vi multiplisere den mottatte reisetidsverdien fra ekko-pinnen med 0,034 og dele den på 2.

For programmeringskoden må vi først definere Trigger-pinnen og Echo-pinnen som er koblet til mikrokontrolleren. I dette prosjektet er Echo pinnen koblet til 4 og Trig pinnen til 5. Definer deretter variabler for avstanden (int) og varighet (lang).

Tilkobling av HC-SR04 til D1 mini

Åpne Arduino IDE appen og skriv ned koden din, eller kopier den nedenfor, Velg ditt eget Arduino-brett (i dette tilfellet Wemos D1 mini), ved å velge Verktøy > Brett > ESP8266 boards/Lolin (Wemos) D1 R2&Mini. Velg riktig COM-porten din (vanligvis vises det bare én eksisterende port), Verktøy > Port > COM.. (Hvis det er mer enn én porter, prøv den én etter én). Last opp koden ved Sketch > Last opp For å vise måledata kan du bruke Serial Monitor ved å trykke Ctrl + Shift + M (sørg for at baudratehastigheten er 115200)

// ---------------------------------------------------------------- //
// Ultralydsensor HC-SR04
// ---------------------------------------------------------------- //

#define echoPin 4
#define trigPin 5
long varighet;
int avstand;

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  Serial.begin(115200);
  Serial.println("Ultralydsensor HC-SR04 test");
}
void loop() {
  // Sensoren utløses av en HØY puls på 10 eller flere mikrosekunder.
  // Gi en kort LAV puls på forhånd for å sikre en ren HØY puls
  digitalWrite(trigPin, LOW);
  delayMicroseconds(5);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  varighet = pulseIn(echoPin, HIGH);
  avstand = varighet * 0.034 / 2;
  Serial.print("avstand: ");
  Serial.print(avstand);
  Serial.println(" cm");
}

For MicroPython-kode bruker vi micropython-hcsr04-biblioteket av rsc1975 på github. Last ned biblioteket og lagrer det på mikrokontrolleren. Lag deretter en ny fil og skriv følgende kode.

from hcsr04 import HCSR04

sensor = HCSR04(trigger_pin=5, echo_pin=4)
distance = sensor.distance_cm()
print('Avstand:', distance, 'cm')

MQ-serien gassdeteksjon

I dette eksemplet vil vi lese av sensorens analoge utgangsspenning, og når røyken når et visst nivå vil den røde LED-en lyse. Når utgangsspenningen er under dette nivået, vil en grønn LED være på.

Dette eksemplet skal fungere for alle sensorer i MQ-serien.

Motstanden til sensoren er avhengig av type gass. Disse gassensorene har et innebygd potensiometer som tillater justering av sensorens følsomhet i henhold til nødvendig nøyaktighet.

Hvordan virker det?

Spenningen som sensoren sender ut endres i henhold til røyk-/gassnivået som finnes i atmosfæren. Sensoren gir ut en spenning som er proporsjonal med konsentrasjonen av røyk/gass.

Med andre ord er forholdet mellom spenning og gasskonsentrasjon følgende:

  • Jo høyere gasskonsentrasjon, jo større utgangsspenning
  • Jo lavere gasskonsentrasjon, jo lavere utgangsspenning

Utgangen kan være et analogt signal (A0) som kan leses med en analog inngang på Arduino, ESP eller en hvilken som helst programmerbar mikrokontroller, eller en digital utgang (D0) som er enten høy eller lav avhengig av tilstedeværelsen av gass.

Pin ledninger

  • Alle MQ gasssensorer har 4 pinner:
  • A0: Analog utgang
  • D0: Digitale pinner
  • GND
  • VCC: 5V

Se gjerne på koblingsskjemaet under. Etter at du har koblet til alle komponentene riktig, er det på tide å laste opp den nødvendige koden.

Etter å ha satt opp komponentene, flash denne koden inn i mikrokontrolleren. Juster gjerne verdien av «treskelVerdi» med en annen terskelverdi.

// https://www.fibel.no

int rodLed = 2;
int gronnLed = 1;
int sensorA0 = A0;
// Terskelverdi
int treskelVerdi = 400;

void setup() {
  pinMode(rodLed, OUTPUT);
  pinMode(gronnLed, OUTPUT);
  pinMode(sensorA0, INPUT);
  Serial.begin(115200);
}

void loop() {
  int sensorVerdig = analogRead(sensorA0);

  Serial.print("Pin A0: ");
  Serial.println(sensorVerdig);
  // Sjekker verdien om har nådd terskelverdien
  if (sensorVerdig > treskelVerdi) {
    digitalWrite(rodLed, HIGH);
    digitalWrite(gronnLed, LOW);
  } else {
    digitalWrite(rodLed, LOW);
    digitalWrite(gronnLed, HIGH);
  }
  delay(100);
}

Og følgende er den samme koden skrevet i micropython. Last opp koden til mikrokontrolleren og kjør den. Hvis du er fornøyd med resultatene, endre navn på filen til main.py slik at den kjører automatisk ved oppstart.

from machine import Pin, ADC
from time import sleep

sensorA0 = ADC(Pin(A0))
rod_led = Pin(2, Pin.OUT)
gronn_led = Pin(1, Pin.OUT)
treskelVerdi = 400

while True:
  sensor_verdig = sensorA0.read()
  print("Pin A0:", sensor_value)
  if (sensor_verdig > treskelVerdi):
      rod_led.value(0)
      gronn_led.value(1)
  else:
      rod_led.value(1)
      gronn_led.value(0)
  sleep(0.1)