室内播种机的制作

电子说

1.3w人已加入

描述

第1步:传感器芯片 - RPi配置

Arduino

我们将在该项目中使用SGP30 CO2和VOC(挥发性有机化合物)传感器。它讲的是I2C,它在Raspberry Pi上相对容易使用。 Adafruit的Arduino和CircuitPython板已有预先存在的库,但我找不到Pi的库,所以我自己写了。

将传感器连接到Pi

首先,我们让Pi设置为I2C。

在本指南中,我引用 物理Pi引脚数 ,不 Broadcom或GPIO号码。在本PDF中,我使用的是中间的(白色背景,在键中标记为“位置”)。

在你的Pi上,运行 sudo raspi-config 。在“接口选项”下,找到并启用“I2C”。

在Raspbian的最新版本中,我们需要的软件已经安装,但为了以防万一,使用 apt-get 来安装 python-smbus 和 i2c-tools:

$ sudo apt-get update

$ sudo apt-get install python-smbus i2c-tools

关闭pi并连接SGP30突破端的引脚,如下所示:

SCL →Pi pin 5

SDA →Pi pin 3

Vin →Pi 5v(任何会做)

Gnd →Pi接地(任何会做)

1v8 未连接

打开Pi电源并检查是否检测到SGP30。运行 i2cdetect -y 1 并查找地址为0x58的设备。 (注意,在其他一些Pis上,你想要 i2cdetect -y 0 ,显然)。

就是这样!让我们试着谈谈这件事。

第2步:传感器芯片 - 脚本

Arduino

现在连接并检测到传感器芯片,让我们测试一下。

从Github下拉SGP30 RPi库:

$ git clone https://github.com/misterfifths/sgp30.git

将目录更改为克隆的仓库:

$ cd sgp30

运行演示脚本:

$ python demo.py

SGP30需要大约15秒才能预热,所以希望看到“热身。..。..“一会儿。最终你应该看到如上图所示的输出。

疑难解答

IOError :检查与突破的连接板。这通常意味着I2C连接出现问题。

使用SMBus的

ImportError :未安装SMBus。运行 apt-get install python-smbus。

第3步:演讲者

Arduino

Arduino

Raspberry Pi Zero没有专用音频输出,因此我们将使用PWM引脚来模拟它。我们将遵循Adafruit的本指南中的一些内容,不幸的是,这些内容已经过时了。还有一些小的调整,主要是因为使用单声道音频。

Raspberry Pi设置

启用PWM音频的设备树覆盖,记录在这里。在您喜欢的编辑器中以root身份打开/boot/config.txt ,并在最后添加此行:

dtoverlay=pwm

您可以跳过此步骤Adafruit将PWM引脚设置为Alt-5模式的指南;对于设备树覆盖,这似乎是不必要的。

您也可以跳过Adafruit指南中的低通滤波器,除非您有冒险精神。没有它我们从Pi得到了不错的音频。

运行`sudo raspi-config`,在“Audio”下,强制输出超过3.5mm(耳机)插孔。这将确保即使连接HDMI电缆,扬声器仍然可以工作。

重新启动Pi。

连接放大器

现在已将Pi设置为PWM音频,我们需要连接放大器。规格表说如果我们没有差分输出(我们没有),我们应该接地音频。所以布线是这样的:

放大器A + →Pi引脚12(这是 pwm 叠加使用的PWM音频引脚默认)

放大器A - →Pi接地(任何会做)

放大器输入→Pi 5v(任何会做)

Amp Gnd →Pi接地(任何会做)

Amp SD 未连接(这是关机引脚 - 可以很有趣,但不是必需的)

将放大器输出端子连接到扬声器,然后重新启动Pi。

测试音频并最大限度地减少静电

由于我们使用PWM伪装音频输出,因此波形非常嘈杂。以下是我们如何从Pi获得合适的音频:

运行 alsamixer 并将音量调高。

使用 aplay 播放声音。你应该听到声音,之后可能会听到很多静电。

使用小螺丝刀调节放大器板上的电位计。如果您听到静电,请将其关闭只是,直到您不再使用它为止。如果您什么也听不到,请将其翻转直至听到静电,然后再向下听。

再次运行 aplay ,看看它是如何发声的。即使低于静态限制,我们也会在音频文件的响亮点上发出嘶哑的声音。根据需要调整电位计。

请记住,扬声器最终会放在一个盒子里,所以你可能希望它尽可能大。

故障排除

如果您无法让扬声器播放任何内容,请检查接线,并确保在调整 config.txt 后重新启动。还要检查 gpio readall 的输出:您应该看到物理引脚12处于模式ALT5。如果没有,请尝试运行 gpio -g mode 18 alt5 。这应该是设备覆盖的默认设置,但值得一试。

步骤4:灯光

Arduino

用于呼吸和咳嗽动画,我们需要一些灯!我碰巧有一个Pimoroni Blinkt!方便,但你可以很容易地使用一条NeoPixels。

Blinkt被设计为盾牌,但这对我们没有好处;我们想要很多这些针脚。事实证明,从检查引脚排列,Blinkt实际上只使用了4个引脚。因此,我们只需将这些内容直接连接到Pi,这样我们就可以使用Python库而无需更改。

连接Blinkt

连接以下引脚:

Blinkt pin 2 →Pi 5v(任何会做)

Blinkt pin 4 →Pi ground(任何人都会这样做)

Blinkt pin 16 →Pi pin 16

Blinkt pin 18 →Pi pin 18

所有其他Blinkt引脚可以不连接

测试

启动Pi并安装Blinkt带有 sudo的Python库apt-get install python-blinkt

运行 python 并尝试一个简单的灯光演示,也许是这样的:

import blinkt

blinkt.set_clear_on_exit()

blinkt.set_all(128, 50, 50)

blinkt.show()

# admire for a few seconds

# hit ctrl+d to exit

疑难解答

男人,Blinkt pinout实在令人困惑。确保你的方向正确(注意圆角)。在我们的模型中,如果您将Pimoroni盗版徽标放在顶部,则需要在标题的左侧放置引脚(参见照片)。

第5步:软件 - Google表格设置

每隔几秒钟,代码会将空气质量读数记录到Google电子表格中。我们正在使用gspread库。授予对Google表格的gspread访问权限有点复杂,他们的指南有点过时了。请按照以下步骤操作:

转到Google Cloud Resource Manager。您可能必须注册Google开发人员计划才能访问此计划。

点击顶部的“创建项目”按钮,随意填写详细信息。

在下一页的“API”面板中,选择“转到API概述”。

在该页面上,点击顶部的“启用API和服务”。

搜索并启用Google Drive API和Google表格API。不要担心有关凭据的警告;我们接下来会处理。

返回API Dashboard并从左侧列表中选择“Credentials”。

下拉“创建凭据”按钮并选择“服务帐户密钥”。当需要对Sheet进行更改时,这将创建一个“用户”,我们的脚本将充当该用户。

在下一页上,为帐户指定一个名称(任何将要执行的操作),并从“角色”下拉列表的“服务帐户”部分为其指定“服务帐户用户”角色。

确保在“密钥类型”部分中选择“JSON”并点击“创建”。 JSON凭证文件将自动下载。保持安全,不要在任何地方发布!它等同于密码(虽然它只能访问您授予它访问权限的密码,但它仍然是最安全的)。

最后,我们需要找到服务帐户用户的完整用户名。选择左上方的汉堡菜单,然后选择“IAM&admin”,然后选择“IAM”,转到“IAM”仪表板。记下服务用户帐户的电子邮件地址。它应该是“username@appname.12345.iam.gserviceaccount.com”形式的东西。 (请注意,这也在我们之前下载的JSON文件中,如果您只是想从那里抓取它。)

好的,这很令人筋疲力尽。最后一步是为数据记录制作电子表格并授予对服务用户的访问权限。我们会这样做:

制作新的Google表格。不需要任何特别的东西。您可能想要制作一个列标题(将有三个:时间戳,CO2(ppm)和VOCs(ppb))。

授予我们之前制作的服务帐户用户的编辑权限。在右上角,选择“共享”,粘贴服务用户的电子邮件地址,下拉铅笔按钮并选择“可以编辑”。点击“发送”,你应该好好去!

记下电子表格网址中非常长的ID部分(/spreadsheets/d/和/edit 之间的部分)。我们需要在下一步配置gspread。

第6步:软件 - 现在全部在一起

好吧,让我们下拉并配置完全可以使用的软件!

安装一些依赖项:

$ sudo apt-get install python-pip python-pyaudio

$ pip install pydub oauth2client gspread

克隆存储库:

$ git clone https://github.com/misterfifths/planter.git

转换到新的 planter 目录:

$ cd planter

将SGP30驱动程序复制到 planter 目录。如果您以前克隆过它,那应该类似于。..。..

$ cp 。./sgp30/sgp30.py 。

将Google表格JSON凭证文件从上一步复制到种植者目录,并将其命名为“gsheets-creds.json”。

查找或记录您喜欢的咳嗽声(尝试freesound.org!)并将其放入 planter 目录中。

在您喜欢的编辑器中,打开“planter.py”文件。

在初始化GoogleSheetsLogger的第22行附近,将长串数字和字母替换为您在上一步中创建的工作表的ID。

在第143行附近,更改设置 cough_filename 的行中的文件名,以匹配您在步骤6中选择的咳嗽的文件名。

就是这样!运行 。/planter.py 以完成整个过程。如果空气质量良好,前几秒钟前LED将以轻松的蓝色“呼吸”。如果不好,扬声器会发出咳嗽声,灯光会同步发出红色脉冲。

在代码中逛逛并改变一些东西 - 时间,“好”和“坏”的空气质量阈值,颜色等

第7步:案例

我们用激光切割机制作外壳为种植者。我们设计了两个部件:木制外箱,带电子设备的隐藏隔间和传感器伸出的孔,以及用于工厂的防水丙烯酸套管。

两件式的PDF均可在这里找到。盒子的骨架是使用激光切割器Ruby Gem构建的(如果你用Illustrator打开PDF,你可以看到我们在画板之外使用的设置)。我们使用了1/8“厚的木材;如果你使用不同的厚度,或者如果你的激光切割机的切口与我们的切口明显不同,你将需要调整盒子.PDF包括3个面板选项 - 两个带有非常大的格栅用于灯的小孔和第三个带有较大圆圈的孔,Blinkt上每个LED一个。

为了防水丙烯酸,我们用硅胶粘合剂密封它,我们让它在一夜之间固化。彻底测试密封用水填充套管,让它静置一段时间,然后在外面寻找水滴。根据需要重新开始直到你满意为止。

切割后,我们染了木头并涂上了巴西棕榈树基于蜡的轻质防水。盒子应以相当明显的方式装配在一起。后面有四个孔的面,下面的孔是SGP30芯片穿过(上下颠倒)。两个小块在上面PDF的右侧是芯片顶部的小盖子。没有孔的部分是“架子”帽子安装在盒子三面的插槽中,为播种机套筒和电子设备的分离提供支撑。

步骤8:将所有内容和后续步骤拼凑起来

现在一切都在运行,现在是时候把它全部塞进去了。我们这里没有任何好的建议。我们确实使用半尺寸面包板的电源导轨为所有组件提供了一个电源和接地源,但是我们只是把东西塞进去并用一点热胶和胶带固定。

关于从哪里开始的想法:

添加土壤湿度传感器,或植物健康的其他传感器(根电容,叶子颜色等)

在你的推文上

添加温度和湿度传感器以提高SGP30的准确度

添加轮子和光电传感器以使工厂停留在空气质量不佳的情况下老板或城市或EPA

尽可能多的阳光。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分