骑士骑士 &树莓派的Cylon灯

31

树莓派最明显的应用是重新创建在“KITT”来自Knight Rider或Battestar Galactica的Cylon。所有这些都可以通过纯电子产品完成,但事实并非如此’不涉及任何编程,因此不’t as cool.

所以这是我的简短描述“running lights”项目。将整个计算机扔到这样的任务上可能会过分杀伤,但是它有很多目的:

  • 很好的Python 通用输入输出 编程介绍
  • 树莓派 通用输入输出 接口的入门
  • 焊接,接线,测试和构建电子电路方面的良好实践

它为N’我打算向您展示如何制作电路板,但希望此页面上有足够的信息可以帮助您入门。

树莓派零件

组件

  • 10个5mm红色LED(£1.50)
  • 10560ohm电阻(£0.10)
  • 10个27Kohm电阻器(£0.10)
  • 10 BC548 NPN晶体管(£1.00)
  • 1脱衣板(£3.50)
  • 12线长度
  • 1 0.1″压接连接器壳体1×3 pin (£0.05)
  • 2 0.1″压接连接器壳体1×10 pin (£0.40)
  • 12+母压接针,适用于0.1″ housings (£0.60)

工具类

  • 剪线钳/剥线钳
  • 烙铁+焊锡
  • 1个剥线板切刀工具(点切刀)

In total the board cost me approximately £10 in bits but it really depends 上 what components and tools you already have. 我没有’不需要购买焊料或剥线钳,但我确实花了12英镑买了一个新的剥线钳。如果您打算使用剥离板进行任何工作,“stripboard cutter” or “spot cutter”几磅/美元很值得。

下面的照片显示了我的滑板,其中焊接了10个LED,电阻和晶体管。每个LED需要1 560欧姆电阻,1个27欧姆电阻和1个BC548晶体管。

每个LED的接线如下图所示:
考虑到所需的低电流,可以用任何能为LED提供5mA电流的器件代替该晶体管。因此,BC547或BC548设备非常理想。

我没有’不必担心我将哪个LED连接到GPIO引脚。电路正常工作后,我更正了Python代码中的灯光顺序,以正确的顺序排列它们。

蟒蛇程序

这是我用来顺序关闭LED的Python程序。它使用RPi.GPIO库,因此必须已安装。

#------------------------------------------------
# Name: Running Lights
# Author    : matt.hawkins
# Created   : 21/06/2012
# 蟒蛇    : 2 or 3
# Copyright : (c) matt.hawkins 2012
#------------------------------------------------
#!/usr/bin/env 蟒蛇

# Import required libraries
import time
import RPi.GPIO as  通用输入输出 
 
# Use BCM  通用输入输出  references
# instead of physical pin numbers
GPIO.setmode(GPIO.BCM)
 
# Define  通用输入输出  signals to use
# that are connected to 10  LED s
# Pins 7,11,15,21,23,16,18,22,24,26
#  通用输入输出 4,GPIO17,GPIO22,GPIO9,GPIO11
#  通用输入输出 23,GPIO24,GPIO25,GPIO8,GPIO7
RpiGPIO = [4,17,22,9,11,23,24,25,8,7]
 
#将所有引脚设置为输出 
for pinref in RpiGPIO:
  print("Setup pins")
   通用输入输出 .setup(pinref,GPIO.OUT)
 
# Define some settings
StepCounter = 0
StepDir = 1
WaitTime = 0.2
 
# Define some sequences
 
# One  LED 
StepCount1 = 10
Seq1 = []
Seq1 = list(range(0,StepCount1))
Seq1[0] =[1,0,0,0,0,0,0,0,0,0]
Seq1[1] =[0,1,0,0,0,0,0,0,0,0]
Seq1[2] =[0,0,1,0,0,0,0,0,0,0]
Seq1[3] =[0,0,0,1,0,0,0,0,0,0]
Seq1[4] =[0,0,0,0,1,0,0,0,0,0]
Seq1[5] =[0,0,0,0,0,1,0,0,0,0]
Seq1[6] =[0,0,0,0,0,0,1,0,0,0]
Seq1[7] =[0,0,0,0,0,0,0,1,0,0]
Seq1[8] =[0,0,0,0,0,0,0,0,1,0]
Seq1[9] =[0,0,0,0,0,0,0,0,0,1]
 
# Double  LED s
StepCount2 = 11
Seq2 = []
Seq2 = list(range(0,StepCount2))
Seq2[0] =[1,0,0,0,0,0,0,0,0,0]
Seq2[1] =[1,1,0,0,0,0,0,0,0,0]
Seq2[2] =[0,1,1,0,0,0,0,0,0,0]
Seq2[3] =[0,0,1,1,0,0,0,0,0,0]
Seq2[4] =[0,0,0,1,1,0,0,0,0,0]
Seq2[5] =[0,0,0,0,1,1,0,0,0,0]
Seq2[6] =[0,0,0,0,0,1,1,0,0,0]
Seq2[7] =[0,0,0,0,0,0,1,1,0,0]
Seq2[8] =[0,0,0,0,0,0,0,1,1,0]
Seq2[9] =[0,0,0,0,0,0,0,0,1,1]
Seq2[10]=[0,0,0,0,0,0,0,0,0,1]
 
# Two  LED s from opposite ends
StepCount3 = 9
Seq3 = []
Seq3 = list(range(0,StepCount3))
Seq3[0] =[1,0,0,0,0,0,0,0,0,1]
Seq3[1] =[0,1,0,0,0,0,0,0,1,0]
Seq3[2] =[0,0,1,0,0,0,0,1,0,0]
Seq3[3] =[0,0,0,1,0,0,1,0,0,0]
Seq3[4] =[0,0,0,0,1,1,0,0,0,0]
Seq3[5] =[0,0,0,1,0,0,1,0,0,0]
Seq3[6] =[0,0,1,0,0,0,0,1,0,0]
Seq3[7] =[0,1,0,0,0,0,0,0,1,0]
Seq3[8] =[1,0,0,0,0,0,0,0,0,1]
 
# Choose a sequence to use
Seq = Seq3
StepCount = StepCount3
 
# Start main loop
while True:
  print("-- Step : "+ str(StepCounter) +" --")
  for pinref in range(0, 10):
    xpin=RpiGPIO[pinref]#
    # Check if  LED  应该  上  or off
    if Seq[StepCounter][pinref]!=0:
      print(" Enable " + str(xpin))
       通用输入输出 .output(xpin, True)
    else:
      print(" Disable " + str(xpin))
       通用输入输出 .output(xpin, False)
 
  StepCounter += StepDir
 
  # If we reach the end of the sequence reverse
  # the direction and step the other way
  if (StepCounter==StepCount) or (StepCounter<0):
    StepDir = StepDir * -1
    StepCounter = StepCounter + StepDir + StepDir
 
  # Wait before moving  上 
  time.sleep(WaitTime)

可以使用以下命令从我的BitBucket存储库下载此脚本: 这个连结 或直接使用:

wget //bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/10_led_running_lights_1.py

该脚本可以使用以下命令运行:

蟒蛇 10_led_running_lights_1.py

这是显示序列3运行的视频:


更新的脚本

既然这个粒子是我写的 ’ve创建了此脚本的修改版本,该脚本可以接受命令行参数来设置LED切换之间的顺序和延迟。

可以使用以下命令从我的BitBucket存储库下载此脚本: 这个连结 或直接使用:

wget //bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/10_led_running_lights_2.py

该脚本可以使用以下命令运行:

蟒蛇 10_led_running_lights_2.py

要么 :

蟒蛇 10_led_running_lights_2.py 2 0.3

哪里“2”是序列和“0.3”是指LED之间的延迟秒数。


我在我上面放了其他与Raspberry Pi相关的视频 的YouTube频道Raspberry Pi播放列表.

分享。

31条留言

  1. 括号中的价格是该数量项目的总成本。为了降低价格,您可能需要订购的数量超出了所需数量。例如,我在ebay上订购了100包电阻,每包99p。通常,在线订购组件比去商店便宜得多。我是从Maplin买的,但我’肯定会便宜在线。

  2. 刚刚尝试了上面粘贴的代码后,python就可以在以下情况下使用singe =“while StepCounter=0:”算法的一部分。

    I’ve还发现使用“而StepCounter == 0时:”仅执行第一次运行,但将其更改为“while 1:”将使其不断循环。

    感谢您发布文章,以为我’d请注意上面粘贴的代码存在问题。

  3. 我从您的代码中看到,您使用的是引脚11到20。我下载了一个电子表格,其中列出了所有的GPIO引脚,它说不连接到引脚4、6、14、17、20和26。我不知道为什么说不要使用它们– and I haven’t in my projects –但它们似乎为您工作。

    您知道为什么会有警告不要使用插针吗?

  4. 能够’不能正常工作。第80行的语法错误为:-而1 == 1。此行是先前文章的主题,您已对其进行了更改。缺少什么吗?图片不是很清晰,所以我需要将带电连接到引脚1,将接地连接到引脚6。’m使用面包板。它’是我的第一个使用多个LED的项目,也是我在电子学界的第一次抨击(1959年我离开学校时并未在学校教授该科目),也是第一次尝试Python。

    • 什么是完整语法错误?确保缩进正确,因为这在Python中至关重要。一世’ve将图表更新为“power source”符号令人困惑。 Pi上的引脚2和引脚6为电路提供+ 5V和0V。

  5. 这个程序让我很紧张。它似乎充满了语法错误,作为一个新手,我担心尚未在RaspberryPi上对其进行彻底的测试和测试。如果是这样的话,Matt,您应该为自己感到羞耻。现在,我已经使用python3找到并安装了该模块,但是现在在第20行出现错误。请整理一下。我不会为自己的语气道歉–我一生都是专业人士,从未发表过未经检查且不符合高工作规范的工作。如果这被修改了,那么请确保我有副本要张贴eleswhere。做得好还是不做’t do it at all.

    • 对我来说很好。一定是你狡猾的焊接。我从未使用过Python 3,但是随时可以编写自己的程序并将其发布。

    • 大卫,你需要冷静下来,抓紧时间

      1)到目前为止,您的大多数问题都是由于您粗心的键入而引起的语法错误。
      2)您正在尝试使用Python 3。
      3)当我明确声明需要使用RPi.GPIO时,您正在尝试使用WiringPi。
      4)我的YouTube视频显示我的脚本正常工作。
      5)’如果可以的话,这不是我的错’t区分括号和方括号之间的区别。

      我很高兴纠正我报道中的错误。这是一种爱好,提供了信息“as is”. If you don’喜欢我的帖子,那么欢迎您去其他地方。请不要’不会因为一些琐碎的Python代码而威胁我。很尴尬。为了你。

      如果您显然是其他领域的专家,希望看到您发表的作品。我希望不是’医药或飞机工程。

  6. 在您的代码中:

    RpiGPIO = [4,17,21,22,10,8,11,23,24,25]

    #将所有引脚设置为输出
    对于RpiPins中的引脚:
    打印“Setup pins”
    通用输入输出 .setup(pin,GPIO.OUT)

    应该’t RpiGPIO是RpiPins吗?否则,在for时RpiPins是未定义的。

  7. 为了清楚起见。除了大写字母W之外没有键入错误。我使用了复制粘贴到Leafpad中的方法。无需焊接;使用面包板。首次发布后,您必须对其进行更改。即使在我‘rant’您必须再次更改它,以引入GPIO BCM。因此,我的评论是有道理的。我确实使用了RPi.GPIO,该文件是按照您的说明下载并安装的。我还从该站点下载了WiringPi,因为它在这里对某些事情必定有用。如果我错了,那我就错了,而且年龄足够大,可以接受。你能说同样吗?

    • 并非所有对我网站的更新都是您评论的结果。这不是’1960年代。网页不是石板。只要作者喜欢,它们就会更新。我改用BCM引用,因为这是一种更好的处理方法。您没有从我的网站下载WiringPi。一世’我没用过WiringPi,别’不提供下载,不要 ’不要在我的任何脚本中使用它。我觉得你很困惑。再次。

  8. 不错的小演示,但是为什么要用晶体管呢?

    我很欣赏您可能出于演示目的(演示如何驱动更高的负载)进行操作,但是Pi能够直接驱动小型LED来完成这种事情–尤其是5mA的负载’在这里展示…

    例如当我’d建议不要长时间运行(确实超出某些规格。尤其是3.3v稳压器!) http://unicorn.drogon.net/pi17leds.jpg 效果很好。每个LED的电流为10mA,因此总共为170mA–最糟糕的是3.3v reg。将关闭,Pi重启。

    -戈登

    • 我没有’不想鼓励人们直接从GPIO引脚汲取电流,因为当它们移至其他设备(蜂鸣器等)时,可能会损坏其Pi。有些用户可能不喜欢这些限制,所以我决定从一开始就安全地对待它。这样,他们可以使用自己喜欢的任何尺寸的LED,而不会消耗太多电流。这也意味着您可以进行标准设置,并在LED,蜂鸣器和小型电动机之间进行交换。

  9. 你好
    我如何生成带有树莓的随机LED闪光灯。
    例如,我有5个LED和1个按钮。
    因此,如果我按下按钮,随机LED将闪烁。

    • 保罗,你好。由于某些原因,WordPress失去了换行符,我什么也不会纠正。那里有一个换行符,但是在页面渲染时会丢失。一世’ve添加了#以分隔行。这应该被Python忽略。

  10. 唐·德格雷戈里

    嗨,MATT,
    我知道您的出色脚本已经存在了一段时间,但我真的很喜欢。几年前使用RPi构建它。现在我’在解决试图依次运行每个Seq的问题。想每个花费20秒。 Seq和StepCount已设置。如果我尝试在主循环中设置time.time(),则会崩溃并导致其他不良结果。或一个Seq不’看不到超时,下一个Seq没有’开始。也许我可以尝试Pi中使用的Whiptail菜单系统?只需向正确的方向推动即可。从一个Seq切换到另一个Seq肯定是一个很好的演示。谢谢

    • I’我刚刚更新了此脚本(5年后!)以与Python 3一起使用。’ve还添加了一个使用命令行参数的新脚本。当您提到Whiptail时,我想您正在与其他脚本语言混合使用?如果要修改此脚本以遍历序列,则可能会将所有序列组合到1个数组中,然后根据需要遍历该数组的各个块。我现在可以试一试’我挖了我原来的LED板和B型。

      • 唐·德格雷戈里

        马特
        您一定很高兴使用2个简洁的命令行选项更新了旧脚本。一世’我肯定会尝试的。
        仅供参考:我’仅使用330欧姆1/6瓦电阻器就可以使LED正常运行。我使用从Pi Zero到连接在一起的所有LED阳极的3.3伏电压。每个阴极都有电阻。另一端进入Pi的适当引脚。然后,我反转主循环代码的是非。一点都不觉得热。我确实意识到您想展示一种更安全的硬件接线方式。非常感谢您参与该项目。我认为Knight-Rider编码将永远存在!

        • 晶体管有点过高,但是由于这是我的第一个项目,所以我非常小心。如今,如果需要一些LED,我会使用您描述的技术,并使用330ohm电阻直接将其直接连接到GPIO引脚。

发表评论

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.