4 sensoren 5 levels

Toon hier Uw afgeronde projecten aan anderen.
Berichten: 6
Geregistreerd: 17 Jul 2021, 11:01

4 sensoren 5 levels

Berichtdoor bajka » 17 Jul 2021, 13:24

Goede morgen knappe koppen,

Ben nu de ganse week (5 dagen aan 6 uur/dag) bezig naar het zoeken van een speld in een hooiberg.
Door een pc-crash ben ik een (meerdere) programma kwijt. Dat programma draaide op 3 sensoren en
deed het uitstekend.

Probeer die nu te herschrijven maar dan met toevoeging van 1 extra sensor. Door al dat geschrijf heb
ik nu enkele verschillende programma's die maar deels werken, via een waarheidstabel ben ik tot de
conclusie gekomen dat wat ik wil bereiken theoretisch mogelijk is. Alleen in de praktijk......

'k Wil de bedoeling even in de groep gooien zonder echt in programmeertaal te duiken, misschien heeft
iemand een idee waar ik mee verder kan..... Zonder programma omdat ik toch al meerde heb die niet draaien.

Er zijn 2 watertanks, 4 sensoren, 1 error sensor, 1 relais, 8 leds.

1 tank van 1000L heeft een sensor op bijna de grond dat aangeeft of de tank leeg is, leeg = rel uit (rel
stuurt een pomp).

2de tank van 50L heeft 3 sensoren, 1 op de bodem (leeg detectie), 1 midden (halfvol), 1 boven (vol).
Tussen de sensor 2 & 3 zit een led melding voor minder dan half en meer dan leeg zijn.
Tussen de sensor 3 & 4 zit ook een led met zelfde reden, meer dan half, minder dan vol.

De error sensor heeft als taak; is er water in tank 1 en error sensor is nat, dan gaat een led knipperen
en word de pomp afgesloten.
Als een sensor is stuk of er is een lek, gaat er zo geen water nodeloos verloren. Bij breuk sensor1 stopt
alles sowieso daar de eerste regel is: geen water in tank1 (0), rel blijft uit (zie tabel)


| led1 | led2 | led3 | led4 | led5 | led6 | led7 | Rel | //Rel heeft led8 als indicator
--------------------------------------------------------------------------------------------------------------------------------------------
Sensro1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | // tank buiten is leeg (led aan)
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Sensro1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | // er is water in tank 1 (led uit)
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Sensor2 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | // tank 2 is leeg, pomp aan (led aan, rel aan)
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Sensor2 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | // tank 2 heeft water, pomp blijft aan
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Sensor3 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | // tank 2 halfvol....
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Sensor4 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | // tank 2 meer dan halfvol, nog niet vol (
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Sensor4 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | //tank 2 is vol, pomp uit.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Sensor5 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | //dit is het fout en stopt alles led7 knippert via timer IC 555
Sensor1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | //alles reset zich als sensor5 weer droog is
----------------------------------------------------------------------------------------------------------------------------------------------------------------

Uit dit waarheidstabel klopt alles, alleen in de praktijk wil het niet lukken. Sensor3 (1) en Sensor4 (0) komen in conflict ik heb me
suf gezocht naar een oplossing door met Switch te werken, if - else if, directe led sturing....

Dit programmaatje is een onderdeel van een geheel die uit 3 Nano's bestaat die elk een andere taak hebben en toch samen
werken, error hier heeft een stop aan een andere Nano, die op zijn beurt ook een error van een 3de Nano kan krijgen die van
geen invloed heeft op dit gedeelte.

Beste programmeurs, het is in een notendop omschreven wat de bedoeling van dit deel te programmeren item en hoop dat het
jullie wat duidelijk is. Het zal me verheugen als mijn project toch nog afraakt voor de hitte van de zomer start en zo mijn serre
met een gerust hart kan overlaten aan de Nano's die mijn werk wat eenvoudiger gaan maken en me een verdiende vakantie
gunnen......
Nog even dit, Nano's, ja, dat is omdat er binnenkort (2022) nog een serre bijkomt en dan enkele kleine aanpassingen dienen te
gebeuren. Als ik alles in een Mega stop dan valt het gehele systeem uit. Ook zou de bedrading veel groter zijn mits de Nano's
dicht bij hun werkspot zijn. Met te splitsen in enkele groepen kan andere delen blijven draaien, ook bedacht op stukgaan van
een processor/onderdeel = sneller te vervangen.

Aan ieder, alvast bedankt om dit al door te nemen
en voor het helpen bedenken van een oplossing.

Wees allen gegroet,

B.A.J.K.A.

Advertisement

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

Re: 4 sensoren 5 levels

Berichtdoor shooter » 18 Jul 2021, 11:27

mooie omschrijving, maar ik mis natuurlijk wel een schema en vooral wat je in elke NANO stopt en hoe heb je de communicatie onderling en wat zijn de afstanden etc.
en laat je programma ook zien, denk je eraan dat switch met een integer werkt bijvoorbeeld, heb je alle breaks erin staan etc.
paul deelen
shooter@home.nl

Berichten: 6
Geregistreerd: 17 Jul 2021, 11:01

Re: 4 sensoren 5 levels

Berichtdoor bajka » 20 Jul 2021, 09:12

Beste Shooter,

Heb verschillende keren geprobeerd om schema te uploaden, blijk te groot te zijn,
mag maar 640 x 480 pixels groot zijn, schema is 1221 x846.... anders met veel plezier.

het programma dat tot nu toe het beste werkte is volgende:

#define sensor1 A1 //tank buiten
#define sensor2 A2 //tank binnen laag
#define sensor3 A3 //tank binnen midden
#define sensor4 A4 //tank binnen vol
#define sensor5 A0 //foutmelding

#define led1 2 //buiten leeg
#define led2 3 //laag leeg
#define led3 4 //laag bijna leeg
#define led4 5 //halfvol
#define led5 6 //niet meer vol
#define led6 7 //vol
#define led7 8 //Error
#define POMP 9 //POMP

int Sensor1 = 0;
int Sensor2 = 0;
int Sensor3 = 0;
int Sensor4 = 0;
int Sensor5 = 0;

void setup() {

pinMode (sensor1, INPUT_PULLUP);
pinMode (sensor2, INPUT_PULLUP);
pinMode (Sensor3, INPUT_PULLUP);
pinMode (sensor4, INPUT_PULLUP);
pinMode (sensor5, INPUT_PULLUP);
pinMode (led1, OUTPUT);//buitenkank leeg
pinMode (led2, OUTPUT);//binnentank leeg
pinMode (led3, OUTPUT);//binnentank bijna leeg
pinMode (led4, OUTPUT);//binnentank halfvol
pinMode (led5, OUTPUT);//binnentank niet vol
pinMode (led6, OUTPUT);//binnentank vol
pinMode (led7, OUTPUT);//error
pinMode (POMP, OUTPUT);// met led blauw
}

void loop() {

Sensor1 = digitalRead(sensor1);
Sensor2 = digitalRead(sensor2);
Sensor3 = digitalRead(sensor3);
Sensor4 = digitalRead(sensor4);
Sensor5 = digitalRead(sensor5);

// bij defect van een sensor, of overloop, noodstop.
//als sensor1 stuk is dan werkt het geheel toch niet.

if ((Sensor1 == HIGH) && (Sensor2 == HIGH) && (Sensor4 == LOW)) {
digitalWrite(led3, LOW);
digitalWrite(POMP, LOW);
digitalWrite(led7, HIGH);
}
if ((Sensor5 == HIGH) && (Sensor1 == HIGH) && (Sensor2 == LOW) && (Sensor4 == HIGH)) {
digitalWrite(led2, LOW);
digitalWrite(POMP, LOW);
digitalWrite(led7, HIGH); //rood knipper, error.
}
else {
digitalWrite(led7, LOW);
}

if (Sensor1 == LOW) {
digitalWrite(led1, HIGH);
digitalWrite(POMP, LOW);
}
else {
digitalWrite(led1, LOW);
}
if ((Sensor1 == HIGH) && (Sensor2 == LOW)) {
digitalWrite(led2, HIGH); // led rood
digitalWrite(POMP, HIGH); //LED POMP = BLAUW
}
else {
digitalWrite(led2, LOW);
}
if ((Sensor1 == HIGH) && (Sensor2 == HIGH)) {
digitalWrite(led2, LOW); //tank is niet langer leeg.
digitalWrite(led3, HIGH); //led geel = tank bijna leeg.
}
else {
digitalWrite(led3, LOW);
}
/*
tot hier gaat alles zoals het hoord, bij volgende blijft led3 branden
terwijl die eigenlijk uit moet zijn volgen de programatie...
*/
if ((Sensor1 == HIGH) && (Sensor2 == HIGH) && (Sensor3 == HIGH)) {
digitalWrite(led3, LOW);
digitalWrite(led4, HIGH);
}
else {
digitalWrite(led4, LOW);
}
/*
bij volgende stap blijven zowel led3 als led4 branden als led5 oplicht,
klopt niet volgens de programatie...
*/
if ((Sensor1 == HIGH) && (Sensor2 == HIGH) && (Sensor3 == HIGH) && (Sensor4 == LOW)) {
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, HIGH); //geel, minder dan vol.
}
else {
digitalWrite(led5, LOW);
}
/*
na doorlopen volgende stuk blijven de led's 3 en 4 branden, van de rest doet
het wat verwacht wordt: led6 aan en POMP uit.
*/
if ((Sensor1 == HIGH) && (Sensor2 == HIGH) && (Sensor3 == HIGH) && (Sensor4 == HIGH)) {
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, HIGH); //tank vol
digitalWrite(POMP, LOW); //pomp uit
}
else {
digitalWrite(led6, LOW);
}
}

De andere Nano leest bij iedere doorloop van zijn viod loop() als eerst of hij op zijn poort een
error (HIGH) heeft die komt via led 7 van deze Nano, simpel maar effectief.

if (error == HIGH){
digitalWrite(POMP, LOW);
digitalWrite(ledError, HIGH);
}
else{
digitalWrite(ledError, LOW);

De afstanden tussen de Nano's mag je reken op +/- 2m, als ik ze samen voeg of een Mega gebruik
zit ik met een wirwar aan kabels. Nu heb ik enkel 4 leidingen, power en error signaal/GND.
De Derde Nano zorgt eigenlijk enkel voor de verduistering, verluchting en verkoeling(ventilator)/
verwarming (in de winter) en werkt geheel onafhankelijk van de 2 andere. Ja ik heb gezegd dat ze
samen werken, bedoelde daarmee dat ze 1 geheel vormen in de bewaken/besturen van de serre.

Heb hun programma gisteren nog eens door gelopen en heb uit de raam Nano (3) de error er uitgehaald
daar die toch zinloos is, het ergste wat daar kan gebeuren is dat het raam niet sluit, verduistering niet
open gaat of de vent/verwarming niet stopt. Voor de verwarming, die stop zowizo als die op temp. is.

Nano (2) die is verantwoordelijk voor het water geven aan de planten. die haalt zijn water uit de 50l tank
die in de serre staat en dezelfde temp. heeft als de omgeving (dit om schokeffect bij planten te voorkomen
als je water heel koud is)... die is wel. Een Error van Nano(1) zorgt ervoor dat zijn pomp en water valves
geen signaal krijgen, nadat de 50L tank leeg is om drooglopen te voorkomen.

Ben bezig te bedenken om met een RTC eventueel de tank (1000L) van Nano (1) deels te laten vullen met
kraanwater om zo niet te moet zien dat alles in de serre afsterft.... dat is voor later daar er daarvoor enkele
graafwerken voor nodig zijn.....

Terug bij begin,
zo, Shooter, zie je dat elk deel zijn eigen taak heeft, Nano 2 & 3 doen het zoals het hoort, nr 1 die moet
dwarsliggen en zonder deze kan ik beter alles zelf doe en niet 14 dagen er even tussen uit piepen.......


Tot wederhoren,

NB zal ondertussen eens zien hoe ik het schema in bijlage kan krijgen.

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

Re: 4 sensoren 5 levels

Berichtdoor shooter » 22 Jul 2021, 20:05

geef allereerst maar eens zinnige namen zoals pin_sensor_boven, waarde_sensor_boven,
zelfde voor ledjes etc, led_hoog_nivea etc
ook de NANO een echte naam geven, bijvoorbeeld luchtnano, waternano, lichtnano etc.
dan een goed schema van wat je allemaal voor sensoren en sturingen hebt, desnoods meerdere schemas
wat is LOW (aan of uit)dat mag je dus ook in een define zetten.
met programmeren moet je de lange kabel vermijden, maar een gewoon digitaal waarde van een sensor mag best lang zijn.
en stuur het maar op naar shooter@home.nl
paul deelen
shooter@home.nl

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

Re: 4 sensoren 5 levels

Berichtdoor shooter » 26 Jul 2021, 16:20

dankjewel voor het schema
en hoever ben je met je programma?
paul deelen
shooter@home.nl

Berichten: 6
Geregistreerd: 17 Jul 2021, 11:01

Re: 4 sensoren 5 levels

Berichtdoor bajka » 02 Aug 2021, 13:15

Goede middag,


Ja het is even geleden dat ik nog hier ben geweest, ben nog even ver als halfweg juli,
zit vast in het programma en kom er niet uit. Denk zelfs om gemakshalve 2 sensoren
en alle niet essentiële leds eruit te halen. Enkel de tank leeg buiten en tank leeg binnen
te behouden. Ook hou ik de error led.

Daarmee sluit ik dit project af..... jammer had mooi kunnen zijn.

het gewijzigde prog ziet er dan als volgd uit.....

#define sensor1 A1 //tank buiten leeg
#define sensor2 A2 //tank binnen leeg
#define sensor3 A3//tank binnen vol
#define sensor4 A0 //foutmelding

#define led1 2 //buiten leeg
#define led2 3 //binnen leeg
#define led3 4 //binnen vol
#define led4 8 //Error
#define POMP 9 //POMP

int Sensor1 = 0;
int Sensor2 = 0;
int Sensor3 = 0;

void setup() {

pinMode (sensor1, INPUT_PULLUP);
pinMode (sensor2, INPUT_PULLUP);
pinMode (sensor3, INPUT_PULLUP);
pinMode (sensor4, INPUT_PULLUP);
pinMode (led1, OUTPUT);//buitenkank leeg
pinMode (led2, OUTPUT);//binnentank leeg
pinMode (led3, OUTPUT);//binnentank vol
pinMode (led4, OUTPUT);//error
pinMode (POMP, OUTPUT);// met led blauw
}

void loop() {

Sensor1 = digitalRead(sensor1);
Sensor2 = digitalRead(sensor2);
Sensor3 = digitalRead(sensor3);


if ((Sensor3 == HIGH) && (Sensor1 == HIGH) && (Sensor2 == LOW)) {
digitalWrite(led2, LOW);
digitalWrite(POMP, LOW);
digitalWrite(led3, HIGH); //rood knipper, error.
}
else {
digitalWrite(led3, LOW);
}

if (Sensor1 == LOW) {
digitalWrite(led1, HIGH);
digitalWrite(POMP, LOW);
}
else {
digitalWrite(led1, LOW);
}
if ((Sensor1 == HIGH) && (Sensor2 == LOW)) {
digitalWrite(led2, HIGH); // led rood
digitalWrite(POMP, HIGH); //LED POMP = BLAUW
}
else {
digitalWrite(led2, LOW);
}
if ((Sensor1 == HIGH) && (Sensor2 == HIGH)&& (Sensor3 == HIGH)) {
digitalWrite(led2, LOW); //tank is niet langer leeg.
digitalWrite(led3, HIGH); //led groen = tank vol.
}
else {
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
}
}





Beste groeten allen.

B.A.J.K.A.

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

Re: 4 sensoren 5 levels

Berichtdoor shooter » 04 Aug 2021, 17:10

je geeft wel erg snel op hoor, hulp is vlakbij.
paul deelen
shooter@home.nl

Terug naar Afgeronde projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 2 gasten