自動および手動モードの2軸ソーラートラッカーパネル
コンポーネントと消耗品
> | | × | 1 | |
| | × | 2 | |
| | × | 2 | |
| | × | 1 | |
| | × | 2 | |
| | × | 4 | |
| | × | 5 | |
| | × | 2 | |
このプロジェクトについて
これは、2017〜 2018年のイブニングクラブYoungHackersで生徒が実施したプロジェクトです。小学生にとっては大変なプロジェクトであり、多くの打ち合わせが必要でした。太陽から最大の電力を得るように2軸で回転できる小さな5Vソーラーパネルが含まれています。このプロジェクトは、OpenSourceClassroomのDual Axis SolarTrackerプロジェクトに基づいています。
最終製品に2つのモードを実装したかったのです。
これを実現するために、プッシュボタンと2つのインジケーターLEDを使用してモードを切り替えるようにデバイスをプログラムしました。デバイスが手動モードの場合、赤いライトが点灯し、2つのポテンショメータを使用して2軸のパネルの回転を制御できます。デバイスが自動モードの場合、青色のライトが点灯し、パネルの回転は4つのLDRから収集されたライトによって決定されます。プログラミングはtinkercadで行われました。
学生は生産ラインスタイルでグループで作業し、タスクを完了しました。 (ワイヤーはんだ付け、ワイヤー絶縁、部品のねじ込みなど)。
<図>
<図>
<図>
<図>
<図>
コード
ソーラーパネルコードの回転 Arduino
二軸ソーラーパネルの最終コード #include //変数の初期化intmode =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; // 2つのサーボを宣言サーボservo_9;サーボservo_10; void setup(){ pinMode(7、INPUT); //モードボタンpinMode(12、OUTPUT); //手動モードのLEDインジケーターpinMode(11、OUTPUT); //自動モードのLEDインジケーター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; digitalWrite(12、HIGH); digitalWrite(11、LOW); } else {モード=1; digitalWrite(11、HIGH); digitalWrite(12、LOW); }}} prevButtonState =buttonState; delay(50); // 50ミリ秒待機if(mode ==0){//モードが手動の場合、ポット値を回転角度にマップservo_9.write(map(analogRead(A0)、0、1023、0、180) ); Servo_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); BottomLight =((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)); }}}}}
回路図
配線図