Zásilka z Číny

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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *