在前一篇文章《Wintel物联网平台-Windows IoT新手入门指南》中,我们讲解了Windows on Device硬件准备和软件开发环境的搭建,以及Hello Blinky项目的演示。在这篇文章开始,我们进入项目实践部分。

由于Windows on Device设计的时候以Galileo为硬件平台,所以其外设接口也是兼容了Arduino的标准。另外,其编程模式也是参考了Arduino中使用的Wiring Language。

1. PWM原理

Pulse Width Modulation 就是通常所说的PWM,译为脉冲宽度调制,简称脉宽调制。脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法,由于计算机不能输出模拟电压,只能输出0 或5V 的的数字电压值,我们就通过使用高分辨率计数器,利用方波的占空比被调制的方法来对一个具体模拟信号的电平进行编码。PWM 信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么是5V(ON),要么是0V(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM 进行编码。输出的电压值是通过通和断的时间进行计算的。输出电压=(接通时间/脉冲时间)*最大电压值。

PWM 被用在许多地方,调光灯具、电机调速、声音的制作等等。PWM 的三个基本参数如下:

  • 1、脉冲宽度变化幅度(最小值/最大值)
  • 2、脉冲周期(1 秒内脉冲频率个数的倒数)
  • 3、电压高度(例如:0V-5V)

Arduino 控制器有6 个PWM 接口分别是数字接口3、5、6、9、10、11,同样,在Galileo上也是这些接口支持PWM 输出。

2. 元器件和硬件连接

这次实践项目需要使用的元器件有:

  • 电位计模块*1
  • 直插LED*1
  • 220Ω直插电阻
  • 面包板*1
  • 面包板跳线 若干

电位计作为Galileo的模拟值输入,我们接到模拟口;LED灯我们接到PWM 接口上,这样通过产生不同的PWM 信号就可以让小灯有亮度不同的变化。

连接的原理图和硬件图如下:

3. 源代码解析

在编写程序的过程中,我们会用到模拟写入analogWrite(PWM 接口,模拟值)函数,对于模拟写入analogWrite()函数,此函数用法也很简单,我们在本实验中读取电位计的模拟值信号并将其赋给PWM 接口使小灯产生相应的亮度变化,再在屏幕上显示出读取的模拟值,大家可以理解为此程序是在模拟值读取的实验程序中多加了将模拟值赋给PWM 接口这一部分,下面是一段供参考的源程序,使用了模拟输入接口0和数字接口11。

// Main.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "arduino.h"

int _tmain(int argc, _TCHAR* argv[])
{
    return RunArduinoSketch();
}

int potpin = 0;//定义模拟接口0
int ledpin = 11;//定义数字接口11(PWM 输出)
int val = 0;// 暂存来自传感器的变量数值

void setup()
{
    // TODO: Add your code here
    pinMode(ledpin, OUTPUT);//定义数字接口11 为输出
    //注意:模拟接口自动设置为输入
}

// the loop routine runs over and over again forever:
void loop()
{
    // TODO: Add your code here

val = analogRead(potpin);// 读取电位计的模拟值并赋值给val
    Log(L"val: %d\r\n", val); //在调试窗口输出数值
    analogWrite(ledpin, val / 4);// 打开LED 并设置亮度(PWM 输出最大值为255)
    delay(10);//延时0.01 秒

}

4. 调试结果

启动Galileo,利用TelNet建立连接,然后点击调试。程序就会通过网口下载到Galileo上。我们旋转电位计的旋钮,不但可以看到屏幕上数值的变化,还也可以清楚的看到我们面包板上的LED 小灯的亮度也在随之变化。

调试的视频链接如下,大家可以看看调光灯的效果:http://v.youku.com/v_show/id_XODU0NjY1OTQw.html

转载于:https://www.cnblogs.com/dearsj001/p/WindowsOnDevice_1.html

Windows on Device 项目实践 1 - PWM调光灯制作相关推荐

  1. Windows on Device 项目实践 4 - 智能风扇制作

    在前面的文章中,我们已经学习并且利用Intel Galileo开发板和Windows on Device制作了火焰报警器.感光灯和PWM调光灯.在这个项目中,我们来利用温度传感器和直流电机,完成一个简 ...

  2. Jenkins使用FTP进行一键部署及回滚2(Windows)(项目实践)

    前提: 这一篇是继上一篇http://www.cnblogs.com/EasonJim/p/6092938.html的真实项目实践. 思路和大致实现步骤请参照上一篇文章. 注意:这篇文章涉及到两台服务 ...

  3. 《精通Unix下C语言与项目实践》读书笔记(16)

    <精通Unix下C语言编程与项目实践>读书笔记(new) 文章试读  不拘一个遍程序系列:编程序不能一个脑袋钻到底,有时要学会变通,即所谓的曲线救国.一.二.三.四 职场规划:一些杂七杂八 ...

  4. 基于pnpm + lerna + typescript的最佳项目实践 - 理论篇

    本文来自作者@金虹桥程序员 投稿 原文链接:https://juejin.cn/post/7043998041786810398 本系列文章分为两篇:理论篇和实践篇 理论篇:介绍pnpm(pnpm的特 ...

  5. Windows Azure 安全最佳实践 - 第 6 部分:Azure 服务如何扩展应用程序安全性

    多种 Windows Azure服务可以帮助您将应用程序安全性扩展到云. 有三种服务可提供多个提供程序之间的身份标识映射.内部部署数据中心间的连接和相互发送消息的应用程序功能(无论应用程序位于何处). ...

  6. Java编程比C编程好吗?《精通Unix下C语言与项目实践》读书笔记(15)

    <精通Unix下C语言编程与项目实践>读书笔记(new) 文章试读  不拘一个遍程序系列:编程序不能一个脑袋钻到底,有时要学会变通,即所谓的曲线救国.一.二.三.四 职场规划:一些杂七杂八 ...

  7. python项目实践_python实践项目

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 文章节选自<机器学习--python实践>文末评论赠送本书,欢迎留言 ...

  8. DockOne微信分享(八十一):唯品会数据库备份恢复容器化项目实践经验总结

    本文讲的是DockOne微信分享(八十一):唯品会数据库备份恢复容器化项目实践经验总结[编者的话]本文分享了唯品会数据库Docker的异地容灾项目实践经验,项目中针对用户数据库的异地恢复场景的需求进行 ...

  9. go语言 使用MTP协议 通过WPD(windows portable device)读取便携式设备信息并进行文件传输

    最下方有demo及源码. 背景 当手机通过 USB 连接 PC (选择文件传输,也就是MTP方式) 时,会看到设备管理器中出现便携设备这一栏,如下图: 打开我的电脑可以看到设备和驱动器中出现对应的设备 ...

  10. Unix编程需要学习的内容(3)《精通Unix下C语言与项目实践》读书笔记(13)

    <精通Unix下C语言编程与项目实践>读书笔记(new) 文章试读  不拘一个遍程序系列:编程序不能一个脑袋钻到底,有时要学会变通,即所谓的曲线救国.一.二.三.四 职场规划:一些杂七杂八 ...

最新文章

  1. MIT教授Regina Barzilay:用机器学习扼住命运的喉咙
  2. 「镁客·请讲」深睿医疗乔昕:AI医疗才起步,说变革尚早
  3. 使用pytorch将数据集分成一份一份的
  4. WebVie打开woffice文档
  5. K-近邻分类算法KNN
  6. OpenCV_006-OpenCV 轨迹栏作为调色板
  7. 【DP】【容斥】Nice to Meet You(AT3634)
  8. HDU1530 最大流问题
  9. TOMCAT启动完成但是ECLIPSE仍然显示starting....
  10. flask v0.1 执行流程 Flask(__name__)
  11. java赋值兼容原则,多态问题抛出(赋值兼容性原则遇上父类与子类同名函数的时候)...
  12. 图片文字识别软件怎么下载
  13. 字节教育开辟新业务线,推出“闪电搜题”App可拍题和自习
  14. jquery点击按钮删除文本框的内容
  15. catia二次开发:函数
  16. 抖音SEO优化:最详细抖音视频SEO教程
  17. opencv图像处理02-图像矩阵掩模操作
  18. Verilog学习:ICE40UP5K_PICO按键点灯
  19. 移植boa服务器和错误指南
  20. C语言的字符串输入gets()函数

热门文章

  1. scala 模式匹配概念及用法示例
  2. flume拦截器及自定义拦截器
  3. TinyML与Tensor Flow Lite的关系
  4. Cmake构建_设置debug与release输出路径
  5. 基于channel的goroutine
  6. 初探HTML5.x新特性《dialog》标签
  7. SQL Server2008的数据导入到SQL Server2005
  8. 利用FrameLayout连接一组view实现流畅的左右滑动
  9. .net知识和学习方法系列(二十五) .net中的windows service与服务操作
  10. [导入]一个asp中关于execute的测试