怎么用ad制作制作电子转盘 电路原理:电路主要由脉冲产生器和一个十进制计数器电路组成
时间: 2024-05-13 20:14:24 浏览: 111
制作电子转盘需要以下材料和工具:
材料:
- Arduino开发板
- 7段数码管(共阳极)
- 74HC595移位寄存器
- 10k电位器
- 10个LED灯
- 10个电容(0.1uF)
- 10个电阻(220欧姆)
- 10个NPN三极管(2N2222)
- 电路板
- 连接线
工具:
- 电烙铁和焊锡
- 钳子
- 电线剥皮器
- 面包板
电路原理:
该电路的主要部分是一个脉冲产生器和一个十进制计数器电路。脉冲产生器使用Arduino的计时器和一个电位器来生成一个可变频率的脉冲。这些脉冲被送到74HC595移位寄存器的时钟引脚,以控制7段数码管的显示。另外,10个LED灯通过NPN三极管和电阻控制,以显示获奖的位置。
制作步骤:
1. 将电位器插入面包板上,并将其中一个引脚与Arduino的引脚A0连接。
2. 连接10个LED灯,每个LED灯通过一个电阻和一个NPN三极管与Arduino连接。
3. 将74HC595移位寄存器插入面包板上,并将其与Arduino连接(DS引脚连接到引脚2,SH_CP引脚连接到引脚3,ST_CP引脚连接到引脚4)。
4. 将10个电容(0.1uF)连接到74HC595移位寄存器的Q0-Q9引脚。
5. 将10个电阻(220欧姆)连接到NPN三极管的基极。
6. 将7段数码管插入面包板上,并将其连接到74HC595移位寄存器上(a-g引脚连接到74HC595的Q0-Q6引脚,DP引脚连接到74HC595的Q7引脚)。
7. 将10个NPN三极管的集电极连接到共阳极7段数码管的阳极。
8. 将Arduino连接到电脑上,并将代码上传到Arduino中。
下面是示例代码:
```C++
#include <ShiftRegister74HC595.h>
// 定义74HC595引脚
const int dataPin = 2;
const int latchPin = 4;
const int clockPin = 3;
// 定义脉冲产生器引脚
const int potPin = A0;
// 定义LED引脚
const int led1 = 5;
const int led2 = 6;
const int led3 = 7;
const int led4 = 8;
const int led5 = 9;
const int led6 = 10;
const int led7 = 11;
const int led8 = 12;
const int led9 = 13;
const int led10 = A1;
// 定义数码管显示字符
byte numbers[] = {
B00111111, // 0
B00000110, // 1
B01011011, // 2
B01001111, // 3
B01100110, // 4
B01101101, // 5
B01111101, // 6
B00000111, // 7
B01111111, // 8
B01101111 // 9
};
ShiftRegister74HC595 sr(dataPin, clockPin, latchPin);
void setup() {
// 初始化LED引脚
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
pinMode(led9, OUTPUT);
pinMode(led10, OUTPUT);
// 初始化数码管引脚
sr.clear();
sr.write(numbers[0]);
sr.write(numbers[0], true);
}
void loop() {
// 读取电位器值
int potValue = analogRead(potPin);
// 计算脉冲周期
int delayValue = map(potValue, 0, 1023, 1000, 100);
// 产生脉冲
digitalWrite(led1, HIGH);
delayMicroseconds(delayValue);
digitalWrite(led1, LOW);
// 计数器加1
sr.shift(1);
// 显示数码管
for (int i = 0; i < 10; i++) {
if (sr.getState(i)) {
sr.write(numbers[i]);
break;
}
}
// 显示LED灯
digitalWrite(led1, sr.getState(0));
digitalWrite(led2, sr.getState(1));
digitalWrite(led3, sr.getState(2));
digitalWrite(led4, sr.getState(3));
digitalWrite(led5, sr.getState(4));
digitalWrite(led6, sr.getState(5));
digitalWrite(led7, sr.getState(6));
digitalWrite(led8, sr.getState(7));
digitalWrite(led9, sr.getState(8));
digitalWrite(led10, sr.getState(9));
// 延时
delay(50);
}
```
上传代码后,就可以通过旋转电位器来控制脉冲频率,从而控制电子转盘的旋转速度。当电子转盘停止旋转时,获奖的位置将显示在数码管和LED灯上。
阅读全文