©版权归imtcn.com和Ledong所有,转载请保持本文完整性,并注明出处
这是《Ledong手把手入门系列教程》的第十八课,这一课我们将利用Ledong板实现一个虚拟混色器。
本实验中,可以使用Ledong板上的串口写入功能向电脑发送多个值。通过3个电位计获得模拟值,分别用来设置红绿蓝三种颜色,这种颜色将作为程序的背景色显示在计算机上。
实验所需器材:
| 名 称 | 数量 |
| Ledong板 | 1套 |
| 100KΩ电位计 | 3个 |
| 面包板 | 1块 |
| 导线 | 若干 |
根据图18-1的方法连接电路,将三个电位器外侧针脚分别连接在【5V 】和【GND】上,中间针脚接至模拟针脚【A0】至【A2】 。
图18-1 连接示意图
将Ledong用线缆连接到PC上,打开软件程序,并设置好后,将下列代码输入到软件中,通过编译下载命令,将程序下载到Ledong中。
/*虚拟混色器*/
int redPin = 0; //红色分量
int greenPin = 1; //绿色分量
int bluePin = 2; //蓝色分量
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.print(“R”);
Serial.println(analogRead(redPin));
Serial.print(“G”);
Serial.println(analogRead(greenPin));
Serial.print(“B”);
Serial.println(analogRead(bluePin));
delay(100);
}
另外,还需配合使用processing软件,运行以下程序:
/* 虚拟混色器 在processing中运行的程序 */
import processing.serial.*;
String buff = “”;
int rval = 0, gval = 0, bval = 0;
int NEWLINE = 10;
Serial port;
void setup()
{ size(200, 200);
println(“Available serial ports:”);
println(Serial.list());
port = new Serial(this, Serial.list()[0], 9600);
}
void draw()
{ while (port.available() > 0) {
serialEvent(port.read());
}
background(rval, gval, bval);
}
void serialEvent(int serial)
{ if(serial != NEWLINE){
buff += char(serial);
}
else{
char c = buff.charAt(0);
buff = buff.substring(1);
buff = buff.substring(0, buff.length()-1);
if (c == ‘R’)
rval = Integer.parseInt(buff);
else if (c == ‘G’)
gval = Integer.parseInt(buff);
else if (c == ‘B’)
bval = Integer.parseInt(buff);
buff = “”;
}
}
程序下载后,按运行键。可以观察到,processing软件会弹出一个对话框,当改变3个电位计的值,对话框中的背景色也将随着改变。
Ledong手把手入门系列教程之十八.虚拟混色器的运行效果图18-2如下:
图18-2 运行效果图
本例套件可以通过下面的方式购买:
Ledong手把手入门系列教程之十八.虚拟混色器的原理图18-3如下:
图18-3 原理图
Ledong手把手入门系列教程之十八.虚拟混色器的PCB布线图18-4如下:
图18-4 pcb布线图
本实验导线连接比较复杂,注意认真检查电路的连线是否与简介中描述的一致。每个电位计有3个引脚,位于两端的引脚要分别连接电源和地。
http://www.imtcn.com
©版权归imtcn.com和Ledong所有,转载请保持本文完整性,并注明出处
这是《Ledong手把手入门系列教程》的第十六课,这一课我们将利用Ledong板测量和显示温度。
本实验通过温度传感器读取数据,并将其显示在LCD屏幕上。需要用的元件如下表,其中10KΩ电位计用于调节液晶显示器的亮度和对比度。
实验所需器材:
| 名 称 | 数量 |
| Ledong板 | 1套 |
| LCD | 1个 |
| DS18B20温度传感器 | 1个 |
| 74HC595芯片 | 1片 |
| 4.7KΩ电阻 | 3个 |
| 10KΩ电位计 | 1个 |
| 面包板 | 2块 |
| 导线 | 若干 |
根据图16-1的方法连接电路:
图16-1 连接示意图
将Ledong用线缆连接到PC上,打开软件程序,并设置好后,将下列代码输入到软件中,通过编译下载命令,将程序下载到Ledong中。此外,还需根据代码的要求,拷贝DallasTemperature文件夹与OneWire文件夹至Ledong安装路径下的libraries文件夹中。
#include <LCD3Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define LCD_LINES 2
#define DOUT_PIN 7
#define STR_PIN 6
#define CLK_PIN 5
#define ONE_WIRE_BUS 12
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LCD3Wire lcd = LCD3Wire(LCD_LINES, DOUT_PIN, STR_PIN, CLK_PIN);
char * floatToString(char * outstr, float value, int places, int minwidth, bool rightjustify);
void setup(void) {
lcd.init();
sensors.begin();
}
void loop(void) {
float temp;
char buff[10];
sensors.requestTemperatures();
temp = sensors.getTempCByIndex(0);
lcd.cursorTo(2,0);
lcd.printIn(floatToString(buff,temp,3,0,false));
lcd.print(0xDF);
lcd.print(‘C’);
}
char * floatToString(char * outstr, float value, int places, int minwidth, bool rightjustify) {
int digit;
float tens = 0.1;
int tenscount = 0;
int i;
float tempfloat = value;
int c = 0;
int charcount = 1;
int extra = 0;
float d = 0.5;
if (value < 0)
d *= -1.0;
for (i = 0; i < places; i++)
d/= 10.0;
tempfloat += d;
if (value < 0)
tempfloat *= -1.0;
while ((tens * 10.0) <= tempfloat) {
tens *= 10.0;
tenscount += 1;
}
if (tenscount > 0)
charcount += tenscount;
else
charcount += 1;
if (value < 0)
charcount += 1;
charcount += 1 + places;
minwidth += 1;
if (minwidth > charcount){
extra = minwidth – charcount;
charcount = minwidth;
}
if (extra > 0 and rightjustify) {
for (int i = 0; i< extra; i++) {
outstr[c++] = ‘ ‘;
}
}
if (value < 0)
outstr[c++] = ‘-’;
if (tenscount == 0)
outstr[c++] = ’0′;
for (i=0; i< tenscount; i++) {
digit = (int) (tempfloat/tens);
itoa(digit, &outstr[c++], 10);
tempfloat = tempfloat – ((float)digit * tens);
tens /= 10.0;
}
if (places > 0)
outstr[c++] = ‘.’;
for (i = 0; i < places; i++) {
tempfloat *= 10.0;
digit = (int) tempfloat;
itoa(digit, &outstr[c++], 10);
// once written, subtract off that digit
tempfloat = tempfloat – (float) digit;
}
if (extra > 0 and not rightjustify) {
for (int i = 0; i< extra; i++) {
outstr[c++] = ‘ ‘;
}
}
outstr[c++] = ‘\0′;
return outstr;
}
程序下载后,按运行键。可以观察到,液晶显示器将会显示外界的温度。
Ledong手把手入门系列教程之十六.数字温度计的运行效果图16-2如下:
图16-2 运行效果图
本例套件可以通过下面的方式购买:
Ledong手把手入门系列教程之十六.数字温度计的原理图16-3如下:
图16-3 原理图
Ledong手把手入门系列教程之十六.数字温度计的PCB布线图16-4如下:
图16-4 pcb布线图
本实验导线连接比较复杂,注意认真检查电路的连线是否与简介中描述的一致,尤其是74HC595芯片的连线。
http://www.imtcn.com
http://fritzing.org/projects/digital-thermometer/
©版权归imtcn.com和Ledong所有,转载请保持本文完整性,并注明出处
这是《Ledong手把手入门系列教程》的第十五课,这一课我们将利用Ledong板和液晶显示屏实现一个温度显示器。
本实验通过液晶显示器上的数字来显示外界的当前温度。当热敏电阻无法工作时,液晶显示器也会给出指示。
实验所需器材:
| 名 称 | 数量 |
| Ledong板 | 1套 |
| LCD | 1个 |
| 10KΩ热敏电阻NTC 3D-15 | 1个 |
| 10KΩ电阻 | 1个 |
| 10KΩ电位计 | 1个 |
| 面包板 | 1块 |
| 导线 | 若干 |
根据图15-1的方法连接电路:
图15-1 连接示意图
将Ledong用线缆连接到PC上,打开软件程序,并设置好后,将下列代码输入到软件中,通过编译下载命令,将程序下载到Ledong中。此外,还需根据代码的要求,拷贝LCD3Wire文件夹至Ledong安装路径下的libraries文件夹中。
/* 温度显示器 */
#include <LiquidCrystal.h>
//初始化
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#include <math.h>
double Thermister(int RawADC) {
double Temp;
Temp = log(((10240000/RawADC) – 10000));
Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp * Temp * Temp));
Temp = Temp – 273.15; //温度单位制转换
return Temp;
}
void setup() {
//设置LCD的行列
lcd.begin(16, 2);
//在LCD上显示信息
}
void loop() {
lcd.clear();//LCD清屏
lcd.setCursor(0,0);
lcd.print(“current temp. “);
lcd.setCursor(0,1);
lcd.print(int(Thermister(analogRead(0))));
lcd.print(” deg.C”);
delay(1000);
}
程序下载后,按运行键。可以观察到,液晶显示器将会显示外界的当前温度。
Ledong手把手入门系列教程之十五.温度显示器的运行效果图15-2如下:
图15-2 运行效果图
本例套件可以通过下面的方式购买:
Ledong手把手入门系列教程之十五.温度显示器的原理图15-3如下:
图15-3 原理图
Ledong手把手入门系列教程之十五.温度显示器的PCB布线图15-4如下:
图15-4 pcb布线图
本实验导线连接比较复杂,注意认真检查电路的连线是否与简介中描述的一致,尤其是液晶显示器LCD的连线。此外,需适当调节电位计的值,使LCD的亮度适中,能正常显示出文字。
http://www.imtcn.com
http://fritzing.org/projects/thermistor-output-to-lcd/
©版权归imtcn.com和Ledong所有,转载请保持本文完整性,并注明出处
这是《Ledong手把手入门系列教程》的第十四课,这一课我们将利用Ledong板实现一个光强指示器。
本实验中的电路可应用于机动车上的光强指示保护器。该保护器的实现只需要配有一个7段数码管的就可以简单实现了。电路包括一个模拟输入和一个光敏电阻。为了使显示变暗,用光敏电阻来检测周围的光强。
实验所需器材:
| 名 称 | 数量 |
| Ledong板 | 1套 |
| 7段数码管 | 1个 |
| 光敏电阻 | 1个 |
| 62Ω电阻 | 7个 |
| 150Ω电阻 | 1个 |
| 1MΩ电阻 | 1个 |
| 面包板 | 1块 |
| 导线 | 若干 |
根据图14-1的方法连接电路:
图14-1 连接示意图
将Ledong用线缆连接到PC上,打开软件程序,并设置好后,将下列代码输入到软件中,通过编译下载命令,将程序下载到Ledong中。本实验的代码正在更新中,需访问以下网址获取:
http://fritzing.org/projects/gear-indicator/
程序下载后,按运行键。可以观察到,当外界光强变小时,指示器显示的数字会变小。
Ledong手把手入门系列教程之十四.光强指示器的运行效果图14-2如下:
图14-2 运行效果图
本例套件可以通过下面的方式购买:
Ledong手把手入门系列教程之十四.光强指示器的原理图14-3如下:
图14-3 原理图
Ledong手把手入门系列教程之十四.光强指示器的PCB布线图14-4如下:
图14-4 pcb布线图
本实验导线连接比较复杂,注意认真检查电路的连线是否与简介中描述的一致。
7段LED数码管是利用7个LED外加一个小数点的LED组合而成的显示设备,可以显示0~9等10个数字和小数点,使用非常广泛,其示意图如右图所示。
这类数码管分为共阳极和共阴极两种,共阳极就是把LED的阳极连接到共节点com,而每个LED的阴极分别为a、b、c、d、e、f、g及dp;共阴极则是把所有LED的阴极连接到共同节点com,而每个LED的阳极分别为a、b、c、d、e、f、g及dp。
http://www.imtcn.com
http://fritzing.org/projects/gear-indicator/
这是《Ledong手把手入门系列教程》的第十三课,在这一课我们将利用一个压电式扬声器用来捕获敲击的声音。
压电式扬声器是一种既可以用来播放声音,又可以用来检测声音的电子设备。在这课中,使用一个无源蜂鸣器用来捕获敲击的声音,然后通过串口给电脑发送回一个“knock!”,最后使用Ledong串口监视来查看这些文字。
实验所需器材:
| 名 称 | 数量 |
| Ledong板 | 1套 |
| 1MΩ电阻 | 1个 |
| 无源蜂鸣器 | 1个 |
| 面包板 | 1块 |
| 导线 | 若干 |
根据图13-1的方法连接电路,将压电式扬声器的红线连接到Ledong的模拟口【A4】,黑线连接到【GND】,再将一个约1M的电阻与压电式蜂鸣器并联。最后运行程序来分析模拟输入值。
图13-1 连接示意图
将Ledong用线缆连接到PC上,打开软件程序,并设置好后,将下列代码输入到软件中,通过编译下载命令,将程序下载到Ledong中。
/* 敲击检测 */
int ledPin = 13;
int knockSensor = 0;
byte val = 0;
int statePin = LOW;
int THRESHOLD = 100; // 用于决定是否有敲击的阈值
void setup() {
pinMode(ledPin, OUTPUT); // 声明输出端
Serial.begin(9600); // 使用串口
}
void loop() {
val = analogRead(knockSensor);
if (val >= THRESHOLD) {
statePin = !statePin;
digitalWrite(ledPin, statePin);
Serial.println(“Knock!”);
}
delay(100);
}
程序下载后,按运行键。可以观察到,当敲击压电式蜂鸣器时,电路板上的【D13】处的LED灯会闪烁,且闪烁频率会随着敲击的快慢改变:敲得越快,LED闪烁得越快。
Ledong手把手入门系列教程之十三.敲击检测的运行效果图13-2(a)如下:
图13-2(a) 运行效果图
运行成功后,选择Ledong的软件界面上的“串口监视”,这时将会弹出一个对话框。当发生一次敲击时,对话框中就会出现一个“Knock!”,效果如图13-2(b)所示:
图13-2(b) 运行效果图
本例套件可以通过下面的方式购买:
Ledong手把手入门系列教程之十三.敲击检测的原理图13-3如下:
图13-3 原理图
Ledong手把手入门系列教程之十三.敲击检测的PCB布线图13-4如下:
图13-4 pcb布线图
认真检查电路的连线是否与简介中描述的一致,尤其是压电式蜂鸣器的正负管脚注意不要接反了。
本实验采用的蜂鸣器为压电式,只需要将其正负管脚直接连入电路即可。如果使用一般的蜂鸣器,则需要配合使用一个放大电路,见下图:
http://www.imtcn.com
http://fritzing.org/projects/knock/