Muestra las diferencias entre dos versiones de la página.
Próxima revisión | Revisión previa | ||
proyectos:barcosolar2022 [2022/06/13 09:38] – creado Sergio Alvariño | proyectos:barcosolar2022 [2022/06/14 07:44] (actual) – Sergio Alvariño | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
- | <font 11ptfont-family: | + | ====== Barco Solar 2022 ====== |
- | <font 11ptfont-family: | ||
- | <font 11ptfont-family:Arial;color:# | + | {{ :proyectos:barco_solar:barco_bricolabs_2.jpg? |
+ | |||
+ | El barco es un catamarán totalmente construido a partir de láminas de poliestireno extruido de 3cm de espesor con dos cascos hechos con dos láminas cortadas con hilo caliente de nicrom para dar la forma a cada una de las mitades , pegadas entres si con los motores y ejes rígidos embutidos dentro de cada casco. Ambos unidos entre si por dos láminas del mismo material y espesor. Ambos han sido pulidos con lijas la más fina de 2000 sin ningún otro acabado. El barco vira por diferencia de velocidad entre los dos motores hasta que se gira completamente la dirección, momento en el cual entra un timón con un ángulo fijo en la parte delantera interna al giro para ayudar a cerrar más la curva (inspirado en las traineras). Para ello se han dispuesto dos servos controlados por un Arduino nano en la parte delantera que recibe la señal de la dirección directa y maneja los servos. | ||
+ | |||
+ | Los dos motores son de escobillas de 5 polos de muy bajo consumo que alcanzan unas 8000rpm a 18v , la emisora utilizada es de volante (radiolink RC6GS) pero con hasta 6 canales y realiza la mezcla de dirección y aceleración para mover los dos motores de manera diferencial a través de los canales 1 y 2 por el tercer canal se envía una señal de ajuste de la profundidad de los timones de dirección y en el cuarto la señal de dirección sin mezclar para el Arduino nano delantero. El sistema de control de la potencia procedente del panel solar se encomienda a un esp32 que únicamente vigila la tensión del panel a través de un divisor de tensión para no dañar la entrada , y atenúa las señales de control de los variadores de velocidad de los motores, solo si la tensión baja de 18v . Para la alimentación de la parte lógica hemos prescindido de las pilas y los sistemas de alimentación bec de cada variador de velocidad alimentan al receptor y el esp32 uno, el Arduino nano y los dos servos con el otro. El barco tiene un largo total de 1.6m y el ancho aproximadamente del panel situado longitudinalmente, | ||
+ | |||
+ | ===== Enlaces a los principales componentes ===== | ||
+ | |||
+ | * Motores y ejes: [[https:// | ||
+ | * Acoplamiento ejes: [[https:// | ||
+ | * Variadores electrónicos: | ||
+ | * Hélices: [[https:// | ||
+ | |||
+ | {{: | ||
+ | |||
+ | A la derecha: detalle del suelo dentro de la caja de electrónica, | ||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | {{: | ||
+ | |||
+ | 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 {{ : | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | ---- | ||
+ | |||
+ | {{: | ||
+ | |||
+ | A la derecha, detalle del pegado de las dos mitades de un casco. {{ : | ||
+ | |||
+ | ---- | ||
+ | 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: | ||
+ | |||
+ | <code cpp> | ||
+ | #include < | ||
+ | |||
+ | Servo timondch; | ||
+ | Servo timonizq; | ||
+ | int pin = 2; // entrada de señal de direcion | ||
+ | int patilla = 3; // entrada de señal de ajuste de angulo maximo de baja de timones | ||
+ | unsigned direccion; | ||
+ | unsigned ajuste; | ||
+ | unsigned long delaydch; // registro de retardo para activar el timon derecho despues de una cantidad de ciclos | ||
+ | unsigned long delayizq; | ||
+ | |||
+ | void setup() { | ||
+ | pinMode(LED_BUILTIN, | ||
+ | timondch.attach(6); | ||
+ | timondch.writeMicroseconds(1980); | ||
+ | timonizq.attach(5); | ||
+ | timonizq.writeMicroseconds(960); | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | ajuste = pulseIn(patilla, | ||
+ | ajuste = ajuste -1000; | ||
+ | ajuste=ajuste/ | ||
+ | direccion = pulseIn(pin, | ||
+ | if (direccion< | ||
+ | timonizq.writeMicroseconds(1950-ajuste); | ||
+ | } else { | ||
+ | timonizq.writeMicroseconds(960); | ||
+ | } | ||
+ | if(direccion> | ||
+ | timondch.writeMicroseconds(1000+ajuste); | ||
+ | } else { | ||
+ | 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 ; | ||
+ | } | ||
+ | </ | ||