具有自动和手动模式的双轴太阳能跟踪器面板
组件和用品
| | × | 1 | |
| | × | 2 | |
| | × | 2 | |
| | × | 1 | |
| | × | 2 | |
| | × | 4 | |
| | × | 5 | |
| | × | 2 | |
关于这个项目
这是我的学生在 2017-2018 年夜总会青年黑客期间实施的一个项目。这对小学生来说是一个要求很高的项目,我们需要多次会议才能完成。它包含一个可以沿两个轴旋转的小型 5V 太阳能电池板,以便从太阳中获得最大的能量。该项目基于 OpenSourceClassroom 的双轴太阳能跟踪器项目。
我们希望在最终产品中实现两种模式。
为了实现这一点,我们对设备进行了编程,以在按钮和两个 LED 指示灯的帮助下在模式之间切换。当设备处于手动模式时,红灯亮,我们可以借助两个电位器控制面板在两个轴上的旋转。当设备处于自动模式时,蓝灯亮起,面板的旋转由从四个 LDR 收集的光决定。编程是在 tinkercad 中完成的。
学生以生产线的形式分组工作以完成任务。 (焊线、线绝缘、零件拧紧等)。
代码
旋转太阳能电池板代码Arduino
双轴太阳能板最终代码#include //初始化变量int mode =0; int buttonState =0; int prevButtonState =0; int topLeftLight =0; int topRightLight =0;int bottomLeftLight =0;int bottomRightLight =0;int LeftLight =0;int RightLight =0;int TopLight =0;int BottomLight =0;//声明两个舵机Servoservo_9;Servoservo_10;void setup(){ pinMode(7, 输入); //模式按钮 pinMode(12, OUTPUT); //手动模式的指示灯 pinMode(11, OUTPUT); //自动模式的指示灯 pinMode(A0, INPUT); //左右移动电位器 pinMode(A1, INPUT); //上下运动电位器 pinMode(A2, INPUT); //光传感器向上 - 左 pinMode(A3, INPUT); //光传感器向上 - 右 pinMode(A4, INPUT); //光传感器底部 - 左 pinMode(A5, INPUT); //光传感器底部-右侧servo_9.attach(9); //伺服电机右-左运动servo_10.attach(10); //伺服电机上下运动}void loop(){ buttonState =digitalRead(7); if (buttonState !=prevButtonState) { if (buttonState ==HIGH) { //改变模式并点亮正确的指示器 if (mode ==1) { mode =0;数字写入(12,高);数字写入(11,低); }其他{模式=1;数字写入(11,高);数字写入(12,低); } } } prevButtonState =buttonState;延迟(50); // 等待 50 毫秒 if (mode ==0) { //如果模式是手动将锅值映射到旋转度数伺服_9.write(map(analogRead(A0), 0, 1023, 0, 180) );伺服_10.write(map(analogRead(A1), 0, 1023, 0, 180)); } else { //如果模式是自动将传感器值映射到 0-100 光强度。 //每个光传感器都有不同的灵敏度,必须首先测试 //它的高低值 topLeftLight =map(analogRead(A2),50,980,0,100); topRightLight =map(analogRead(A3),200,990,0,100); bottomLeftLight =map(analogRead(A4),170,970,0,100); bottomRightLight =map(analogRead(A5),250,1000,0,100); //计算平均光照条件 TopLight =((topRightLight + topLeftLight) / 2);底光 =((bottomRightLight + bottomLeftLight) / 2); LeftLight =((topLeftLight + bottomLeftLight) / 2); RightLight =((topRightLight + bottomRightLight) / 2); //如果需要,旋转舵机 if (abs((RightLight - LeftLight))> 4) { //仅当光差大于 4% 时才改变位置 if (RightLight LeftLight) { if (servo_9.read()> 0) {servo_9.write((servo_9.read() - 1)); } } } if (abs((TopLight - BottomLight))> 4) { //仅当光差大于4%时才改变位置 if (TopLight BottomLight) { if (servo_10.read()> 0) {servo_10.write((servo_10.read() + 1)); } } } }}
示意图
接线示意图