Permalänk
Medlem

Raspberry Pi2 GPIO

Hej!
Köpte en RPi2 med 40 pinnar. Har en Ri 1 B tidigare men de 17 användbara GPIO pinnarna räckte inte till. Använder en GPIO pinne till att styra en servomotor som i sin tur vrider ett spjäll på en fläkt till olika förbestämda lägen.

På g:a pajen å med Python2.7 så anropade jag bla "servo" samt "PWM". Funkade kanon.
Men se de funktionerna finns inte än vad jag kunde hitta/se i nya. PWM gick att trolla fram å körde med olika DutyCycle/frekvens men motorn fick "jitter" å blev nästan varm. Ingen hållbar lösning. Kunde inte heller precisera lägena.

Provade att köra "servo" från g:a RPIO.GPIO men det funkar inte då den var ju skriven för annan hårdvara. I den nya RPi.GPIO finns den alltså inte med.

Läste så sent som idag på Pajens hemsida att i början på juni har någon börjat ta tag i detta problem. Det skall finnas även två GPIO pinnar som är direkt dedikerade till PWM, men hittar inte vilka å inga "moduler" till det.

Fråga, äre nån därute som jobbar med detta å har en lösning? att köra pwm på servomotor utan att den får "jitter", motorn skall efter utförd vridning stå stilla utan signal in till den så att säga.

För övrigt så klockade jag upp pajen till det sista alternativet P2 å det blev märkbart snabbare. Filen heter rasbian-config. Den som kommer upp automatiskt vid första installationen.
Kör med Sandic SD Micro 16 G å class tio hastighet minne. LG 24" skärm å trådlös tangentbord-mus. WiFi direkt i ett av USB kontakterna, alla anda i en "grenkontakt". Allt funkar kanon. Till HDMI har jag kopplat en omvandlare till VGA köpt hos Kjelle&co, ca 250:-

Att datorn för övrigt är en helt vanlig skrivbordsdator med allt klart är så uppenbart så det behöver jag inte ens nämna.

Permalänk
Visa signatur

Jag är inte bäst, Men det är inte du heller!

Permalänk
Medlem

@Artichost:
Tack, just den har jag kollat. (Å en massa annat) Enda lösning tycks vara att köra pigpio först, starta samtidigt med Raspen.
Körde tidigare RaspberryPi vers 1 B samt Raspbian Wheezzy å Python 2.7
Då funkade detta alldeles utmärkt:

import time
from RPIO import PWM
servo = PWM.Servo()
# PW increments: 10us
servo.set_servo(18, 2120)
time.sleep(2)
servo.set_servo(18, 1780)
time.sleep(3)
servo.set_servo(18, 1670)
time.sleep(3)
servo.set_servo(18, 1400)

Men sedan i RPi2 B funkar det inte. Har att göra med RPi.GPIO som är olika RPIO.GPIO. Suck. Hade jag vetat om det hade jag inte köpt nya RPi2:an Det blir väldigt bökigt å en massa extra att få till det med pigpio å jag är ute i gränslandet för mina kunskaper där, å måste köra en massa test först dessutom.
Är lite inne på att gå tillbaka till vers 1 å köpa till "pinnar" från en tillsats. De av de 26 tillgängliga 17 pinnarna räcker inte till, behöver minst 21-21 st .

Frågan är om vers 1 men med B+, som ju har fått 40 pinnar, om det går att köra som tidigare. Någon som vet?

Kan berätta att servon styr ett spjäll på en fläkt i ett värmesystem.

Permalänk
Visa signatur

Jag är inte bäst, Men det är inte du heller!

Permalänk
Medlem

Tack för tipset, nu får ni inte skratta, men jag har redan en Arduino Mega 2560.
Grejen är att jag kan inte programmera i C+ har bara kört lite Pascal för många år sedan å har ingen kompis/vän som kan hjälpa mig med programmeringen av Arduinon.
Det blev en RPi å Python språket för det klarar jag,.......troddde jag.......
Men......skulle någon vänlig själ läsa detta å som kan ställa upp å hjälpa mig med att skriva programmet så kan jag ändra mig. Problemet är- finns denna någon? Å jag har inte möjlighet att ge ersättning annat än ett stort tack.

Skall försöka testa lite om/med pigpio som tycks köra med Diekt Memory Access, DMA å då kan man kanske köra mjukis PWM men utan att servomotorn får "jitter" Ett annat alternativ som jag inte undersökt än är att när servon fått sin signal helt enkelt "stänga" av motsv GPIO tråd så blir motorn kvar i sitt läge utan "jittter". Men hela den tankegångne känns lite fel på något vis, nödlösning. Sedan kan hända att det kommer upp nått så småningom.
Men snälla, om någon har en lösning på detta problem, jag tycks def. inte vara den enda som trillat dit på detta, så hör av er. Helst på svenska.
Tackar å hälsar,
Zither

Permalänk
Medlem

Är ingen expert direkt, men jag har använt pigpio Python som hastigast. Vad är det du vill ha hjälp med mer exakt?

Visa signatur

AMD Ryzen 7 5800X | 32 GB Corsair Vengeance 3200 MHz | ASUS TUF Geforce RTX 3080

Permalänk
Medlem

Hej L´ombra!
Tusen tack för ditt svar. vad jag behöver? Tja....allt. Men okej. ...

Hur tankar jag hem å installerar pigpio i Raspen? Behöve exakta "ord" /stavning å sudo mm, det är ju så hyperkänsligt för alla kommandonn å så.

Hur får jag Raspen att "starta" pigpio så att den är liksom i beredskap när mitt egentliga program behöver det.

Hur vet jag vad som skall anropas/skrivas osv så att servomotorn skall kunna göra sitt jobb? pigpio innehåller vist flera olika "saker"

Sedan själva programsnutten som vrider motorn till önskade lägen, får den att stanna där utan "jitter" tills den skall ställa sig i ett annat läge på ett annat anrop från "huvudprogrammet"

Det var väl allt, en hel del som jag behöver hjälp med.
Mitt eget inlägg ovanom med programlistningen fungerade med Raspen 1:an å Python 2.7. Det är en "demosnutt" men den klarade jag av att "anropa" från huvudprogrammet. Då utan massa time förstås.

I början på huvudprogrammet som har en jätteloop där det mesta körs skriver jag före loopen

import time
from RPIO import PWM
servo = PWM.Servo()

Samt fixar GPIO numren å sånt.
Sedan när det är dags att ställa spjället i ett visst läge så hämtar jag in en def sats som bara innehåller tex:

servo.set_servo(18, 2120)

Pinnen 18 kan vara fördefinierad i GPIO, måste inte vara just 18, å värdet 2120, som jag måste prova ut empiriskt, kan jag köra som en variabel för att spara programminne mm. Annars så kommer programmet att ställa spjället som mest upp till ½ timma efter start å sedan ligger det i stort sätt stilla tills jag stänger av det hela. Så det är inte så mycket vinst med att ändra positionen 2120 till en variabel i sig men snyggare å överskådligare program.

Motorn är en Futaba S3003 å är förvånansvärt stark å körs på 5V= med separat matning. Den är redan monterad på centrum på spjäll-axeln. I strömlöst tillstånd kan den vridas jätte lätt manuellt. Sitter bergfast när spänningssatt. Den skall helst vara aktiverad på ett sätt så den inte "drar"/jobbar alls utan väntar i ett låst läge på nästa kommando. Stänga av GPIO pinnen helt kanske efter slutfört vridning varje gång?

Så, vill du å kan du ev hjälpa mig med detta?
Blir dig evigt tacksam.

Zither

Permalänk
Medlem

Då ska vi se!

Minns inte exakt hur jag installerade, men troligen följde jag instruktionerna här.

wget abyz.co.uk/rpi/pigpio/pigpio.zip unzip pigpio.zip cd PIGPIO make make install

Detta installerar pigpio-daemonen och tillhörande Python-modul. (med mera?)
Sedan behöver du bara starta daemonen en gång innan du ska börja köra dina skript.

sudo pigpiod

Kan lämpligtvis konfigureras att köra automatiskt vid uppstart. (t ex genom att lägga in raden i /etc/rc.local, men en del ogillar tydligen den metoden av någon anledning)

I ditt skript behöver du sedan först göra följande för att skapa en pigpio-"klient" du använder dig av i resten av skriptet:

import pigpio pi = pigpio.pi()

PWM kan jag tyvärr inte hjälpa dig med, men det verkar ju finnas en del funktioner för det. Du får se om du hittar något som verkar relevant, och kanske experimentera lite.
http://abyz.co.uk/rpi/pigpio/python.html

Visa signatur

AMD Ryzen 7 5800X | 32 GB Corsair Vengeance 3200 MHz | ASUS TUF Geforce RTX 3080

Permalänk
Medlem

Tausen tack L´ombre.
Snabb du var. Skall testa snarast å återkommer.
Jon nånting, en person som verkar tillhöra Raspen å Python gänget, verkar som om han även skrivit pigpio?, har sagt att det skall gå med PWM under pigpio. Så vi får se.

Vad händer om jag i mitt program som första åtgärd skriver kommandot :
sudo pigpio
med ev komplettering av att stå i rätt bibliotek osv. Då behöver jag inte ha med det vid uppstart av Raspen? Nu anvöänds Raspen i.o.f.s bara till detta speciella ändamålet så jag kan kanske lika gärna ha med det vid kallstart.
Tack å hälsningar,
Zither

Permalänk
Medlem
Skrivet av Zither:

Tausen tack L´ombre.
Snabb du var. Skall testa snarast å återkommer.
Jon nånting, en person som verkar tillhöra Raspen å Python gänget, verkar som om han även skrivit pigpio?, har sagt att det skall gå med PWM under pigpio. Så vi får se.

Vad händer om jag i mitt program som första åtgärd skriver kommandot :
sudo pigpio
med ev komplettering av att stå i rätt bibliotek osv. Då behöver jag inte ha med det vid uppstart av Raspen? Nu anvöänds Raspen i.o.f.s bara till detta speciella ändamålet så jag kan kanske lika gärna ha med det vid kallstart.
Tack å hälsningar,
Zither

Ja, det är joan som ligger bakom pigpio om jag har förstått det rätt!

Det borde gå bra att starta pigpio-daemonen samtidigt som ditt skript. Du behöver ett separat Bash-skript bara då.

Visa signatur

AMD Ryzen 7 5800X | 32 GB Corsair Vengeance 3200 MHz | ASUS TUF Geforce RTX 3080

Permalänk
Medlem

Tack, jaha, där körde det ihop sig direkt.

pigpio-deamon, spöken? Deamon? Som jag fattat det rätt så är det nått man startar samtidigt som man kallstartar Raspen. Men hur?

Å om jag startar "spöket" samtidigt med programmet, inte vid kallstart av datorn, äre jag behöver ett bash script?
Å vad är det? Är bash ungefär som som på gamla tiden före windows man skrev en tex autoexec.bat el andra *.bat filer?
Hur anropar jag det inifrån programmet?

Sedan blir jag inte klok på det här med script. För jag har sett i listningar på frågor/svar lite här å var att en del skriver i Python medan andra har ett "script" Man ser skillnaden i syntaxerna bla. Å då vet jag inte, äre "Java-script" eller "Raspberry Pi script" eller vaddå? Här har jag inga kunskaper. Att skriva ett skript för att få Linuxet/Debian i botten på Raspen, dvs Raspbian op systemet, se det har jag inte gjort å är inte hemma på det. Har bara aningar om principen.

Men nu är jag upptagen ett tag så jag kan inte testa förrän mitten nästa vecka. Ber att få återkomma då om jag fastnar.
Tack för all hjälp så här långt.

Permalänk
Medlem

En daemon är Linux motsvarighet till Windows tjänster (services) och är inget annat än ett (ofta mer eller mindre passivt) program som körs i bakgrunden. De brukar mycket riktigt startas vid systemuppstart.

pigpio-daemonen behöver köras för att du ska kunna använda pigpio i ditt Python-skript. Det var den du startade med hjälp av följande kommando:

sudo pigpiod

Ett skript är inget annat än ett program när man talar om källkoden. Möjligtvis ett enklare program. Du kanske blandar ihop Bash och Batch (som Windows-varianten heter), men ja, de är väldigt liknande till principen utöver namnet. Bash är det "språket" du använder dig av när du skriver kommandon i terminalen, och du kan skriva Bash-skript (ibland "skalskript", "Shell-skript") genom att helt enkelt skriva in i en fil kommandona som du vanligtvis gör, och spara den med filändelsen .sh. (inte för att det spelar någon roll egentligen) Du kan t ex skriva följande skalskript:

cd ~ ls -l

och sedan köra det genom att skriva

bash filnamn

precis som du gör motsvarande för att köra Python-skript. Om du då vill starta pigpio-daemonen manuellt samtidigt som ditt program, skulle du t ex kunna skriva följande skalskript:

sudo pigpiod python dittprogram.py

Sedan startar du allt genom att köra det skriptet.

Du hade kanske kunnat startat pigpio-daemonen inifrån programmet, men det hade blivit lite fult tycker jag.

Visa signatur

AMD Ryzen 7 5800X | 32 GB Corsair Vengeance 3200 MHz | ASUS TUF Geforce RTX 3080

Permalänk
Medlem

Okej, nu har det klarnat. Tack igen.
Återkommer när jag testat