2 Arduino's Uno koppelen Master/slave

Hoi Mensen,

Ik wil graag over een betrekkelijk grote afstand van 20/25m, 2 arduino's met elkaar laten communiceren.
Het gaat erom dat de slave Uno temperaturen meet en dit doorgeeft aan de master, die -afhankelijk van andere factoren- ook poorten kan schakelen op die slave Uno.

De opzet is om wat kleppen op afstand aan te sturen via relaiskaartjes, die op hun beurt worden getriggerd met logische poorten.
Hierop vooruitlopend, wil ik een 4x 0,8mm2 gaan leggen.
De Slave en de kleppen hebben een eigen voeding.

Heeft iemand tips voor me?

Ik moet hier weer vaker komen... Wat kun je zo'n forum als deze gaan missen. :-)

I2C zou mijn eerste idee zijn, maar de afstand is daarvoor te groot.
Zou het per WiFi kunnen? Dan hoeft er zelfs geen kabel getrokken - of moet dat mssch. sowieso, voor de voeding?
Indien WiFi, overweeg dan ESP32, die heeft dat sowieso aan boord.

@hieronder: ja, zeker, RS422 is hem helemaal. De topicstarter hoopte misschien wel op iets simpelers...

[Bericht gewijzigd door Paulinha_B op zondag 22 januari 2023 17:28:04 (18%)

Een getermineerde serieele verbinding met RS422 signalen over twisted pair lijkt gepast, mits de common mode spanning voldoende klein blijft. Als dat niet zo is zou men 1 kant kunnen isoleren, bijvoorbeeld met 6N137's. Als er toch al twee voedingen zijn is dat een kleine moeite en zou ik het niet laten. [edit] Oeps, nee, men heeft de andere voeding natuurlijk niet beschikbaar aan de ene kant, zonder extra draden te trekken. Aan weer een andere kant heeft standaard netwerkkabel 4 pairs.

Tranceivers zoals de sn75176 zijn goedkoop en goed verkrijgbaar omdat ze ook voor DMX512 e.d. gebruikt worden.

Netwerk (is ook galvanisch gescheiden) of Wifi op een grotere µC kan natuurlijk prima, maar brengt een enorme software stack mee in vergelijking met een eenvoudig zelfbedacht protocol over serieel in een enkel Arduino schetsje. Lijkt enkel aantrekkelijk als het klaar staat van een vorig project.

[Bericht gewijzigd door Aart op zondag 22 januari 2023 17:45:13 (20%)

Wifi zou ik niet doen op een arduino. Daar heb je een grotere processor voor nodig. Op een ESP32 gaat dat wel goed.

En I2C is idd niet geschikt voor zulke afstanden.

Ik zou -denk ik- gaan voor een seriële verbinding en dan RS422, RS485, of beter nog current-loop.

Op 22 januari 2023 17:13:14 schreef Fantomaz:

Het gaat erom dat de slave Uno temperaturen meet en dit doorgeeft aan de master, die -afhankelijk van andere factoren- ook poorten kan schakelen op die slave Uno...

Niet eenvoudig om zoiets te programmeren, getallen verzenden + digitale signalen voor poortsturingen zal wel een soort protocol vereisen.

Een paar jaren geleden zoiets gemaakt met pic's en enkel voor bediening.

LDmicro user.
bprosman

Golden Member

Op 22 januari 2023 19:16:14 schreef MGP:
[...]
Niet eenvoudig om zoiets te programmeren, getallen verzenden + digitale signalen voor poortsturingen zal wel een soort protocol vereisen.

Een paar jaren geleden zoiets gemaakt met pic's en enkel voor bediening.

SNAP protocol, niet zo moeilijk te implementeren.

SNAP 1_03.pdf

De jongere generatie loopt veel te vaak zijn PIC achterna.

Ik denk dat I2C best zal werken, mits je kleine pull-up weerstanden gebruikt (1k2 is, als ik me goed herinner, het minimum), de bitrate laag houdt, en een klein beetje beveiliging toevoegt, een weerstandje in serie (zeg, 47 ohm) en een condensator naar de ground (zeg, 10nF), dan kunnen de ESD diodes van de AVR de rest wel oplossen.

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

Op 22 januari 2023 19:55:09 schreef Fantomaz:
Ik had dit stukken simpeler verwacht.
Daarbij meende ik me te herinneren dat Frits Kieftenbelt een hele ringleiding door zijn huis had lopen met een seriele verbinding op 9600baud of zoiets, waarmee meerdere Pics met elkaar communiceerden.
Ik had gehoopt dat dit hier op dezelfde manier zou kunnen.

Of een 5v TTL data signaal omzetten naar een +12/-12v signaal oid.

[Bericht gewijzigd door Fantomaz op zondag 22 januari 2023 19:56:30 (21%)

Ik moet hier weer vaker komen... Wat kun je zo'n forum als deze gaan missen. :-)
bprosman

Golden Member

Op 22 januari 2023 19:55:09 schreef Fantomaz:
Op 22 januari 2023 19:55:09 schreef Fantomaz:
Ik had dit stukken simpeler verwacht.
Daarbij meende ik me te herinneren dat Frits Kieftenbelt een hele ringleiding door zijn huis had lopen met een seriele verbinding op 9600baud of zoiets, waarmee meerdere Pics met elkaar communiceerden.
Ik had gehoopt dat dit hier op dezelfde manier zou kunnen.

Of een 5v TTL data signaal omzetten naar een +12/-12v signaal oid.

https://www.picbasic.nl/huis-automatisering.htm

https://www.circuitsonline.net/forum/view/63039

De jongere generatie loopt veel te vaak zijn PIC achterna.

Zowiezo moet je er wat bijbouwen in de vorm van een RS485 driver (of current loop, geisoleerd bij voorkeur) oid als je voor serieel wilt gaan.

Een andere nog betere optie is een CAN-shield gebruiken. Dat scheelt een hoop geklungel met het afhandelen van een seriel protocolletje wat je weer zelf moet maken. Let wel op dat hiet hetzelfde common mode verhaal geld als bij RS485.

Enne 100% mee eens dan I2C NIET gaat werken.

-edit-
RS485 en CAN shields zijn volgens mij zo te koop. Waarschijnlijk current loop dingetjes ook?

[Bericht gewijzigd door henri62 op zondag 22 januari 2023 20:13:33 (11%)

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

Dat kan ook, RS-485, Rs-422 of RS-232 zijn allemaal seriële verbindingen, en die zijn bedoeld voor dergelijke afstanden (en nog veel verder).

MGP: ik denk dat hij de pinnen van de microcontroller bedoelt, geen poort voor de auto.

Ik denk dat I2C best kan werken over 25 meter, mits de controllers de voeding delen, je een lage bitrate gebruikt, en een klein beetje beveiliging. Ik zou de pull-up aan beide uiteinden voorzien, dus 2x 2k7 naar dezelfde voeding.

Het is wel een beetje misbruik van de bus, maar in een elektrisch relatief schone omgeving zal het wel los lopen. Ik zou wel een checksum toevoegen, of alle berichten dubbel versturen, voor het geval er een keer een bitje omvalt.

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

RS485 zijn wel te koop.
Maar de meeste zijn wat mij betreft niet geschikt:
- Geen voeding op de aansturende header.
- Geen massa aan de RS485 kant.

Deze wel: https://nl.aliexpress.com/item/1005003932837799.html
Die schakelt ook automatisch tussen receive en transmit.

Ik bedoelde meer zoiets: https://www.digikey.nl/nl/products/detail/dfrobot/DFR0259/6588575
Idem als dit:
https://www.tinytronics.nl/shop/en/communication-and-signals/serial/rs…

Geen idee of dat wat is, heb ik ook net effe gegoogled.
Ik hoop dat je hier de DE/RE zelf via een IO pin kunt sturen, bij die losse printjes is het gokwerk wat ze doen.

[Bericht gewijzigd door henri62 op zondag 22 januari 2023 20:31:11 (17%)

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

Golden Member

Op 22 januari 2023 19:55:09 schreef Fantomaz:
Op 22 januari 2023 19:55:09 schreef Fantomaz:
Ik had dit stukken simpeler verwacht.

De afstand is net iets te groot voor RS232 maar je zou het kunnen proberen. Echte RS232 werkt wel op 25V dus je hebt hoe dan ook een omzetter nodig.

IK heb zelf met succes over 50 meter een USB extender gebruikt. De arduino heeft zelf al een USB seriele poort die je via die extender kan gebruiken.

onderstaand is tot 30 meter
https://www.megekko.nl/product/5887/987642/USB-extender/Gembird-USB-ex…

https://nl.aliexpress.com/item/32978115698.html?spm=a2g0o.productlist.…

[Bericht gewijzigd door benleentje op zondag 22 januari 2023 20:43:11 (22%)

Mensen zijn soms net als een gelijkrichter, ze willen graag hun gelijk hebben.

?? Arduino kan toch niet via USB naar een andere Arduino?

Dat werkt alleen van USB host (PC) naar USB device (Arduino).

harry64

Golden Member

1 temperatuur sensor? Of meerdere? zo ja wat voor? Stel dat het er drie zijn, dan kan je misschien beter met een gezamenlijke massa en drie signaaldraden je sensors direct op de master Arduino aansluiten. En anders kan je de twee Arduino's via hun TTL-RS-232 poortjes aansluiten, houd je zelfs nog een draadje over om de andere Arduino te voeden.

benleentje

Golden Member

Op 22 januari 2023 20:55:30 schreef deKees:
?? Arduino kan toch niet via USB naar een andere Arduino?

Dat werkt alleen van USB host (PC) naar USB device (Arduino).

Oeps daar heb je helemaal gelijk in.

Een RPI USB extender USB arduino kan wel maar misschien wat overkill.

Dan maar even zoeken op ali en daar is zijn alle converter printjes wel gewoon te vinden.
Serial TTL naar RS485

https://nl.aliexpress.com/item/1005001621746811.html?spm=a2g0o.product…

Of TTL serial naar RS422
https://nl.aliexpress.com/item/1005004299957781.html?spm=a2g0o.product…

Of Serial TTL naar RS232
https://nl.aliexpress.com/item/32946986183.html?spm=a2g0o.productlist.…

Alle smaken die je wilt

Hierop vooruitlopend, wil ik een 4x 0,8mm2 gaan leggen.

Een betere keus is 2 x 2 x 0,5 met afscherming. Het gaan dan om de 2 x 2 dat je 2 getwiste aderparen hebt, de draad dikte is minder van belang omdat er daar toch geen grote stroom loopt. Maar minimaal moet daar goed afgeschermde kabel.

Mensen zijn soms net als een gelijkrichter, ze willen graag hun gelijk hebben.

@benleentje : Mooie printjes, goed gevonden. _/-\o_

Maar minimaal moet daar goed afgeschermde kabel.

Welnee. Ik heb vaak genoeg grotere afstanden overbrugd met RS232, op 9600 Baud, zonder afscherming. En in een storingrijke omgeving kan men altijd nog de baudrate verlagen.

Natuurlijk is het wel mooi om afscherming te hebben, uiteraard, maar een absolute "moet" is het niet.

Wel graag akkoord dat 0,5 carré ruim volstaat.

In 1985 zaten wij met zo'n 30 terminals op zo'n 150m van de computer vandaan op 9600 of 19200. (Even in google maps "measure distance" gedaan en hemelsbreed is de afstand ongeveer 148m).

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

tot 10jaar geleden werkten wij op luchthavens met windmasten die op het einde van de piste stonden, en gewoon RS232 over papierkabel verschillende 100den meters en patchkasten door tot aan de pc. soms (bij regen) moest de snelheid wel eens omlaag.

was wel RS232 op + en - 12V en niet zomaar 5V signaaltjes

ik hou van werken ..., ik kan er uren naar kijken

Ik denk dat de TS het meer had over de software dan de hardware, door het gebrek aan software of de kennis ertoe vallen heel veel projecten in het water.
Die 25m overbruggen zal het minste van zijn zorgen zijn >:)

Op 22 januari 2023 20:13:59 schreef SparkyGSX:
..
MGP: ik denk dat hij de pinnen van de microcontroller bedoelt, geen poort voor de auto...

Dat had ik al begrepen, hij had het over logische poorten en ik was het woordje 'logische' vergeten :D

[Bericht gewijzigd door MGP op maandag 23 januari 2023 10:36:42 (41%)

LDmicro user.

'Echte' RS-232 kan wel tegen een stootje inderdaad. Maar die zie je niet zoveel meer. Nu zijn het vaak 5V signalen. Of zelfs maar 3V.

De specs van RS-232 gaan niet tot 25m dacht ik. Wat niet wil zeggen dat het niet zal werken. Zal beetje afhangen van langs waar die kabel gaat lopen. Toch beter een differentieel paar gebruiken zoals het RS485 protocol. Maar dat is al gezegd hier.

Als kan gekozen worden verkies ik ethernet kabel hiervoor. Dat is gedraaid spul en dit helpt tegen storing. Een overschot Cat5 is goed genoeg.

Hoe gaat die arduino aan de andere kant gevoed worden? Heeft die zijn eigen lokale voeding of wil je dat mee over die kabel sturen? Ook al verbruikt dat spul weinig er gaat altijd wel spanningsval zijn over zo'n lange kabel waarmee je rekening moet houden. Eenvoudigste oplossing is een wat hogere spanning oversturen (12v bvb) en lokaal buck convertor of zoiets voorzien.

Ik had al wat gevonden op Ali, gebaseerd op RS485.
Dat zou dan via een stukje twisted pair kunnen gaan.
Software is inderdaad de volgende issue.

Het wordt een applicatie waarin een arduino via relaisprinten kogelkranen kan aansturen.
De sensoren lezen bepaalde waardes uit, die bepalend zijn voor de keuze welke kleppen open of gesloten moeten zijn.
De 2 arduinoprinten hebben beide een eigen spanning een eigen relaiskaart en eigen sensoren.
De "hoofdprint" zou deze info moeten verzamelen en afhankelijk van de waardes de slave en zijn eigen kleppen kunnen sturen.
Volgende stap is om deze waardes en ook een overzicht van welke kleppen er open of dicht staan, web based te kunnen monitoren en misschien zelfs te kunnen bijsturen.

Het betreft een CV haard, de CV ketel an sich en een buffervat met heatpipes.

Ik moet hier weer vaker komen... Wat kun je zo'n forum als deze gaan missen. :-)

Als het ooit webgewijs moet kunnen benaderd worden, dan is een Arduino te licht - ook al is de ene Arduino niet de andere.

Overweeg misschien om ipv Arduino de ESP32 in te zetten, bv. de "devkit" versie. Of een Raspi die met de beide Arduinoos communiceert, op welke manier dan ook.

Het laatste dat je wilt is iets dat vandaag werkt, maar morgen moet herdaan worden omdat het niet voldoet aan de volgende eis. Beter "ruim" plannen vanaf het begin.