سلام
دارم یک برد آمپر متر با ماژول ACS712 -30A میسازم ( با آردوینو uno )
این ماژول هم جریان DC و هم جریان AC رو اندازه گیری میکنه
البته برنامه اندازه گیری جریان DC با اندازه گیری جریان AC متفاوته و بصورت عادی من با اپلود کردن هر کدوم از برنامه ها میتونم اونو اجرا کنم
برنامه جریان ac
برنامه جریان DC
میخوام یک کلید دو حالته اضافه کنم و هر موقع پایه 6 low شد برنامه dc رو اجرا و هر موقع پایه 7 low شد برنامه AC رو اجرا کنه
به چه صورت باید این دو برنامه رو در یک برنامه قرار بدهم ؟
من برنامه رو به صورت پایین نوشتم آیا درسته ؟
دلیل: ادغام دو پست برای جلوگیری از اسپم
و یک موضوع دیگر اینکه من از ماژول سون سگمنت 4 تایی استفاده میکنم و میخوام با 2 رقم اعشار بهم نشون بده
دارم یک برد آمپر متر با ماژول ACS712 -30A میسازم ( با آردوینو uno )
این ماژول هم جریان DC و هم جریان AC رو اندازه گیری میکنه
البته برنامه اندازه گیری جریان DC با اندازه گیری جریان AC متفاوته و بصورت عادی من با اپلود کردن هر کدوم از برنامه ها میتونم اونو اجرا کنم
برنامه جریان ac
برنامه جریان DC
میخوام یک کلید دو حالته اضافه کنم و هر موقع پایه 6 low شد برنامه dc رو اجرا و هر موقع پایه 7 low شد برنامه AC رو اجرا کنه
به چه صورت باید این دو برنامه رو در یک برنامه قرار بدهم ؟
من برنامه رو به صورت پایین نوشتم آیا درسته ؟
کد:
#include "SevenSegmentTM1637.h"
const byte PIN_CLK = 4; // define CLK pin (any digital pin)
const byte PIN_DIO = 5; // define DIO pin (any digital pin)
SevenSegmentTM1637 display(PIN_CLK, PIN_DIO);
const byte analogIn = A0;
byte mVperAmp = 66; // use 100 for 20A Module and 66 for 30A Module
int RawValue = 0;
double Voltage = 0;
double Amps = 0;
byte button6State = 0;
byte button7State = 0;
double VRMS = 0;
double AmpsRMS = 0;
double VRMS = 0;
double AmpsRMS = 0;
void setup() {
pinMode(6, INPUT);
digitalWrite(6, HIGH);
pinMode(7, INPUT);
digitalWrite(7, HIGH);
display.begin();
display.setBacklight(100);
display.print("1234");
delay(500);
}
void loop()
button6State = digitalRead(6);
button7State = digitalRead(7);
if (button6State == LOW) {
DCamp();
}
if ( button7State == LOW){
ACamp();
}
void DCamp() {
RawValue = analogRead(analogIn);
Voltage = (RawValue / 1024.0) * 5000; // Gets you mV
Amps = ((Voltage - 2500) / mVperAmp);
display.print(Amps,2);
delay(1000);
loop()
break;
}
void ACamp()
{
Voltage = getVPP();
VRMS = (Voltage / 2.0) *0.707;
AmpsRMS = (VRMS * 1000) / mVperAmp;
display.print(AmpsRMS,2);
}
float getVPP()
{
float result;
int readValue; //value read from the sensor
int maxValue = 0; // store max value here
int minValue = 1023; // store min value here
uint32_t start_time = millis();
while ((millis() - start_time) < 1000) //sample for 1 Sec
{
readValue = analogRead(sensorIn);
// see if you have a new maxValue
if (readValue > maxValue)
{
/*record the maximum sensor value*/
maxValue = readValue;
}
if (readValue < minValue)
{
/*record the maximum sensor value*/
minValue = readValue;
}
}
// Subtract min from max
result = ((maxValue - minValue) * 5.0) / 1023 .0;
return result;
}
و یک موضوع دیگر اینکه من از ماژول سون سگمنت 4 تایی استفاده میکنم و میخوام با 2 رقم اعشار بهم نشون بده






دیدگاه