Med NXT komponenter med en mikro-Controller (6 / 6 steg)

Steg 6: Ultraljud sensorn



Detta är den stora. Komplexitet i allt före detta bleknar i jämförelse. Dock är det fortfarande inte så illa. Ultrasonic sensor använder jag fyrkant C eller I2C-protokollet. Detta protokoll kan en mästare (LEGO RCX) att styra flera slav enheter (sensorer) med bara två kablar (plus makt sladdar). Detta är praktiskt när du börjar titta på multiplexrar och använder mer än en sensor på en port. Det ger också ytterligare funktioner för ultrasonic sensor. I2C är ett digitalt protokoll, men det är inte uttryckligen stöds av BS2. Lyckligtvis kan vi göra något känt som "bit-banka" protokollet genom att skriva vår egen kod för den. Detta är fördelaktigt eftersom ultraljud sensorn följer inte exakt I2C-protokollet ändå. Så, utan vidare, här är en snabbkurs i I2C med betoning på ultrasonic sensor.

Allmänt förfarande:
Master skickar startsignalen
Master skickar adressen byte (bestämmer vilken enhet används och om du vill läsa eller skriva)
Slav erkänner
Dataöverföring (från master till slav eller från slav till master)
Mottagare erkänner efter varje byte
Master skickar stoppkommando

Vill du ladda ner LEGO Hardware Developer Kit här: http://mindstorms.lego.com/en-us/support/files/default.aspx

Om du tittar på tillägg 7, kommer du se alla möjliga kommandon för ultrasonic sensor samt förväntad utdata.
Byte skrivs som Hex eller Base 16 (som betecknas med "0 x").

För att ge ett exempel på ett kommando, låt oss försöka läsa produkt-ID som ska returnera "LEGO"
För att göra detta, skulle vi skicka ett startkommando, då sensorns skriva adress (2) som erkänns, sedan det produkt-ID-kommandot (8) som är erkänt följt av en omstart kommando ("R" i tillägget), och sensorns Läs adress (3) som måste erkännas. När Läs adressen skickas, sensorn kommer tillbaka 5 byte (L, E, G, O och en null 0x00). Varje byte måste erkännas av stämpeln.

Kommandot starta om består av en Start stopp och en klockcykel. Det extra klockcykel, som ofta en "vicka" inte är en del av standard I2C-protokollet. Om du använder en mikrokontroller som stöder I2C, måste du se till att du skicka det extra klockcykel.

Nu måste vi få in den verkliga praktiska detaljer av I2C-protokollet. Vi börjar med sensorns pinut.
Stift 1 - 9V (Vcc)
Stift 2 - marken
PIN 3 - marken
Stift 4 - 5V (Vcc)
Stift 5 - SCL
Stift 6 - SDA

SCL-värdet är den klocka som används för att synkronisera dataöverföring och SDA är den faktiska data linjen. Jag brukar kalla dem "klocka" eller "clk" och "data" så bär med mig.

Det finns motstånd ansluter både SCL och SDA till 5V källan så att om inte något görs, de som standard 5 volt. Kommunikationen sker genom att dra dessa rader till 0 och sedan släppa dem. Observera att du inte behöver dra rader högt, som de standard högt. Därför, när du är klar med ett kommando, är det bäst att sätta båda till insatsen. Om du inte släppa raderna, kan du orsaka en kort med en hög på BS2 slutet och en låg på sensorn slutet.

Kommandona I2C sig är faktiskt ganska enkelt.

Start:
Börja med båda linjerna hög, dra SDA låg, sedan dra klockan låg. Effekten är att SDA går från högt till lågt medan klockan är hög.

Stanna:
Börja med båda linjerna låg, låt klockan gå hög, sedan låta SDA gå högt. Effekten är SDA går från låg till hög medan klockan är hög.

Se hur stopp är motsatsen till Start?

Att cykla klockan, helt enkelt dra den låg en stund och sedan släppa den.

Skicka Data:
Data skickas i byte och varje byte följs av en kvittering av mottagaren.
Först klockan dras låg, då SDA är inställd till nästa lite som ska skickas av sändaren, då klockan är släppt höga och SDA läses av mottagaren sedan klockan dras låg igen. Detta upprepas för alla 8 bitar. Data är endast giltig när klockan är hög och data kan bara ändras när klockan är låg. Ändra SDA medan klockan är hög resulterar i en Start eller stopp kommando. Efter de 8 bitarna har skickats, håller mottagaren SDA låg som bekräftelse medan den master och sänker klocka en gång. Byte skickas MSB första eller mest betydande Bit först. Till exempel byten för "2" 00000010 skulle skickas från och med lite till vänster och slutar med lite till höger.

Adress byte:
Varje sensor har en 7-bitars adress som skickas tillsammans med lite riktad.
7 bitars adress ultraljud sensorn är "1" eller "0000001"
Den riktade biten är antingen "0" för skriva (skicka till slav) eller "1" för Läs (får från slav).
Resultatet är en skicka adress 00000010 eller 2 och en Läs adress 00000011 eller 3.

Så hur vi faktiskt gör allt detta? Jag försökte uttryckligen kodning allt på stämpeln, men det gick för långsamt. Sensorn går med en optimal hastighet på 9600 Hz, och stämpeln komma inte i närheten som när verkställande rad för rad. I stället tillgrep jag med SHIFTIN och SHIFTOUT kommandon som är faktiskt mycket lättare. Starta, stoppa och starta om är fortfarande fulländade manuellt med höga och låga kommandon. Resultatet ser ut så här:

byt0, byt1 och byt2 finns i Hardware Developer Kit tillägg 7.
bytes_receive är antalet byte som tas emot från sensorn
alpha är 1 om en ASCII-sträng är förväntade (Tänk "alfabet") och 0 om en numerisk svar förväntas
Var noga med att skriva upp en fel funktion för när de sensorn inte bekräftelse mig bara startas om hela processen.

"starta
INGÅENDE sda
INGÅENDE clk
LÅGA sda
"send0
SHIFTOUT sda, clk, MSBFIRST, [byte0] ' adress byte
AT sda, clk, MSBPRE, [ack\1] "får svar
OM ack = 1 då fel "om ack inte tas emot, köra fel rutin
"send1
SHIFTOUT sda, clk, MSBFIRST, [byt1] "Skicka kommandobyte
AT sda, clk, MSBPRE, [ack\1] "får svar
OM ack = 1 då fel "om ack inte tas emot, köra fel rutin
"starta om" starta om kommandot (Stop, klocka, Start)
LÅGA clk
LÅGA sda
HÖG clk
HÖG sda
LÅGA clk
HÖG clk
LÅGA sda
"send2
SHIFTOUT sda, clk, MSBFIRST, [byt2] "Skicka adress byte för återgång
AT sda, clk, MSBPRE, [ack\1] ' ta emot ack
OM ack = 1 då fel "om ack inte tas emot, köra fel rutin
"ta emot
FÖR i = 0 till bytes_receive-1
AT sda, clk, MSBPRE, [bytr (i) \8] ' få Byte
SHIFTOUT sda, clk, MSBFIRST, [0\1] "Skicka bekräftelse
OM alpha = 0 då DEBUG DEC bytr(i) ' om tal, felsöka decimalvärde på varje byte
Nästa "upprepar, beroende på antalet förväntade byte
OM alpha = 1 då DEBUG STR bytr "om sträng, felsöka alla byte som alfanumerisk sträng
FELSÖKA HP
"Stoppa
LÅGA clk
LÅGA sda
INGÅENDE clk
INGÅENDE sda

Om ett kommando tredje byte (2 byte) är något annat än "R + 0x03", skicka den tredje byten utan omstart sekvensen och förvänta dig ett svar.

Se Steg
Relaterade Ämnen

Smart buss bokningssystem med bult mikro-controller

Hej där stipendiaten uppfinnare,Jag vill dela några erfarenheter som mig och mitt lag fick samtidigt skapa ett Smart buss bokning system projekt som ledde mig att använda en Arduino och amazing bulten mikro-controller.Varför?Samtidigt reser genom en...

Komma igång med en 8051 mikro-controller

Hej allaJag älskar mikro-kontrollanter projekt. Jag använder ofta både Arduino kort och "nakna" AVR mikro-controller (ATTINY och ATMEGA enheter) för mina projekt.För min kultur, jag väljer att läsa en annan typ av mikro-styrenheter, de som baser...

Förbättra fiberoptiska display med lysdioder och mikro-controller.

Denna härliga fibre optic bonsaiträd var död, strömförsörjningen var ingen där för att vara funnit, men viktigare, motorn var död. Detta var en långsam roterande motor som inte är något som jag kan hitta en lätt ersättning för. Förbättringen var främ...

FM-radio med TEA5767 och PIC16F877A mikro-controller

TEA5767 enkel-flisa FM-stereoradio.----------------------------------------------------------------------------* Hög känslighet på grund av integrerade tystgående RF input förstärkaren* FM mixer för konvertering till om USA / Europa (87,5 MHz till 10...

Färg ljus Mixer med "Stämpel" Controller

detta Instructable lär ut hur en grundläggande inbäddad styrenhet kan programmeras att styra lysdioder (av primärfärgerna) sådan att rött, grönt och blått ljus kan blandas för att skapa ett fullt spektrum av färger. Optiska effekter som skapas på gru...

Använda en Arduino med en N64 controller

det finns tutorials ute för att använda en NES-kontrollant med en Arduino, men med mer komplicerade N64 controller och dess analog styrspak har en bestämd vädjan. Om du har en Arduino runt och vill inte köpa gör en Adaptoid, detta instructable det mö...

Arduino lins Controller - synkroniseras Zoom/fokus med Wii Classic Controller

min Lumix GH2 Micro Four Thirds kamera skjuter inte bara fantastiskt hög definitionen video, men med billiga adaptrar kan jag använda den med äldre manuella objektiv som är billig och ofta mycket hög kvalitet. Jag skjuter en hel del prestanda videor...

Kommunicera med arduino micro controller och dator via usb med en vb program

Om du är som mig och vill kunna styra dina objekt anslutna till din arduino via datorn måste du ett sätt att upprätta en anslutning och kommunicera med din arduino från datorn. Denna video och handledning visar dig hur man gör just det! Jag har tagit...

LED PWM med Smart Servo Controller

I den här demon ska jag visa dig hur du ansluter en färg LED till den smarta Servo Controller.Den smarta Servo Controller kan produktionen hög hastighet PWM signaler som är lämpliga för driva lysdioder. För hög effekt leds måste du använda transistor...

Titanium elektriska grodyngel Recumbent Full Suspension Trike med DIY Motor Controller

intervju med en kille som gjort denna trike 25 år sedan. Han fick en massa Titan super billiga på en bilskrot och lärde sig att svetsa det.Dessa är tre videor jag sköt när jag gick över till besöka honom.Ämne omfattas inkluderar:-Ackerman styrning-En...

Avstånd att hålla robot med Smart Servo Controller

Denna demo jag ska visa dig hur du använder smarta Servo Controller för att göra en robot hålla avstånd.Den använder två kontinuerlig rotation servomotorer och en distansera sensor. Den smarta Servo Controller används för att skapa en PID-Controller....

Klädde med filt Nintendo controller

Denna filt controller gjordes för användning med Makey Makey och kan användas till att spela en mängd olika spel. Du kan göra ganska mycket någon du gillar men detta prov var från den ursprungliga Nintendo Entertainment System.Material som behövs1 bi...

Spela Minecraft på mac med xbox 360 controller

HEY GUYS!Jag har spelat Minecraft på xbox 360 och på datorn. För att vara ärlig den dator versionen är mycket bättre men den xbox upplagan är sättet lättare att spela Xbox 360-versionen.Så är här lösningen.Titta på min andra Instructable kallas, hur...

Simon säger spel med unika "twister" controller

jag gjorde detta projekt för ett sista klass projekt i min crafting tekniker klass här senaste terminen. Målet med detta projekt är att göra en kontroll pad ur twister styrelsen för varje makey makey spel. Jag använde min kontroll ombord för en Simon...

Hur man skapar en Scratch spel med Makey Makey controller på en Raspberry Pi

I detta instructable du får lära dig hur man gör en enkel spelet i början på en Raspberry Pi; för att göra spelet roligare kommer du att kontrollera den med verkliga objekt (frukt och grönsaker) via en Makey Makey.Du behöver:En Raspberry Pi mini dato...

3P4W LED-klocka med temperatur Display

Detta är en enkel klocka projekt baserad på ti MSP430G2231. MSP430G2231 mikro-controller kommer ingår i $4.30 TI Launchpad kit. Projektets mål är att skapa en fungerande klocka med minimal komponenter. För att uppnå detta mål, utelämnades strömbegrän...

ESP8266-1 aktiverade RC vände Wifi bil med webbläsare kontrolleras riktning.

Projektet är tänkt för att visa förmåga av grundläggande IoT enheter. Syftet var att kontrollera rörelse i en bil via webbläsare. Jag hade några alternativ för att uppnå detta - 1) över webben, direkt styra motorn på bilen av en WiFi-modul, 2) Konfig...

Gränsyta för motorer med Arduino

Gränsyta för olika typer av motorer med en mikro-controller är bland de mest grundläggande färdigheter en maker/robotics entusiasten behov att bemästra. I detta projekt ska jag bygga upp på den tidigare projektet Smart telefon kontrollerad LED-lampor...

Digital ic testare med pic mikrokontroller

Digital IC testare med pic16f877a mikro-controllerstödjande enheter740074027404740774087432748674266...