Dnes dorazil balíček z dx.com s hlavní várkou věciček na bastlení. Jmenovitě ultrazvukový měřič vzdálenosti (80 Kč), modul reálného času (90 Kč) a krokový motor s řadičem ULN2003 (90 Kč za sadu). Ceny jsou u nás nesrovnatelně vyšší, pokud se vůbec dá věc sehnat a navíc i kdybych si nechal poslat každou věc zvlášť, neplatil bych za poštovné nic.
Krokový motor nebylo obtížné zprovoznit pomocí návodu ze stránek http://www.raspberrypi-spy.co.uk/2012/07/stepper-motor-control-in-python/
Tamní kód lze použít po upravě připojených GPIO pinů, autor článku uvádí, že připojil IN# postupně k pinům 18, 22, 24, 26. Mě však pin 26 odmítal poslušnost a tak jsem jej nahradil pinem 25, který se kódu také vyskytuje. Okopíruji si pro své potřeby kód původního autora a vymažu pro můj osmikrokový motor nepotřebné části.
#----------------------------------- # Name: Stepper Motor # # Author: matt.hawkins # # Created: 11/07/2012 # Copyright: (c) matt.hawkins 2012 #----------------------------------- #!/usr/bin/env python # Import required libraries import time import RPi.GPIO as GPIO # Use BCM GPIO references # instead of physical pin numbers GPIO.setmode(GPIO.BCM) # Define GPIO signals to use # Pins 18,22,24,26 # GPIO24,GPIO25,GPIO8,GPIO7 StepPins = [18,22,24,25] # Set all pins as output for pin in StepPins: print "Setup pins" GPIO.setup(pin,GPIO.OUT) GPIO.output(pin, False) # Define some settings StepCounter = 0 WaitTime = 0.1 # Define advanced sequence # as shown in manufacturers datasheet StepCount = 8 Seq = [] Seq = range(0, StepCount) Seq[0] = [1,0,0,0] Seq[1] = [1,1,0,0] Seq[2] = [0,1,0,0] Seq[3] = [0,1,1,0] Seq[4] = [0,0,1,0] Seq[5] = [0,0,1,1] Seq[6] = [0,0,0,1] Seq[7] = [1,0,0,1] End = 200 Steps = 0 # Start main loop while Steps<End: for pin in range(0, 4): xpin = StepPins[pin] if Seq[StepCounter][pin]!=0: print " Step %i Enable %i" %(StepCounter,xpin) GPIO.output(xpin, True) else: GPIO.output(xpin, False) StepCounter += 1 Steps += 1 # If we reach the end of the sequence # start again if (StepCounter==StepCount): StepCounter = 0 if (StepCounter<0): StepCounter = StepCount # Wait before moving on time.sleep(WaitTime) for pin in StepPins: GPIO.output(pin, False) exit(0)
Na konec přidávám uvolnění pinů, pokud se podle původního návodu ukončí běh stiskem Ctrl+C, motor zůstane viset v jedné poloze a zbytečně se hřeje (možná je to ale na něco dobré). Plánuji však místo Pythonu programovat v C, které jsem kdysi ovládal a teď je možnost znalosti oprášit, Tento program je velice jednoduchý, ale jako první náhled na věc je neocenitelný.
Další zprovozněnou věcí je RTC modul pro udržování přibližného času, i bez přítomnosti internetové přípojky, RPi totiž nemá baterku a po nastartování bere poslední uložený čas, tedy ten při vypnutí.
V obchodě jsem si vybral ten označený nápisy mini_RTC a JY_MCU, obsahuje čip DS1307Z a po hodině ( spíš dvou nebo třech hodinách) hledání a škubání vlasů jsem zjistil, že volba tohoto byla správná. Stačí vzít dráty a připojit konektor VCC na 5V pin (02 nebo 04), začínal jsem totiž s napájením 3,3V a to hodinky prostě sloužit nemohou. GND typicky na zem SDA na SDA pin (03) a SCL na SCL pin (05) pozn.: RPi rev. 2.
Pokud jste ještě se sériovým rozhraním nepracovali budete nejspíš potřebovat nainstalovat nástroje:
sudo aptitude install i2c-tools
Dále si povolit následující moduly:
sudo modprobe i2c-dev
sudo modprobe i2c-bcm2708
sudo modprobe rtc-ds1307
Máte-li revizi 2 jako já pište následující, pro revizi 1 je na konci nula:
sudo i2cdetect -y 1
Vypíše nalezená zařízení, hodinky mají adresu 68, takže spustě následující příkazy:
sudo bash
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
exit
A pokud se zadařilo, následující příkaz sdělí, že v hodinách je binec:
sudo hwclock -r
Pokud máte aktualizovaný čas např. přes ntp, zapiště jej do hodinek:
sudo hwclock -w
Aby se RPi dívalo na čas zbývají ještě drobnosti, do souborů zapsat to co už jsme provedli, tak aby se počítač staral sám:
Do /etc/modules:
sudo nano /etc/modules
Přidat řádky:
i2c-bcm2708
i2c-dev
rtc-1307
Do /etc/rc.local:
sudo nano /etc/rc.local
přidat řádky před řádek exit 0:
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
hwclock -s
A to je vše. Nemám to ale ze své hlavy, všchno jsem našel pěkně úhledně sepsané v návodu od adafruit, který si můžete prohlédnout na adrese: http://learn.adafruit.com/adding-a-real-time-clock-to-raspberry-pi. Tímto jim děkuji. Thanks to adafruit.
Ultrazvukový měřič vzdálenosti si nechám na jindy, nemám totiž ještě sadu odporů. I tak mě ještě čeká zprovoznit čtyřkanálový digitizér videa který mě vyšel na 180 Kč, v ČR pokud je k dostání tak hodně přes 1000 Kč, osobně jsem si v minulosti zakazoval nakupovat čínské výrobky, ale za zdejší ceny bych si prostě nic nekoupil, neměl bych na to.