boas!
por algum tempo estive fora de projectos de electrónica mas como tem andado a chover tenho tido mais tempo:)
O projecto já começou:)
aqui vai:
O projecto veio a propósito de andar com aviões rc e como toda a gente sabe, ou devia saber, as baterias lipo não podem baixar a tensão a menos de 3V, sendo assim o meu objectivo é construir algum sistema que me diga quando devo parar de brincar e aterrar o bicho.
Sei que há vários sistemas, de todos os que conheço o que me interessou mais foi o da telemetria, que consiste num pedaço de componentes electrónicos no avião e outro pedaço de componentes electrónicos no comando e que comunicam entre si e vão dizendo ao "piloto" o estado da bateria e outros componentes.
alguns sistemas:
este tipo já possuo.
estes sao o que quero fazer.
esses últimos sistemas neste momento são um pouco dispendiosos e como um projecto de electrónica verdadeiro não se pode gastar muito dinheiro o meu segundo objectivo e não gastar $:)(ate agora só utilizei material que já tinha)
então meti mãos a obra, pequei em dois arduinos, cabos, um lcd 16*2, um modulo rf 433MHz, umas resistências, condensadores e alguma procura na net.
na procura encontrei
este é um esquema de um monitor para 3celulas "normal" dos primeiros que mostrei.
deste esquema o que me interessa são os divisores de tensão porque o autor da tinha feito os cálculos e no site dele dizia eu não me lembro do site nem guardei (sou um bocado toto).
então peguei num arduino e fiz algumas ligações com resistências, o lcd, uma bateria 3S e algum código e consegui medir a tensão nas 3 células. fiz mais um bocado de condigo e coloquei uma transmissor rf.
peguei no receptor e coloquei um led. como estou a começar pelo mais simples e ainda não consigo programar como gostava saiu o seguinte:
o arduino lê o valor da tensão em cada uma das células depois vê se é 2S ou 3S e vê se alguma das células esta a baixo dos 3.3V se nenhuma das células estiver a baixo dos 3.3V ele manda um sinal pelo transmissor e faz com que o led pisque de segundo a segundo, se alguma das células estiver a baixo dos 3.3V ele manda um sinal que faz o led piscar de 5 em 5 milissegundos, entretanto vai mostrando no lcd o valor de cada uma das celulas e o valor total da tensão e a percentagem da carga que ainda resta a bateria.
no filme a seguir pode se ver o que fiz. devia ter tirado fotos, mas entretanto também ponho fotos:)
o filme não tem muita qualidade foi feito do tel.
o código que foi feito não é la muito famoso, eu gostava que o pessoal desse uma opinião sobre esse assunto que não é tanto a minha área
vou postar aqui o código mas não tenho a certeza se é esta a versão do filme. pode ter mais uns ajustes mas é parecido:)
#include <LiquidCrystal.h> //incluir a libraria do lcd
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //RS-enable-D4-D5-D6-D7
//declarar variaveis
int analogOutPin = 9;
int sensorPin1 = A0;
int sensorPin2 = A1;
int sensorPin3 = A2;
int cel1=0;
int cel2=0;
int cel3=0;
float volt1 = 0;
float volt2 = 0;
float volt3 = 0;
float volttotal =0;
int pre = 0;
int temp = 0;
float cali=0.494;
void setup() {
pinMode(8, OUTPUT);
lcd.begin(16, 2); //quantas colunas tem o lcd 16colunas e 2 linhas
}
void loop() {
cel1 = analogRead(sensorPin1);//variavel sem calculo para indentificar se 2S ou 3S
cel2 = analogRead(sensorPin2);
cel3 = analogRead(sensorPin3);
while ((cel1<10) and (cel2<10) and (cel3<10)){
cel1 = analogRead(sensorPin1);
cel2 = analogRead(sensorPin2);
cel3 = analogRead(sensorPin3);
delay(100);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("conectar bateria");
lcd.setCursor(5, 1);
lcd.print("RaPPa");
}
//detinguir de 2S ou 3S
while (cel3<10 and cel2>10 and cel1>10){
digitalWrite(8, HIGH);
cel3 = analogRead(sensorPin3);
//para 2S
volttotal=0;
volt1 = (analogRead(sensorPin1)*cali)/100; //calculo da voltagem da celula 1
volt2 = ((analogRead(sensorPin2)*2*cali)/100)-volt1; //calculo da voltagem da celula 2
volttotal = volt1+volt2;
//calculo da percentagem em 2S
if (volt1 < volt2 ){
pre = ((volt2-3.3)/0.9)*100;
}
else // caso contrário, isto é voltagem2 > voltagem1
{
pre = ((volt1-3.3)/0.9)*100;
}
//mostrar valores das celulas no lcd
lcd.clear();
lcd.setCursor(0, 0); //começa a escrever na coluna 0 e na linha 0
lcd.print(volt1); //mostra no lcd a variavel voltagem1
lcd.setCursor(5, 0);
lcd.print(volt2);
lcd.setCursor(10, 0);
lcd.print("2S");
lcd.setCursor(0, 1);
lcd.print(volttotal);
lcd.setCursor(5, 1);
lcd.print(pre);
lcd.setCursor(7, 1);
lcd.print("%");
lcd.setCursor(9, 1);
lcd.print("RaPPA");
delay(100);
//sistema bateria fraca em 2S
while ((volt1 < 3.3 and cel1>10) or (volt2 < 3.3 and cel2>10)){
cel1 = analogRead(sensorPin1);
cel2 = analogRead(sensorPin2);
cel3 = analogRead(sensorPin3);
digitalWrite(8, HIGH);
delay(30);
digitalWrite(8, LOW);
volt1 = (analogRead(sensorPin1)*cali)/100; //calculo da voltagem da celula 1
volt2 = ((analogRead(sensorPin2)*2*cali)/100)-volt1; //calculo da voltagem da celula 2
volttotal = volt1+volt2;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("bateria fraca");
lcd.setCursor(0, 1);
lcd.print(volt1);
lcd.setCursor(5, 1);
lcd.print(volt2);
delay(30);
}
digitalWrite(8, LOW);
delay(500);
}
while(cel3>10 and cel2>10 and cel3>10) {
//para 3S
digitalWrite(8, HIGH);
cel1 = analogRead(sensorPin1);
cel2 = analogRead(sensorPin2);
cel3 = analogRead(sensorPin3);
volttotal=0;
volt1 = (analogRead(sensorPin1)*cali)/100; //calculo da voltagem da celula 1
volt2 = ((analogRead(sensorPin2)*2*cali)/100)-volt1; //calculo da voltagem da celula 2
volt3 = ((analogRead(sensorPin3)*cali*3)/100)-(volt1+volt2); //calculo da voltagem da celula 3
volttotal = volt1+volt2+volt3;
//calculo da precentagem em 3S
if (volt1 < volt2 or volt3 ){
pre = ((volt1-3.3)/0.9)*100;
}
else // caso contrário, isto é voltagem2 < voltagem1
{
if (volt2 < volt3){
pre = ((volt2-3.3)/0.9)*100;
}
else//caso contrario voltagem3 < voltagem 1
{
pre =((volt3-3.3)/0.9)*100;
}
}
//mostrar valores das celulas no lcd
lcd.clear();
lcd.setCursor(0, 0); //começa a escrever na coluna 0 e na linha 0
lcd.print(volt1); //mostra no lcd a variavel voltagem1
lcd.setCursor(5, 0);
lcd.print(volt2);
lcd.setCursor(10, 0);
lcd.print(volt3);
lcd.setCursor(0, 1);
lcd.print(volttotal);
lcd.setCursor(6, 1);
lcd.print(pre);
lcd.setCursor(8, 1);
lcd.print("%");
lcd.setCursor(10, 1);
lcd.print("RaPPA");
delay(100);
//sistema bateria fraca
while ((volt1 < 3.3 and cel1>10) or (volt2 < 3.3 and cel2>10)or (volt3 < 3.3) and (cel3 > 10) ){
cel1 = analogRead(sensorPin1);
cel2 = analogRead(sensorPin2);
cel3 = analogRead(sensorPin3);
digitalWrite(8, HIGH);
delay(50);
digitalWrite(8, LOW);
volt1 = (analogRead(sensorPin1)*cali)/100; //calculo da voltagem da celula 1
volt2 = ((analogRead(sensorPin2)*2*cali)/100)-volt1; //calculo da voltagem da celula 2
volt3 = ((analogRead(sensorPin3)*cali*3)/100)-(volt1+volt2); //calculo da voltagem da celula 3
volttotal = volt1+volt2+volt3;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("bateria fraca");
lcd.setCursor(0, 1);
lcd.print(volt1);
lcd.setCursor(5, 1);
lcd.print(volt2);
lcd.setCursor(10, 1);
lcd.print(volt3);
delay(50);
}
digitalWrite(8, LOW);
delay(500);
}
//volta a por as variaveis a 0
pre=0;
volttotal=0;
volt1 = 0;
volt3 = 0;
volt2 = 0;
cel1 = 0;
cel2 = 0;
cel3 = 0;
delay(100);
}
sei que não era bem isto que no inicio estava a pensar ate porque queria fazer com dois arduinos e meter o lcd no receptor mas foi isto que fui fazendo agora vou precisar da vossa ajuda para fazer uma coisa a serio mas sem gastar muito dinheiro.
obrigado e agradeço respostas:)
André