Kazalo:
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
Pri izdelavi prototipov ali izdelavi modelov letal pogosto naletite na težavo, da morate preveriti potovanje servomotorja ali nastaviti servomotorje v srednji položaj.
Če ne želite zgraditi celotnega RC sistema ali preizkusiti, kako daleč lahko potisnete servo ali kje je sredina, potem je ta plošča za vas! Omogoča vam premikanje servo v določene položaje ali pa potujmo naprej in nazaj.
Deluje presenetljivo dobro, tudi pri 6 servomotorjih, ki tečejo od enega položaja do drugega.
Prav tako je lep projekt za spoznavanje komunikacije med Python-GUI in Arduinom z uporabo Serial.
Korak: Kaj potrebujete …
Za ta projekt boste potrebovali naslednje:
Strojna oprema
- Arduino nano s kablom. Uporabil sem klon in koda Python dejansko pričakuje CH340-čip klona
- Plošča za izdelavo prototipov. 7x5 cm je dovolj
- Nekaj 2, 54 mm glave in zatiči
- 1-6 servomotorjev
- Napajanje za servomotorje (uporabil sem paket baterij s 4 baterijami)
Programska oprema
- Python 3:
- Gonilnik USB za čipe CH340: Poiščite google za gonilnike za CH340 gonilnike
- Arduino IDE:
2. korak: Spajkanje plošče
Spajkanje je pravzaprav naravnost naprej, glede na Fritzinga na sliki. Prepričajte se, da lahko servomotorje enostavno priključite na 3-polne vrstice.
- 3-polne vrstice so pritrjene na digitalni pin 3, 5, 6, 9, 10 in 11 Arduino nano.
- Rdeča žica je pritrjena na 5V pin Arduina
- Črna žica je priključena na GND-pin Arduina
- Par nožic pod 3-polnimi vrstami je namenjen priključitvi tipičnega napajalnika RC-sprejemnika, po želji lahko dodate konektorje, na primer vijačne sponke, priključke XT, JST ali… ali…
Osebno so mi všeč vrstice ženskih glav, v katere bi vstavil Arduino, toda to je odvisno od vas.
Upoštevajte, da so kratki ženski vodi mostički, ki omogočajo napajanje servomotorja z uporabo 5V vira Arduina za namene testiranja. Če ga preveč naprežete, se bo Arduino ponastavil in izgubil pravo hitrost. MORATE jih odstraniti, preden priključite drug napajalnik.
3. korak: Nastavitev Arduina
Namestite Arduino IDE in utripajte Arduino nano s priloženo skico.
4. korak: Nastavitev Pythona
Namestite Python 3 po prenosu. Preverite možnost, da ustvarite spremenljivko »PATH«.
S pipom morate namestiti še dva paketa. V ta namen pritisnite tipko "Windows", vnesite "cmd" in pritisnite "enter". V ukazni poziv vnesite naslednje ukaze:
- pip install serijski
- piip namestite pyserial
- pip namestite tkinter
Kot lahko vidite, potrebujem tako serijske module kot tudi pyserial, kar najverjetneje ni najučinkovitejše, saj bi moral pyserial nadomestiti serijo. Kljub temu deluje in šele začenjam se učiti;).
Odprite Python-Script v IDE-ju in ga zaženite ali zaženite naravnost iz terminala.
V spustnem meniju lahko izbirate med dvema načinoma, "Pojdi naravnost" in "Ping Pong":
- Pojdi naravnost: V prvi stolpec vnesite položaj servo v mikrosekundah in pritisnite »Start«, da se servo pomakne na določen položaj.
- Ping Pong: Vnesite spodnjo in zgornjo mejo v drugi in tretji stolpec. To sta spodnji in zgornji položaj, med katerima se bo servo pomikal naprej in nazaj. V stolpcu "Čas za namizni tenis" lahko v milisekundah določite čas, ko bo servo čakal, ko bo dosegel zgornji ali spodnji položaj. Pritisnite "Start" in servo se bo začel premikati naprej in nazaj, pritisnite "Stop" in servo se bo ustavil.
5. korak: Kjer se zgodi čarovnija
Nenazadnje bi rad opozoril na nekatere podrobnosti kode za tiste, ki se želijo spustiti v serijsko komunikacijo med Pythonom in Arduinom.
Kaj se zgodi v programu Python?
Najprej program preveri, kaj je v tej vrstici priključeno na vrata COM in ga shrani na seznam:
self. COMPortsList = seznam (serial.tools.list_ports.comports ())
Nato se po seznamu vrti, dokler ne najde razvpitega čipa CH340, ga shrani in nato po for-zanki vzpostavi serijsko povezavo. Upoštevajte, da se zanka for prekine takoj, ko najdemo prvi CH340.
for p in self. COMPortsList: if "CH340" in p [1]: # Iščem Arduino Clone self. COMPort = p [0] break else: pass self. Ser = serial. Serial (self. COMPort, 57600)
Zaporedna povezava je vzpostavljena s COM-vrati s hitrostjo prenosa 57600.
In kaj počne koda Arduino? No, ker ima Arduino samo eno COM-Port, je serijska povezava samo ena vrstica:
Serial.begin (57600);
Zdaj lahko za komunikacijo uporabimo oba vrata. V tem primeru samo sporočila iz Pythona v Arduino. Sporočila so poslana sem iz Pythona. Serijska povezava privzeto prenaša bajte. To je tudi najhitrejši način pošiljanja podatkov in kolikor vem, je še vedno zelo razširjen. Tako se črte za številko servomotorja (tako Arduino ve, kateri strežnik premakniti) in položaj v mikrosekundah spremenijo v bajt.
Command = struct.pack ('> B', self. Place) # Int-spremenljivka "self. Place" se spremeni v bajt
self. Ser.write (Command) # Pisanje bajta na ukaz Serial-Port = int (self. ServoPos.get ()) // 10 # Branje vnosa iz polja in vnos int Command = struct.pack (' > B ', Command) # Pretvorba int v bajtu self. Ser.write (Command) # Pisanje bajta na serijska vrata
Tudi razčlenjevanje podatkov traja nekaj časa (na primer razlaga štirih bajtov »1«, »2«, »3« in »0« kot int 1230, ne kot štiri različne znake), zato je bolje, da tega ne storite na Arduinu.
Na strani Arduino se poslane informacije zberejo na naslednji način:
if (Serial.available ()> 1) {// Če so na voljo serijski podatki, se vnese zanka c = Serial.read (); // Prvi bajt (število servo) se shrani v spremenljivko Micros = Serial.read (); // Položaj servomotorja je shranjen tukaj Micros = Micros * 10; }