1421 位酷友已加入
电子圈子中包含常用的源代码、电路图、学习教程、产品样本、技术报告等干货资料,加入圈子可以上传、下载资料,也可以使用提问来寻求资料或分享你认为有价值的站外链接~
需要的元件 Arduino UNO 4位7段数码管*4 杜邦线 面包板 Arduino IDE 原理及流程 我之前在晚上看到一个很有趣的视频。 [演示视频](Arduino 4位7段数码管_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili) 发现它很有趣, 我修复了代码, 并做了一个 Fritzing 的例子, 希望令你感兴趣。 Arduino 示意图 代码 我们在此代码中所做的工作称为多路复用(建议您观看视频以更好地理解它)。 最后 所有需要的文件在下载区均可找到。 via:https://www.hackster.io/SAnwandter1/programming-4-digit-7-segment-led-display-2d33f8
组件和耗材 关于这个项目 我一直想制作一个能够在有人上门时通过电话和邮件提醒我的系统。我们常常会因为某种原因而错过门铃。 使用这个系统,您将永远不会错过任何敲门的人。 通过使用Arduino和以太网屏蔽将按钮连接到互联网,系统使用blynk应用程序将其连接到云。该应用程序可用于android和iOS。只要按下,系统就会发送电子邮件和移动通知。 Blynk上的项目 按钮用作门铃 按下门铃时发出通知 代码片段 所需文件可在下载区找到 via:https://create.arduino.cc/projecthub/KaustubhAgarwal/smart-doorbell-364e28?ref=platform&ref_id=424_popular__beginner_&offset=3
背景 DHT11 是一个 4 针(一个引脚未使用)温度和湿度传感器,能够测量 20% - 90% 的相对湿度和 0 至 50 °C。 该传感器可在 3 到 5.5V 直流之间工作,并使用自己的专有 OneWire 协议进行通信。该协议需要非常精确的定时才能从传感器获取数据。低位和高位按信号为"高"的时间长度在导线上编码。阅读的总时间最多为 23.4 ms。这包括启动数据传输所需的 18 ms 延迟和数据高达 5.4 ms 的窗口。单个信号可以短至 20 μs,并短至 80 μs。 当 Windows 10 IoT 核心首次可用时,我抓起我的树莓派 2 和 DHT11 传感器,并在 C# 中尝试了一下。我很快发现它行不通。Windows 10 IoT Core 中的 C# 问题是,它的速度不够快(至少现在不会)。 此项目是将该示例转换为可以在 C# 中使用的库。我感谢写库的人,以帮助使这个流行的传感器在Windows 10 IoT核心有用,并希望,与这个库,这将是更有用的。 图书馆 我创建的库是最初由 Microsoft 发布的代码的简单重构,因此我对为读取传感器而完成的工作不记任何功劳。 库在名称"aace 传感器.Dht"中提供了一个名为Dht11的简单类。在 C# 中创建新对象非常简单。 首先打开已连接 DHT11 传感器引脚的 GPIO 引脚。 using Sensors.Dht;GpioPin pin = GpioController.GetDefault().OpenPin(4, GpioSharingMode.Exclusive); 然后将此引脚传递给 Dht11 类的构造函数,并指定 GPIO 引脚驱动器模式。这允许您决定是否要添加自己的上拉电阻器。 Dht11 dht11 = new Dht11(_pin, GpioPinDriveMode.Input); 若要从设备获取读数,请使用 GetReadingAsync 方法。 DhtReading reading = await dht11.GetReadingAsync().AsTask(); 有一个重载,允许指定最大重试值。默认值为 20。这指定在放弃并返回失败的读取之前读取传感器的尝试次数。 DhtReading 结构定义为: public value struct DhtReading { bool TimedOut; bool IsValid; double Temperature; double Humidity; int RetryCount; }; 超时 (如果尝试读取超时为 true;否则为假) IsValid (如果读数校验和正确, 为 true; 否则为假) 温度 (温度读数以摄氏度为单位。DHT11 仅支持整数值)湿度(湿度读数以百分比表示。DHT11 仅支持整数值)重试计数(读取传感器的尝试次数) 观察 即使传感器在C++它仍然不能每次都得到读数。因此,类中需要重试选项(这实际上是 Microsoft 示例的一部分)。我认为最好将其与其他平台进行比较,看看其性能如何。我尝试代码在树莓派 2 运行拉斯比安以及阿杜伊诺乌诺。我用于这两个代码已包含在 GitHub 存储库中。 此项目中包含的视频将演示和比较每个平台的输出。 开始 组装树莓派 2 的电路 使用本指南组装电路,同时使用位于页面底部附近的图表作为参考线(请注意,导线的颜色是可选的,并且已选中,有助于在构建电路时便于遵循)。 将 T 形鹅卵石放在半尺寸+ 板的左端(数字从 1 开始)。两个左大多数针脚将在E1和F1在板上。两个正确的大多数引脚将在 E20 和 F20 将 4.7K Ω在 A4 和 3V3 之间 在 B4 和 F28之间连接橙色公跳线和公跳线 在 F29 和3V3之间连接红色公跳线和公跳线 在F30和GND 之间连接黑色男性跳线 将 DHT11 传感器放入 J30 (-)、J29 (+) 和 J28 (s) 中 将带状电缆插入鹅卵石和树莓派 为阿杜伊诺组装电路 使用本指南组装电路,同时使用位于页面底部附近的图表作为参考线(请注意,导线的颜色是可选的,并且已选中,有助于在构建电路时便于遵循)。 将 4.7K Ω E12 和 E13 之间 在 Arduino 的 D13和引脚5 之间连接跳线 在 Arduino中的D12和5V 引脚之间连接红色公跳线 在 Arduino 上将黑人男性连接到 D11 和 Gnd 之间的男性跳线 将 DHT11 传感器放入 A11 (-)、A12 (+) 和 A13 (s) 中 将 USB 电缆从计算机插入 Arduino 以下是我建造的电路的照片。 启动树莓派的应用程序 选择调试、ARM 配置和远程计算机。现在右键单击项目,然后选择属性,然后单击"调试"标记。接下来,将树莓派 2 IP 地址放在"远程计算机"字段中,并取消选中"使用身份验证"。 按 F5.应用程序将部署到设备,这可能需要几分钟的第一次。 启动 Arduino 的应用程序 此项目的草图在 GitHub 中提供,该文件称为 Dht11_Speed 。启动 Arduino IDE 并打开草图。将草图上传到 Arduino ( ), 然后启动串行监视器 (Ctrl UCtrl Shift M ) 如果您不确定如何做到这一点或是新的这个环境,下面的视频将演示如何做到这一点。 启动拉斯比安的应用程序 树莓派的 C 代码在 GitHub 中可用于此项目,该文件名为 Dht11.c。源需要复制到树莓派,然后在那里编译。我喜欢使用 WinSCP 复制文件。如果你没有这个应用程序,我建议你下载并安装它现在。源代码使用在编译应用程序之前必须安装的线皮。 在树莓派上编译代码的命令是: gcc -oDht11_Speed Dht11_Speed.c -L/usr/local/lib -lwiringPi -std=c99 -lm 要运行应用程序,请输入命令: sudo ./Dht11_Speed 1000 10 其中 1000 指定延迟 1000 ms(1 秒)和 10 是要读取的样本数。 该视频将更详细地演示如何复制代码以及如何在运行 Raspbian 的树莓派上编译代码。要学习如何加载拉斯比安在你的树莓派去https://www.raspberrypi.org/downloads/raspbian/。
此项目需要以下项: Arduin0 面包板 DHT11 温度和湿度传感器 10k 欧姆电位计 16x2 液晶屏 触觉按钮 USB A-B 电缆 电力银行 跳线 Uno Gnd - > 面包板上的负导轨 5v -- > 面包板上的正轨 DTH11 引脚1 --> 5v 和 10k 欧姆电阻器 引脚2 -- > Arduino 引脚 8 和 10k 欧姆电阻器 Pin3 --> no connection Pin4 --> Gnd 16x2 液晶屏 Pin1 --> Gnd 引脚2 --> 5v 引脚 3 -- > 10k 欧姆电位计雨刷器引脚 (中间引脚. 锅上的其他两个引脚转到 5v 和 Gnd) 引脚4 -- > Arduino Pin12 引脚5 - > Gnd 引脚6 -- > Arduino Pin11 引脚7 --> 无连接 引脚8 --> 无连接 引脚9 --> 无连接 引脚10 --> 无连接 引脚11 -- > Arduino Pin5 引脚12 -- > Arduino Pin4 引脚13 --> Arduino 引脚3 引脚14 -- > 阿杜伊诺引脚2 引脚15 -->5v Pin16 -- > 触觉按钮(钉按钮的另一侧转到 Gnd) 代码 附加的是代码: 我用了阿达弗鲁的 Dht 库。 https://github.com/adafruit/DHT-sensor-library 完成!
需要的元件 Arduino UNO Adafruit 标准 1602液晶显示器 面包板 1kohm旋转电位器 Arduino IDE 原理及流程 为了使用Arduino进行多线程工作,我们需要protothreading。 该视频描述了你在原型开发初期可能想要做的事情,促使单核arduino一次完成3件事情。在这种情况下,我们的要求是 以恒定速率脉动背光灯而不会中断 每秒递增一个数并将其写入显示屏而不会中断 每几秒钟轮换几条消息,并将其写到显示屏上而不会中断 演示视频 Protothreading Protothreading是一种通常在Arduino上执行多任务操作(一次或以不同的时间间隔执行两项或多项操作)的方式。换句话说,它是“多线程”。但是Arduino是具有过程代码的单核芯片,因此不可能实现真正的多线程。为什么呢?Protothreading和通常的多线程有何不同? 为了正确理解Protothreading,我们首先需要了解为什么它不是真正的多线程。 英特尔在Pentium处理器上向我们出售过这种新的“超线程”功能,超线程是英特尔采用的一种技术,可在处理器上使单个内核就像两个内核一样起作用,或者使两个内核像是4内核一样起作用。但这与Arduino有什么关系?答案是循环。 微处理器和CPU均以“周期”工作。他们执行这些操作的速度(每秒几秒钟)是时钟速率。你已经看到了CPU的Ghz等级,并且你可能知道它与它的速度有关。Ghz越大越好,对吗?但为什么?因为那是处理器每秒可达到的周期数。 如果你是一个datasheet的爱好者,你可能会知道Arduino Uno的微处理器芯片Atmel ATMega328P起初以16Mhz运行。它具有20Mhz的能力,但是可以下调,因此不会弄乱诸如将数据写入内存之类的事情。16Mhz表示每秒你的Arduino处理1600万个周期,也就是做1600万个工作。现在,这些不是代码行,他们的运行速度非常快,而Arduino则相对较慢,这些是处理器指令,例如将数据移入和移出寄存器。 真实多线程与Protothreading 因此,如果我们只能在可用的最佳芯片满载之前在内核上如此工作,我们是否会永远停留在该速度上?那是我们最快的工作速度吗?事实证明,不!这就提出了多核CPU和多线程。在计算机CPU上,多线程应用程序是两个单独的进程,它们在CPU的不同内核上彼此并行工作。这些过程相互作用以使工作一起完成,但是不一定像你想象的那样平均分配工作。通常有一个主进程/“线程”充当其他线程的管理器,然后由它管理一个或多个工作线程,每个工作线程都可能执行特定的任务。Chrome就是一个很好的例子。Chrome是你所有网页标签(线程)的管理器,但是由于chrome是多线程的,因此每个标签都是自己的小程序。这意味着,如果你有多个内核来分布每个选项卡,它不仅可以运行得更快,而且还具有其他好处,例如当一个选项卡崩溃时不会崩溃整个浏览器。这是Protothreading不是多线程的第一个原因——我们只有一个内核可以在MCU上使用,因此传统的多线程是不可能的。我们只需要在单个内核上管理工作,但仍然可以同时执行多项操作。我们需要protothreading。 Protothreading有何不同? 在某种程度上,Protothreading与我提到的Hyperthreading非常相似。Hyperthreading将模拟第二个内核,并假装为两个虚拟内核,从字面上划分一个内核正在执行的工作。之所以起作用,是因为它们确实存在于相同的内核上,因此共享相同的资源空间。由于arduino MCU不支持超线程,因此我们无法在此处执行。Protothreading是相似的,除了代替CPU周期和指令,我们可以通过草图执行的代码的“循环”或“行列”来分解工作。就像你想象的那样,如果我们做更多的事情,循环将花费更长的时间,因此每个项目将具有截然不同的“每秒循环”。Protothreading有不同的实现方式,我在这里使用的实现方式显然是次充好,**基本上,每个循环我们没有其他工作要做,我们在主循环中进行一些需求较少或不那么频繁的工作(或根本不做)。**当我们不忙时,我们正在检查是否需要进行其他工作之一。如果是这样,我们会分支并去做。重要的是要注意,“阻塞”操作意味着它们必须立即完成所有操作而不会中断,从而占用MCU一段时间(例如从SD卡读取数据和执行其他一些任务)仍会阻塞其他Protothreading是“按时”发生的,但是对于诸如两个循环同时执行的简单操作(如变量更改或更改输出值)的快速操作而言,它将非常出色,这或多或少是我们在这里要做的。一些MCU支持实时操作系统(RTOS),该实时操作系统可以提供更多类似超线程的多任务处理功能,可以帮助缓解“阻塞”任务引起的问题。 开始工作 我们首先弄清楚我们需要执行哪些任务。就我而言,我选择(a)淡入或淡出LCD面板的背光以产生整洁的“脉冲”效果,而(b)以较慢的(可能是不可分割的)间隔对数字进行计数,以及(c)以较慢的间隔旋转一些字符串消息。为了确保此过程顺利进行,需要遵循的一些准则是对你的功能从最小阻塞到最大阻塞进行评级。花费较长时间的操作(从现在开始将它们称为“功能”),例如读取数据或具有其他较长的延迟,并且触发时间间隔较长的功能是最阻塞的功能。阻塞最少的函数是(即使不是每个循环)触发频率很高且不需要很长时间才能完成的函数。最不阻塞的功能是应该用作主“线程”的功能。你能猜出最上面的那个吗? 是的,它是“ a”,将背光脉冲调入和调出。这将以规则且非常快速的时间间隔进行,除非完成工作,否则永久之间不会有火灾之间的延迟,并且工作本身非常快。完美的管理器线程。 我们将使用该线程(以及其中的任何循环)来检查其他线程是否需要执行任何工作。在这一点上最好阅读通篇-它已被大量记录。见底部的主循环。你可以看到我在调用numberThread.check() 和的地方检查线程是否需要任何工作textThread.check() 。 我还需要在主线程中的任何循环中执行此操作,因为如果没有,它们将阻塞直到完成。我设置了在初始化或代码的设置部分初始化线程时需要触发的时间间隔。如果是时候触发这些线程,.check()则在继续执行主线程之前将看到并执行其工作。 其余的你可能可以通过逐步执行代码来弄清楚自己。最后,我想说一下,尽管我并不是protothreading专家,这只是我简单理解的一个简单示例。如果你有任何提示,或者我在任何事情上做错了,我鼓励你提供反馈和更正! 最后 所有需要的文件在下载区均可找到。 via:How to "Multithread" an Arduino (Protothreading Tutorial) - Arduino Project Hub
需要的元件 Arduino UNO 1602液晶显示器 杜邦线 面包板 seeed Pi RTC(DS1307) 电阻1kΩ 电阻10kΩ 1kohm旋转电位器 Arduino IDE 原理及流程 关于该项目 在这个项目中,我创建了一个数字时钟。我们可以在液晶显示器上观看当前日期和时间,该项目使用基于DS1307的RTC模块来维护时间和日期。 DS1307 RTC模块 该模块是围绕DS1307芯片搭建而成。这是一个实时时钟,这意味着我们可以得到小时,秒,分,星期,日期,月份和年份值。该模块需要外部电源,以便它可以停电时给模块供电,我们使用3V锂离子电池。该模块支持I2C,可以与Arduino等主设备通信,将秒数,小时,分钟,日期,日期和月份的时间值分别存储到相应的寄存器中,然后ds1307更新时间并更新寄存器值以了解有关ds1307的更多信息。你可以查看datasheet ds1307将数据存储在BCD中(二进制编码的十进制)格式。 HD44780液晶显示器 为了显示时间和日期,我使用了16 * 2液晶显示器,因为与7段显示器相比,它易于由Arduino控制,因此我们可以借助arduino的LiquidCrystal库与液晶显示器进行交互. 电位器 我们可以借助该电位计设置显示器的对比度 上拉寄存器 这些电阻是I2C接口所必需的,因为I2C器件具有集电极开路配置,这些上拉电阻将SDA和SCL线拉高. 按钮 我们可以借助这些按钮更改时钟的时间和日期值 复制我的代码并将其粘贴到你的编辑器上,然后将其上传到Arduino板上就可以运行。 最后 所有需要的文件在下载区均可找到。 via:Arduino DS1307 RTC CLOCK - Hackster.io
基于Arduino的闹钟 需要的元件 Arduino UNO 实时时钟(RTC):DS1307或DS3231 杜邦线 面包板 蜂鸣器 电阻221Ω Adafruit 标准 1602液晶显示器 SparkFun按钮开关12mm*4 Arduino IDE 原理及流程 介绍 这个时钟是我许多项目的基础。它是带有LCD显示屏,RTC (实时时钟)和3个按钮的简单时钟。为了方便和节省Arduino引脚,我使用了带有I2C模块的显示器。RTC还使用I2C协议。 连接到“下拉”电路的3个按钮用于调整或更改手表的时间和日期,而无需重新加载Arduino代码。 电路连接: LCD和RTC通过I2C协议和库“ Wire”与Arduino通信,并连接到ARDUINO的Pin A4和A5。 LCD & RTC---------------------- ARDUINO PIN SDA --------------------------------------- A4 SLC ---------------------------------------- A5 Arduino库: 你可以在下载区找到它们。 Wire.h:通过Arduino IDE RTClib.h LiquidCrystal_I2C.h 代码很简单;在循环中,检查是否按下了“菜单”按钮。如果未按下,它将显示日期和时间,否则将计算你按下按钮的次数,并通过各种设置调整时间。最后,它将使用输入的新数据更新RTC并显示日期和时间。 Arduino代码 为了消除“下拉”阻力,我必须对代码进行更改。 使用arduino的上拉电阻,并反转代码逻辑条件。 报警代码 闹钟的激活和禁用由“ P4”按钮的行444“ void Alarm()”控制。 要输入警报设置,必须同时使用“ P3”,“ P2”按钮,第81行: 如果未设置闹钟,则在闹钟处于活动状态时,显示屏底部将显示“ Alarm Off”,它显示已设置的时间。在计划的时间,显示屏闪烁,LED亮起,并且蜂鸣器发出两声提示音。 要关闭警报,你必须按P4按钮,或者一分钟后,它会单独关闭。我将附上电气原理图和Fritzing布局。 最后 所有需要的文件在下载区均可找到。 via:闹钟-Arduino项目中心