Re: Zasilacz warsztatowy 0-35V 0-4A #01
: 07 gru 2016, 15:12
Tak, oczywiscie udostepnie
Ciężarówki Tamiya, maszyny budowlane, pojazdy leśne i inne RC
https://rctruck.pl/forum/
Drabku, te tematy tu będą i proszę o akceptację tegoż można ich nie czytaćDrabek pisze:Tylko po to się tu rejestrowałeś
O co pytasz ?SaintRafik pisze:Gdzie jeśli można, zapytać
Wysłane z mojego ONEPLUS A3000 przy użyciu Tapatalka
O to pytamSławek pisze:Tak, oczywiscie udostepnie
Myślałem że te wszystkie tematy przeniosłeś.Sławek pisze:Drabku, te tematy tu będą i proszę o akceptację tegoż można ich nie czytaćDrabek pisze:Tylko po to się tu rejestrowałeś
O co pytasz ?SaintRafik pisze:Gdzie jeśli można, zapytać
Wysłane z mojego ONEPLUS A3000 przy użyciu Tapatalka
Pozdr
Nie wiem co jeszcze potrzebujesz, jest w pierwszym poście schemat, jest wzór płytki, coś jeszcze ?SaintRafik pisze:O to pytamSławek pisze:Tak, oczywiscie udostepnie
Wysłane z mojego ONEPLUS A3000 przy użyciu Tapatalka
#include "Arduino.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define tempPin 2
#define pinNapiecie A0
#define pinPrad A1
#define pinNastawa A2
byte address[8] = {0x28, 0xA4, 0x22, 0xC0, 0x04, 0x00, 0x00, 0x42};
OneWire oneWire(tempPin);
DallasTemperature sensors(&oneWire);
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
String wersja="3.1";
float mnoznik = 7.85; // wyliczone na podstawie dzielnika z rezystorów 10k i 1.5k
int czulosc = 10; // ilosc probek - i mwieksza tym wieksza bezwłądnosc wyliczanej sredniej odczytu
float prad = 0.0;
float probka = 0;
long czas = 0;
int licznik = 0;
long prad_odczyt = 0;
long napiecie_odczyt = 0;
long nastawa_prad_odczyt = 0;
long prad_probka = 0;
long napiecie_probka = 0;
long nastawa_prad_probka = 0;
float prad_sredni = 0.0;
float napiecie_srednie = 0.0;
float nastawa_prad_sredni = 0.0;
float napiecie = 0.0;
float spadek = 0.0;
float moc = 0.0;
float nastawa = 0.0;
float rezystancja = 0.0;
String lcd_napiecie = " 0.00";
String lcd_prad = " 0.00";
String lcd_moc = " 0.00";
String lcd_nastawa = " 0.00";
String lcd_rezystancja = " 0.00";
float temperatura = 0;
int temp_on = 30;
String wentylator = " ";
#define wentylatorPin 3
#define PRZERWATEMP 5000 // czestotliwosc odczytu DS18B20 w ms
unsigned long aktualnyDS18B20 = 0; // zmienna czasu
unsigned long poprzedniDS18B20 = 0; // zmienna czasu
byte ohm[8] = {
0b01110,
0b10001,
0b10001,
0b10001,
0b01010,
0b01010,
0b11011,
0b00000
};
byte stopien[8] = {
0b00011,
0b00011,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000
};
byte temp[8] =
{
0b00100,
0b01010,
0b01010,
0b01110,
0b01110,
0b11111,
0b11111,
0b01110
};
byte limit[8] = {
0b00000,
0b01110,
0b11001,
0b10101,
0b10001,
0b01110,
0b00000,
0b00000
};
byte went[8] = {
0b00100,
0b10101,
0b01110,
0b11011,
0b01110,
0b10101,
0b00100,
0b00000
};
void setup(){
lcd.begin(20,4);
lcd.clear();
Serial.begin(9600);
sensors.begin();
lcd.createChar(0, ohm);
lcd.createChar(1, stopien);
lcd.createChar(2, temp);
lcd.createChar(3, limit);
lcd.createChar(4, went);
lcd.setCursor(0,0);
lcd.print("Zasilacz warsztatowy");
lcd.setCursor(0,1);
lcd.print(" DC 0-35V / 0-4A");
lcd.setCursor(0,3);
lcd.print(" RCTRUCK.PL ");
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" by Slawek ");
lcd.setCursor(0,2);
lcd.print(" unix@rctruck.pl ");
lcd.setCursor(0,3);
lcd.print("");
delay(1000);
lcd.clear();
}
void loop(){
napiecie_odczyt = analogRead(pinNapiecie);
napiecie_probka = napiecie_probka + napiecie_odczyt;
prad_odczyt = analogRead(pinPrad);
prad_probka = prad_probka + prad_odczyt;
nastawa_prad_odczyt = analogRead(pinNastawa);
nastawa_prad_probka = nastawa_prad_probka + nastawa_prad_odczyt;
licznik++;
if(licznik == czulosc ) {
napiecie_srednie = (napiecie_probka / czulosc) * 5020 / 1021 ;
nastawa_prad_sredni = (nastawa_prad_probka / czulosc) * 5020 / 1021;
spadek = (prad_probka / czulosc) * 5000 / 1021;
napiecie_srednie -= spadek;
napiecie_srednie = napiecie_srednie * mnoznik;
nastawa = nastawa_prad_sredni / 1000;
napiecie = napiecie_srednie / 1000;
prad = (spadek * 100) / 47 / 1000;
moc = prad * napiecie;
if(prad > 0) {
rezystancja = round((napiecie / prad) * 10) / 10.0;
} else {
rezystancja = 0.00;
}
napiecie = round(napiecie * 10) / 10.0;
prad = round(prad * 10) / 10.0;
moc = round(moc * 10) / 10.0;
nastawa = round(nastawa * 21) / 10.0;
napiecie_probka = 0;
prad_probka = 0;
nastawa_prad_probka = 0;
licznik = 0;
}
napiecie_lcd();
prad_lcd();
moc_lcd();
nastawa_lcd();
rezystancja_lcd();
lcd.setCursor(0,0);
lcd.write((uint8_t)2);
lcd.print(temperatura);
lcd.write((uint8_t)1);
lcd.print("C");
lcd.setCursor(12,0);
lcd.write((uint8_t)4);
if(digitalRead(wentylatorPin) == HIGH)
lcd.print(" ON");
else lcd.print("OFF");
lcd.setCursor(5,1);
lcd.print("[");
lcd.print(lcd_napiecie);
lcd.print(" V]");
lcd.setCursor(0,2);
lcd.print("[");
lcd.print(lcd_moc);
lcd.print(" W]");
lcd.setCursor(11,2);
lcd.print("[");
lcd.print(lcd_prad);
lcd.print(" A]");
lcd.setCursor(0,3);
lcd.print("[");
lcd.print(lcd_rezystancja);
lcd.print(" ");
lcd.write((uint8_t)0);
lcd.print("]");
lcd.setCursor(10,3);
lcd.write((uint8_t)3);
lcd.print("[");
lcd.print(lcd_nastawa);
lcd.print(" A]");
//delay(1);
}
void napiecie_lcd() {
lcd_napiecie = String(napiecie);
int dlugosc = lcd_napiecie.length();
if (dlugosc == 4) {
lcd_napiecie = " " + lcd_napiecie;
} else if (dlugosc == 5)
{
lcd_napiecie = "" + lcd_napiecie;
}
}
void prad_lcd() {
lcd_prad = String(prad);
int dlugosc = lcd_prad.length();
if (dlugosc == 4) {
lcd_prad = " " + lcd_prad;
} else if (dlugosc == 5)
{
lcd_prad = "" + lcd_prad;
}
}
void moc_lcd() {
lcd_moc = String(moc);
int dlugosc = lcd_moc.length();
if (dlugosc == 4) {
lcd_moc = " " + lcd_moc;
} else if (dlugosc == 5)
{
lcd_moc = "" + lcd_moc;
}
}
void nastawa_lcd() {
lcd_nastawa = String(nastawa);
int dlugosc = lcd_nastawa.length();
if (dlugosc == 4) {
lcd_nastawa = " " + lcd_nastawa;
} else if (dlugosc == 5)
{
lcd_nastawa = "" + lcd_nastawa;
}
}
void rezystancja_lcd() {
lcd_rezystancja = String(rezystancja);
int dlugosc = lcd_rezystancja.length();
if (dlugosc == 4) {
lcd_rezystancja = " " + lcd_rezystancja;
} else if (dlugosc == 5)
{
lcd_rezystancja = "" + lcd_rezystancja;
}
}
void temperatura_wentyaltor()
{
aktualnyDS18B20 = millis();
if (aktualnyDS18B20 - poprzedniDS18B20 >= PRZERWATEMP)
{
sensors.requestTemperatures();
temperatura = sensors.getTempCByIndex(0);
poprzedniDS18B20 = aktualnyDS18B20;
}
if(temperatura >= temp_on) {
digitalWrite(wentylatorPin, HIGH);
}
if(temperatura <= (temp_on -1)) {
digitalWrite(wentylatorPin, LOW);
}
}