Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Hoe sluit je een Lego Mindstorms NXT ultrasone sensor aan op de Raspberry Pi

Abstract

Sluit een Lego Mindstorms NXT ultrasone sensor rechtstreeks aan op een Raspberry Pi. Een TCA9517 I2C-busbuffer en een extra GPIO-pin voor SCL zijn nodig. Er wordt een kort C++-programma meegeleverd om de gemeten afstand uit te lezen.

Inleiding

Raspberry Pi (Pi) is, ondanks enkele tekortkomingen, absoluut mijn favoriete SBC. Veruit de grootste community en elk detail is goed gedocumenteerd. Lego Mindstorms daarentegen, mijn favoriete robotbouwpakket. In tegenstelling tot andere robotkits biedt het onbeperkte mogelijkheden om robots te bouwen. Vandaag een autobot, morgen een rupsrobot en de volgende dag een 6-assige robotarm – alles is mogelijk. De NXT-versie van de kit heeft een krachtige op ARM gebaseerde microcontroller, wat genoeg is voor de meeste eenvoudige robottoepassingen, maar niet genoeg voor geavanceerde projecten zoals computervisie. Onlangs heeft Lego EV3 gepubliceerd, een nieuwe kit met een veel krachtiger brein die, net als de Raspberry Pi, wordt aangedreven door Linux. Maar nog steeds is dit brein niet in staat om beelden met een hoge resolutie met een redelijke snelheid te berekenen. Daarom wil ik nog steeds de kracht van Raspberry Pi combineren met de onbeperkte mogelijkheden van Lego. Voor zover ik weet is er één project dat dit bereikt, BrickPi genaamd. Hoewel behoorlijk succesvol, denk ik dat het verschillende tekortkomingen heeft, die ik in deze en volgende artikelen wil bespreken. Ten eerste is het alleen compatibel met de oudere I2C-gebaseerde NXT-sensoren en niet met de nieuwe UART-gebaseerde EV3-sensoren. Bovendien verbindt het de sensoren niet rechtstreeks met de pi, maar gebruikt het twee Atmega-microcontrollers (Arduino-compatibel) om met de sensoren te communiceren. Voor het toevoegen van nieuwe sensoren of andere wijzigingen is nieuwe firmware vereist. Verder gebruikt de BrickPi L293D-motordrivers die slechts een stroom van ongeveer 0,6 A kunnen leveren, terwijl een Lego NXT-motor tot 2 A verbruikt bij stilstand [kenmerken van de NXT-motor]. In dit artikel wil ik je laten zien hoe je een Lego Mindstorms rechtstreeks kunt aansluiten Ultrasone sensor (VS-sensor) naar de Pi zonder een extra microcontroller te gebruiken.

Uitdagingen

Mijn eerste poging om de Amerikaanse sensor op de Pi aan te sluiten was eenvoudig. Verbind gewoon beide I2C-signaallijnen met behulp van een eenvoudige niveauverschuiver met twee n-fets [AppNote]. De niveauverschuiver zou nodig moeten zijn omdat de VS-sensor logische niveaus van 5 V gebruikt en de pi slechts 3,3 V. Sluit vervolgens 5V en 9V aan op de sensor en start een eenvoudig testprogramma en krijg - niets. Na twee keer de draden en software te hebben gecontroleerd, heb ik de logische analysator aangesloten en besefte ik dat de Amerikaanse sensor geen enkel verzoek kan beantwoorden, zelfs niet zijn eigen adres kan bevestigen. De eerste en grootste uitdaging is de hardwareverbinding tussen de Pi en de sensor. De hardware- en softwareprotocollen zijn goed beschreven door Lego, inclusief schema's [Lego HDK] en hoewel het I2C gebruikt, kunnen we de sensor niet rechtstreeks op de pi aansluiten. Zoals je kunt zien in Schema 1 heeft de sensor zeer zwakke pullup-weerstanden (82 k) en zeer sterke serieweerstanden (4,7 k) op zijn I2C-lijnen. De tweede weerstanden zijn ons grootste probleem. Zoals je misschien weet, gebruikt de Pi sterke 1.8 k pullup-weerstanden op zijn I2C-lijnen. Vanwege de serieweerstand is de sensor niet in staat om een ​​van de I2C-lijnen naar beneden te trekken en daarom niet in staat te reageren op verzoeken van de I2C-master. Afbeelding 1 toont een ruwe simulatie van deze situatie. De blauwe lijn toont de gegevens die de sensor probeert te verzenden, de groene lijn toont de gegevens die door de Pi zijn ontvangen. Zoals u kunt zien, kan de sensor de gesimuleerde datalijn niet naar beneden trekken. U kunt ook opmerken dat elk niveauverschuivingscircuit in deze toestand niet nodig is, omdat de sterke pull-up-weerstand tot 3,3 V de lijn ook op hoog niveau domineert. De enige oplossing voor dit probleem, die ik tot nu toe heb gevonden, is het gebruik van een TCA9517, een 2-kanaals, bidirectionele buffer voor I2C. Bovendien zorgt deze chip voor de niveauverschuiving. De tweede uitdaging komt voort uit een firmware-bug in de Amerikaanse sensor. Het wordt hier bijvoorbeeld beschreven in de mbed-forums. Er is ook een artikel waarin wordt beschreven hoe de communicatie tussen Lego Mindstorms NXT en de Amerikaanse sensor kan worden geanalyseerd met behulp van een logische analysator (Duits). Kortom, er is een extra klokcyclus (schakelaar op de SCL-regel) nodig tussen het schrijven van het register naar de sensor en het daadwerkelijk lezen van gegevens van de sensor. Dit is natuurlijk niet compatibel met standaard I2C-hardware- of -software-implementaties. U kunt een speciale software-I2C-implementatie schrijven met behulp van elk paar GPIO's, maar het is eenvoudiger om gewoon een andere GPIO van de Pi op de SCL-lijn aan te sluiten en deze te schakelen tussen het schrijven van het register naar de sensor en het lezen van de inhoud van de registers.

Hardware

Benodigde hardware voor een eenvoudig prototype:
  • Lego Mindstorms NXT ultrasone sensor
  • Mindstorms-kabel + stopcontact / Mindstorms-kabel doorknippen
  • TCA9517 en een DIP 8-socket of een andere SO8 → DIP8-adapter en wat basis SMD-soldeervaardigheden
  • Raspberry Pi (ik gebruikte Raspberry Pi A) met de gebruikelijke accessoires
  • Broodplank en kabels
Voor dit prototype heb ik een breadboard gebruikt met een klein op maat gemaakt, Lego Mindstorms sensor breakout board. Dit bord bootst de 9V-besturing en sensorpoortbescherming van de Lego Mindstorms NXT [Lego HDK] na. Voor een eenvoudig prototype heb je het 9V-schakelcircuit (de twee fets) of de extra serieweerstanden en de diodes op de I2C-lijnen niet nodig. Je kunt gewoon 9V aansluiten op pin 1 van de kabel, GND op pin 2 en 3, 5 V op pin 4 (met weglating van diode D1), SCL_5V op pin 5 en SDA_5V op pin 6. Voor meer details:Hoe sluit je een Lego Mindstorms NXT aan Ultrasone sensor naar de Raspberry Pi

Productieproces

  1. Basis IoT – RaspberryPI HDC2010 hoe
  2. Raspberry Pi Temperature Logger
  3. Temperatuurbewaking op de Raspberry Pi
  4. Python- en Raspberry Pi-temperatuursensor
  5. Raspberry Pi-weerstation
  6. De integratie van sensorgegevens met Raspberry Pi-microprocessor
  7. Ultrasone sensor (HC-SR04) + Raspberry Pi
  8. Bewegingssensor met Raspberry Pi
  9. Raspberry Pi Bodemvochtsensor
  10. Raspberry Pi temperatuur- en lichtsensor
  11. Sluit een sensor aan op je Raspberry Pi om je te waarschuwen wanneer er schadelijke gassen in de buurt zijn!