Meervoudige sensoren

algemene C code
Berichten: 3
Geregistreerd: 16 Okt 2021, 20:56

Meervoudige sensoren

Berichtdoor Richard de Gelder » 16 Okt 2021, 21:19

Hallo,

Ik ben net bezig met mijn eerste Arduino project maar heb vroeger wel eens wat programmeer werk gedaan.
Mijn eerste project is een gasalarm met 5 sensoren. Nu ben ik even benieuwd of ik op de goede weg ben.

Overzicht, ik heb een groene status led en een buzzer voor alle sensoren, en vervolgens voor elke sensor een
rode led. Nu wil ik dat als er een alarm aanwezig is dat de status led uit is de buzzer aan en een rode led brand,
tot zover alles simpel.

Nu zou ik willen dat als er geen gasalarm meer is dat de statusled en de buzzer uit zijn, maar dat de rode led van
de betreffende sensor blijft branden tot ik het hele systeem reset.

Kom ik dan weg met een simpele if / else constructie voor elke sensor waarbij ik de waarde van de rode led
van de sensor op high laat staan, en vervolgens aan het eind van de code een reset instructie schrijf, of ga ik hiermee
de microprocessor teveel belasten, of schrijf ik hiervoor teveel code en is er een simpelere manier.

Bij voorbaat dank.

Advertisement

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Meervoudige sensoren

Berichtdoor shooter » 17 Okt 2021, 17:58

ja het kan met een if else constructie, laat je idee maar zien dan kijken de users wel of het een beetje wil werken. en zet commentaar en reele variabelen in zoals gas1sensorwaarde etc.
paul deelen
shooter@home.nl

Berichten: 3
Geregistreerd: 16 Okt 2021, 20:56

Re: Meervoudige sensoren

Berichtdoor Richard de Gelder » 21 Okt 2021, 22:43

Hieronder volgt de code, ik denk dat er een fout zit in de regels SerialPrint en SerilalPrintln, waarschijnlijk moet ik die
anders definieren maar ik weet niet hoe, en ik heb het idee dat als er iets gebeurd op sensor 1, dat een tweede alarm op bv sensor
4 niet meer doorkomt.

int AlBunGas = 2; // Alarmled gas gasbun
int AlKeukGas = 3; // Alarmled gas keuken
int AlPuntGas = 4; // Alarmled gas punt
int AlKeukCO = 5; // Alarmled CO keuken
int AlPuntCO = 6; // Alarmled CO punt
int SensBunGas = A0; // Sensor gas gasbun
int SensKeukGas = A1; // Sensor gas keuken
int SensPuntGas = A2; // Sensor gas punt
int SensKeukCO = A3; // Sensor CO keuken
int SensPuntCO = A4; // Sensor CO punt
int PowerLed = 7; // Groene led voor spanning aanwezig
int StatusLed = 8; // Groene led voor alles veilig
int Buzzer = 9; // Buzzer voor alarm
int SensWaarde = 400; // Gasalarm meetwaarde

void setup() {
pinMode ( AlBunGas, OUTPUT);
pinMode ( AlKeukGas, OUTPUT);
pinMode ( AlPuntGas, OUTPUT);
pinMode ( AlKeukCO, OUTPUT);
pinMode ( AlPuntCO, OUTPUT);
pinMode ( SensBunGas, INPUT);
pinMode ( SensKeukGas, INPUT);
pinMode ( SensPuntGas, INPUT);
pinMode ( SensKeukCO, INPUT);
pinMode ( SensPuntCO, INPUT);
pinMode ( PowerLed, OUTPUT);
pinMode ( StatusLed, OUTPUT);
pinMode ( Buzzer, OUTPUT);
Serial.begin(9600);
}

void loop() {
int analogSensor1 = analogRead(SensBunGas);
int analogSensor2 = analogRead(SensKeukGas);
int analogSensor3 = analogRead(SensPuntGas);
int analogSensor4 = analogRead(SensKeukCO);
int analogSensor5 = analogRead(SensPuntCO);

Serial.print("Pin A0: ");
Serial.println(analogSensor1);
// Controleerd of sensor gas gasbun zijn waarde heeft bereikt
if (analogSensor > SensWaarde)
{
digitalWrite(AlBunGas, HIGH);
digitalWrite(StatusLed, LOW);
tone(buzzer, 1000, 200);
}
else
{
digitalWrite(StatusLed, HIGH);
noTone(buzzer);
}
Serial.print("Pin A1: ");
Serial.println(analogSensor2);
// Controleerd of sensor gas keuken zijn waarde heeft bereikt
if (analogSensor > SensWaarde)
{
digitalWrite(AlKeukGas, HIGH);
digitalWrite(StatusLed, LOW);
tone(buzzer, 1000, 200);
}
else
{
digitalWrite(StatusLed, HIGH);
noTone(buzzer);
}
Serial.print("Pin A2: ");
Serial.println(analogSensor3);
// Controleerd of sensor gas punt zijn waarde heeft bereikt
if (analogSensor > SensWaarde)
{
digitalWrite(AlPuntGas, HIGH);
digitalWrite(StatusLed, LOW);
tone(buzzer, 1000, 200);
}
else
{
digitalWrite(StatusLed, HIGH);
noTone(buzzer);
}
Serial.print("Pin A3: ");
Serial.println(analogSensor4);
// Controleerd of sensor CO keuken zijn waarde heeft bereikt
if (analogSensor > SensWaarde)
{
digitalWrite(AlKeukCO, HIGH);
digitalWrite(StatusLed, LOW);
tone(buzzer, 1000, 200);
}
else
{
digitalWrite(StatusLed, HIGH);
noTone(buzzer);
}
Serial.print("Pin A4: ");
Serial.println(analogSensor5);
// Controleerd of sensor CO punt zijn waarde heeft bereikt
if (analogSensor > SensWaarde)
{
digitalWrite(AlPuntCO, HIGH);
digitalWrite(StatusLed, LOW);
tone(buzzer, 1000, 200);
}
else
{
digitalWrite(StatusLed, HIGH);
noTone(buzzer);
}


Alvast bedankt voor het meedenken. MVG Richard
delay(100);
}

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Meervoudige sensoren

Berichtdoor shooter » 22 Okt 2021, 12:56

Code: Alles selecteren
int AlBunGas = 2; // Alarmled gas gasbun
int AlKeukGas = 3; // Alarmled gas keuken
int AlPuntGas = 4; // Alarmled gas punt
int AlKeukCO = 5; // Alarmled CO keuken
int AlPuntCO = 6; // Alarmled CO punt
int SensBunGas = A0; // Sensor gas gasbun
int SensKeukGas = A1; // Sensor gas keuken
int SensPuntGas = A2; // Sensor gas punt
int SensKeukCO = A3; // Sensor CO keuken
int SensPuntCO = A4; // Sensor CO punt
int PowerLed = 7; // Groene led voor spanning aanwezig
int StatusLed = 8; // Groene led voor alles veilig
int Buzzer = 9; // Buzzer voor alarm
int SensWaarde = 400; // Gasalarm meetwaarde
boolean alarm = false;


void setup() {
pinMode ( AlBunGas, OUTPUT);
pinMode ( AlKeukGas, OUTPUT);
pinMode ( AlPuntGas, OUTPUT);
pinMode ( AlKeukCO, OUTPUT);
pinMode ( AlPuntCO, OUTPUT);
pinMode ( SensBunGas, INPUT);
pinMode ( SensKeukGas, INPUT);
pinMode ( SensPuntGas, INPUT);
pinMode ( SensKeukCO, INPUT);
pinMode ( SensPuntCO, INPUT);
pinMode ( PowerLed, OUTPUT);
pinMode ( StatusLed, OUTPUT);
pinMode ( Buzzer, OUTPUT);
Serial.begin(9600);
}

void loop() {
int analogSensBunGas = analogRead(SensBunGas);
int analogSensKeukGas = analogRead(SensKeukGas);
int analogSensPuntGas = analogRead(SensPuntGas);
int analogSensKeukCO = analogRead(SensKeukCO);
int analogSensPuntCO = analogRead(SensPuntCO);

Serial.print("Pin A0: ");
Serial.println(analogSensor1);
// Controleerd of sensor gas gasbun zijn waarde heeft bereikt
if (analogSensBunGas > SensWaarde) // vervangen door andere naam
{
digitalWrite(AlBunGas, HIGH);
digitalWrite(StatusLed, LOW);
// tone(Buzzer, 1000, 200); centraal maken
}
else
{
digitalWrite(StatusLed, HIGH);
digitalWrite (AlBunGas,LOW);// als er geen alarm is moet de LED wel uit
//noTone(Buzzer);
}
Serial.print("Pin A1: ");
Serial.println(analogSensor2);
// Controleerd of sensor gas keuken zijn waarde heeft bereikt
if (analogSensor > SensWaarde)
{
digitalWrite(AlKeukGas, HIGH);
digitalWrite(StatusLed, LOW);
tone(Buzzer, 1000, 200);
}
else
{
digitalWrite(StatusLed, HIGH);
noTone(Buzzer);
}
Serial.print("Pin A2: ");
Serial.println(analogSensor3);
// Controleerd of sensor gas punt zijn waarde heeft bereikt
if (analogSensor > SensWaarde)
{
digitalWrite(AlPuntGas, HIGH);
digitalWrite(StatusLed, LOW);
tone(Buzzer, 1000, 200);
}
else
{
digitalWrite(StatusLed, HIGH);
noTone(Buzzer);
}
Serial.print("Pin A3: ");
Serial.println(analogSensor4);
// Controleerd of sensor CO keuken zijn waarde heeft bereikt
if (analogSensor > SensWaarde)
{
digitalWrite(AlKeukCO, HIGH);
digitalWrite(StatusLed, LOW);
tone(Buzzer, 1000, 200);
}
else
{
digitalWrite(StatusLed, HIGH);
noTone(Buzzer);
}
Serial.print("Pin A4: ");
Serial.println(analogSensor5);
// Controleerd of sensor CO punt zijn waarde heeft bereikt
if (analogSensor > SensWaarde)
{
digitalWrite(AlPuntCO, HIGH);
digitalWrite(StatusLed, LOW);
}
else
{
digitalWrite(StatusLed, HIGH);
noTone(Buzzer);
}
{if (digitalRead(AlBunGas) || digitalRead(AlKeukGas) )// hier alle alarmen neerzetten
{tone(Buzzer, 1000, 200);
}}

}

zo beetje de weg terug heb er eentje gedaan de rest even zelf doen.
paul deelen
shooter@home.nl

Berichten: 287
Geregistreerd: 15 Apr 2021, 20:05

Re: Meervoudige sensoren

Berichtdoor ctunes » 22 Okt 2021, 22:36

Richard de Gelder schreef: if (analogSensor > SensWaarde)


De compiler had dit moeten weergeven: "Undefined Variable", en vervolgens het compileren moeten stoppen.

Maar omdat Arduino standaard niet '--pedantic' als "compiler-directive" aan heeft staan, worden vaak dit soort (domme) fouten over het hoofd gezien.

Of kijk jij niet naar wat er geproduceerd wordt?

"Mijn code is feilloos": zou een bepaalde politicus kunnen zeggen, met een oranje gezicht, terwijl hij de wereld trachtte te programmeren: "I don't need --pedantic".

Berichten: 3
Geregistreerd: 16 Okt 2021, 20:56

Re: Meervoudige sensoren

Berichtdoor Richard de Gelder » 27 Okt 2021, 22:09

Ik heb inmiddels de software aangepast en dit werkt, bedankt.
Gelijk mijn volgende vraag, ik zie in de seriele monitor afwijkende
waardes in de sensoren, terwijl ik ze op dezelfde plaats heb gekocht en
ze momenteel in de testopstelling nog naast elkaar zitten. Voorbeeld :

Sensor 1 MQ5 (propaan) waarde 239
Sensor 2 MQ5 (propaan) waarde 30
Sensor 3 MQ5 (propaan) waarde 32
Sensor 4 MQ7 (CO) waarde 389
Sensor 5 MQ7 (CO) waarde 366

Zou ik nu een print moeten maken om elke sensor in
zijn toekomstige omgeving uit te kunnen lezen en ze dan in
de software elk een andere grenswaarde geven,

of heb ik defecte sensoren,
of werkt het niet goed omdat ik alle 5 sensoren voed vanaf de mega2560

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Meervoudige sensoren

Berichtdoor shooter » 28 Okt 2021, 13:34

de eerste wijkt wel wat af ja die zou even gecalibreert moeten worden en in een tabel verwerkt worden. De rest lijkt mij goed want de afwijkingen zijn onder de 1% en zelfs 10 % is nog prima hor voor dit soort sensors.
en 10 % is toch 100 punten
paul deelen
shooter@home.nl

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 6 gasten