27 Raspberry Pi liikumisandur ja ultraheliandur

Tänases tunnis tutvume kahe anduriga: liikumisanduriga ja ultrahelianduriga. PIR ehk inglise keeles passive infrared sensor on elektrooniline andur, mis mõõdab ifrapuna valgust, mis tuleb selle lähedastest objektidest. Liikmuisandureid kasutatakse tihti turvasüsteemides või liikumise peale aktiveeruvate tulede jaoks. Ultraheliandur on üks lihtsamaid andureid kauguse mõõtmiseks. Ultraheliandurid saadavad välja kõrge sagedusega helisignaali, mis ei ole inimkõrvale kuuldav ning seejärel ootab, et heli tagasi jõuaks. Kuna heli liikumiskiirus toatemperatuuril õhus on ligikaudu 343 m/s siis teame vastavalt sellele, kui kaua läheb aega ultrahelil andurisse tagasi jõudmiseks kui kaugel vastav objekt asub. Ultraheliandureid kasutatakse tihitpeale robootikas ning näiteks autodes, et aidata juhti parkimisel.

1. Liikmisandur

Liikumisanduri peal on katteks Fresneli lääts. Liikumisandurilt tasub enne selle ühendamist lääts eemaldada, et saaksime aru millised nõelad mille jaoks kasutusel on. Kui eemaldame katte siis näeme kolme kirja: VCC, OUT ja GND.

Ühendame liikumisanduri Raspberry Pi-ga nii, et ühendame VCC nõela Raspberry Pi peal olevasse 5V nõela. GND nõela ühendame ükskõik millisesse Raspberry Pi maandusnõela ning OUT nõela ühendame ükskõik millisesse GPIO nõela. Kui sul ei ole juhet, mis oleks mõlemalt poolt emase otsaga siis kasuta makettplaati nö vahelülina. Alloleval skeemil on märgitud ära 5V, Ground ehk maandus ja GPIO numbritega.

https://www.etechnophiles.com/raspberry-pi-4-gpio-pinout-specifications-and-schematic/

Kui andur on Raspberry Pi-ga ühendatud siis tuleb meil see programmeerida. Esmalt programmeerime Raspberry Pi nii, et ta annaks meile märku välja trükkimisega, et liikumist on nähtud. Raspberry Pi-l on liikumisanduri jaoks eraldi teek nimega gpiozero, kust meil tuleb programmi laadida MotionSensori moodul.

Kui see on tehtud siis vaata kontrolli üle millise GPIO nõelaga (millise numbriga) sa liikumisanduri ülendasid. Seejärel saame kasutada koodirida, kus loome uue objekti liikumisanduri jaoks näiteks, kui liikumisandur on ühendatud neljandasse GPIO nõela oleks selleks: liikumisAndur = MotionSensor(4).

Seejärel saame liikumisandurile anda käsu, et ta ootaks kuni liikumist on nähtud käsuga: liikumisAndur.wait_for_motion(). Sarnaselt sellele saame liikumisandurilt küsida ka, et ta ootaks kuni liikumist enam ei ole. Seda saab saavutada käsuga: liikumisAndur.wait_for_no_motion(). Nende teadmistega saame luua sellise programmi, mis trükib välja, kui liikumisandur on liikumist näinud.

Nüüd proovime luua programmi, mis oleks rohkem nagu turvakaamera ehk ta töötaks pidevalt, ööpäevaringselt. Mõtle, kuidas saaksid täiendada oma programmi nii, et ta töötaks lõputult? Vihje: tuleks kasutada lõputut tsüklit.

2. Ultraheliandur

Järgnevalt kasetame Raspberry Pi ultraheliandurit. Selle jaoks ühenda esmalt lahti liikumisanduri ning valmistume ette ultrahelianduri. Esmalt tutvume anduri endaga. Andur meenutab näiteks roboti silmi ning selle peal on kaks sisuliselt kõlarit, mis ultraheli edastab ning vastuvõtja. Lisaks sellele on anduril loomulikult ka neli nõela, milleks on: VCC ehk 5V toiteallika nõel, Trig ehk Trigger Pulse Input, mis vastutab selle eest, et saada info millal saata välja ultraheli laine, Echo ehk Echo Pulse Output, mis vastutab andurist saadud info Raspberry Pi-le edastamise eest ning lõpuks GND ehk maandus.

Järgnevalt proovime Raspberry Pi ja ultrahelianduri omavahel ühendada, selle jaoks eemlda Raspberry Pi esmalt vooluvõrgust ning alles siis proovi seda ühendada. Ühendamisel läheb meil tarvis makettplaati, mitmeid juhtmeid ning ühte 1kΩ ja ühte 2kΩ takistit. 1kΩ takisti on joonisel kujutatud vertikaalses asendis, ning sellel on punane must ja pruun triip. 2kΩ takisti on kujutatud horisontaalselt ning sellel on punane, must ja punane triip.

Ühendame Raspberry Pi ultrahelianduriga järgmisel:

Kui oled ultrahelianduri Raspberry Pi-ga ühendanud siis järgnevalt proovime selle programmeerida nii, et see mõõdaks objekti kaugust ning edastaks meile saadud tulemuse.

Esmalt lisame programmi meile vaja minevad teegid, milleks on: GPIO ja time. Seda teeme nii:

import RPi.GPIO as GPIO 

import time

Seejärel määrame GPIO režiimi BCM peale nii: GPIO.setmode(GPIO.BCM)

Ning määrame ka kaks muutujat vastavalt ultrahelianduri nõelte järgi:

TRIG = 23

ECHO = 24

Seejärel määrame GPIO sisend ja väljundid nii:

GPIO.setup(TRIG, GPIO.OUT)

GPIO.setup(ECHO, GPIO.IN)

Järgnevalt seame TRIG nõela GPIO 1 ehk True peale ehk saadame selle läbi ultraheli lained nii: GPIO.output(TRIG, True). Seejärel ootame 0.00001 sekundit ehk saadame selle aja jooksul 8 40kHz helilainet nii: time.sleep(0.00001). Ning lülitame TRIG nõela välja: GPIO.output(TRIG, False)

Seejärel mõõdame aega kaua läheb, et ultrahelilained andurisse tagasi jõuavad. Selle jaoks loome kirjutame kodi, mis salvestab algus- ja lõpuaja hetkeda vahel, kus ultrahelilaine ei ole tagasi jõudnud selle ajani kuni see on.

Kood võiks välja näha näiteks järgmine:

while(GPIO.input(ECHO)==0):

    start = time.time()

while(GPIO.input(ECHO)==1):

    end = time.time()

kestus = end - start

Viimane muutuja, mille me lõime salvestas aja kahe signaali vahel. Järgnevalt peame aja konverteerima kauguseks. Teame, et kiirus = distants / ajaga. Heli kiirus on 343 m/s ehk 34300 cm/s. Kuna ultraheli signaal läbis tee edasi ja tagasi objekti vahel siis peame aja jagama kahega. Teisendades saame, et distants = ajakulu * 17150. Seega kirjutame koodirea: distants = round((kestus * 17150), 2).

Viimaseks sammuks trüki tulemus ekraanile. Kas toimis?

Litsents

Icon for the Creative Commons Attribution 4.0 International License

Lisamoodulid on loodud Aveli Klaos, Siim Tanel Laisaar, Piret Luik, Tauno Palts, ja Eero Ääremaa poolt Creative Commons Attribution 4.0 International License litsentsi alusel, kui pole teisiti märgitud.

Jaga seda raamatut