Hvordan bygge en kontrollkrets med justerbar arbeidstid via Wi-Fi

Learn about the Quantum D-Wave - Now in 15 Languages (Juni 2019).

$config[ads_text] not found
Anonim

Hvordan bygge en kontrollkrets med justerbar arbeidstid via Wi-Fi


I denne artikkelen lærer du hvordan du bygger et system som kan slå DC-last på og av ved hjelp av et mobilprogram. Du lærer også hvordan du utfører denne oppgaven via umiddelbare handlinger eller via timere på forhånd for å bytte last på og av.

prosjekt oversikt

Du kan implementere dette systemet i miljøer der du må sette DC-belastningen for en bestemt tid. Dette vil tillate deg å bruke vår Android-applikasjon uten behov for et maskinvaregrensesnitt, tastatur og LCD-skjerm.

Oversikt over hele prosjektet.

Deleliste

DelANT
Arduino UNO eller et kompatibelt kort1
ESP8266 Wi-Fi-modul1
USB TTL-omformerkabel (valgfritt)1
Relé SPDT 12V2
BC337 NPN BJT2
BS170 MOSFET N kanal1
1K ohm motstand2
10K ohm motstand2
1N4007 diode2
Skrueterminaler2
LM317 justerbar spenningsregulator1
0.1uF kondensator2
Headers, female and male-
Blank PCB bord2

Sette opp ESP8266 Breakout Board

ESP8266 er en billig SoC-chip med en innebygd mikrokontroller og full TCP / IP-protokollstabel, noe som betyr at den direkte kan få tilgang til Wi-Fi-nettverket.

Fordi denne brikken har sin egen MCU, kan du legge inn søknadskoden i den, eller du kan bruke modulen som en Wi-Fi-transceiver - som det vi skal gjøre i dette prosjektet. Det vil være mer effektivt å bruke samme modul som en transceiver og en kontroller, men bare for læringsformål, vil vi kommunisere med modulen ved hjelp av Arduino i stedet.

ESP8266-brikken kommer i forskjellige moduler. Vi bruker ESP-01-modulen. Selvfølgelig kan du bruke en hvilken som helst annen modul.

Først må du vite at modulen fungerer på 3, 3 V, og den logiske høyspenningen fra Arduino bør være den samme for å forhindre skade på modulen. Dette krever en spenningsnivåomformer mellom Arduino (som fungerer på 5V) og modulen. Den gode nyheten er at bare overføringsnålen til Arduino vil trenge denne omformeren, siden mottakspinnen vil gjenkjenne 3.3V logiske signaler fra ESP8266

En av de enkleste måtene å gjøre denne konvertering på er å bruke et design fra Sparkfun: Du kan bestille en ferdigmodul.

5V til 3, 3V nivå konverter

Følgende figur viser vår ESP8266 pinout:

Bildekilde: Hurtigstartguide for ESP8266 WiFi-modul

PIN Funksjon
UTXDUART-overføringsdata
URXDUART Motta data: Inngangen skal være 3.3V kompatibel
CH_PDPower-down: Lav inngang styrer brikken ned, høy inngang driver den opp; bind høyt for normal drift, eller modulen vil ikke fungere.
GPIO0Ved oppstart: Må være høyt for å gå inn i flash eller normal oppstart; lav går inn i spesielle oppstartsmoduser.
GPIO2Ved oppstart: Lav forårsaker oppstartslaster for å gå inn i flashopplastingsmodus; høye årsaker normalt oppstart.
RSTTilbakestille; aktiv lav
GNDBakke
VCCStrøm / 3.3V

Jeg brukte en LM317, en justerbar utgangsspenning lineær regulator med opptil 1, 5A utgangsstrøm, for å gi en passende 3.3V strømforsyning for modulen.

Merk : Ikke bruk 3, 3 V-pinnen fra Arduino mens 3.3V spenningsregulatoren som brukes i Arduino ikke kan sende den forespurte strømmen til modulen, spesielt for maksimal strømforbruk under overføring.

ESP8266 breakout board diagram

Jeg brukte BS170 (i stedet for BSS138) for logisk nivå omformeren; begge fungerer bra.

ESP8266 breakout board

Nå kan du koble modulen din med din USB-TTL-omformerkabel og prøve modulen. For ytterligere detaljer, anbefaler jeg at du leser noen forretterhåndbøker som ESP8266 WiFi Module Quick Start Guide.

USB-TTL-omformerkabel

Sette opp relébryterbordet

Relay breakout board diagram

Jeg brukte en BC337 NPN BJT til å styre spolen av relé med en 1K ohm base motstand. Jeg brukte også 1n4007 dioden som beskyttelse mot spolens tilbakespenning.

Jeg valgte å gjøre den normalt lukket (NC) tilkoblingen med bakken. Mens det er vanlig tilstand for meg, kan du reversere tilkoblingen hvis du vil.

Relay breakout board (toppvisning)

Relay breakout bord (nedre visning)

Arduino kode

Nå står vi overfor et problem. ESP8266 bruker UART som grensesnitt for AT-kommandoer, og Arduino UNO (som bruker Atmega328) har bare en UART-port. Den ene porten har allerede blitt koblet til vår USB-TTL-bro, også med pin 0 og pin 1.

Som en løsning kan du bruke en emulator for en UART-port på en annen digital pinne på Arduino ved hjelp av AltSoftSerial eller SoftwareSerial-biblioteker. Dette vil tillate deg fortsatt å ha maskinvare UART-porten for feilsøking og utskrift av meldinger på konsollen, mens programvareporten skal kommunisere med modulen.

Mange mennesker (inkludert meg) rapporterte fiasko med seriell programvare for høye baudrater, som den vi vil bruke med esp8266, 115200 baud. Jeg kan si at du vil ha 50% ødelagte mottatte data fra modulen hvis du brukte programvare seriell og nesten 100% korrekt overførte data fra Arduino til modulen. Jeg fikk disse resultatene etter å snuse rundt på RX og TX linjer.

Som en løsning har jeg lagt til noen "definere" setninger i koden for å gjøre det enklere for deg å velge mellom en programvare- eller maskinvareport. Vær oppmerksom på at du ikke kan bruke samme port for feilsøking og kommunikasjon med modulen, så du må velge mellom dem.

 //uncomment Serial.*** if you want to use HW serial port (PIN 0, 1) //uncomment esp8266.*** if you want to use SW serial port (PIN 2, 3) #define esp8266_Available() Serial.available() //esp8266.available() #define esp8266_Find(ARG) Serial.find(ARG) //esp8266.find(ARG) #define esp8266_Read() Serial.read() //esp8266.read() #define esp8266_Write(ARG1, ARG2) Serial.write(ARG1, ARG2) //esp8266.write(ARG1, ARG2) #define esp8266_Print(ARG) Serial.print(ARG) //esp8266.print(ARG) 

I koden finner du delen som setter opp modulen for å koble til ruteren.

 sendCommand("AT+RST\r\n", 2000, DEBUG); // reset module sendCommand("AT+CWMODE=1\r\n", 1000, DEBUG); // configure as access point sendCommand("AT+CWJAP=\"tur\", \"341983#tur\"\r\n", 3000, DEBUG); //**** CHANGE SSID and PASSWORD ACCORDING TO YOUR NETWORK ******// delay(10000); sendCommand("AT+CIFSR\r\n", 1000, DEBUG); // get ip address sendCommand("AT+CIPMUX=1\r\n", 1000, DEBUG); // configure for multiple connections sendCommand("AT+CIPSERVER=1, 1337\r\n", 1000, DEBUG); // turn on server on port 1337 

Sketch-sløyfen venter på en kommando for å komme over Wi-Fi-tilkobling. De nåværende støttede kommandoene er:

  • 'con' for å svare på status for utganger, lav eller høy.
  • 'på =' Slå den tilhørende pinnen på.
  • 'av =' Slå den tilhørende pinnen av.
  • 'Tm = n / fS' sett på (n) / av (f) timer for den tilsvarende pinnen.

Alle tidligere kommandoer har en bekreftelsesrespons.

Merknader:

  • Noen deler av denne skissen er basert på en AllAboutEE opplæring.
  • Hvis du bruker moduler med en gammel SDK, kan du lider av feil som jeg gjorde. Den eneste løsningen i dette tilfellet er å oppdatere firmware til den nyeste versjonen. Sjekk denne AAC-artikkelen for hjelp med oppdatering av fastvaren. Jeg oppgraderte firmware fra versjon 1.3 til 1.5.4.

Last ned kode

Android-applikasjon

For å kontrollere alle de ovennevnte maskinvarekomponentene, bruker vi et enkelt Android-program. Denne applikasjonen vil tillate oss å slå utgangen på eller av direkte eller etter en bestemt tidsperiode.

Last ned kode

Merk: Dette programmet krever Android 4.0 (IceCreamSandwich) og oppover.

  • Først av alt må du kjenne din IP-adresse. Hvis du brukte seriell port for programvaren, skrives IP-en ut på konsollen hvis du brukte maskinvareport, må du bruke seriekabel for å snuse på RX, TX-linjer og se IP-adressen. Du må også kjenne portnummeret som du legger det på skissen. Deretter trykker du på "Koble" for å få status for alle tre innganger. Du må sørge for at Wi-Fi er på, og du er koblet til ditt lokale nettverk.
  • Trykk nå på hvilken som helst bryter du vil slå den på / av. Når du vil, kan du klikke på "Oppdater" for å oppdatere statusen til alle utganger.
  • I kategorien "Timere" kan du stille inn noen av disse tre utgangene for å slå på / av etter en bestemt tidsperiode (mellom 0 og 24 timer).
  • Etter en prosess vil du motta en bekreftelsesmelding som forteller om prosessen er fullført, eller du har en feil.