Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa Última revisión Ambos lados, revisión siguiente | ||
proyectos:barcosolar2022 [2022/06/13 13:09] Sergio Alvariño |
proyectos:barcosolar2022 [2022/06/14 07:33] Sergio Alvariño |
||
---|---|---|---|
Línea 1: | Línea 1: | ||
====== Barco Solar 2022 ====== | ====== Barco Solar 2022 ====== | ||
+ | |||
+ | |||
+ | {{ : | ||
Línea 13: | Línea 16: | ||
* Hélices: [[https:// | * Hélices: [[https:// | ||
- | Este es el adhesivo utilizado para todas las uniones | + | {{: |
+ | A la derecha: detalle del suelo dentro de la caja de electrónica, | ||
- | ==== Software ==== | + | ---- |
+ | |||
+ | {{: | ||
+ | |||
+ | En las otras dos fotos podemos ver los resultados en el propio casco (Recuerda que puedes pinchar en la imagen para ampliar).{{ : | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | ---- | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Resto de fotos, detalles del alojamiento de los motores embutidos en el casco. Y la herramienta utilizada para crear el alojamiento de los motores {{ : | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | ---- | ||
+ | Detalle de los timones de proa para las maniobras de ciaboga. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ===== Software ===== | ||
+ | |||
+ | ==== Control de timones de proa ==== | ||
Este es el programa que gestiona los timones delanteros del Arduino nano y al que llegan la señal de la dirección sin mezclar con la del acelerador y otra de ajuste de calado de los timones , osea que cuando bajen al agua lo hagan entre 45 y 90 grados desde la horizontal que tienen en reposo: | Este es el programa que gestiona los timones delanteros del Arduino nano y al que llegan la señal de la dirección sin mezclar con la del acelerador y otra de ajuste de calado de los timones , osea que cuando bajen al agua lo hagan entre 45 y 90 grados desde la horizontal que tienen en reposo: | ||
Línea 26: | Línea 56: | ||
Servo timondch; | Servo timondch; | ||
Servo timonizq; | Servo timonizq; | ||
- | int pin = 2; //entrada de señal de direcion | + | int pin = 2; // entrada de señal de direcion |
- | int patilla = 3; | + | int patilla = 3; // entrada de señal de ajuste de angulo maximo de baja de timones |
- | unsigned direccion; | + | unsigned direccion; |
- | unsigned ajuste; | + | unsigned ajuste; |
- | unsigned long delaydch; | + | unsigned long delaydch; // registro de retardo para activar el timon derecho despues de una cantidad de ciclos |
unsigned long delayizq; | unsigned long delayizq; | ||
void setup() { | void setup() { | ||
- | pinMode(LED_BUILTIN, | + | |
- | timondch.attach(6); | + | timondch.attach(6); |
timondch.writeMicroseconds(1980); | timondch.writeMicroseconds(1980); | ||
- | timonizq.attach(5); | + | |
- | timonizq.writeMicroseconds(960); | + | timonizq.writeMicroseconds(960); |
- | pinMode(pin, | + | |
} | } | ||
Línea 46: | Línea 75: | ||
ajuste = ajuste -1000; | ajuste = ajuste -1000; | ||
ajuste=ajuste/ | ajuste=ajuste/ | ||
- | direccion = pulseIn(pin, | + | |
- | if (direccion< | + | if (direccion< |
- | timonizq.writeMicroseconds(1950-ajuste); | + | timonizq.writeMicroseconds(1950-ajuste); |
- | | + | } else { |
- | timonizq.writeMicroseconds(960); | + | timonizq.writeMicroseconds(960); |
- | } | + | } |
- | | + | if(direccion> |
- | | + | timondch.writeMicroseconds(1000+ajuste); |
- | }else{ | + | } else { |
- | timondch.writeMicroseconds(1980); | + | timondch.writeMicroseconds(1980); |
+ | } | ||
} | } | ||
+ | </ | ||
+ | |||
+ | ==== Control de tensión demandada ==== | ||
+ | |||
+ | Este es el programa que evita que la tensión del panel baje de 18v al que le entra una medida de tensión directa del panel que únicamente pasa por un divisor de tensión que se compone de tres resistencias: | ||
+ | |||
+ | Además recibe las señales de servo que irían a los ESC de los dos motores ya mezcladas en la emisora y procedentes del receptor. El programa envía esas mismas señales sin modificar hacia dichos ESC siempre y cuando la tensión del panel no baje de los ya citados 18v: | ||
+ | |||
+ | <code cpp> | ||
+ | #include < | ||
+ | |||
+ | Servo motorizquierdo; | ||
+ | Servo motorderecho; | ||
+ | int pin = 5; // entrada de canal 1 del receptor | ||
+ | int pin2= 18; // entrada de canal 2 | ||
+ | int led= 2; // define led interno y externo(si procede) | ||
+ | unsigned long motor1; | ||
+ | unsigned long motor2; | ||
+ | unsigned long resta=0 ; // registro donde ajustaremos la cuantia de la atenuacion | ||
+ | unsigned long modulado1; | ||
+ | unsigned long modulado2; | ||
+ | float caidaV; | ||
+ | float VoltMinima; | ||
+ | float VoltMaxima=3300; | ||
+ | float voltaje=3300; | ||
+ | float voltajeanterior; | ||
+ | |||
+ | void setup() { | ||
+ | motorizquierdo.attach(4); | ||
+ | motorizquierdo.writeMicroseconds(1500); | ||
+ | // Serial.begin(9600); | ||
+ | pinMode(pin, | ||
+ | motorderecho.attach(15); | ||
+ | motorderecho.writeMicroseconds(1500); | ||
+ | // Serial.begin(9600); | ||
+ | pinMode(pin2, | ||
+ | pinMode(led, | ||
+ | digitalWrite(led, | ||
} | } | ||
+ | void loop() { | ||
+ | voltaje = analogRead(A0); | ||
+ | VoltMaxima= (3300); | ||
+ | motor1 = pulseIn(pin, | ||
+ | motor2 = pulseIn(pin2, | ||
+ | caidaV=VoltMaxima-voltaje; | ||
+ | if (voltaje> | ||
+ | if (caidaV> | ||
+ | if (caidaV> | ||
+ | if (resta> | ||
+ | goto salta; | ||
+ | recupera:; | ||
+ | if (resta< | ||
+ | resta=resta-0.5; | ||
+ | if (caidaV< | ||
+ | if (caidaV< | ||
+ | |||
+ | salta:; | ||
+ | if (resta> | ||
+ | if (resta< | ||
+ | modulado1=motor1-resta; | ||
+ | if (modulado1< | ||
+ | if (modulado1> | ||
+ | modulado1=motor1; | ||
+ | } | ||
+ | modulado2=motor2-resta; | ||
+ | if (modulado2< | ||
+ | if (modulado2> | ||
+ | modulado2=motor2; | ||
+ | } | ||
+ | motorizquierdo.writeMicroseconds(modulado1); | ||
+ | motorderecho.writeMicroseconds(modulado2); | ||
+ | voltajeanterior=voltaje ; | ||
+ | } | ||
</ | </ | ||