Soms is de afstand te groot of zijn er andere redenen waarom we draadloze communicatie willen opzetten tussen twee toestellen. Hieronder bekijken we enkele mogelijkheden.
Infrarood-signalen worden vaak gebruikt in afstandsbedieningen. Ook in jullie box zit een kleine afstandsbediening en IR-receiver die je kan gebruiken in Arduino-projecten.
De schakeling van de receiver is erg eenvoudig, je hoeft geen weerstand te gebruiken. In de code hieronder hebben we de signaalpin verbonden met pin7. De andere pins gaan gewoon naar 5V en GND.
Voor de zender heb je enkel een platte batterij type CR2025 nodig.
Libraries installeren. Via het menu ga je naar Hulpmiddelen > bibliotheken beheren
In het zoekvenster geef je IRremote in.
Om onze afstandsbediening te testen gebruiken we deze eenvoudige voorbeelcode.
Het boek waar deze code uit komt kan je hier vinden. Dit is een vereenvoudigde versie van de ReceiveDemo die je bij de voorbeelden in de IRremote library kan vinden.
Nadat je de code hebt doorgestuurd naar de Arduino kan je in de Seriële monitor zien welke toetsen op de afstandsbediening ingedrukt werden.
We hebben ons voor de informatie over de module op deze pagina vooral gebaseerd op de site van LastMinuteEngineers en HowToMechatronics
De naam klinkt wat technisch maar die 2.4GHz band is een bepaalde zone van frequenties, zoals ook elk radiosignaal een eigen frequentie heeft. Deze fequenties zijn voorbehouden voor ISM (Industrial, Scientific, Medical) toepassingen, net zoals WiFi en Bluetooth.
Er zijn verschillende modules, maar hieronden bespreken we de nRF24L01 met de PA/LNA module en losse antenne. Met deze module kan je twee Arduino's laten communiceren over een afstand van 1000m.
De module van de onderste afbeelding heeft een kleinere ingebouwde antenne en een bereik van ongeveer 100m.
Om twee modules te laten communiceren moeten die op hetzelfde kanaal zitten.
De 2.4 GHz band bevat de frequenties tussen 2400 en 2525 MHz, waar ruimte is voor 125 kanalen.
Kanaal 1 zit op 2401MHz, kanaal 2 zit op 2402MHz en zo verder.
De schakeling (deze is gelijk voor beide types module):
1) Gaat naar GND op de Arduino
2) Gaat naar de 3,3V op je Arduino. Let op, bij aansluiting op 5,5V beschadig je de module!
3) CE (Chip Enable) is HIGH wanneer de module zendt of ontvangt, en mag met elke digitale pin op de Arduino verbonden worden
4) CSN (Chip Select Not) gaat LOW wanneer de module luistert naar de SPI poort, en mag met elke digitale pin op de Arduino verbonden worden
5) SCK (Serial Clock)
6) MOSI (Master Out Slave In) is de SPI input naar de module
7) MISO (Master In Slave Out) is de SPI output van de module
8) IRQ is een 'interrupt' pin die de master verwittigd wanneer nieuwe data beschikbaar is.
De code:
Wij maken gebruik van de RF24-library, dat is één van de libraries die ervoor zorgen dat de code in Arduino niet te complex wordt. Je kan die installeren via:
Hulpmiddelen > Bibliotheken beheren, daar in het zoekvenster RF24 ingeven en de RF24 library installeren.
Hieronder beginnen we met een eerste test. We sturen het bericht 'Hello STEM-rover' door van de ene Arduino naar de andere.
Omdat radiosignalen snel verstoord raken door elektrische stroom in de omgeving wordt bij de nRF24L01 vaak een adapter module gebruikt. Deze kan storingen verminderen. Je kan de nRF24L01 op de adapter pluggen, en dan van de adapter naar de Arduino gaan.
De pins blijven dan hetzelfde, MO staat voor MOSI en MI staat voor MISO, en VCC en GND staan wat apart. VCC mag vanaf deze adapter wel op 5V aangesloten worden.
Enkele manieren om de communicatie te verbeteren waar we later nog op terugkomen:
- De hogere kanalen geven vaak beter ontvangst, dus bij voorkeur de hoogste 25 kanalen gebruiken
- Een lagere data-rate sorgt voor een hogere gevoeligheid voor signalen (best 250Kbps)
- De output power verhogen 0 dBm geeft een sterker signaal
Nu we onze nRF24L01 getest hebben, kunnen we de opstelling uitbreiden zodat we met een Arduino met een joystick, draadloos meerdere actuatoren (twee servo's en en led) kunnen aansturen op een andere Arduino. We zullen hier dus zowel digitaal als analoog moeten lezen, sturen, ontvangen en schrijven.
We gebruiken de schakeling zoals we die hierboven opgebouwd hebben, en voegen bij de zender een joystick toe en bij de ontvanger 2 servo's en een led.
Denk er wel aan dat de Uno niet genoeg vermogen heeft om twee servo's te belasten. Op de Brainbox mag dat wel.
Hieronder zie je de schakeling. Omdat die intussen flink wat draden telt kan je best stap voor stap werken. Ga dus eerst een test doen met de basis zoals hierboven, ga dan pas je schakeling en code uitbreiden.
De code: Wanneer we meer informatie tegelijkertijd willen verzenden (hier de variabelen voor 2 servo's en een led), dan zullen we de informatie moeten verpakken in een pakket met meerdere bytes.
Hierdoor zijn er voor de code enkele aanpassingen. Je merkt dat met struct packet eerst een 'packet' wordt gemaakt waarin alle 'bytes' zitten. Die bytes bevatten de variabelen die we willen doorsturen. Onze variabelen in void loop krijgen daarom nu steeds het voorvoegsel 'State.'
In void loop wordt nu ook een interval gebruikt, om het verzenden van de pakketjes netjes te regelen met vaste tussentijden.
Met de schakeling hierboven en deze code kan je nu dus met een Arduino met een Joystick, een andere Arduino met 2 servo's en een led aansturen.
Ook met deze module kan je twee Arduino's met elkaar laten communiceren. Deze module heeft in ideale omstandigheden zelfs een bereik van 1800m. Ze wordt standaard verkocht zonder pins en met een nog losse spiraalvormige 433MHz antenne, maar je kan er ook een grotere antenne op aansluiten.
Je zal eigen pins en antenne dus zelf aan de module moeten solderen.
Bij 5V wordt aangeraden een diode in serie te schakelen met 5V en GND.
Voor de informatie hier hebben we ons vooral gebaseerd op de info over deze module op: howtomechatronics.com en op Arduino project hub.
Meer info over deze module vind je op de pagina's hierboven.
De opstelling testen:
We hebben ons voor de test hieronder gebaseerd op de basiscode van howtomechatronics. Met deze eenvoudige voorbeeldcode kan je snel testen of je schakeling werkt. Je uploadt de code naar beide Arduino's, daarna kan je tekst doorsturen van de ene Serial Monitor naar de andere.
Links zie je de Serial Monitor waar de boodschap verzonden wordt, hierboven de Serial Monitor waarin de boodschap verschijnt.
Nu onze twee modules getest zijn, willen we die kunnen gebruiken om verzamelde informatie van sensoren door te sturen naar een andere Arduino of om actuatoren aan te sturen via een andere Arduino. Daarvoor moeten we eerst zorgen dat beide modules hetzelfde kanaal gebruiken en dezelfde baut rate gebruiken.
De HC-12 modules voorbereiden met AT-commands:
Daarom moeten we beide modules eerst even voorbereiden. Hiervoor gebruiken we AT-commands. Dit zijn instructies die gebruikt worden in communicatie. 'AT' komt van 'ATtention' , een signaal dat elke instructie vooraf gaat.
1) Verbind de SET-pin (die is normaal nog niet verbonden) met de GND op je Arduino.
2) Wanneer je nu in je Serial Monitor AT verzendt naar de module, dan zou je als antwoord van de module OK moeten zien verschijnen .
3) Nu ga je de baud rate ingeven. We geven hier de default baud rate in (9600) met de instructie: AT+B9600 de module zou nu als antwoord OK+B9600 moeten geven.
4) Nu ga je het kanaal ingeven (een kanaal tussen 001 en 100). We nemen opnieuw het default kanaal (001) en geven de instructie: AT+C001 de module zou nu als antwoord OK+C001 moeten geven.
Je doet dit bij beide modules, zodat dezelfde baud rate en hetzelfde kanaal gebruikt worden.
De schakeling: De set-pin moet niet meer verbonden blijven met GND nu we gaan zenden en ontvangen. We gebruiken één arduino met HC-12 als basis-station en één als buiten-station.
De diode die op het schema staat hebben we in onze test niet gebruikt en dat gaf geen problemen.
Het basis-station: Hier voegen we nog een LCD-scherm toe dat de temperatuur en luchtvochtigheid weergeeft die gemeten wordt op het buiten-station en twee drukknoppen die de leds van het buiten-station bedienen.
Het buiten-station: Hier voegen we twee leds toe en een DHT11-sensor. De sensor stuurt temperatuur en luchtvochtigheid door naar het basis-station en de twee leds worden aangestuurd door de drukknoppen van het basis-station.
De code: We gebruiken hier de code van het voorbeeld op de Arduino-projectsite. We hebben al hier en daar enkele woorden vertaalt, maar we willen die later nog grondiger nakijken.
Met deze code kan je de metingen van de sensor van het buitenstation zowel lezen in de Serial Monitor als op de LCD. Andersom kan je met de drukknoppen op het basisstation de leds bedienen.
De schakeling voor het basisstation
De schakeling voor het buitenstation
In dit voorbeeld maken we gebruik van de HC-06 Bluetooth module. We kunnen hiervoor gewoon opnieuw de code uit het vorige voorbeeld gebruiken wanneer we signalen willen verzenden via Bluetooth. De signalen komen via de Bluetooth module op dezelfde manier binnen als de signalen via de USB-poort. Let op, dat betekent wel dat je eerst de code van je programma moet doorsturen naar je Arduino via de USB kabel en dan je kabel losmaakt voor je je Bluetooth module mag aansluiten! Je zal dan een andere voeding moeten gebruiken dan je USB-kabel, bijvoorbeeld een adapter of batterij.
De HC-06 aansluiten: In het schema hiernaast kan je zien hoe je de HC-06 moet aansluiten op je Arduino. Let erop dat TX moet verbonden worden met RX en RX met TX. Op de Uno zijn dat pin 0 en 1, op de Brainbox heb je een speciaal aansluitpunt voor de HC-06.
Zodra je de de HC-06 hebt aangesloten zal je merken dat er een rode LED begint te knipperen. Die geeft aan dat de Bluetooth module zoekt naar mogelijke zenders.
Op je computer open je nu je Bluetooth voorkeuren. Uit de zichtbare aparaten kies je nu de HC-06. Je zal zien dat je dan een code moet ingeven. De standaard-code voor deze toestellen is 1234. Wanneer je die hebt ingegeven zou je moeten kunnen verbinden.
Data doorsturen: Nu kan je terug naar je code op je computer gaan. In plaats van de USB-poort die je normaal gebruikt, kies je nu bij je pooorten de poort die verbonden is met je HC-06. Dat is normaal iets als: /dev/cu.HC-06-DevB.
Nu kan je in je sketch je Serial Monitor openen en net zoals in het vorige voorbeeld een H ingeven en doorsturen.
Voorlopig houden we het hierbij, later kijken we of we het doorsturen van signalen efficiënter kunnen aanpakken.