I dette prosjektet bruker vi konseptet ADC (Analog til Digital Conversion) i ARDUINO UNO. Vi skal bruke en Hall Effect-sensor og Arduino uno for å måle feltstyrken til en magnet. Sensoren som vi har brukt her er UGN3503U. Dette er en hallsensor som registrerer magnetfeltstyrken og gir en varierende spenning ved utgang proporsjonal med feltstyrken. Denne sensoren plukker opp feltstyrken i enhetene til ' GAUSS '.
Så med denne sensoren vil vi ha feltstyrke som varierende spenning. Ved å bruke ADC-funksjonen vil vi konvertere denne spenningen til et tall. Dette tallet representerer feltstyrken og vises på LCD.
Arduino har seks ADC-kanaler. I disse kan en eller alle av dem brukes som innganger for analog spenning. UNO ADC har 10-biters oppløsning (så heltallverdiene fra (0- (2 ^ 10) 1023)). Dette betyr at den vil kartlegge inngangsspenninger mellom 0 og 5 volt i heltall mellom 0 og 1023. Så for hver (5/1024 = 4,9mV) per enhet.
I alt dette skal vi koble et potensiometer eller en potte til 'A0' -kanalen, og vi skal vise ADC-resultatet i en enkel skjerm. De enkle skjermene er 16x1 og 16x2 skjermenheter. 16x1 displayenheten vil ha 16 tegn og er i en linje. Den 16x2 vil ha 32 tegn totalt 16in 1 st linjen og en annen 16 i 2 nd linje. Her må man forstå at i hvert tegn er det 5x10 = 50 piksler, så for å vise ett tegn må alle 50 piksler fungere sammen, men det trenger vi ikke å bekymre oss for fordi det er en annen kontroller (HD44780) i skjermenheten som gjør jobb med å kontrollere pikslene (du kan se det på LCD-enheten, det er det svarte øyet på baksiden).
Komponenter kreves
Maskinvare: ARDUINO UNO, strømforsyning (5v), JHD_162ALCD (16x2LCD), 100uF kondensator (2 deler), UGn3503U.
Programvare: arduino IDE (Arduino nattlig)
Kretsdiagram og forklaring
Ovenstående figur viser kretsskjemaet for magnetfeltmåling ved hjelp av arduino uno.
I 16x2 LCD er det 16 pinner overalt hvis det er baklys, hvis det ikke er noe bakgrunnslys, vil det være 14 pinner. Man kan drive eller la baklyspinnene ligge. Nå i de 14 pinnene er det 8 datapinner (7-14 eller D0-D7), 2 strømforsyningspinner (1 & 2 eller VSS & VDD eller GND & + 5v), 3. pinne for kontrastkontroll (VEE-kontrollerer hvor tykke tegnene skal være vist) og 3 kontrollpinner (RS & RW & E).
I kretsen ovenfor kan du se at jeg bare har tatt to kontrollpinner, kontrastbiten og LES / SKRIV blir ikke ofte brukt, slik at de kan kortsluttes til bakken. Dette setter LCD i høyest kontrast og lesemodus. Vi trenger bare å kontrollere ENABLE- og RS-pinner for å sende tegn og data tilsvarende.
Tilkoblingene som gjøres for LCD er gitt nedenfor:
PIN1 eller VSS til bakken
PIN2 eller VDD eller VCC til + 5v strøm
PIN3 eller VEE til jord (gir maksimal kontrast best for en nybegynner)
PIN4 eller RS (Registrer valg) til PIN8 for ARDUINO UNO
PIN5 eller RW (lese / skrive) til bakken (setter LCD i lesemodus letter kommunikasjonen for brukeren)
PIN6 eller E (Aktiver) til PIN9 for ARDUINO UNO
PIN11 eller D4 til PIN10 for ARDUINO UNO
PIN12 eller D5 til PIN11 for ARDUINO UNO
PIN13 eller D6 til PIN12 for ARDUINO UNO
PIN14 eller D7 til PIN13 for ARDUINO UNO
ARDUINO IDE lar brukeren bruke LCD i 4-biters modus. Denne typen kommunikasjon gjør det mulig for brukeren å redusere pin-bruken på ARDUINO, i motsetning til andre, trenger ARDUINO ikke å bli programmert separat for å bruke den i 4 it-modus, fordi ARDUINO som standard er konfigurert til å kommunisere i 4-biters modus. I kretsen kan du se at vi brukte 4-bits kommunikasjon (D4-D7). Så fra bare observasjon fra tabellen ovenfor kobler vi 6 pinner på LCD til kontrolleren der 4 pinner er datapinner og 2 pinner for kontroll.
Jobber
For å koble en LCD-skjerm til ARDUINO UNO, trenger vi å vite noen få ting.
|
Først og fremst har UNO ADC-kanalene en standard referanseverdi på 5V. Dette betyr at vi kan gi en maksimal inngangsspenning på 5V for ADC-konvertering på hvilken som helst inngangskanal. Siden noen sensorer gir spenninger fra 0-2,5V, med en 5V referanse får vi mindre nøyaktighet, så vi har en instruksjon som gjør det mulig for oss å endre denne referanseverdien. Så for å endre referanseverdien vi har (“analogReference ();”)
Som standard får vi den maksimale ADC-oppløsningen på kortet som er 10 bit, denne oppløsningen kan endres ved å bruke instruksjoner (“analogReadResolution (bits);”). Denne oppløsningsendringen kan være nyttig i noen tilfeller.
Nå hvis de ovennevnte forholdene er satt til standard, kan vi lese verdien fra ADC av kanalen '0' ved direkte å kalle funksjonen "analogRead (pin);", her representerer "pin" pin der vi koblet til analogt signal, i dette tilfellet ville det være “A0”. Verdien fra ADC kan tas inn i et helt tall som “int ADCVALUE = analogRead (A0); ”, Ved denne instruksjonen blir verdien etter ADC lagret i heltallet“ ADCVALUE ”.
La oss nå snakke litt om 16x2 LCD. Først må vi aktivere toppfilen ('#include
For det andre må vi fortelle tavlen hvilken type LCD vi bruker her. Siden vi har så mange forskjellige typer LCD (som 20x4, 16x2, 16x1 osv.). Her inne skal vi grensesnitt en 16x2 LCD til UNO så vi får 'lcd.begin (16, 2);'. For 16x1 får vi 'lcd.begin (16, 1);'.
I denne instruksjonen skal vi fortelle tavlen hvor vi koblet pinnene, Pinnene som er koblet til skal vises i rekkefølge som “RS, En, D4, D5, D6, D7”. Disse pinnene skal vises riktig. Siden vi koblet RS til PIN0 og så videre, som vist i kretsskjemaet, representerer vi pin-nummeret til kortet som “LiquidCrystal lcd (0, 1, 8, 9, 10, 11);”.
Etter det som er igjen er det bare å sende data, dataene som må vises i LCD skal skrives som "cd.print (" hallo, verden! ");". Med denne kommandoen viser LCD-skjermen 'hallo, verden!'. Som du kan se trenger vi ikke bekymre oss for noe annet, vi må bare initialisere, og UNO vil være klar til å vise data. Vi trenger ikke å skrive en programsløyfe for å sende data BYTE av BYTE her.
Når en magnet er brakt nær sensoren representerer sensoren en spenning ved utgangen proporsjonal med feltet, blir denne verdien tatt opp av Uno og vist i LCD. Arbeid med dette magnetfeltmåleprosjektet er ytterligere forklart gjennom C-koden nedenfor.