• Izrađujemo Android aplikaciju za upravljanje kućnim robotom putem Bluetootha. Arduino lekcije: upravljanje uređajima sa pametnog telefona za lutke

    Dobar dan

    Nedavno sam se zainteresirao za ideju stvaranja " pametna kuća" Pošto od potrebne komponente Trenutno na raspolaganju imam samo arduino i android telefon pa je odlučeno krenuti s izradom upravljačke ploče i spajanjem iste s ostatkom sustava.

    Moja vizija sustava izgleda ovako:

    Mislim da se isplati kombinirati kućne i web poslužitelje kupnjom statične IP adrese, ali za prvi put to će biti dovoljno. Počnimo s nečim jednostavnim - naučite kako daljinski upravljati LED i LCD zaslonom.

    Web-poslužitelj
    Na web poslužitelju kreiramo bazu podataka s dvije tablice – led i tekst. Tablica LED dioda sadrži 2 polja – ID i status. Sadrži jedan unos s trenutnim LED statusom. Tablica s tekstovima sadrži 2 polja – ID i tekst. Sadrži i jednu natuknicu s tekstom koji u trenutku prikazan na LCD zaslonu.

    Sada napišimo nekoliko skripti koje ćemo pozvati s telefona i prenijeti informacije u bazu podataka. Pišemo u php.

    Skripta led.php (LED kontrola):

    Skripta msg.php (kontrola LCD zaslona):

    Mislim da je iz komentara jasno kako te skripte rade. Ovo je sve što se nalazi na web poslužitelju. Sada prijeđimo na kućni poslužitelj (ili, jednostavnije, računalo na koje je spojen Arduino).

    Kućni poslužitelj
    Na njemu će stalno raditi program (možete ga nazvati i daemon), koji šalje zahtjeve u bazu podataka i, kada se informacije koje se tamo promijene, šalje odgovarajuću naredbu na COM port iz Arduina. Napišimo program u jeziku obrade:

    Import processing.serial.*; //biblioteka za rad s COM portom import de.bezier.data.sql.*; //biblioteka za rad s MySQL bazom podataka Serijski port; MySQL dbconnection; int prevLEDState = 0; //prethodno stanje LED niza prevS = ""; //prethodni tekst poslan na LCD zaslon void setup() ( port = new Serial(this, "COM4", 9600); //inicijaliziraj COM port 4 (nije spojen na arduino), brzina prijenosa - 9600 bauda port. bufferUntil ("\n"); String user = "database_name"; new MySQL(this, "your_domain.ru", user, pass); ); ) void draw() ( //nadzirite informacije o LED-u u bazi podataka dbconnection.query("SELECT * FROM leds WHERE id = "1""); //napravite upit tablici LED-a dok (dbconnection.next ()) //zaobići odabir iz rezultata upita ( int n = dbconnection.getInt("status"); //dobiti vrijednost iz statusnog polja if (n != prevLEDState) //ako se promijenila u usporedbi s prethodni "ciklus" programa, zatim šaljemo naredbu na COM port ( prevLEDState = n; port.write("1"); //prvi poslani znak značit će kod operacije koja se izvodi: 1 - LED kontrola, 2 - LCD zaslon kontrolni port.write(n);
    ) ) //nadzirite informacije o LCD zaslonu u bazi podataka dbconnection.query("SELECT * FROM texts WHERE id = "1""); //napravite upit tekstualnoj tablici dok (dbconnection.next())//zaobiđite odabir iz rezultata upita ( String s = dbconnection.getString("tekst"); //dohvatite vrijednost iz tekstualnog polja ako ( s != prevS) ( prevS = s; port.write("2"); port.write(s) ) delay(50); //napravite odgodu od 50 ms kako ne biste kontinuirano slali zahtjeve)
    Neću objašnjavati ni ovaj kod, sve je već jasno. još 1 važna točka

    . Da bi program s našeg računala mogao pristupiti bazi podataka koja se nalazi na udaljenom poslužitelju, to mora biti omogućeno. Unesite naš IP na popis dopuštenih:
    Aplikacija za telefon

    Imam Android telefon, za to pišemo. Neću ići previše u detalje (jako je dobro i za instaliranje programskog okruženja i za pisanje prve aplikacije u ovom članku - poveznica). Izgled aplikacije izgleda prilično skromno, ali u ovom slučaju

    ovo nije glavno:
    public void changeLED() ( try ( URL url1 = new URL("http://your_domain.ru/led.php"); HttpURLConnection urlConnection = (HttpURLConnection) url1.openConnection(); try ( InputStream in = new BufferedInputStream(urlConnection .getInputStream()); finally ( urlConnection.disconnect(); )) catch (Iznimka e) ( ) )
    Funkcija koja šalje tekst za prikaz na LCD zaslonu:
    public void submitMsg() ( final EditText tt = (EditText) findViewById(R.id.editText1); try ( URL url1 = new URL("http://your_domain.ru/msg.php?msg="+tt.getText) ());
    Pa, glavna funkcija u kojoj su rukovatelji događajima vezani za gumbe:
    public void onCreate(Bundle savedInstanceState) ( super.onCreate(savedInstanceState); setContentView(R.layout.main); final Button btn1 = (Button) findViewById(R.id.button1); btn1.setOnClickListener(new Button.OnClickListener() ( public void onClick(View v) // kliknite na gumb ( changeLED(); ) )); public void onClick(View v) // kliknite na gumb ( submitMsg(); ) ));
    I još jedna važna točka je dodavanje dopuštenja aplikaciji za pristup Internetu. Da biste to učinili, trebate dodati redak u datoteku AndroidManifest.xml (nalazi se u direktoriju naše Android aplikacije):

    Izvoz naše aplikacije u APK datoteka i instalirajte ga na svoj telefon. Upravljačka ploča pametna kuća spreman!

    Arduino
    I na kraju, posljednje ali ne manje važno, povezivanje Arduina i flashiranje njegovog firmwarea. Dijagram spajanja LCD zaslona i LED-a na Arduino Uno je sljedeći:

    Uzimamo otpornik na 220 Ohma. Više o povezivanju LCD ekrana možete pročitati ovdje - link

    A evo kako to sve izgleda u stvarnosti:

    Zar nije prekrasno?

    Posao Arduina je slušati što program demon radi. kućni poslužiteljšalje na COM priključak na koji je spojen Arduino (iako je stvarna veza preko USB kabela, ali računalo to prepoznaje kao serijski priključak). Nakon što primi bilo koji podatak od računala, kontroler prepoznaje kod naredbe iz prvog znaka prenesene informacije (tj. čime se sada upravlja - LCD zaslon ili LED). Zatim, ovisno o kodu i informacijama koje slijede, LED se uključuje/isključuje ili se prikazuje poslana poruka. Evo stvarnog koda:

    #uključi //ugrađena biblioteka za rad s LCD zaslonom boolean isExecuting = false; //varijabla koja pokazuje da se neka naredba već izvršava //Odmah ću objasniti zašto je to potrebno. Za svaki "ciklus" petlje, Arduino čita kod od jednog znaka iz COM porta. //Stoga će niz biti poslan u nekoliko ciklusa takta. U ovom slučaju, prije svake od dvije moguće naredbe (promjena stanja LED-a i slanje teksta na zaslon), // prenosi se kod ove naredbe (1 odnosno 2). Za odvajanje kodova naredbi od daljnjih informacija (statusa LED-a ili teksta na zaslonu), koristi se ova // varijabla. LiquidCrystal lcd (4,5,10,11,12,13); //inicijaliziraj prikaz int ledPin = 8; //broj Arduino pina na koji je spojena LED int prevLEDStatus = 0; //prethodni LED status (on/off) int newLEDStatus = 0; // novi status LED int cmd = 0; //kod naredbe koja se izvršava void setup() ( Serial.begin(9600); //inicijalizacija COM porta (9600 - brzina prijenosa) pinMode(ledPin,OUTPUT); //inicijalizacija 8. Arduino pina kao LCD izlaza . begin(20,4); //inicijaliziranje LCD zaslona (4 reda po 20 znakova) ) void loop() ( if (Serial.available() > 0) //ako su neke informacije stigle na COM port ( if (isExecuting == false) //ako se trenutno ne izvršava nijedna naredba ( cmd = Serial.read() - "0"; //pročitajte kod naredbe koja se izvodi isExecuting = true; //varijabla sada pokazuje da naredba se počela izvršavati ) if (cmd == 1) //kontrolira LED ( newLEDStatus = (int) Serial.read(); //pročitaj novi status LED if (newLEDStatus != prevLEDStatus) //ako ima promijenio u usporedbi s trenutnim statusom, zatim promijeni trenutni status ( digitalWrite(ledPin,newLEDStatus); prevLEDStatus = newLEDStatus; ) ) else //prikaži kontrolu ( if (isExecuting == false) //ako se trenutno ne izvršava nijedna naredba ( lcd. jasan(); // očistite zaslon ) else ( lcd.print((char)Serial.read()); // prikažite znak na zaslonu ) ) ) else //ako na COM port nisu stigle nikakve informacije ( delay(50); // napravi odgodu od 50 ms if (Serial.available()<= 0) //если информации по-прежнему нет isExecuting = false; //считаем, что никакая команда не выполняется } }
    Mislim da to ne zahtijeva nikakvo objašnjenje, jer sam sve opisao vrlo detaljno u komentarima. Jedina stvar vrijedna pažnje su neka ograničenja za nizove koji se šalju na prikaz. Ne bi smjeli sadržavati razmake (ovo je ograničenje nametnuto nesavršenošću mog algoritma) i ne bi smjeli sadržavati ćirilicu (budući da nije podržana na svim zaslonima, a ako je podržana, zahtijeva prijenos znakovnih kodova u vlastitom kodiranju, ne postoji način da se znakovi pretvore u želje).

    Zaključak
    Pa, to je sve. Ispostavilo se da je prilično jednostavno.
    Video kako sve radi:

    Ovaj članak sadrži detaljne upute koje će vam pomoći da izradite vlastitu aplikaciju za pametni telefon s Androidom dizajniranu za upravljanje nečim putem Bluetootha. Da bismo to demonstrirali, detaljno ćemo analizirati primjer treptanja LED-a na Arduinu pomoću naredbi s telefona ili tableta. Slijedeći naše upute, naučit ćete ovo učiniti:

    Da biste upravljali kućnim robotom, samo trebate dodati gumbe i obraditi njihove naredbe na Arduino strani.

    Što će trebati?

    1. Bilo koja ploča kompatibilna s Arduinom
    2. Bluetooth modul
    3. Uređaj na kojem je instaliran Android OS

    Najbolje je koristiti HC-05 kao Bluetooth modul. Lako ga je kupiti u kineskoj online trgovini ili na eBayu. Modul se napaja s 3,3 V, ali njegove I/O linije mogu podnijeti logiku od 5 V, omogućujući da se njegov UART spoji na Arduino.

    Bluetooth modul HC-05

    Spajanje Bluetooth modula na Arduino

    Dakle, sada moramo povezati naš Arduino s Bluetoothom. Ako Arduino nema izlaz od 3,3 V, već samo 5 V, tada ćete morati instalirati stabilizator za smanjenje snage. Dodjelu pinova HC-05 lako je pronaći na internetu. Za korištenje preporučamo da napravite ploču sa strujnim vodovima, Rx i Tx. Spajanje na Arduino mora se izvršiti sljedećim redoslijedom:

    • Arduino izlaz 3.3V ili (5V kroz stabilizator!) - na pin 12 Bluetooth modula
    • Arduino GND izlaz - na pin 13 Bluetooth modula
    • Arduino TX izlaz - na pin 2 RX Bluetooth modula
    • Arduino RX izlaz - na pin 1 TX Bluetooth modula

    Nakon povezivanja morate provjeriti funkcionalnost Bluetooth modula. Spojimo LED na pin 12 Arduina i učitajmo sljedeću skicu na ploču:

    Char incomingByte; // dolazni podaci int LED = 12; // LED je spojen na pin 12 void setup() ( Serial.begin(9600); // inicijaliziranje porta pinMode(LED, OUTPUT); // Postavite pin 12 kao izlaz Serial.println("Pritisnite 1 da LED ON ili 0 do LED OFF..."); ) void loop() ( if (Serial.available() > 0) ( //ako su podaci stigli incomingByte = Serial.read(); // pročitajte bajt if(incomingByte == "0" ) ( digitalWrite(LED, LOW); // ako je 1, tada isključite LED Serial.println("LED ISKLJUČENO. Pritisnite 1 da biste uključili LED!"); // i ispišite natrag poruku) if(incomingByte == "1") ( digitalWrite(LED, HIGH); // ako je 0, onda uključi LED Serial.println("LED UKLJUČENO. Pritisnite 0 da biste isključili LED!"); ) ) )

    Prijenos firmvera, ažuriranja i drugih podataka pomoću lemilice i žica nije najbolje rješenje za Arduino. Međutim, mikrokontroleri za arduino wifi Nisu jeftini, niti su uvijek potrebni, zbog čega ih korisnici radije ne koriste u svojim projektima bez potrebe.

    Ali sada je još jedan kineski proizvod osvojio tržište, možete povezati svoj vlastiti wi-fi ometač esp8266 na Arduino ploču ili drugi sustav, i dobit ćete stabilna veza uz niz drugih prednosti. Pa idemo shvatiti arduino uno wi-fi, te da li se isplati kupnja ovog modula, kao i što je zapravo sličan mikrokontroler temeljen na wi-fi Arduinu.

    Danas većina Arduino korisnika više ne brine o cijeni takvih uređaja, iako se prije 3 godine Arduino wi-fi modul smatrao luksuzom. Sve to zahvaljujući wi-fi jammeru esp8266, čiji su proizvođači u potpunosti predstavili novi proizvod, nevjerojatan u svojoj funkcionalnosti, au isto vrijeme prilično jeftin, što je dalo značajan doprinos i stvorilo konkurenciju u ovom smjeru.

    Stoga se arduino wi-fi esp8266 sada smatra najpristupačnijim modulom na tržištu, kao i sva njegova braća. Dakle, cijena na stranim stranicama počinje od 2 dolara, što vam omogućuje kupnju ovih modula u serijama i ne morate ih ponovno treptati tisuću puta, ponovno lemljenje kontakata kako biste održali funkcionalnost.

    U početku se ovaj Arduino wi-fi modul uglavnom koristio kao arduino wi-fi štit, budući da je to bila najjeftinija opcija i ni na koji način nije bila inferiorna od originalne. Uređaj je uistinu gotovo legendaran, jer za njegovu cijenu nema značajnijih nedostataka. Postoji mnogo biblioteka, uključujući one korisničke, a također podržava rad preko serijskih sabirnica i najjednostavnijih AT i AT+ naredbi. Zahvaljujući tome, nema potrebe proučavati bilo kakvu semantiku ozloglašenog C99, kao što je često slučaj s drugim mikrokontrolerima trećih strana.

    U skladu s tim, čak će i početnik to shvatiti za nekoliko sekundi, a profesionalac će moći koristiti već pripremljene biblioteke. Ostale prednosti uključuju:

    1. Procesor je 160 MHz, ali je 32-bitni, što ostavlja određeni trag na performanse. Ali vrijedi zapamtiti da se modul još uvijek koristi u kombinaciji s Arduino pločama, koje same režu visoke frekvencije i jedu većinu resursa iz nepoznatih razloga.
    2. Proizvođač koji je objavio wi-fi modul esp8266 nije prestao sa zanimljivim projektima, a sada postoji cijela linija mikrokontrolera provjerene kvalitete.
    3. Moderni mrežni sigurnosni standardi. Naravno, WPA i WPA2 više nisu sigurni koliko bismo željeli, ali njihova prisutnost je dobra vijest u tako jeftinom kontroleru.
    4. 16 izlaznih priključaka, uključujući 10-bitne, omogućujući vam eksperimentiranje s pločom.

    Ono što je još važnije je ono što vas čeka odmah nakon vađenja iz kutije: trajna memorija do 4 megabajta, ovisno o vrsti ploče, a to uvelike pojednostavljuje rad s velikim bibliotekama, pa čak i nekim medijskim datotekama. Uostalom, na većini Arduino ploča čak se i 1 megabajt smatra nedostižnim luksuzom.

    Karakteristike wi-fi esp8266 su svakako ohrabrujuće, pogotovo u usporedbi sa skupljim konkurentima, no korisnik koji nema prethodnog iskustva s ovim pločama imat će pitanje kako ju spojiti. Činjenica je da modul ima mnogo više pinova nego što su početnici navikli vidjeti i, shodno tome, počinju paničariti. Međutim, ako razumijete situaciju, onda u stvarnosti nema ništa komplicirano. Sve što trebate učiniti je nabaviti lem i lemilo te samo pročitati upute.

    Kako spojiti Wi-Fi modul na Arduino

    Pogledajmo povezivanje esp8266 esp 12e i što je esp8266 wifi most uart. Uostalom, veza i konfiguracija modula postavlja najviše pitanja.


    Prije svega, odlučite koju verziju mikrokontrolera imate. U prvom su LED diode ugrađene u blizini pinova, au drugom, koji se počeo proizvoditi nedavno, signalna svjetla nalaze se u blizini antene.

    Prije povezivanja trebali biste preuzeti najnoviji firmware, što vam omogućuje povećanje brzine razmjene paketa na 9600 jedinica informacija u sekundi. A mi ćemo provjeriti vezu pomoću usb-ttl kabela i odgovarajućeg terminala iz CoolTerma.


    Pinovi za spajanje gore opisanog kabela su standardni, ali napajanje dolazi preko pina od 3,3 volta iz Arduina. Važno je zapamtiti da se maksimalna struja koju isporučuje ploča ne može postaviti iznad 150 mA, a esp8266 esp 07 i esp8266 witty cloud wi-fi modul za arduino zahtijevaju 240 mA.

    Međutim, ako nema drugog izvora struje, možete koristiti standardnu ​​verziju iz Arduina, ali snaga ploče će patiti. Iako, ako opterećenje nije veliko, 70 mA je dovoljno, budite spremni na iznenadna ponovna pokretanja mikrokontrolera u vremenima najvećeg opterećenja i napišite softver u skladu s tim tako da filtrira i dijeli datoteke bez preopterećenja ploče.


    Još jedna opcija povezivanja je ispod. Važno - kontakti RX-TX povezani su nišanom. Budući da su razine signala modula ESP8266 3,3 V, a Arduina 5 V, moramo koristiti otpornički razdjelnik napona za pretvorbu razine signala.

    Registracija Wi-Fi modula u Arduinu

    Kao što znate, s odgovarajućim iskustvom, možete upariti esp8266 ex 12e štit s pametnim telefonom, ali za početnike, registracija esp8266 esp 12 u Arduino sustavu uzrokuje poteškoće. Zapravo, dovoljno je spojiti modul i provjeriti njegovu funkcionalnost izdavanjem nekoliko standardnih AT naredbi kroz izbornik za ispravljanje pogrešaka.

    Na primjer, možete dodati treptanje sa standardnim LED-om (za gornji dijagram povezivanja):

    #define TXD 1 // GPIO1/TXD01 void setup() ( pinMode(TXD, OUTPUT); ) void loop() ( digitalWrite(TXD, HIGH); delay(1000); digitalWrite(TXD, LOW); delay(1000) ;)

    Nakon što ploča potvrdi da vidi mikrokontroler u sustavu, možete početi posao s punim radnim vremenom s njim. Međutim, vrijedi napomenuti da ako se sama Arduino ploča koristi u projektu samo za povezivanje ovog kontrolera, to je neracionalno.

    Dovoljan je USB-UART konverter, budući da esp8266 ne koristi “mozak” Arduina, a njegova flash memorija sasvim je dovoljna za pohranu par osnovnih biblioteka i firmwarea. Prema tome, nema smisla trošiti dodatni novac na pomoćnu ploču ako je možete jednostavno lemiti na pretvarač i dalje koristiti u projektu. Istovremeno, spajanjem pomoćnog izvora napajanja i bez brige da će se podaci prestati prenositi u najbitnijem trenutku zbog nedostatka napajanja sustava.

    Važna napomena! Za posljednji krug, postavljamo skicu na Arduino kao i obično, ali budući da je modul ESP8266 spojen na pinove 0 i 1, programiranje postaje nemoguće. Kompajler će prikazati grešku. Odspojite žice koje idu do ESP8266 s pinova 0 i 1, izvršite programiranje, a zatim vratite pinove na njihova mjesta i pritisnite tipku za resetiranje na Arduinu.

    Ovaj članak sadrži informacije o tome kako sastaviti vlastiti tenk, opremljen Web kamera i kontrolira se putem Wifi rutera.

    Potrebni materijali:

    1. Web kamera
    2. Ruter TP-Link TL-MR3020
    3. Servo pogoni SG90 - 2 kom.
    4. Platforma kamere protiv vibracija
    5. Baterija 7.2V 5000mah
    6. Baterija 5V 2000mah
    7. Nano 3.0 Atmel ATmega328
    8. L298N upravljački program motora
    9. Žice, toplinske cijevi, USB čvorište, diode i drugo.
    10. Platforma po vašem izboru, ja sam izabrao DD1-1

    Sastavljanje našeg čudovišta
    Postavljanje MR3020 rutera.
    Prije svega, počnimo s ruterom. Dugo sam razmišljao da li izabrati OR-WRT ili CyberWRT. OR-WRT je fleksibilan u postavkama, ali sva uređivanja i pravljenje vlastitih postavki obavljaju se putem terminala pomoću programa Putty. A kako sam se u tom trenutku bojao raditi preko terminala, odabrao sam gdje ima GUI Ovo je CyberWRT, plus može se spojiti putem USB priključka.
    Kako biste promijenili firmware našeg rutera, trebate preuzeti CyberWrt MR3020 firmware.

    Dok preuzimamo, radimo sljedeće:

    1) Uključite ruter i pričekajte da se učita.
    2) Idite i prijavite se na 192.168.0.254 (zadani admin\admin)
    3) Pronađite System Tools u izborniku s lijeve strane, tu je stavka System Upgrade i uploadajte firmware putem web forme
    4) Pričekajte ponovno pokretanje (oko 4 minute)
    Ruter je spreman za konfiguraciju.

    Možete odabrati jedan od načina rada:"Pristupna točka" i " Wi-Fi klijent mreže." Da biste konfigurirali način rada klijenta:
    - odaberite način rada "Klijent". Wi-Fi mreže»
    - IP adresa vašeg uređaja (vaš uređaj će biti dostupan na ovoj adresi. Pokušajte odabrati nezauzetu IP adresu. Na primjer: 192.168.1.100)
    - Maska podmreže (255.255.255.0)
    - Gateway (na primjer, vaš IP kućni ruter ili pristupnik - 192.168.1.1)
    - Vrsta enkripcije (vrsta enkripcije koja se koristi na vašoj kućnoj mreži)
    - Lozinka (lozinka za pristup vašoj kućnoj mreži)

    Ako ste sve učinili ispravno, vidjet ćete RSS liniju na dnu ekrana.

    Kada sve radi, imat ćete odjeljak modula, tamo ćete pronaći modul "ROBOT". Instalirati. Spreman.

    Povezivanje L298N, Arduino Nano, MR3020, kamere i više

    Na slici je sve jasno prikazano, ali ću za svaki slučaj napisati.

    Arduino DIGITAL 4 izlaz - na IN1 pin modula.
    Arduino DIGITAL 5 izlaz - na IN2 pin modula.
    Arduino DIGITAL 6 izlaz - na IN3 pin modula.
    Arduino DIGITAL 7 izlaz - na IN4 pin modula.
    Arduino GND izlaz - na GND terminal modula.
    Priključak GND modula - negativan pol baterije.
    Terminal modula 7,2 V - plus baterije.
    Terminal modula RM - Desni motor.
    Priključak LM modula - lijevi motor.
    USB port Arduino - Spojite se na USB čvorište
    Web kamera - spojite na USB hub
    USB čvorište - Povežite se s USB usmjerivačem

    Napajanje, da tako kažem, za logistiku, osigurava druga baterija. Kapaciteta 2000 mA/h 5v, da ne spali ruter. A s dvije baterije robot radi stabilnije. Dakle, jednostavno ga uključimo u konektor mikro USB. Preko USB huba koji je spojen na ruter, i kamera i naš Arduino već dobivaju napajanje.

    Skica za Arduino Nano
    Morate preuzeti CyberLib biblioteku, namijenjena je samo za Atmega 328.

    /* Implementirana verzija 1.5 WIFI Tanka na DD1-1: 1) Kretanje kamere u X i Y 2) Sirena 3) Svjetla 4) Zvuk kada je uključen */ #include // Uključi knjižnicu #include // Povežite knjižnicu servo pogona Servo myservo1; Servo myservo2; dugi prethodniMillis; // Potrebno za mjerač vremena int LedStep = 0; // Brojač za LED int i; #define robot_go (D4_High; D5_Low; D6_Low; D7_High;) #define robot_back (D4_Low; D5_High; D6_High; D7_Low;) #define robot_stop (D4_Low; D5_Low; D6_Low; D7_Low;) #define robot_rotation_right (D4_High; D5 _Nisko;D7_Nisko ; ). , 494, 500);) #define init (D4_Out; D5_Out; D6_Out; D7_Out; D8_Out; D13_Out;) uint8_t inByte; void setup() ( myservo1.attach(9); // Povežite servo na priključak myservo2.attach(10); // Povežite servo na priključak D11_Out; D11_Low; // Prednje svjetlo zvučnika_OFF; // Prednja svjetla su isključena prema zadanim postavkama za (uint8_t) i =0;<12; i++) beep(80, random(100, 2000)); //звуковое оповещение готовности робота init; // Инициализация портов //Buzzer; // Инициализация портов динамика UART_Init(57600);// Инициализация порта для связи с роутером wdt_enable (WDTO_500MS); } void loop() { unsigned long currentMillis = millis(); // Обновление таймера if (LedStep == 0 && currentMillis - previousMillis >500)( // Odgoda 0,5 s. previousMillis = currentMillis; // ažuriranje mjerača vremena LED_ON; // Omogući LedStep = 1; // Brojač koraka ) if (LedStep == 1 && currentMillis - previousMillis > 500)( // Odgoda 0,5 s previousMillis; // ažuriraj tajmer LED_OFF; // Isključi LedStep = 2; // Brojač koraka ) if (LedStep == 2 && currentMillis > 500)( // Kašnjenje 0,5 s. LedStep = 0; // Brojač koraka ) if (UART_ReadByte(inByte)) //Ako je nešto stiglo ( switch (inByte) // Da vidimo koja je naredba stigla ( case "x": // Zaustavljanje robota robot_stop; break; case "W" : // Kreni naprijed robot_go; break; case "D": // Pomakni se nazad robot_rotation_left; U": // Servo ide gore myservo1.write(i -= 20); case "J": // Servo ide prema dolje myservo1.write(i) += 20); slučaj "H": // Servo skreće ulijevo myservo2.write(i += 20);

    prekinuti;
    case "K": // Servo skreće desno myservo2.write(i -= 20);

    prekinuti;

    RC automobil je dobar, ali jeftini RC automobili imaju ograničen domet i njima se upravlja samo posebnim daljinskim upravljačem koji se isporučuje u kompletu.

    Kupio sam RC Jeep 4x4 s fleksibilnim ovjesom i terenskim gumama za oko 30 dolara. Nakon igranja sa strojem, odlučio sam da ga se može poboljšati Wi-Fi pomoć i Android. Nakon što sam proveo malo vremena, potpuno sam uklonio ploču iz stroja. Izmjerio sam napone na ovoj ploči i razvio sustav kontrole motora na Arduino pomoć. Izvorni kontrolni sustav ne koristi PWM za kontrolu brzine. Automobil je dizajniran za vožnju preko prepreka u vrlo niskom stupnju prijenosa i kao rezultat toga vrlo sporo. Moj krug koristi PWM.

    Već nekoliko mjeseci koristim Arduino. Također sam kupio asynclabs WiFi Sheild za Duemilanoe Arduino kako bih eksperimentirao s WiFi-jem. Dolazi s instaliranom bibliotekom Arduino IDE. Uspio sam napraviti program koji vam omogućuje kontrolu motora i smjera kretanja pomoću WiFi-ja.

    Uz pomoć Visual Studio Razvio sam programski prozor koji se spaja na poslužitelj automobila i daje mu naredbe. Zatim sam, nakon nekoliko pokušaja, napisao aplikaciju za Android koja koristi akcelerometar za upravljanje automobilom.

    Alati i elementi

    Ovaj opći popis alata i predmeta koji su korišteni u ovom projektu. Eagle dokumentacija daje točan tehničke specifikacije korištene komponente.

    Multimetar
    Lemilica
    Lem
    Odvijači
    Rješenje za jetkanje ploče
    Folija od stakloplastike
    Kliješta
    Arduino
    AsyncLabs WiFi Shield
    RJ45 konektori
    Pokretač motora H-mosta
    Kondenzatori

    Vozač motora

    Koristeći Eagle dizajnirao sam i napravio ovaj krug tiskana ploča za nju. Funkcionira kao pokretač motora i regulator snage za Arduino.
    To omogućuje korištenje standardne baterije od 7,2 V za napajanje glavnog i upravljačkog motora te Arduina.

    Ovaj krug koristi SN754410 dvostruki integrirani pokretački program H-mosta za upravljanje motorima. Kontrolne igle upravljačkog programa spojene su na RJ45 kabel koji se spaja na AsyncLabs WiFi Sheild.

    Arduino Shield

    Razvio sam koristeći biblioteku SparkFun u Eagleu Arduino Shield, kroz koji će kontakti proći do WiFi Shielda i spojiti se na pokretački program motora preko RJ45 konektora i 2 vijčane stezaljke.

    Raspored pinova RJ45 vrlo je važan. Pogreška u povezivanju može dovesti do nepredvidivih rezultata i morat ćete ponovno izraditi ploču.

    PCB jetkanje

    Ova tema je obrađena mnogo puta i neću ulaziti u detalje o njoj.
    Koristim ga i odgovara mi, a s iskustvom daje izvrsne rezultate.

    Za pričvršćivanje ploče na kućište korišten je čičak. Imao sam sreće jer... Moj auto je ispod cjevastog okvira imao puno prostora za elektroniku.
    Zaboravio sam fotografirati vezu između ploče pokretačkog motora i ostalih ploča, ali dobro je pristajala i nije zauzimala puno mjesta u kućištu.

    Program

    Moj kod možda nije dovoljno učinkovit, ali radi.

    pisaći stroj

    Uspio sam izgraditi CarServer na temelju primjera SocketServera koji sam dobio s AsynLabs Wifi Sheildom.
    Morat ćete unijeti podatke o svom bežična mreža na Arduino kod. Nakon što se stroj uključi, dajte mu 15-45 sekundi da uspostavi vezu s usmjerivačem. Crveni LED na WiFi štitu znači da je veza uspostavljena.

    Napravio sam ovaj program koristeći C# i MS Visual Studio 2008. Napravio sam lijep prozor i autom se može upravljati strelicama.

    Zašto ne biste upravljali automobilom putem telefona?

    Ova misao mi je pala na pamet otprilike tjedan dana nakon kupnje DroidX-a. Počeo sam eksperimentirati i na kraju upotrijebio Android SDK. Pronašao sam slične aplikacije koje koriste akcelerometar za kontrolu. Gledajući ove prijave, napisao sam svoju.

    Zalijepite IP i port navedene u Arduino kodu. Držite telefon vodoravno. Zatim ga nagnite od sebe da ide naprijed i prema sebi da ide unazad. Koristite svoj telefon kao volan.
    Ovo je moja prva velika Android aplikacija. Još ima nekih grešaka, ali uglavnom radi dobro.

    Vozite svoj automobil 4x4 uz WiFi u svom dvorištu!

    Sjajno sam se zabavio stvarajući ovaj projekt. Stekao sam mnogo znanja i novih vještina, a sada imam i auto 4x4 kojim se upravlja preko telefona.

    Trebam kameru koju ću postaviti iza vjetrobranskog stakla da mogu vidjeti gdje vozim. Trebao bi trošiti malo energije i također samostalno prenositi video. (Mislim da Arduino može ovo podnijeti).

    Popis radioelemenata

    Oznaka Tip Vjeroispovijest Količina BilješkaDućanMoja bilježnica
    Vozač motora
    IC1 ČipSN7544101 U bilježnicu
    Linearni regulator5 V1 U bilježnicu
    Bipolarni tranzistor

    2N3904

    1 U bilježnicu
    C1, C2 Elektrolitički kondenzator 2 U bilježnicu
    Priključak2 izlaza7 U bilježnicu
    Priključak8 iglica1 U bilježnicu
    Arduino štit
    U1 Arduino ploča 1 U bilježnicu
    T1 Bipolarni tranzistor

    2N3904

    1 U bilježnicu
    R1 Otpornik 1 U bilježnicu
    3 U$ Trimer otpornik 1 U bilježnicu
    Priključak2 izlaza2