3 versnellingsmeters op enkele meters afstand van een Arduino

Na jaren van afwezigheid wil ik jullie een vraagstukje voorleggen. Ik ben benieuwd naar jullie gedachten en suggesties. Het heeft wel wat introductie nodig. Alvast bedankt voor de moeite.

Ik ben bezig om m'n 3 zonweringen (uitvalschermen) elektrisch bedienbaar te maken. In de basis is dat al gelukt: de buismotoren zitten er inmiddels in en ik heb een schakelkastje gemaakt waar de sturing in zit. Die bevat knoppen om het e.e.a. handmatig te bedienen, de ontvanger van twee afstandsbedieningen en een Arduino Nano om in de toekomst wat zaken te kunnen gaan automatiseren. Na zonsondergang automatisch de zonweringen omhoog halen, bediening/statuscontrole met een app of een doe-net-als-of-we-thuis-zijn-stand zijn dingen waar ik dan aan denk. De basis werkt nu in ieder geval en ik kan het naar wens en gelegenheid gaan uitbreiden.

Waar ik nu het eerste mee aan de slag wil, is detecteren of het hard waait en zo ja, de zonweringen omhoog halen. De meestgebruikte methode daarvoor is een windmeter, maar ik vermoed dat het e.e.a. vrij snel false positives én false negatives zou opleveren. Het betreft hier namelijk een wijkje van appartementencomplexen waar het nog wel eens raar kan waaien, zonder per sé de zonweringen in gevaar te brengen. Daarom heb ik besloten om voorlopig een andere weg in te slaan: aan het einde van ieder uitvalscherm een versnellingsmeter (accelerometer) plaatsen, om daarmee de daadwerkelijke beweging te meten. Bijkomend voordeel is dat ik ook de stand van de zonweringen kan meten. Het enige nadeel lijkt dat het niet mogelijk is om met opgerolde zonweringen te bepalen of het waait, wat ik (nog) niet als een echt probleem ervaar.

Ik heb 3 ADXL345's (datasheet) meebesteld met wat andere spulletjes, die ik nodig had voor de schakelkast. Nu ik er mee aan de slag wil, blijkt echter dat de twee ondersteunde communicatieprotocollen (SPI en I2C niet compatible zijn met communicatie op langere afstand. De verste versnellingsmeter zou op ongeveer 8 meter van de Arduino zitten. Daar komt bij kijken dat ik nog maar een beperkt aantal pinnen over heb op m'n Arduino Nano en die maar 1 hardware SPI en 1 I2C interface heeft. I2C heeft de minste pinnen nodig, maar een ADXL345 biedt slechts keuze uit twee adressen. Voor SPI heb ik precies genoeg pinnen, maar dan blijft het langeafstandsprobleem over.

Het internet gaf me de suggestie om SPI over RS485 te gaan doen. Voor dat doel heb ik een aantal LTC485 (datasheet) gekocht. Daar heb ik niet echt goed over nagedacht, want ik kom er niet echt uit hoe ik m'n CS- en kloklijnen hiermee zou verbinden. Als ik voor ieder van de 3 CS-lijnen een aderpaar nodig heb, dan kom ik er niet met het stuk CAT5-kabel dat ik had gehoopt hiervoor in te kunnen zetten. En kabels met meer dan 8 aders zijn lastig te vinden. Meerdere kabels zou kunnen, maar maken het wat lastiger om het nog een beetje toonbaar op de armen van de zonwering te bevestigen. Daarnaast voelt het ook als overkill. En de ADXL345's ondersteunen naar mijn weten geen daisy chaining.

Een andere gedachte is om de sensorunits te gaan voorzien van een eigen microcontroller, waardoor ik meer invloed heb over de te ondersteunen protocollen. Maar ik wil het ook niet complexer maken dan noodzakelijk. En dat ik waar ik nu een beetje vastloop en waar ik jullie graag om advies zou vragen.

Wat zouden jullie doen? Wat zijn jullie gedachten hierbij?

Overigens ben ik niet zo heel gehecht aan de sensoren en chips die ik nu heb liggen. Als het leidt tot een beter eindresultaat dan sta ik er voor open om iets anders aan te schaffen.

Arco

Special Member

Met een 'gewone' anemometer kun je toch middelen over langere periode, om rare uitschieters eruit te filteren?

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Op zich is het wel een mooie domotica toepassing.
- Domoticz op een Raspberry Pi
- Sensoren aan een ESP8266 (NodeMCU of zo)
- De ESP's zenden hun meetwaardes via MQTT naar Domoticz
- Domoticz stuurt ook de schermen aan.
- Bonussen: lampen gaan automatisch aan/uit, temperatuur in je tuin wordt gelogd, ook in de woonkamer, tuin wordt gesproeid ...

Of maak ik het nu te groot :-)

"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
Arco

Special Member

Je vergeet de grasspriethoogtemeter... ;)
(dan kan de maairobot een rondje door de tuin gaan trekken...)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Ik zou bij de sensor een kleine microcontroller plaatsen (en die RS485 driver) en met rs485 een protocol in elkaar knutselen. Met wat mazzel zou dat zelfs in een 8 pin SO package kunnen.

Je moet wel naar het kleine controllerdoosje heen en weer terug, dus 4 draden om het echt goed te doen.
Verder heb je natuurlijk nog een voeding nodig van twee draadjes dus met maximaal 6 draden kun je dan meer als een kilometer overbruggen met maximaal zo'n 30 sensors.

1-st law of Henri: De wet van behoud van ellende. 2-nd law of Henri: Ellende komt nooit alleen.
fatbeard

Honourable Member

Een goed begin is geen excuus voor half werk; goed gereedschap trouwens ook niet. Niets is ooit onmogelijk voor hen die het niet hoeven te doen.

Op 25 juni 2019 22:34:39 schreef fatbeard:
Of je gebruikt I²C extenders...

Zucht, je weet toch goed dat I2C er niet voor bedoeld is om er meters draad aan te hangen ... wordt niks. Ik zal wel weer commentaar krijgen dat het wel kan, maar dat wil niet zeggen dat het iets fatsoenlijks is.
Ik kan met een 2CV ook naar zuid afrika rijden, zal best lukken.

Verder kan die genoemde sensor maar op 2 adressen geconfigureerd worden. Dus 3 parallel hangen gaat niet werken, dan moet je al 2 bussen hebben.

1-st law of Henri: De wet van behoud van ellende. 2-nd law of Henri: Ellende komt nooit alleen.

Maar dan blijf je met het probleem zitten dat er blijkbaar maar 2 I2C adressen mogelijk zijn met die sensors.

Netjes is het niet, maar ik denk dat het best werkt met I2C, als je de datarate laag houdt, en bij de microcontroller en bij elke sensor pull-up weerstanden plaatst. Ik geloof dat 1k2 de minimale waarde is, dus met 4k7 bij elke sensor en de microcontroller blijf je daar nog boven .

Je zou kunnen proberen wat er gebeurd als je dat ALT_ADDRESS pinnetje veranderd terwijl zo'n sensor al aan staat; als het adres dan ook veranderd, zou je dat kunnen gebruiken als een soort chip select lijn. Van 2 sensors trek je die lijn dan hoog, een van de derde laag, en met die laatste kun je dan communiceren via het alternatieve adres. Je hebt daar geen 2 draden voor nodig, een pull-up weerstand en een condensatortje bij elke sensor is genoeg. Dat kost je dus 3x chip select, 2x I2C en 2x voeding, nog een draad over dus!

Als die sensors niet continue naar dat pinnetje kijken, maar alleen een keer bij het opstarten wordt het iets lastiger. Dan zou je alsnog naar SPI kunnen gaan, wederom met pull-up of -down weerstanden zo klein als ze mogen zijn en op een lage datarate.

Als je ze allemaal een eigen microcontroller geeft, zou ik CAN overwegen, maar als je daar geen ervaring een spullen voor hebt is dat wat lastiger.

EDIT @henri62: bedoeld... Bloempjes zijn bedoelt om bijen te lokken, computers zijn bedoeld voor wetenschap en borsten zijn bedoeld voor baby's.

In een andere omgeving, waar feilloos en betrouwbaar werken echt belangrijk zijn, zou ik het ook niet doen, maar voor zo'n projectje zie ik er geen kwaad in.

[Bericht gewijzigd door SparkyGSX op dinsdag 25 juni 2019 23:09:09 (10%)

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

Op 25 juni 2019 22:48:38 schreef henri62:
Verder kan die genoemde sensor maar op 2 adressen geconfigureerd worden. Dus 3 parallel hangen gaat niet werken, dan moet je al 2 bussen hebben.

Daarvoor KAN je overwegen om een i2c-splitter te kopen. (ik maak die dingen).

Maar toch: Ik zie niet in waarom SPI over 3-5 meter niet zou werken. SPI kan je langzaam zetten als dat nodig is. Als je in de eerste instantie problemen houdt, dan gebruik je een bandkabel van ongeveer 10 aders: GND MISO VCC MOSI GND SCLK GND VCC SS GND

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
fripster

Golden Member

Ik zou de sensoren lokaal hun eigen arduino nano geven. Dan alles in een seriele loop leggen:

Master TX >>> Sensor 1 RX -- Sensor 1 TX >>> Sensor 2 RX -- Sensor 2 TX >>> Sensor 2 RX -- Sensor 2 TX >>> Master RX

Zo kun je een eigen simpel protocol fabrieken waarbij de master een signaal naar de eerste sensor stuurt, deze ontvangt, voegt zijn meting toe, stuurt naar nummer 2 enzovoort. Aan het einde komt het hele datatreintje aan bij de Master.\\

Lekker lage bitrate nemen, 2400 of zo. Kun je het nog bitbangen ook.

Just my two cents...

Fripster

Eens een wirehead,altijd een wirehead.... gopher://fripster.ydns.eu
buckfast_beekeeper

Golden Member

Ik zie op commerciële toepassingen toch overal een anemometer vlak naast de zonweringen of op een hoek van het pand geplaatst. Gemiddelde snelheid over 1 minuut en je bent de rare zaken voor een groot stuk kwijt. Met de tijd kan je ook wat spelen mocht het voor jou nog te snel dicht gaan. Je hebt ook het voordeel dat je niet gaat openen als de wind niet gunstig is.

Je vergeet wel een regendetector. Zonwering netjes opbergen als het begint te regenen.

Van Lambiek wordt goede geuze gemaakt.
fripster

Golden Member

Ik zou de sensoren lokaal hun eigen arduino nano geven. Dan alles in een seriele loop leggen:

Master TX >>> Sensor 1 RX -- Sensor 1 TX >>> Sensor 2 RX -- Sensor 2 TX >>> Sensor 2 RX -- Sensor 2 TX >>> Master RX

Zo kun je een eigen simpel protocol fabrieken waarbij de master een signaal naar de eerste sensor stuurt, deze ontvangt, voegt zijn meting toe, stuurt naar nummer 2 enzovoort. Aan het einde komt het hele datatreintje aan bij de Master.

Lekker lage baudrate nemen, 2400 of zo. Kun je het nog bitbangen ook.

Just my two cents...

Fripster

Eens een wirehead,altijd een wirehead.... gopher://fripster.ydns.eu

Als je de comms gaat bitbangen, dan kan je op de "master" net zo goed 3 losse RX pins nemen. Op de enkele ge-bit-bangde TX stuur je: "Sensor 1 report please!" en dan krijg je op het sensor 1 pinnetje zijn rapport.

En.. eigenlijk kan je dan ook gewoon maar 1 RX draad naar de sensoren hebben lopen (rx voor de master in het midden). De sensoren moeten dan ieder na het sturen van het rapport hun lijn tristaten.

Maar goed. D'r kan zo veel.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Als je toch gaat bitbangen, zou ik I2C gebruiken; je kunt dan 1 clock gebruiken voor alle sensors, en ze allemaal een eigen datalijn geven. Bij I2C is de timing niet belangrijk voor de master, want het is synchroon en je maakt de klok zelf. Op die manier heb je dus maar 4 draden nodig voor 3 sensoren, plus 2 voor de voeding.

Uiteraard is RS232 beter vanwege de grotere swing en ESD bestendigheid, of RS422/RS485/CAN o.i.d. met differentiële signalen, maar in alle gevallen heb je bij elke sensor een eigen microcontroller nodig, met nog een handvol componenten er omheen. Als je bij SPI of I2C blijft kun je met een enkele microcontroller doen.

[Bericht gewijzigd door SparkyGSX op woensdag 26 juni 2019 13:05:22 (33%)

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Arco

Special Member

I2C extenders als de P82B715 werken uitstekend tot zeker 100mtr. Wij hebben ze heel veel toegepast voor een soort externe bus, nooit problemen.
(wel fatsoenlijke kabel gebruiken, bijv. CAT5/6)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Bedankt voor de reacties. Ik heb ze maar even uitgesplitst op onderwerp/oplossingsrichting.

Anemometer of accelerometer
De tijd die je neemt om de metingen te middelen zou inderdaad experimenteel moeten worden vastgesteld. Omdat het verband tussen windsnelheid en beweging van/schade aan de zonwering niet 1 op 1 is, blijf ik even bij m'n versnellingsmeter-experiment. Het is overigens ook niet meer dan dat: een experiment waarvan het nog maar zeer de vraag is of het slaagt. Een windsensor plaatsen kan altijd nog en wellicht doe ik het sowieso wel, om te kijken wat beter werkt en om te kunnen voorkomen dat mijn lieftallige partner bij windkracht 12 via een app op afstand de zonweringen laat zakken ;-)

I2C-extender
Omdat het gebruik ervan niet alleen hier afgeraden wordt en ik al RS485-chips in huis heb, laat ik deze optie even voor wat ze is.

Microcontroller per zonwering
Een interessante optie -die het mogelijk maakt om bij m'n besturingskast maar 1 kabel nodig te hebben in plaats van 3- maar wel een meer kostbare en complexe optie is. Daarnaast zou ik wat creatief moeten zijn met de behuizinkjes, want die wil ik waterdicht hebben, maar ik zou wel de mogelijkheid willen behouden om de microcontrollers te kunnen herprogrammeren.

I2C-splitter
Dit lijkt me vooralsnog de meest interessante optie, met als enig klein nadeel dat de kabels naar de sensoren parallel moeten lopen. Maar goedkoper en ogenschijnlijk minder complex dan 3 microcontrollers toevoegen en een protocol opstellen en implementeren. I2C wel over RS485.

P.S. Een regensensor is inderdaad belangrijk, ben ik vergeten te noemen en komt er zeker. Ik ben nog op zoek naar een goede sensor, maar daarvoor zal ik binnenkort het forum doorzoeken en/of een apart topic voor openen.

Voor I2C over RS485 heb je dus een microcontroller op de target nodig, want die moet dan de data-richting besturen afhankelijk van de fase van de i2c communicatie.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Arco

Special Member

I2C-extender
Omdat het gebruik ervan niet alleen hier afgeraden wordt en ik al RS485-chips in huis heb, laat ik deze optie even voor wat ze is.

Weer eens een geval van: 'mijn oplossing staat al vast, wil alleen bevestigd zien dat ik gelijk heb'... :)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Op 30 juni 2019 12:21:45 schreef rew:
Voor I2C over RS485 heb je dus een microcontroller op de target nodig, want die moet dan de data-richting besturen afhankelijk van de fase van de i2c communicatie.

Goed punt, daar kwam ik net ook achter toen ik het e.e.a. op breadboard in elkaar wilde gaan zetten.

Op 30 juni 2019 12:28:17 schreef Arco:
[...]
Weer eens een geval van: 'mijn oplossing staat al vast, wil alleen bevestigd zien dat ik gelijk heb'... :)

Het spijt me zeer als dat de indruk is die ik heb gewekt. Door het bovenstaande kom ik nu alsnog uit op de I2C-extenders, maar dat had ik eerder niet verwacht. Ik vind het dan niet onlogisch om eerst aan de slag te gaan met wat je al in huist hebt en daarna pas verder gaat kijken.