Hvordan bygge en egendefinert Arduino Talking Påminnelse Machine, del 1


Vi kommer til å bygge en Arduino påminnelse maskin med en Arduino Uno, MaxBotix EZ1 sonar avstandsmåler, WAVE skjold, og DS1307 sanntid klokke. Dette bygger på vår forrige prosjekt, Hvordan bygge en Arduino Pest Repeller på Linux. Når du går på MaxBotix vil det utløse WAVE skjold for å spille planlagte lyd påminnelser. Eller lese dikt, eller spille musikk, eller noe du ønsker. Det inkluderer også en timeout slik at den ikke drive deg gal spiller den samme påminnelsen om og om igjen.

Se del 2 her.

I del 1 av denne uken har vi vil lære om lodde brødfjel og DS1307 sanntidsklokke for å holde tiden på Arduino enheter. I del 2 skal vi laste inn og teste komplett skisse.

Serie Speed ​​Detection

Serie fart i eksempelet skisser er 9600. Det kan være annerledes på systemet ditt, og hvis det er en mismatch din Arduino IDE serie skjermen viser uforståelige tegn. Bruk stty kommandoen for å finne serieporten hastighet:

 $ stty -F /dev /ttyACM0 speed9600 
Forutsetninger

Les hvordan du kan bygge en Arduino Pest Repeller på Linux, da dette Prosjektet bygger på den. Du må ha en grunnleggende elektronikk verktøykasse, vet å lodde og montere Arduino komponenter, og vet hvordan de skal finne og lese instruksjonene og spesifikasjoner for de ulike komponentene. Adafruit Industries, Jameco, Sparkfun og Digikey er alle gode steder å kjøpe Arduino gear. Du trenger disse elementene for dette prosjektet:

Arduino Uno eller nyere Arduino styret basert på en Atmega328 eller bedre

WAVE skjold

MaxBotix LV-MaxSonar-EZ1 Ultralyd Range Finder

DS1307 sanntidsklokke breakout kit

Liten loddefri brødfjel, som Adafruit halv størrelse brødfjel

SD- eller SDHC-kort med innspilte meldinger

Audio høyttaler - en gammel PC eller bærbar høyttaler er stor for testing

Jumper ledninger.

Hvordan bygge en Arduino Pest Repeller på Linux forteller hvordan du kan koble til og teste WAVE skjold og MaxBotix Range Finder. Den DS1307 sanntidsklokken har et batteri og holder styr på tiden da Arduino er slått ned. Frakten er un-montert, så du trenger for å montere den og angi klokkeslett og dato. Bare følg instruksjonene fra sin link på Adafruit.com.

Hvordan passer alt sammen

I "Hvordan bygge en Arduino Pest Repeller på Linux" den MaxBotix er loddet til WAVE skjold. For dette prosjektet bruker vi en loddefri brødfjel å koble komponentene. Skjøtebrett er flott for rask prototying og eksperimentering. WAVE skjoldet sitter på toppen av Arduino, så du vil koble ledningene til WAVE skjoldet snarere enn Arduino. Strøm og analog pin markeringene er ikke veldig lesbart på WAVE skjold, slik at du kanskje ønsker å gjøre en liten diagram fra Arduino for referanse. Figur 1 (over) viser hvordan de går sammen, og jeg skal la det som lekser å gjøre din penere og mer permanent.

Figur 2 bør gjøre tilkoblinger litt klarere. Figuren ble skapt i Fritzing kretskort (PCB) prototyping program. Fritzing ikke har et ferdig bilde for MaxBotix, så jeg hacket en i GIMP. (The MaxBotix er ikke i målestokk.)


Hvis diagrammet er ikke tydelig nok, gjøre tilkoblinger som dette:

Den DS1307 har en fem -Pin spissen. Koble denne til kolonne E, rader på 1-5 på breadboard. MERK:.. Rekkefølgen på pinouts varierer på disse små RTCs, så sørg for at du kobler deg til de rette

Koble A5 på WAVE skjoldet til raden som tilsvarer den DS1307 SCL pin Anmeldelser
Koble A4 på WAVE til raden som tilsvarer den DS1307 SDA pin.

Koble den ene GND pin på WAVE til en pinne i bakken rail på breadboard.

Koble WAVE 5V pin til en pinne i strømskinne på breadboard.

Koble den ene bakken pin på breadboard til raden som tilsvarer den DS1307 GND.

Koble den ene strøm pin på brødfjel til raden som tilsvarer DS1307 5V.

Koble til GND og fem på MaxBotix til bakken og strømskinner.

Koble til AN på MaxBotix til en tom rad på breadboard.

Koble A0 på WAVE skjoldet til samme rad.

Hvis du ikke er kjent med lodde brødfjel, tror kolonner og rader. Søylene er de vanligste strøm og jord rails, og radene er for strøm og signaler. Figur 3 viser baksiden av en brødfjel med klebrig bakside fjernet, utsette metallskinner. Disse skinnene er laget av ledende metall og har slipsnål for sikkert å holde dine jumper ledninger.


På min lille brødfjel, har hver rad fem slipsnål (figur 4).
< h3> Multiple Strøm Tegner fra 5V Pin

Du kan kjøre flere enheter av Arduino 5V strøm pin så lenge det totale strømforbruket er ikke overdreven, og du bruker en felles plattform. Så hvor mye strømforbruket er for mye? Det er ikke et presist svar, men vi kan beregne en gjennomførbar estimat.

Det er en innebygd spenningsregulator som vil stenge brettet ned når strømforbruket eller temperaturen er for høy. Den maksimale uavgjort for hver I /O (input /output) pin er 40 milliampere (mA), og i det virkelige liv du ikke ønsker å presse det så vanskelig, så sier 20 mA for en trygg margin. En Arduino styret trekker kanskje 40 mA på tomgang. USB-pluggen er beskyttet av en myk sikring som åpner på 500 mA, og tilbakestiller når de overdreven etterspørsel stopper. For å gjøre en lang historie kort, bruker du en total uavgjort på 300 mA (summen av alt plugget inn i styret, og om bord) som en omtrentlig arbeider grense. Den Maxbotix trekker rundt 3 mA ved 5 volt (V), og DS1307 strømbehovet målt i nano-ampere (NA). WAVE skjold bruker om 100mA når det er å spille av lydfiler. Så for dette prosjektet er vi godt innenfor konservative rammer.

Arduino kan trekke strøm fra USB-porten, en batteripakke, eller en veksling strømforsyning med en 2,1 millimeter (mm) center-positive plugg. Trygge strømforsyningen grensene er 7-12 V.

Testing av Real-Time Clock

La oss legge en skisse for å teste DS1307 RTC. Du trenger RTC og Wire biblioteker. Wire bør inkluderes i Arduino kjerne, som du kan bekrefte ved å se i /usr /share /Arduino /bibliotek /, og i ditt Arduino IDE bør du ha Fil > Eksempler > Wire.

Det er flere RTC biblioteker. Jeg bruker den Adafruit RTClib. Når du laster ned og installerer dette, ta notat av keywords.txt filer for både Wire og RTC bibliotekene, fordi disse liste alle datatyper og funksjoner, som jeg tror er en fin ting å gjøre. Det slår sikkert trolling koden for å finne dem

 #include <. Wire.h > # include "RTClib.h" RTC_DS1307 RTC; void setup () {Serial.begin (9600); Serial.print ("\\ nDen gjeldende dato og klokkeslett vil bli oppdatert hvert tredje sekund: \\ n \\ n"); Wire.begin (); RTC.begin (); } void loop () {Datetime nå = RTC.now (); Serial.print ("Den dagen i uken er"); Serial.print (now.dayOfWeek (), DEC); Serial.println (); Serial.println ("Dato og klokkeslett er:"); Serial.print (now.year (), DEC); Serial.print ('/'); Serial.print (now.month (), DEC); Serial.print ('/'); Serial.print (now.day (), DEC); Serial.print (''); Serial.print (now.hour (), DEC); Serial.print (':'); Serial.print (now.minute (), DEC); Serial.print (':'); Serial.println (now.second (), DEC); forsinkelse (3000); if (now.dayOfWeek () == 3) {Serial.print ("\\ nhello, har vi en kamp \\ n \\ n."); } Else {Serial.print ("\\ nI er aldri så beklager, tallene samsvarer ikke \\ n."); }} 

Når dagen i uken i din hvis setningen matcher ukedagen som rapportert av din DS1307 RTC, vil du se noe som dette:

 Dagens dato og tid vil bli oppdatert hver tre sekunder: Den dagen i uken er 3the dato og klokkeslett er: 2014/5/21 15: 1:. 37hello, har vi en kamp 

Hurrah, utløste vi en hendelse basert på en bestemt dag! Nå endre nummeret i hvis setningen for å se hva en ikke-kamp ser slik ut:

 Dagens dato og klokkeslett vil bli oppdatert hvert tredje sekund: Den dagen i uken er 3the dato og klokkeslett er: 2014 /5/21 15: 2: 43I er aldri så beklager, tallene samsvarer ikke 

Ta spesielt merke til Serial.print og hvis setningen syntaks, fordi vi kaller de ulike tidsfunksjoner direkte, istedenfor å bruke. variabler. Dato og klokkeslett funksjoner er vist i eksempelet RTClib skisser, og er oppført i keywords.txt filen. Den dayOfWeek () -funksjonen tall dagene i uken fra 1-7, som starter på mandag, så tre er onsdag. (En måte å lære disse tingene, fraværende sammenhengende og grundig dokumentasjon, er å lese kildekoden, i dette tilfellet RTClib.cpp. En annen måte er å prøve og feile.)

Dette eksemplet viser hvordan du matche flere forhold . Å utløse en hendelse, slik som å spille en påminnelse, må sensoren oppdage bevegelse på 3:45 PM:

 if ((a0value < = 40) & & (now.hour () == 15 ) & & (now.minute () == 45)) 

Se alt satt sammen i vår komplette skisse delvis 2.

Referanser

Ladyada.net Arduino TutorialsArduino språk referenceAn utmerket innføringsbok for nybegynnere er Programming Arduino: Komme i gang med skisser av Simon Monk, og Arduino Cookbook, er andre utgave av Michael Margolis flott hvis du allerede vet litt om elektronikk og en smidgen av C programmering
.