Painel de rastreamento solar de eixo duplo com modo automático e manual
Componentes e suprimentos
| | × | 1 | |
| Potenciômetro rotativo (genérico) | | × | 2 | |
| | × | 2 | |
| SparkFun Botão de pressão 12 mm | | × | 1 | |
| Servos (Tower Pro MG996R) | | × | 2 | |
| | × | 4 | |
| | × | 5 | |
| | × | 2 | |
Aplicativos e serviços online
Sobre este projeto
Este é um projeto que meus alunos implementaram durante o clube noturno Young Hackers de 2017-2018. É um projeto exigente para alunos do ensino fundamental e nos custou muitas reuniões para realizá-lo. Ele contém um pequeno painel solar de 5 V que pode girar em dois eixos de modo a obter o máximo de energia solar. O projeto é baseado no Projeto Dual Axis Solar Tracker da OpenSourceClassroom.
Queríamos implementar dois modos no produto final.
- Um modo manual - controlado por dois potes.
- Um modo automático - controlado com quatro sensores de luz.
Para isso, programamos o dispositivo para alternar entre os modos com a ajuda de um botão e dois leds indicadores. Quando o aparelho está no modo manual a luz vermelha acende e podemos controlar a rotação do painel em dois eixos com o auxílio de dois potenciômetros. Quando o dispositivo está no modo automático, a luz azul está acesa e a rotação do painel é determinada pela luz coletada dos quatro LDRs. A programação foi feita no tinkercad.
Os alunos trabalharam em grupos em um estilo de linha de produção para completar as tarefas. (soldagem de fio, isolamento de fio, aparafusamento de peças, etc.).
Código
- Código do painel solar rotativo
Código do painel solar rotativo Arduino
O código final do painel solar de eixo duplo #include // Initialize variablesint 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; // Declara dois servosServo servo_9; Servo servo_10; void setup () { pinMode (7, INPUT); // Botão de modo pinMode (12, OUTPUT); // Indicador Led para modo manual pinMode (11, OUTPUT); // Indicador Led para modo automático pinMode (A0, INPUT); // Potenciômetro para movimento direita-esquerda pinMode (A1, INPUT); // Potenciômetro para movimento de cima para baixo pinMode (A2, INPUT); // Sensor de luz para cima - esquerdo pinMode (A3, INPUT); // Sensor de luz para cima - pinMode direito (A4, INPUT); // Sensor de luz inferior - esquerdo pinMode (A5, INPUT); // Sensor de luz inferior - direito servo_9.attach (9); // Servo motor direito - movimento esquerdo servo_10.attach (10); // Movimento para cima - para baixo do servo motor} void loop () {buttonState =digitalRead (7); if (buttonState! =prevButtonState) {if (buttonState ==HIGH) {// Altere o modo e acenda o indicador correto if (mode ==1) {mode =0; digitalWrite (12, ALTO); digitalWrite (11, BAIXO); } mais {modo =1; digitalWrite (11, ALTO); digitalWrite (12, BAIXO); }}} prevButtonState =buttonState; atraso (50); // Aguarde 50 milissegundos (s) if (mode ==0) {// Se o modo for manual, mapeie os valores do potenciômetro para graus de rotação servo_9.write (map (analogRead (A0), 0, 1023, 0, 180) ); servo_10.write (map (analogRead (A1), 0, 1023, 0, 180)); } else {// se o modo for mapear automaticamente os valores do sensor para 0-100 de intensidade leve. // Cada sensor de luz tem uma sensibilidade diferente e deve ser testado primeiro // para seus valores altos e baixos 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); // Calcular as condições médias de luz TopLight =((topRightLight + topLeftLight) / 2); BottomLight =((bottomRightLight + bottomLeftLight) / 2); LeftLight =((topLeftLight + bottomLeftLight) / 2); RightLight =((topRightLight + bottomRightLight) / 2); // Gire os servos se necessário if (abs ((RightLight - LeftLight))> 4) {// Mude a posição apenas se a diferença de luz for maior que 4% if (RightLight LeftLight) {if (servo_9.read ()> 0) {servo_9.write ((servo_9.read () - 1)); }}} if (abs ((TopLight - BottomLight))> 4) {// Mude a posição apenas se a diferença de luz for maior que 4% if (TopLight BottomLight) {if (servo_10.read ()> 0) {servo_10.write ((servo_10.read () + 1)); }}}}}
Esquemas
Esquema de fiação