Met behulp van sensoren, 433Mhz RF modules en van Adafruit BLE Bluefruit chip om gegevens te verzamelen op Smartphone met Evothings Studio (3 / 6 stap)

Stap 3: Arduino zendermodule


We zullen beginnen met de zenders. Ze zijn allemaal gebouwd en gecodeerd op dezelfde manier, het enige verschil is het identificatienummer dat we in de code toevoegen zullen. Laten we beginnen met bedrading het omhoog.

Ik gebruikte pin 2 op de Arduino voor de ontvangergegevens pin en pin 3 voor de zendervan gegevens pin. De ontvanger heeft 2 identieke gegevens pinnen, hoeft u alleen te gebruiken. De fotocel is op A0 pin op de Arduino aangesloten. Echter, u wilt gebruiken een weerstand die is aangesloten op een van de de fotocel pinnen. De meeste van de tijd, een 10 k Ω weerstand is genoeg, maar als u van plan bent om het te gebruiken in een lichte kamer, moet u wellicht te vervangen door een weerstand van 1 k Ω, zoals het waarschijnlijk zal verzadigen.

Nu laten we overgaan tot de code. We zullen het gebruiken van een bibliotheek genoemd RadioHead voor het verzenden en ontvangen bericht met de RF transmitters/ontvangers. De die u nodig hebt is genoemd RH_ASK, wat staat voor RadioHead Amplitude S"hift K" aandacht op. U vindt het op deze website. U moet ook de SPI (Serial Peripheral Interface) bibliotheek die wordt gebruikt voor communicatie tussen twee microcontrollers. Het is niet in de code gebruikt maar die nodig zijn om het te compileren.

#include < RH_ASK.h > / / Radiohead bibliotheek voor RF modules
#include <SPI.h > / / niet daadwerkelijk gebruikt, maar nodig om te compileren

De volgende stap is het creëren van het RH_ASK-object dat we bestuurderzal noemen. Als u geen parameters opgeeft, wordt deze gemaakt met de standaardinstellingen die:

  • Snelheid = 2000bps
  • RX pin = 11 (R-eceive)
  • TX pin = 12 (T-ransmit)
  • PTT-pin = 10 (Push to talk)

Als ik ben met behulp van pin 2 en 3, zal ik deze parameters opgeven. Het soort RF modules gebruiken we hoeft de Ptt functie, dus u kunt negeren, tenzij u iets verbinden met pin 10, in welk geval u wilt instellen van de Ptt aan spelden een ongebruikte pin (of -1) zoals het zal verstoren sommige anders.

RH_ASK stuurprogramma (2000, 2, 3); RX pin (ontvanger) naar 2 en TX pin (zender) instelt op 3

Hier zijn de globale variabelen gebruikt in de code:
De kamer -variabele is het identificatienummer van de Arduino. U wilt het verhogen voor elke zender Arduino u gebruiken.
De startRequest variabele bestaat uit de letter "a" gevolgd door het identificatienummer. De zender Arduino zal het verzoek dat het ontvangt van de "moeder" Arduino naar deze string vergelijken. Als deze overeenkomen, dan stuurt deze terug de gegevens lezen van de sensor.
De photocellPin -variabele is de pin waarop de fotocel is aangesloten.
De photocellReading variabele slaat de waarde van de fotocel leest.

kamer constint = 0; Identificatienummer
StartRequest koord = "a"String(room); Verzoek tekenreeks die wordt verzonden door de "moeder" Arduino

constint photocellPin = A0; Fotocel pin
int photocellReading; Variabele voor het opslaan van de fotocel lezing

Het deel van de installatie is vrij ongecompliceerd. U moet de fotocel pincode aan ingangsmodus instellen en, als je wilt, beginnen de seriële communicatie voor foutopsporing.

voidsetup()
{
pinMode (photocellPin, INPUT);

Seriële.begin(9600); Voor foutopsporing
Als (! driver.init()) / / als de RF modules niet initialiseren
Seriële.println ("init mislukt");
}

In de lus -deel zullen we het schrijven van de code waarmee de ontvangst van aanvragen en de toezending van de gegevens verwerkt. We beginnen met het maken van een lange 2 byte buffer die zal ontvangen verzoek op te slaan. De uint8_t indeling is hetzelfde als een byteen niet-ondertekende integer van lengte 8 bitsbetekent. We moeten ook de lengte opgeven in de buflen -variabele.

voidloop()
{
uint8_t buf [2]; Buffer die wordt gebruikt voor het opslaan van ontvangen verzoek, de grootte is ingesteld op 2 bytes omdat het verzoek: "a" + String(room) (bijv. a0)
uint8_t buflen = sizeof(buf);

Zodra de RF-ontvanger een bericht van grootte buflenontvangt, wordt het in de bufopgeslagen. Als de indeling van het bericht een matrix met bytes is, die we willen opslaan in een string-variabele om te vergelijken met de verwachte verzoek. Dit wordt gedaan door het toewijzen van de buf variabele, voorafgegaan door (char *). Merk op dat de * betekent dat de tekens gemaakt verwijzingen naar de bytes zullen, die doet elke extra opslagruimte niet gebruikt.

Toen ik dit getest, ontving ik soms het verzoek gevolgd door sommige rare tekens die de vergelijking onmogelijk maakte. Ik zal daarom alleen de eerste twee tekens van het bericht met behulp van de functie string subtekenreekshouden.

Als (driver.recv (buf, & buflen)) / / na ontvangst van een verzoek
{
Tekenreeks verzoek = (char *) buf; De aanvraag opslaan in een tekenreeks voor de vergelijking
verzoek = request.substring (0, 2); Bericht ontvangen wordt soms gevolgd door rare tekens, houden van alleen de eerste twee
Seriële.print ("Got verzoek:"); Afdrukken van de ontvangen verzoek voor foutopsporing
Seriële.println(request);

Nu dat we ons verzoek opgeslagen in een string-variabele hebben, kunnen we vergelijken het met het verzoek die we verwacht hadden, die is startRequest die we in het begin hebt gemaakt.

Als (verzoek == startRequest) / / als de aanvraag overeenkomt met het deze Arduino start verzoek, gegevens meten en stuur het
{
Seriële.println ("Start-aanvraag ontvangen");
Seriële.println("");
delay(150);

Als de ontvangen aanvraag overeenkomt met het startRequest, moet de Arduino sommige gegevens terug te sturen. Dus we beginnen met het lezen van deze gegevens, in dit geval van de fotocel met behulp van de functie analogRead en opslaan in de photocellReading -variabele. Dit geeft ons een waarde tussen 0 en 1023, maar dit is niet praktisch om te worden geparseerd als de lengte van de waarde varieert. Wij zullen daarom de functie kaart de waarde toewijzen aan een getal tussen 100 en 999, zodat er altijd 3 cijfers bestaan.

Gegevens verzenden
Seriële.println ("verzenden gegevens");
Seriële.println("");
photocellReading = analogRead(photocellPin); Meten van helderheid
Seriële.print ("fotocel lezing:");
Seriële.println(photocellReading); Voor foutopsporing

De gegevens wilt toewijzen aan een getal tussen 100 en 999 zodat er altijd 3 cijfers lang, waardoor het makkelijker te parseren door de moeder Arduino
int mapPhotocellReading = kaart (photocellReading, 0, 1023, 100, 999);

Zodra we onze gegevens correct toegewezen hebben, hebben we te sturen naar de "moeder" Arduino. Om ervoor te zorgen dat het niet up van de gegevens mengen, zullen wij het identificatienummer van de kamer naar het begin van de boodschap die wij zullen toevoegen. Na dat we een char-array (1 byte langer is dan de lengte van het bericht) maken en kopiëren van onze boodschap om gebruik te maken van de functie string toCharArray.

Koord str = kamer + String(mapPhotocellReading); Maken van een tekenreeks met kamernummer en lezen zodat de "moeder" Arduino weet waar het vandaan komt
char gegevens [5]; Char matrix voor reactie, op te slaan moet 1 byte langer dat de lengte van de tekenreeks
str.toCharArray (gegevens, 5); Tekenreeks naar char matrix kopiëren

Nu alles wat overblijft om te doen is om het bericht te verzenden. Dit wordt gedaan met behulp van de methode send van het object van de bestuurder op een bericht in de indeling uint8_t . De waitPacketSent -methode wordt gebruikt om ervoor te zorgen dat de gegevens volledig worden verzonden voordat de rest van de code wordt uitgevoerd

driver.send ((uint8_t *) gegevens, strlen(data)); Reactie verzenden
driver.waitPacketSent(); Wachten totdat antwoordpakket wordt volledig verzonden

Seriële.print ("gegevens die worden verzonden:"); Voor foutopsporing
Seriële.println(data);
Seriële.println("");
}
}
}

Gerelateerde Artikelen

Bouwen van een ISS aanwijzer Tracker met behulp van Adafruit HUZZAH ESP8266

Bouwen van een ISS aanwijzer Tracker met behulp van Adafruit HUZZAH ESP8266

Overzicht – deel 1 Hgte/Az aanwijzerUitbreiding op mijn Stepper Motor controller met behulp van Adafruit Huzzah ESP8266 WiFi module door toevoeging van een kleine Servo, ik heb een mechanisch apparaat dat kunt verplaatsen in Azimuth (met behulp van e
Android gecontroleerd Bot met behulp van Adafruit motor Shield

Android gecontroleerd Bot met behulp van Adafruit motor Shield

Dit is een eenvoudige hobby circuit van Android gecontroleerd Bot usin Adafruit motor Shield & Arduino uno. De belangrijkste component die hier gebruikt is de Adafruit motor shield, Arduino Uno, Bluetooth & Android apparaat. Met behulp van Motor S
Hoe maak je een Parallax BOE-Bot met behulp van de Basic Stamp-Chip

Hoe maak je een Parallax BOE-Bot met behulp van de Basic Stamp-Chip

dit instructable toont de bouw en de wijziging van de Parallax BOE-Bot Robot Basic Stamp.Stap 1: Identificatie van onderdelen en pakkingring-izing de metalen base. Eerst u willen ervoor zorgen dat je de onderdelen klaar hebt, dan passen de 3 grommets
Bluetooth Wireless Voltage Meter met behulp van de Wiimote Pic Chip + AutoIt

Bluetooth Wireless Voltage Meter met behulp van de Wiimote Pic Chip + AutoIt

In deze tutorial ga ik je laten zien hoe u spanningswaarden kan sturen naar uw pc met behulp van een Pic-chip, Wiimote, en Autoit3 scripttaal. Het proces werkt door een pic-chip aan de knop pads van een wiimote bedrading. Vervolgens met behulp van de
IAquaDesk - IoT ingeschakeld Aquaponics met behulp van Intel galileo (Intel IoT)

IAquaDesk - IoT ingeschakeld Aquaponics met behulp van Intel galileo (Intel IoT)

Aquaponics is een systeem van de aquacultuur waarin de afvalstoffen geproduceerd door gekweekte vissen of andere aquatische wezens levert de voedingsstoffen voor planten gekweekt hydrocultuur, die op zijn beurt het water te zuiveren. Een ecosysteem w
Eenvoudige Weather Monitor met behulp van Arduino + Ubuntu

Eenvoudige Weather Monitor met behulp van Arduino + Ubuntu

Nou, een jaar geleden, begon ik te denken over het toezicht op het weer. Met behulp van de eenvoudige manier, precies zoals als ik nodig, en toegang tot van overal gebruik van internet mogelijk. De voorgestelde is meten de temperatuur (celsius), de v
Internet-besturingselement toevoegen aan de Raspberry Pi Robot met behulp van Runmyrobot.com

Internet-besturingselement toevoegen aan de Raspberry Pi Robot met behulp van Runmyrobot.com

Hoe te uw Robot te delen met de wereld en laat andere mensen spelen met behulp van runmyrobot.com. Deze site is beta-testen, maar het zou moeten werken. Als u problemen hebt, laat het ons weten door het plaatsen op de site van de Disqus pagina.BTW, m
5 x 4 LED weergave matrix met behulp van een Basic Stamp 2 (bs2) en Charlieplexing

5 x 4 LED weergave matrix met behulp van een Basic Stamp 2 (bs2) en Charlieplexing

hebben een Basic Stamp 2 en sommige extra LEDs rondhangen? Waarom niet spelen rond met het concept van charlieplexing en maak een uitvoer met behulp van slechts 5 pinnen.Voor dit instructable ik zal worden met behulp van de BS2e maar lid van de famil
Besturen van een Motor met behulp van ultrasone sensoren van de afstand (HC-SR04)

Besturen van een Motor met behulp van ultrasone sensoren van de afstand (HC-SR04)

Hallo iedereen! In dit project zullen wij de richting van een motor met behulp van twee ultrasone opgezette sensoren controleren.Als de juiste sensor wordt geactiveerd, zal de motor draaien linksom.Als de linker sensor wordt geactiveerd, zal de motor
Hoe de controle van de arduino board met behulp van een android telefoon en een bluetooth-module

Hoe de controle van de arduino board met behulp van een android telefoon en een bluetooth-module

In deze tutorial leert u hoe u met een bluetooth-module en MIT's app uitvinder maken van een draadloze seriële verbinding tussen een android telefoon en een arduino board.Hier is een korte video die toont een voorbeeld-app die ik heb gemaakt. Ik zal
Draadloos bedienen een Robot met behulp van de Arduino en RF Modules!

Draadloos bedienen een Robot met behulp van de Arduino en RF Modules!

/*Bewerken van 05/05/2016Hey jongens, ik druk bezig geweest met college en kon niet antwoorden naar commments. De meeste van jullie wilde de code en schema's gedaan een beetje beter dus ik heb het schema op Eagle 7.2.0 gemaakt en geüpload alles op Gi
Domoticasysteem met behulp van de Arduino en SIM900 GSM module

Domoticasysteem met behulp van de Arduino en SIM900 GSM module

Hoi! Ik heb bijna klaar met mijn studie aan de Faculteit Ingenieurswetenschappen, ik moest een afstudeerproject maken als mijn gedachte was om een kaak-dropping ding te maken (ik weet dat is hilarisch: D) aan iedereen laten zien dat ik een goede prot
Toegang tot uw LOCK op afstand met behulp van Arduino, SensorMonkey en RF module

Toegang tot uw LOCK op afstand met behulp van Arduino, SensorMonkey en RF module

controle overal toegang tot uw deur op de planeet met behulp van uw telefoon, Tab of PC.Deze instelling heeft twee hoofdsegmenten, heeft de GUI met behulp van jQuery, SensorMonkey, Freeduino (Arduino compatibel development Board) en een zender.Het an
Met behulp van knoppen en sensoren om te musiceren met de Intel Edison

Met behulp van knoppen en sensoren om te musiceren met de Intel Edison

DoelstellingenKrijgen comfortabel met behulp van de Edison aan prototype een hardware projectBouwen van een eenvoudige Node.js toepassingSpelen met de kracht van WebSockets en real-time netwerkenProfiteer van Cylon.js gemak-of-gebruik wanneer interfa