In dit project gebruiken we het concept van ADC (Analog to Digital Conversion) in ARDUINO UNO. We gaan een Hall Effect-sensor en Arduino uno gebruiken om de veldsterkte van een magneet te meten. De sensor die we hier hebben gebruikt, is UGN3503U. Dit is een Hall-sensor die de magnetische veldsterkte detecteert en een variërende uitgangsspanning levert die evenredig is met de veldsterkte. Deze sensor neemt veldsterkte op in de eenheden van ' GAUSS '.
Dus met deze sensor hebben we veldsterkte als variërende spanning. Door de ADC-functie te gebruiken, zullen we deze spanning naar een getal omzetten. Dit getal vertegenwoordigt de veldsterkte en wordt weergegeven op het LCD-scherm.
Arduino heeft zes ADC-kanalen. Daarin kunnen ze allemaal worden gebruikt als ingangen voor analoge spanning. De UNO ADC heeft een resolutie van 10 bits (dus de gehele waarden van (0- (2 ^ 10) 1023)). Dit betekent dat het ingangsspanningen tussen 0 en 5 volt omzet in gehele waarden tussen 0 en 1023. Dus voor elke (5/1024 = 4,9 mV) per eenheid.
Bij dit alles gaan we een potentiometer of pot aansluiten op het 'A0'-kanaal, en we gaan het ADC-resultaat weergeven in een eenvoudig display. De eenvoudige displays zijn 16x1 en 16x2 display-eenheden. Het 16x1 beeldscherm heeft 16 karakters en staat op één regel. De 16x2 heeft 32 tekens in totaal 16 op de 1e regel en nog eens 16 op de 2e regel. Hier moet men begrijpen dat er in elk karakter 5x10 = 50 pixels zijn, dus om één karakter weer te geven moeten alle 50 pixels samenwerken, maar daar hoeven we ons geen zorgen over te maken omdat er een andere controller (HD44780) in het display zit die de taak van het besturen van de pixels (je kunt het zien op de LCD-eenheid, het is het zwarte oog aan de achterkant).
Componenten vereist
Hardware: ARDUINO UNO, voeding (5v), JHD_162ALCD (16x2LCD), 100uF condensator (2 stuks), UGn3503U.
Software: arduino IDE (Arduino nightly)
Schakelschema en uitleg
De bovenstaande afbeelding toont het schakelschema voor magnetische veldmeting met arduino uno.
In 16x2 LCD zijn er in totaal 16 pinnen als er een achtergrondverlichting is, als er geen achtergrondverlichting is, zijn er 14 pinnen. Men kan de achterlichtpinnen van stroom voorzien of laten. Nu zijn er in de 14 pinnen 8 datapinnen (7-14 of D0-D7), 2 voedingspinnen (1 & 2 of VSS & VDD of GND & + 5v), 3 e pin voor contrastregeling (VEE-regelt hoe dik de tekens moeten zijn afgebeeld) en 3 controlepennen (RS & RW & E).
In het bovenstaande circuit kun je zien dat ik maar twee controlepennen heb genomen, het contrastbit en READ / WRITE worden niet vaak gebruikt, dus ze kunnen worden kortgesloten naar aarde. Dit plaatst LCD in het hoogste contrast en leesmodus. We hoeven alleen de ENABLE- en RS-pinnen te bedienen om tekens en gegevens dienovereenkomstig te verzenden.
De aansluitingen die zijn gemaakt voor LCD worden hieronder gegeven:
PIN1 of VSS naar aarde
PIN2 of VDD of VCC tot + 5v vermogen
PIN3 of VEE naar aarde (geeft maximaal contrast het beste voor een beginner)
PIN4 of RS (registerselectie) naar PIN8 van ARDUINO UNO
PIN5 of RW (lezen / schrijven) naar aarde (zet LCD in leesmodus vereenvoudigt de communicatie voor de gebruiker)
PIN6 of E (inschakelen) naar PIN9 van ARDUINO UNO
PIN11 of D4 naar PIN10 van ARDUINO UNO
PIN12 of D5 naar PIN11 van ARDUINO UNO
PIN13 of D6 naar PIN12 van ARDUINO UNO
PIN14 of D7 naar PIN13 van ARDUINO UNO
Met de ARDUINO IDE kan de gebruiker LCD in 4 bit-modus gebruiken. Dit type communicatie stelt de gebruiker in staat om het pingebruik op ARDUINO te verminderen, in tegenstelling tot andere hoeft de ARDUINO niet afzonderlijk te worden geprogrammeerd voor gebruik in 4 it-modus, omdat de ARDUINO standaard is ingesteld om te communiceren in 4-bit-modus. In het circuit kun je zien dat we 4bit-communicatie hebben gebruikt (D4-D7). Dus van louter observatie van bovenaf, verbinden we 6 pinnen van het LCD-scherm met de controller waarin 4 pinnen datapinnen zijn en 2 pinnen voor controle.
Werken
Om een LCD met de ARDUINO UNO te verbinden, moeten we een paar dingen weten.
|
Allereerst hebben de UNO ADC-kanalen een standaard referentiewaarde van 5V. Dit betekent dat we een maximale ingangsspanning van 5V kunnen geven voor ADC-conversie op elk ingangskanaal. Aangezien sommige sensoren spanningen leveren van 0-2,5V, krijgen we met een 5V-referentie een kleinere nauwkeurigheid, dus we hebben een instructie waarmee we deze referentiewaarde kunnen wijzigen. Dus voor het wijzigen van de referentiewaarde hebben we ("analogReference ();")
Standaard krijgen we de maximale ADC-resolutie van het bord, die 10 bits is, deze resolutie kan worden gewijzigd met behulp van instructies ("analogReadResolution (bits);"). Deze resolutiewijziging kan in sommige gevallen van pas komen.
Als de bovenstaande voorwaarden nu op de standaard zijn ingesteld, kunnen we de waarde van ADC van kanaal '0' lezen door de functie 'analogRead (pin)' direct aan te roepen; 'hier staat' pin 'voor pin waar we het analoge signaal hebben aangesloten, in dit geval zou het worden "A0". De waarde van ADC kan in een geheel getal worden omgezet als “int ADCVALUE = analogRead (A0); ”, Door deze instructie wordt de waarde na ADC opgeslagen in het gehele getal“ ADCVALUE ”.
Laten we het nu even hebben over 16x2 LCD. Eerst moeten we het header-bestand ('#include
Ten tweede moeten we het bord vertellen welk type LCD we hier gebruiken. Omdat we zoveel verschillende soorten LCD hebben (zoals 20x4, 16x2, 16x1 etc.). Hier gaan we een 16x2 LCD koppelen aan de UNO, dus we krijgen 'lcd.begin (16, 2);'. Voor 16x1 krijgen we 'lcd.begin (16, 1);'.
In deze instructie gaan we het bord vertellen waar we de pinnen hebben aangesloten. De pinnen die zijn aangesloten moeten worden weergegeven in de volgorde "RS, En, D4, D5, D6, D7". Deze pinnen moeten correct worden weergegeven. Omdat we RS hebben aangesloten op PIN0 enzovoort, zoals weergegeven in het schakelschema, stellen we het pincode voor aan boord als "LiquidCrystal lcd (0, 1, 8, 9, 10, 11);".
Nadat alles er boven is, is het verzenden van gegevens, de gegevens die op het LCD-scherm moeten worden weergegeven, moeten worden geschreven als "cd.print (" hallo, wereld! ");". Met dit commando geeft het LCD-scherm 'hallo, wereld!' Weer. Zoals u kunt zien, hoeven we ons hier verder geen zorgen over te maken, we hoeven alleen maar te initialiseren en de UNO is klaar om gegevens weer te geven. We hoeven geen programmalus te schrijven om de gegevens BYTE door BYTE hier te verzenden.
Zodra een magneet in de buurt van de sensor is gebracht, vertegenwoordigt de sensor een spanning aan de uitgang die evenredig is met het veld, deze waarde wordt door Uno opgenomen en weergegeven op het LCD-scherm. De werking van dit magnetische veldmeetproject wordt verder uitgelegd aan de hand van de onderstaande C-code.