怎样用测力计自行车产生电压

第1步:材料:
1 raspberry pi 3;
1 arduino mega 2560;
1个带10个继电器12 v的继电器护罩;
10盏白炽灯127 v;
1个测力计自行车;
1电机(发电机)12 v;
电阻器(1x1kω,2x10kω);
1电解电容10μf;
1齐纳二极管5.3 v;
1.5毫米电缆(红色,黑色,棕色);
1支持10盏灯的mdf塔。
步骤2:系统框图:
步骤3:系统操作:
该系统基于电动自行车骑行时产生的动能的转换,该电能负责启动将打开灯的继电器。
发生器产生的电压由arduino的模拟引脚读取,并通过rx-tx发送到raspberry pi。继电器的激活与产生的电压成正比 - 电压越高,触发的继电器就越多,灯就会点亮。
步骤4:力学方面
为了将直流发电机机械地连接到自行车上,皮带系统必须由普通自行车上使用的系统(由表冠,链条和小齿轮组成)代替。将金属板焊接到自行车车架上,以便可以通过螺钉固定发动机。之后,将小齿轮焊接到发电机轴上,以便可以放置链条,将踏板系统与发电机互连。
步骤5:电压读数:
要使用arduino读取发电机的电压,需要将电机的正极连接到控制器的a0引脚,将负极连接到gnd - 以避免发电机的最大电压大于在控制器和发生器之间构建了5 v的arduino引脚,一个使用10μf电容的电压滤波器,一个1kω的电阻和一个5.3 v的齐纳二极管。 arduino中加载的固件非常简单,仅包括读取模拟端口,将读取的值乘以常数0.0048828125(5/1024,即arduino的gpio电压除以其模拟端口的位数)并发送变量到串行 - 代码将在文章中提供。
在raspberry pi中启用rx-tx通信的过程有点复杂,您必须按照链接中描述的过程进行操作。简而言之,您需要编辑名为“inittab”的文件 - 位于“/etc/inittab” - ,注释行“t0:23:respawn:/sbin/getty -l ttyama0 115200 vt100”(如果文件不是在raspberry的操作系统中创建,您必须输入命令:“sudo leafpad/boot/config.txt”并将“enable_uart = 1”行附加到文件末尾。完成此操作后,必须重新打开lx终端并使用命令“sudo systemctl stop serial-getty@ttys0.service”和“sudo systemctl disable serial-getty@ttys0.service”禁用serial。之后你必须执行命令“sudo leafpad/boot/cmdline.txt”,删除“console = serial0,115200”行,保存文件并重启设备。为了能够进行rx-tx通信,必须使用命令“sudo apt-get install -f python-serial”在raspberry pi上安装串行库,并通过插入“import serial”行将库导入代码中,通过插入行“ser = serial.serial(”/dev/ttys0“,9600)”来初始化串行,并使用命令“ser.readline()”读取arduino发送的电压 - 使用的完整代码raspberry中的内容将在本文末尾提供。
按照上述步骤,读取和发送电压步骤完成。
步骤6:arduino编程:
如前所述,负责读取循环时产生的电压的代码非常简单。
首先,有必要选择a0引脚作为负责读取电压。
在“void setup()”功能中,需要通过“pinmode(sensor,input)”命令将引脚a0设置为input并选择串口传输离子速度使用“serial.begin(9600)”命令。
在“void loop()”中,“serial.flush()”函数用于在每次终止发送时清除缓冲区信息通过串口;电压读数由“analogread(sensor)”函数执行 - 记住有必要将模拟端口读取的值转换为volts - 文章“读取电压”部分中引用的过程。
另外,在“void loop()”函数中,有必要将变量x从float转换为string,因为这是通过rx-tx发送变量的唯一方法。循环函数的最后一步是在串行端口中打印字符串,以便将其发送到raspberry - 为此,您必须使用“serial.println(y)”函数。 “delay(100)”行仅添加到代码中,以便以100 ms的间隔发送变量 - 如果不遵守此时间,将发生串行过载,从而在程序中生成可能的崩溃。
voltage_read.ino
float sensor = a0;
void setup (){
pinmode (sensor,input);
serial。 begin ( 9600 );
}
void loop (){
serial。 flush ();
float x = analogread (传感器)* 0.0048828125 * 16.67 ;
字符串y = ” “ ;
y + = x;
serial。 println (y);
delay ( 100 》;
}
查看由github托管的rawvoltage_read.ino
第7步:raspberry pi 3编程:
lamps_bike.py
import os #导入操作系统库(用于在必要时清除屏幕)
import rpi。 gpio as gpio #导入库用于控制raspnerry的gpio
导入串行 #导入库负责串行通信
import 时间 #导入库,可以使用延迟功能
导入子进程 #导入库负责播放歌曲
# start serial
ser = serial.serial( “/dev/ttys0 “ , 9600 ) #定义设备名称和波特率
# clear screen
clear = lambda :os.system( ‘ clear ’ )
#设置引脚用于继电器控制
gpio.setmode(gpio。 board )
gpio.setup( 11 ,gpio。 out ) #灯10
gpio .setup( 12 ,gpio。 out ) #指示灯9
gpio.setup( 13 ,gpio。 out ) #指示灯8
gpio.setup( 15 ,gpio。 out ) #灯7
gpio。设置( 16 ,gpio。 out ) #指示灯6
gpio.setup( 18 ,gpio。 out ) #指示灯5
gpio.setup ( 19 ,gpio。 out ) #指示灯4
gpio.setup( 21 ,gpio。 out ) #灯3
gpio.setup( 22 ,gpio。 out ) #指示灯2
gpio.setup( 23 ,gpio。 out ) #灯1
#开始记录
name = [ “无”] * 10
电压 = [ 0.00 ] * 10
#读取记录文件
f = 打开( ‘记录’ , ‘ r ’ )
i 范围( 10 ): #列表中出现10个最佳分数
name [i] = f.readline()
name [i] = name [i] [: len (name [i]) - 1 ]
voltage [ i] = f.readline()
电压[i] = 浮动(电压[i] [: len (电压[i]) - 1 ])
f.close()
clear()
#设置最大电压
max = 50.00
#关灯
for i in 范围( 11 , 24 , 1 ):
if i != 14 和 i != 17 和 i != 20 :
gpio.output(i,gpio。 high ) #设置为high,继电器关闭
# start
while true :
#初始屏幕
print ”记录: n “
i 范围( 10 ):
print name [i] , “:” ,电压[i], “ v ”
current_name = raw_input ( “将您的名字写下来开始:” )
clear()
#更改最大值
if current_name == “ max ” :
max = 输入( ”写下最大电压:( 2位小数)“ )
clear()
else :
#启动警告
for i in 范围( 11 , 24 , 1 ): #循环在pin 11中启动并在pin 24中停止
if i != 14 和 i != 17 和 i != 20 : # pin 14和20是gnd引脚,20是3.3 v引脚
gpio.output(i, gpio。低) #打开灯
time.sleep( 0.5 )
k = 10
for i in 范围( 23 , 10 , - 1 ):
clear()
if i != 14 和 i != 17 和 i != 20 :
subprocess.popen ([ 的 aplay 的 , 的音像/的 + str (k)的 + 的的.wav 的 ])
时间。睡眠( 0.03 )
clear()
打印 “准备《!跨度》 n ” ,k
时间。睡眠( 1 )
k - = 1
gpio.output(i,gpio。 high ) #关灯(逐个)
subprocess.popen( [ 的 aplay 的 , 的音像/go.wav 的 ]) #播放开始音乐
time.sleep( 0.03 )
clear()
打印 ” go!“
time.sleep( 1 )
clear()
#电压读数
current_voltage = 0.00
voltage1 = 0.00
i 范围( 200 ):
ser.flushinput()
previous = voltage1
voltage1 = float (ser.readline()) #收集由rx-tx传输的arduino数据
clear()
打印 voltage1, ” v “
if voltage1 》 current_voltage:
current_voltage = voltage1
#取决于产生的电压,更多灯点亮。
如果 voltage1 《 max / 10 :
for i 范围( 11 , 24 , 1 ):
if i != 14 和 i != 17 和 i != 20 :
gpio.output(i,gpio。 high )
如果 voltage1 》 = max / 10 :
gpio.output( 11 ,gpio。 low )
i 范围( 12 , 24 , 1 ):
if i != 14 和 i != 17 和 i != 20 :
gpio.output(i,gpio。 high )
if voltage1 》 = 2 * 最大 / 10 :
《 范围( 11 , 13 , 1 ):
gpio。输出(i,gpio。低)
for i 范围( 13 , 24 , 1 ):
如果 i != 14 和 i != 17 和 i != 20 :
gpio.output(i,gpio。 high )
如果 voltage1 》 = 3 * max / 10 :
i 范围( 11 , 14 , 1 ):
gpio.output(i,gpio。 low )
i 范围( 15 , 24 , 1 ):
如果 i != 17 和 i != 20 :
gpio.output(i,gpio。 high )
if voltage1 》 = 4 * max / 10 :
for i in 范围 ( 11 , 16 , 1 ):
if i != 14 :
gpio.output(i,gpio。 low )
for i 范围( 16 , 24 , 1 ):
if i != 17 和 i != 20 :
gpio.output(i,gpio。 high )
if voltage1 》 = 5 * max / 10 :
范围 span》 11 , 17 , 1 ):
如果 i != 14 :
gpio.output(i,gpio。 low )
for i 范围( 18 , 24 , 1 ):
如果 i != 20 :
gpio.output(i,gpio。 high )
如果 voltage1 》 = 6 * max / 10 :
for i 范围( 11 , 19 , 1 ):
if i != 14 和 i != 17 :
gpio.output(i,gpio。 low )
i 范围( 19 , 24 , 1 ):
如果 i != 20 :
gpio.output(i,gpio。 high )
if voltage1 》 = 7 * 最大 / 10 :
for i in 范围( 11 , 20 , 1 ):
if i != 14 和 i != 17 :


USB读卡器实验
Lora高智能可燃气感探测器的特点
电机驱动着世界运转
苹果发布会没有iPhone12 二手市场iPhone竟涨价了
移远入选年度车载通讯模组领军供应商 广和通加速5G超宽带应用落地
怎样用测力计自行车产生电压
边缘AI核心技术和产业链!技术持续进步,应用不断拓展!
白光LED改造电动车灯制作教程
关于反激电源电气参数测量方法及注意事项
岚图汽车成为了名副其实的现代化智慧工厂
高频芯片主要用于发动机引擎的标识和管理
基于LabVIEW和PXI平台设计的6-DOF并联机器人控制
氢燃料电池与储能电池并不存在替代关系
【访谈】汽车电子的新动向
2017小米在CES!不只是白色版小米MIX和电视还有多款新品
位列国产半导体设备厂商五强,芯源微进军科创板
C10隐藏式记录仪,你没想到,活的高科技!
西部数据宣布推出SN550 理论最高连续读取速度达2400MB/s
时钟发生器在单轨1.8V电源上运行
弹片微针模组可有效提升3C锂电池安全性测试