Например TDA7294

Форум РадиоКот • Просмотр темы - солнечная батарея-бустер-датчик тока-аккум
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 24, 2024 00:30:59

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: солнечная батарея-бустер-датчик тока-аккум
СообщениеДобавлено: Пн июн 30, 2014 09:06:00 
Родился

Зарегистрирован: Пн июн 30, 2014 08:55:48
Сообщений: 2
Рейтинг сообщения: 0
Здравствуйте! Имеются такие компоненты:
1)аккумулятор 6В 3.2 Ah
2)датчик тока ACS712 5A
3)Step-Up преобразователь на XL6009 (Uвых=3-35V)
4)Солнечная батарея 2W 6V 330mA
5)Arduino Uno
Вопрос заключается в том , что как это всё дело правильно соединить ?)
Идея в том ,чтобы брать 5-6В идущих с солнечной батареи, усиливать их на бустере до 7-9В, далее считывать ток с помощью ACS712 , отправлять значения тока на ардуино (если это конечно возможно) и уже запитывать аккумулятор.
Заранее спасибо за ответы)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: солнечная батарея-бустер-датчик тока-аккум
СообщениеДобавлено: Сб фев 18, 2017 20:21:47 
Родился

Зарегистрирован: Вт июл 01, 2014 11:33:06
Сообщений: 13
Рейтинг сообщения: 0
Скетч на описанную задачу
Спойлер//sketch for recharg-battery, solar panel, water-pump

#include "arduino.h"
#include <avr/wdt.h>
#include <avr/sleep.h>
#define FASTADC 1
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif

#define showserial 0

long ADC_summ, change_led, decimation;
double U1,U2,Sol,Urov, up_summ, down_summ;
int can_on_nasos, can_on_nasos2, cmd_off_nasos, cmd2_off_nasos, cmd_sleep, cmd_solar_off, need_solar;
int decimation_sol, up_doun_skv, up_doun_cnt, s_cnt;
byte skvas;
bool nasos_on, solar_on, can_on_nasos2_r;



void setup() {
wdt_disable();

pinMode(A0, INPUT); //Замер напряжения акумулятора battery volvage
pinMode(A1, INPUT); //Замер 2-ого напряжения акумулятора battery volvage from boost converter (0.1 om curent detector)
pinMode(A2, INPUT); //Замер солнечн. напряж solar voltage 1...2 v
pinMode(A3, INPUT); //Замер уровня воды water sensor

pinMode(4, OUTPUT); //потенциал на замер уровня voltage for water sensor
digitalWrite(4, LOW);
decimation=300;

pinMode(5, OUTPUT); //ШИМ step_up PWM for boost converter
digitalWrite(5, LOW);
solar_on=false;
cmd_sleep=0;
cmd_solar_off=0;
need_solar=0;
decimation_sol=200;
s_cnt=0;

pinMode(7, OUTPUT); //Ключ насоса pump on-off
digitalWrite(7, LOW);
nasos_on=false;
cmd_off_nasos=0;
cmd2_off_nasos=0;
can_on_nasos2=0;
can_on_nasos=0;
can_on_nasos2_r=false;
up_doun_skv=5;
up_doun_cnt=10;
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
change_led=100;
#if FASTADC
// set prescale to 16
//sbi(ADCSRA,ADPS2) ;
//cbi(ADCSRA,ADPS1) ;
//cbi(ADCSRA,ADPS0) ;
//Установка множителя, равного 32 (частота дискретизации около 38 кГц) -
sbi(ADCSRA, ADPS2);
cbi(ADCSRA, ADPS1);
sbi(ADCSRA, ADPS0);
#endif
//---------- Установка частоты ШИМ для выводов D5 & D6 ----------
TCCR0B = TCCR0B & B11111000 | B00000001; // Таймер 0 делитель 1 для частоты ШИМ 62500.00 Hz
//TCCR0B = TCCR0B & B11111000 | B00000010; // Таймер 0 делитель 8 для частоты ШИМ 7812.50 Hz
// TCCR0B = TCCR0B & B11111000 | B00000011; // Таймер 0 делитель 64 для частоты ШИМ 976.56 Hz (По умолчанию)

ADCSRA |= _BV(ADEN); // enable the ADC
ADCSRA &= ~_BV(ADATE); //not continous
ADCSRA &= ~_BV(ADIE);
ADCSRA |= _BV(ADSC);
Serial.begin(115200);
#if (showserial==0)
Serial.println("Serial off");
Serial.end();
#endif

}

ISR(ADC_vect){
sleep_disable();
}

ISR (WDT_vect)
{
wdt_disable(); // disable watchdog
} // end of WDT_vect


void loop() {
// put your main code here, to run repeatedly:
ADC_summ=0; ADMUX = (_BV(REFS0)|_BV(REFS1));
for(int n=0; n<717; n++){ADCSRA |=B00001000;
set_sleep_mode(SLEEP_MODE_IDLE); // sleep during sample
sleep_enable();
sleep_cpu ();
while ((ADCSRA&B01000000)==1){;};
ADC_summ+=ADCW;};
U1=0.015675*ADC_summ/717.0-0.15; //calculation voltage
#if showserial
Serial.print(U1, 3);Serial.print("\t");
#endif
if((nasos_on)&&((U1 < 5.96)||((Sol<1.0)&&(U1 < 5.99))))
{cmd_off_nasos++; if(cmd_off_nasos>3){digitalWrite(7, LOW); nasos_on=false;};}
else{cmd_off_nasos=0;
if((!nasos_on)&&((U1 > 6.90))){can_on_nasos++;if((can_on_nasos>3)&&(can_on_nasos2_r)){can_on_nasos2_r=false;digitalWrite(7, HIGH); nasos_on=true;can_on_nasos=0;};
}else{can_on_nasos=0;};};
if((solar_on)&&(U1>7.01)){cmd_solar_off++;if(cmd_solar_off>5){skvas=0; analogWrite(5, 0);solar_on=false;};}else{cmd_solar_off=0;};
if((!solar_on)&&(U1<6.58)){need_solar++; if(need_solar>5){skvas=140; if(Sol<2.0){skvas=180;}; analogWrite(5, skvas);solar_on=true;up_doun_cnt=1;}}else{need_solar=0;};
ADC_summ=0; ADMUX = (_BV(REFS0)|_BV(REFS1)|_BV(MUX0));
for(int n=0; n<717; n++){ADCSRA |=B00001000;
set_sleep_mode(SLEEP_MODE_IDLE); // sleep during sample
sleep_enable();
sleep_cpu ();
while ((ADCSRA&B01000000)==1){;}; //if some other interupt make wake up
ADC_summ+=ADCW;};
U2=0.013828*ADC_summ/717.0;
#if showserial
Serial.print(U2, 3);Serial.print("\t");
#endif
if(!(up_doun_skv<4)){up_summ=up_summ+(U2-U1);}else{down_summ=down_summ+(U2-U1);};
if(--up_doun_cnt<0){up_doun_cnt=39;
if(solar_on){
if(!(up_doun_skv<4)){up_doun_skv=-8;}else
{up_doun_skv=8; if(up_summ > down_summ){s_cnt++;}else{s_cnt--;};
if(s_cnt>3){skvas+=3; s_cnt=0;}else{if(s_cnt<-3){skvas-=3; s_cnt=0;};}
if(skvas<65){skvas=65;}else{if(skvas>220){skvas=220;};};
up_summ=0.0; down_summ=0.0;
};

analogWrite(5, skvas+up_doun_skv);

};
};
#if showserial
Serial.print(skvas, DEC);Serial.print("\t");
#endif
if((--decimation_sol < 0)or(cmd_sleep>0)){decimation_sol=111;
ADC_summ=0; ADMUX = (_BV(REFS0)|_BV(REFS1)|_BV(MUX1));
for(int n=0; n<500; n++){ADCSRA |=B00001000;
set_sleep_mode(SLEEP_MODE_IDLE); // sleep during sample
sleep_enable();
sleep_cpu ();
while ((ADCSRA&B01000000)==1){;};
ADC_summ+=ADCW;};
Sol=0.00240538*ADC_summ/500.0;
if((Sol<0.7)&&(!nasos_on)){cmd_sleep++;
if(cmd_sleep>4){cmd_sleep=0;
skvas=0; analogWrite(5, 0);solar_on=false;
while(Sol<1.2) { // save power
digitalWrite(13, LOW);
ADCSRA = 0;
// clear various "reset" flags
MCUSR = 0;
// allow changes, disable reset
WDTCSR = bit (WDCE) | bit (WDE);
// set interrupt mode and an interval
WDTCSR = bit (WDIE) | bit (WDP0) | bit (WDP3); // set WDIE, and 8 second delay
wdt_reset(); // pat the dog
set_sleep_mode (SLEEP_MODE_PWR_DOWN);
sleep_enable();
// turn off brown-out enable in software
MCUCR = bit (BODS) | bit (BODSE);
MCUCR = bit (BODS);
sleep_cpu ();
// cancel sleep as a precaution
sleep_disable();
PORTB=PORTB^B00100000;
sbi(ADCSRA, ADPS2);
cbi(ADCSRA, ADPS1);
sbi(ADCSRA, ADPS0);
ADCSRA |= _BV(ADEN); // enable the ADC
ADCSRA &= ~_BV(ADATE); //not continous
ADCSRA &= ~_BV(ADIE);
ADCSRA |= _BV(ADSC);
while ((ADCSRA&B01000000)==1){;};
ADC_summ=0; ADMUX = (_BV(REFS0)|_BV(REFS1)|_BV(MUX1));
for(int n=0; n<20; n++){ADCSRA |= B00001000;
set_sleep_mode(SLEEP_MODE_IDLE); // sleep during sample
sleep_enable();
sleep_cpu ();
while ((ADCSRA&B01000000)==1){;};
ADC_summ+=ADCW;};
Sol=0.00240538*ADC_summ/20.0;
#if showserial
Serial.print("Sol "); Serial.print(Sol, 2);Serial.println("\t");
#endif
}; };}
else{cmd_sleep=0;};
}
#if showserial
Serial.print(Sol, 2);Serial.print("\t");
#endif
if(--decimation < 0){decimation=1113;
digitalWrite(4, HIGH);for(int n=0; n<20; n++){asm("nop\n\t");};
ADC_summ=0; ADMUX = (_BV(REFS0)|_BV(REFS1)|_BV(MUX0)|_BV(MUX1));
for(int n=0; n<50; n++){ADCSRA |= B00001000;
set_sleep_mode(SLEEP_MODE_IDLE); // sleep during sample
sleep_enable();
sleep_cpu ();
while ((ADCSRA&B01000000)==1){;};
ADC_summ+=ADCW;};
digitalWrite(4, LOW);
Urov=ADC_summ/50.0;
if((nasos_on)&&((Urov < 300)))
{cmd2_off_nasos++; decimation=111; if(cmd2_off_nasos>5){digitalWrite(7, LOW); nasos_on=false;};}
else{cmd2_off_nasos=0;};
if((!can_on_nasos2_r)&&(!nasos_on)&&((Urov > 350))){can_on_nasos2++; if(can_on_nasos2>5){can_on_nasos2_r=true;};}
else{can_on_nasos2=0; can_on_nasos2_r=false;};
#if showserial
Serial.print(Urov, 2);
#endif
}
#if showserial
Serial.println("");
#endif
if(--change_led<0){PORTB=PORTB^B00100000;
if((PORTB&B00100000)==0){if(nasos_on){change_led+=300;}else{if(U1 > 6.85){change_led+=70;}else{change_led+=500;};};}
else{if(nasos_on){change_led+=70;}else{change_led+=20;};};
}
}


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y