Android gestuurde pneumatische kanon aangedreven door Arduino (9 / 11 stap)

Stap 9: Programma je Arduino


Als u van plan bent op het ontwikkelen van uw eigen Arduino-code, dan is het zinvol om het te ontwikkelen in combinatie met de hardware. Op die manier kunt u stapsgewijs ontwikkelen en testen van elke component als je gaat. Het maakt het debuggen van een heel stuk makkelijker dan als u proberen moest te schrijven van het hele project tegelijk en testen aan het eind.

De volledige broncode van de Arduino is aangesloten. Als u niet geïnteresseerd bent in het wijzigen of leren hoe het werkt, kunt u gewoon downloaden en implementeren. Als u zien hoe het werkt wilt, lees deze stap en bladert u door de code.

Vanaf evt_loop.cpp, roept het programma eerst evt_loop_init. Vervolgens noemt het herhaaldelijk event_loop_proc voor onbepaalde tijd, totdat de Arduino macht verliest. Kijkend naar deze twee functies, ziet u dat het merendeel van de Arduino code is gecentreerd rond het idee van berichtenwachtrijen . Berichtenwachtrijen zijn nuttig zijn in situaties waar een systeem nodig heeft om te praten met een ander op een asynchrone wijze. In onze situatie hebben we een Bluetooth-modem die gegevens te allen tijde kan worden ontvangen. Een heleboel werk gaat in het algemeen, ervoor te zorgen dat gegevens nooit verloren, ongeacht wat het apparaat doet wanneer het bericht aankomt. Gelukkig, de Arduino Uno heeft een ingebouwde 128-byte hardware seriële buffer. Aangezien elke één van onze berichten Bluetooth 1 byte, zal deze buffer waarschijnlijk meer dan genoeg voor onze applicatie. Dus zit onze applicatie in een lus, wachten op een bericht vandaan Bluetooth in. In een commercieel product is het typisch voor de microcontroller te gaan een spaarstand slaapmodus om energie te besparen. Voor eenvoud, dat hebben we niet gedaan hier (Zie bt.cpp van bt_wait_for_msgs functie).

Wanneer een bericht aankomt in de Bluetooth wachtrij (Zie bt.cpp van bt_check_for_msgs functie), de gegevens lezen en aan een berichtrij ingezet voor het verwerken van gegevens vanuit de Bluetooth-module toegevoegd. We doen dit omdat we onze microcontroller wilden te zijn vrij om andere dingen te doen wanneer het berichten niet verwerkt. De berichtenwachtrij is zoals een postbus. De volgende keer dat het programma een kans krijgt, zal het de mailbox controleren en zien of er geen berichten voor het. Geen gebruik maakt van een berichtrij lijkt luid schreeuwen uit de kamer. In dat geval zou alles moeten stoppen en onmiddellijk de opdracht dienst voordat hij terugkeerde naar wat het aan het doen was. De functie van de msgq_push (gedefinieerd in msgq.cpp) geeft als resultaat een verscheidenheid van responscodes (gedefinieerd in msgq.h) die een verschillende aantal wachtrij voorwaarden aangeven. Bijvoorbeeld, als het programma nooit gecontroleerd zijn postvak, is het mogelijk voor deze wachtrij te vullen. In dat geval zou de antwoord waarde aangeven dat de wachtrij vol was. Dit zorgt voor het afhandelen van fouten die is een essentieel onderdeel van ontwikkeling van de embedded systeem.

Terug in evt_loop_proc, is het bericht gelezen in een lokale variabele. Bovendien, wordt een pointer naar een antwoord-type doorgegeven. Het en-teken (&) voordat de variabele rsp betekent dat rsp het adres in het geheugen wordt paseed in msgq_pop, in tegenstelling tot de waarde ervan. Als u nog niet gehoord van dit concept voordat, IBM weet heel veel over, en ze zou graag die informatie aan u onthullen. Deze aanwijzer vertelt msgq_pop een locatie in het geheugen waar het de antwoord waarde kan zetten. Het is soort van als een manier om een functie voor het retourneren twee waarden--het bericht en de status.

Na het nemen van het bericht uit de wachtrij (vergelijkbaar met het nemen van de brief uit de postbus), wordt de respons gecontroleerd. Als de operatie niet succesvol was, de gehele Bluetooth-berichtenwachtrij wordt teruggesteld en het programma blijft. Er is niet echt een heel stuk anders die het programma zou kunnen in deze staat doen.

Als het programma het verleden dat fout terug maakt, wordt er gekeken naar de waarde van het bericht. Als het bericht was een '1', behandelt het een estafette. Als het was een '2', behandelt het andere. Iets anders, en het gaat voorbij aan het bericht.

Onze apparaat niet over een manometer, dus er geen manier voor de Android app om te weten is of de vaten zijn drukkend of niet. Dientengevolge, is gezien genoeg perslucht, het mogelijk dat er nog genoeg druk links om te schieten twee keer zonder te vullen van de tank worden. Om dit te verklaren, zal de Arduino automatisch sluiten de estafette één seconde, nadat het is geopend. Hiermee voorkomt u dat extra lucht wordt verspild wanneer het vat leeg is. De code waarmee verwerkt schakelen de Relais is beschikbaar in relay.cpp.

Om deze automatisch sluiten, we gebruiken een timer. Meeste microcontrollers hebben hardware timers voor hoge-precisie timing, dus in dit voorbeeld een goede introductie is. Neem een kijkje op timer.h en timer.cpp als u geïnteresseerd bent in het leren meer over de werking van de timer. Zodra een geldig Bluetooth-bericht heeft ontvangen, de bijbehorende estafette is onmiddellijk gesloten (evt_loop.cpp de evt_loop_proc functie), waardoor de huidige stroom van de batterij naar de sprinkler-klep. Vervolgens is een timer ingesteld op verlopen in één seconde (1.000.000 microseconden in de code). Vervolgens is de callback functie ingesteld op evt_loop_handle_timer, die de timer-module noemen zullen zodra de opgegeven hoeveelheid tijd is verstreken.

Binnen evt_loop_handle_timer, worden beide Relais geopend, die stopt de luchtstroom uit beide vaten. We dachten dat dit zou de eenvoudigste benadering. Zodra een opdracht is verwerkt, evt_loop_proc heet weer (van cannon.pde) en het proces herhaalt.

Zodra je Arduino is geprogrammeerd, wordt deze automatisch gestart met het uitvoeren van uw programma wanneer u de stroomtoevoer via een 9V batterij.

Gerelateerde Artikelen

STEAMPUNK stoom GAUGE, aangedreven door ARDUINO

STEAMPUNK stoom GAUGE, aangedreven door ARDUINO

dit is opgericht om één of ander-oogsuikergoed voor mijn keuken. Ik wilde iets unieks voor een speciale lege ruimte op mijn muur, en het toevoegen van beweging, BLINKIE lichten en interessante mechanische "guts" maakte het zelfs beter.Uiteindeli
DIY standalone weerstation aangedreven door Arduino

DIY standalone weerstation aangedreven door Arduino

Hallo Makers die erNogmaals, dit is niet een stap voor stap Instructable. Zoals altijd ik vergat om te nemen knipsluitingen Neem sinds de aanvang van dit project.Het idee van het bouwen van een Gemeenschap-weerstation met Open hardware schopte terug
Road Rage wraak aangedreven door Arduino

Road Rage wraak aangedreven door Arduino

Heb je ooit iemand u afgesneden in verkeer maar getoeter van uw hoorn is niet genoeg?Ik ben een passieve bestuurder; het kost veel om me gek maar ik kreeg te denken van een leuke manier mensen te laten weten ze afgesneden me een onverwachte middel.Du
EL Wire Muts: Sequenced en Sound Activated met afstandsbediening - aangedreven door Arduino en Sparkfun

EL Wire Muts: Sequenced en Sound Activated met afstandsbediening - aangedreven door Arduino en Sparkfun

Welkom op de Instructable gids van mijn EL Wire hoed met enkele leuke functies.Het concept is een EL Wired hoed met 8 gesequenceerd EL draden door een bedrade afstandsbediening bestuurd. Meerdere snelheid controleerbaar reeks modi zijn vooraf geprogr
Pot Plant Monitor aangedreven door Arduino

Pot Plant Monitor aangedreven door Arduino

Hey er jongens, ik zag onlangs een video over het maakt youtube pagina met de naam van de ingemaakte plant beschermer en ik vond het idee voor de monitor van de gezondheid van een plant maar ik mijn eigen scherm hebben wilde zodat ik altijd een oogje
Elektronische muziekdoos aangedreven door Arduino (soort van)

Elektronische muziekdoos aangedreven door Arduino (soort van)

muziek is de meest universele middel van expressie. Ongeacht culturele taal of leeftijd die het idee wel muziek overgebracht zou niet veel verschillen. Het is veilig om te zeggen dat iedereen houdt van muziek, één type of een ander. Wanneer iemands f
StopIt! LED spel (aangedreven door arduino)

StopIt! LED spel (aangedreven door arduino)

dit project is geïnspireerd door deze video van YouTube en de Slinger uitdaging Kit van Makershed.com. Zijn een eenvoudig spel dat bestaat uit vijf LED-lampjes en een drukknop schakelaar. De flitser van de LED's in een reeks en de speler moet druk op
Maken van een Mini LED sirene (aangedreven door Arduino!)

Maken van een Mini LED sirene (aangedreven door Arduino!)

Dit is een van de eerste projecten die ik met Arduino gemaakt heb. Het is een beetje sirene met een LED dat verdwijnt en knippert in- en uitschakelen. Het toont basisgebruik van LED's en sprekers. Lees ook dit artikel: 8-Pin programmeren ShieldOpbouw
Iontoforese gecontroleerd door arduino timer

Iontoforese gecontroleerd door arduino timer

DIY Iontoforese apparaat aangedreven door Arduino met timerfunctieDeze apparaat zal zijn voorzien van een schakelaar van polariteit op de ingestelde tijdsinterval (aan / uit).Stap 1: achtergrond GESCHIEDENIS:Hyperhidrosis is de aandoening gekenmerkt
Veelzijdige multi-shot pneumatische kanon

Veelzijdige multi-shot pneumatische kanon

een van de grote nadelen van maken en het functioneren van een pneumatische kanon is de behoefte aan een nieuwe lading van de lucht voor elk schot. Deze behoefte aan re drukregeling van iemands kanon kan echt eten veel tijd in beslag en snijd in de p
Muzikale oefening: Training Shirt MP3 speler aangedreven door oefening

Muzikale oefening: Training Shirt MP3 speler aangedreven door oefening

Mensen hou het luisteren naar muziek tijdens het sporten. Muziek biedt de motivatie nodig voor particulieren om energie uit te blijven oefenen en in vorm te komen. Dus, omdat mensen genieten van het luisteren naar muziek tijdens het sporten, wat als
Verticale tuin & weer aangedreven door Intel Edison

Verticale tuin & weer aangedreven door Intel Edison

BioEdison is een slimme verticale tuin op basis van de nieuwe Intel Edison waarmee een eenvoudige, geautomatiseerdebeheer van elk type van plantaardige of plant.Voordelen van het bedieningsorgaan BioEdison dan een traditionele moestuin zijn het effic
Pneumatische kanon

Pneumatische kanon

BrainstormenIk eerst kwam met het idee voor een pneumatische kanon na jarenlange knutselen met verschillende stijlen van verbranding kanonnen. Het concept van een pneumatische kanon was veel complexer dan die van een eenvoudige verbranding kanon. In
Einde-Around pneumatische kanon

Einde-Around pneumatische kanon

terwijl niet bijzonder nieuwe of creatieve, hier zijn mijn plannen voor een eenvoudige pneumatische (gecomprimeerd-luchtgedreven) aardappel kanon. Het kan ook worden gebruikt voor andere projectielen, zolang ze van een van de verwisselbare vaten pass