Делаю контролер нагрева питающийся от липо батареи
подскажите как сделать чтобы при достижении низкого напряжения отключать ардуину (отправить спать) пытался сделать но ничего не выходит.
Код собирал из кусочков, получилось что получилось, главное работает всё кроме контроля низкого заряда батареи.
Собираю все на ардуине нано
Вопрос 2) почему у меня получается слишком шумно на 5V линии. Т.е. не прямая линия на осциллоскопе а синусоида ~ +.- 100мв в районе 5в то же самое если посмотреть на выход с ШИМ периоды квадратные но разной высоты.
- Код: Выделить всё • Развернуть
//Voltage monitor website https://create.arduino.cc/projecthub/nickthegreek82/diy-voltmeter-with-arduino-and-a-nokia-5110-display-cc5092?ref=platform&ref_id=424_trending___&offset=49
int counter = 0;
int switchPin = 2;
int PWM_SET;
#define MIN_VOLT = 9.0;
//----PWM_ADJ------
int POT_PIN = A7;
//----PWM_ADJ_END------
//-------led outputs
int LED_GREEN = 5;
int LED_BLUE = 6;
int LED_RED = 7;
float VOLT_MIN;
float voltage = 0.0;
int sensorPin = A1;
float sensorValue = 0.0f;
String voltageString ="0.0";
int stringLength = 0;
float vout = 0.0;
float vin = 0.0;
float R1 = 83000.0;
float R2 = 18000.0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(switchPin, INPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_BLUE, OUTPUT);
pinMode(LED_RED, OUTPUT);
}
void loop() {
//----провека напряжения на входеб если ниже 9В то ничего не делать.
// for (float i = 0; i < voltage; ++i){
// if (VOLT_MIN < voltage)
// continue;
//-------------pwm------- https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM
pinMode(3, OUTPUT);
// pinMode(11, OUTPUT);
TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM20);
TCCR2B = _BV(CS22);
// OCR2A = 0; //pin 11
OCR2B = (PWM_SET);
/*
* Output A frequency: 16 MHz / 64 / 255 / 2 = 490.196Hz
Output A duty cycle: 180 / 255 = 70.6%
Output B frequency: 16 MHz / 64 / 255 / 2 = 490.196Hz
Output B duty cycle: 50 / 255 = 19.6%
Timer output Arduino output Chip pin Pin name
OC0A 6
OC0B 5
OC1A 9
OC1B 10
OC2A 11
OC2B 3
*/
// --------------pwm end
//---------------------------------pwm adjusts
int PWM_ADJUST, PWM_ADJ;
PWM_ADJ = analogRead(POT_PIN);
PWM_ADJUST = PWM_ADJ / 20;
//---button
//Handle input
int switchVal = digitalRead(switchPin);
if(switchVal == LOW)
{
delay(500);
counter ++;
//Reset count if over max mode number
if(counter == 7)
{
counter = 0;
}
}
else
//Change mode
switch (counter) {
case 1:
PWM_SET = 0;
digitalWrite(LED_GREEN, LOW);
digitalWrite(LED_BLUE, LOW);
digitalWrite(LED_RED, LOW);
break;
case 2:
PWM_SET = (50);
digitalWrite(LED_GREEN, 255);
digitalWrite(LED_BLUE, 0);
digitalWrite(LED_RED, 0);
break;
case 3:
PWM_SET = (100);
digitalWrite(LED_GREEN, 255);
digitalWrite(LED_BLUE, 255);
digitalWrite(LED_RED, 0);
break;
case 4:
PWM_SET = (150);
digitalWrite(LED_GREEN, 0);
digitalWrite(LED_BLUE, 255);
digitalWrite(LED_RED, 0);
break;
case 5:
PWM_SET = (200);
digitalWrite(LED_GREEN, 0);
digitalWrite(LED_BLUE, 255);
digitalWrite(LED_RED, 255);
break;
case 6:
PWM_SET = 254;
digitalWrite(LED_GREEN, 0);
digitalWrite(LED_BLUE, 0);
digitalWrite(LED_RED, 255);
break;
}
//----button end
voltage = readVoltage();
Serial.println(voltage);
Serial.println(PWM_SET);
voltageString = String(voltage,1);
stringLength = voltageString.length();
displayVoltage(stringLength);
delay(100);
}
//}
float readVoltage()
{
sensorValue = analogRead(sensorPin);
vout = (sensorValue * 5.0) / 1024.0;
vin = vout / (R2/(R1+R2));
return vin;
}
void displayVoltage(int length)
{
// switch(length)
{
// case 3: Serial.print(voltageString,14,19); break;
// case 4: Serial.print(voltageString,2,19); break;
// default: Serial.print(voltageString,2,19); break;
}
}