赞
踩
树莓派是一个很好的硬件学习平台,但它却不能以开箱即用的方式使用模拟电子元件。默认情况下,从模拟操纵杆到电位器等很多都是不可以使用的,但幸运的是,添加昂贵的芯片可以解决该问题。MCP3008 ADC(模数转换器)用于将模拟电子设备连接到Raspberry Pi的40个GPIO引脚,使您能够使用各种附加组件。
为了向您展示如何利用模数转换以及如何进行有趣的灯光秀,我们创建了一个项目,该项目将读取三个电位计,并使用这些刻度盘来控制Adafruit NeoPixel的颜色。下面是使用模拟输入创建彩色Raspberry Pi灯光秀的方法。
使用Raspberry Pi进行灯光秀需要做什么:
1. 将MCP3008插入面包板,使插脚跨过中央切口。芯片上的缺口应面向面包板的短端。MCP3008的16个引脚中左下角为1引脚,然后右下角是8引脚。针脚9在右上角,针脚16在左上角。
2. 使用母对母跳线将MCP3008连接到Raspberry Pi GPIO。首先用母对公线将3.3V和GND引脚连接到面包板的+和-轨。然后使用公对公电线将电源轨连接到MCP3008引脚以获取电源和GND。
3. 使用母对公跳线将MCP3008连接到Raspberry Pi。
4. 插入电位计,并使用公对公跳线将它们连接到MCP3008。
5. 将三根导线焊接到Adafruit NeoPixels的PWR,GND和In。PWR连接到试验板上的+导轨,GND连接到-导轨。“ IN”连接到Raspberry Pi上的GPIO 18。
6. 编辑/boot/config.txt文件。
sudo nano /boot/config.txt
7. 将此行添加到文件底部。它将使GPIO与NeoPixels对话,但将禁用通过耳机插孔的音频输出。完成后按CTRL + X,Y和Enter键退出。重新启动Pi,以使更改生效。
hdmi_force_hotplug=1
8. 为NeoPixels安装Python 3模块。
sudo pip3 install rpi_ws281x adafruit-circuitpython-neopixel
9. 打开在编程菜单中找到的Thonny IDE。
10. 添加以下行以导入模块,这些模块使代码可以与NeoPixels一起使用,暂停代码并使用MCP3008板。
import boardimport neopixelfrom time import sleepfrom gpiozero import MCP3008
11. 创建三个变量r,g,b,它们将存储MCP3008输出的原始值。
r = MCP3008(channel=0)g = MCP3008(channel=1)b = MCP3008(channel=2)
12. 创建一个称为pixels的对象。这将使Python代码能够与NeoPixels一起使用。为此,我们传递了正在使用的GPIO引脚D18和链/环中NeoPixels的数量16。
pixels = neopixel.NeoPixel(board.D18, 16)
13. 创建一个 While True:循环,它将连续运行代码。
while True:
14. 创建三个变量red,green和blue,它们将存储电位计返回的值。该值介于0.0到1.0之间,为了将其转换为NeoPixels可以理解的值,我们将该值乘以255。
red = round(r.value * 255)green= round(g.value * 255)blue = round(b.value * 255)
15. 将返回的值打印到Python shell。
print(red,green,blue)
16. 创建一个for循环,它将更新环中的所有16个像素以显示当前的颜色。
for i in range(16):pixels[i] = (red, green, blue)
17. 在代码中添加0.1秒的暂停时间。
sleep(0.1)
18. 将代码另存为analog-inputs.py。
19. 在终端中使用sudo运行代码。
sudo python3 analog-inputs.py
20. 旋转电位器以控制NeoPixels的颜色。
这是此项目中使用的所有代码。
import boardimport neopixelfrom time import sleepfrom gpiozero import MCP3008r = MCP3008(channel=0)g = MCP3008(channel=1)b = MCP3008(channel=2)pixels = neopixel.NeoPixel(board.D18, 16)while True: red = round(r.value * 255) green= round(g.value * 255) blue = round(b.value * 255) print(red,green,blue) for i in range(16): pixels[i] = (red, green, blue) sleep(0.1)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。