Hallo tweakers,
Ik ben op dit moment druk bezig met mijn PWS. Hiervoor wil ik o.a. een motor aansturen door middel van een druksensor. Wanneer er hoge druk op de sensor is moet de motor een kant op draaien en wanneer er geen druk is een andere kant. Wanneer de druk gemiddeld is moet de motor stil staan. Ik gebruik hiervoor een raspberry pi 3b+ en de volgende verdere onderdelen:
- de motortjes: https://www.conrad.nl/p/j...est&searchSuggest=product
- een uitbreidingsplaat voor de raspberry: https://www.conrad.nl/p/j...h=1&vat=true&insert_kz=8J
- de druksensoren: https://www.conrad.nl/p/j...est&searchSuggest=product
- een analoog naar digitaal converter voor de sensoren: https://www.conrad.nl/p/j...est&searchSuggest=product
Verder gebruik ik nog een aantal jumpercables om alles te verbinden.
Ik heb alles correct aangesloten aan elkaar en de sensoren en motorjes werken apart van elkaar goed. Ik kan via de codes in de commandline de druk en volt van de sensor per seconde aflezen. Ook kan ik de motor laten loopen zodat deze steeds evenver naar links als naar rechts draait, en dit dan constant totdat ik de code afbreek. De vraag is nu hoe ik de twee codes van deze motorjes en sensortjes kan samenvoegen zodat wanneer de volt onder de 1 is de motor linksom draait, de volt tussen 1 en 2 is de motor stil staat en als de volt boven de 2 is rechtom draait. Het moet dus een constante loop worden die naar de voltwaarde van de sensor kijkt en hierop de motor aanpast.
De codes heb ik van internet gehaald en zo aangepast dat ze in mijn situatie werken.
Hier een foto van de setup. Je ziet de twee sensoren en twee motoren (1 met tandwiel om later iets te kunnen laten bewegen).
:strip_exif()/f/image/BWb60OAIA0SjT8MooXhyXtdQ.jpg?f=fotoalbum_large)
Ik zal hieronder de huidige codes zetten. De eerste is voor een sensor, de tweede voor een motor.
Hier de code van de motor:
Hopelijk kunnen jullie mij helpen. Alvast erg bedankt!
En mocht er extra informatie of iets nodig zijn laat het dan natuurlijk weten.
Ik ben op dit moment druk bezig met mijn PWS. Hiervoor wil ik o.a. een motor aansturen door middel van een druksensor. Wanneer er hoge druk op de sensor is moet de motor een kant op draaien en wanneer er geen druk is een andere kant. Wanneer de druk gemiddeld is moet de motor stil staan. Ik gebruik hiervoor een raspberry pi 3b+ en de volgende verdere onderdelen:
- de motortjes: https://www.conrad.nl/p/j...est&searchSuggest=product
- een uitbreidingsplaat voor de raspberry: https://www.conrad.nl/p/j...h=1&vat=true&insert_kz=8J
- de druksensoren: https://www.conrad.nl/p/j...est&searchSuggest=product
- een analoog naar digitaal converter voor de sensoren: https://www.conrad.nl/p/j...est&searchSuggest=product
Verder gebruik ik nog een aantal jumpercables om alles te verbinden.
Ik heb alles correct aangesloten aan elkaar en de sensoren en motorjes werken apart van elkaar goed. Ik kan via de codes in de commandline de druk en volt van de sensor per seconde aflezen. Ook kan ik de motor laten loopen zodat deze steeds evenver naar links als naar rechts draait, en dit dan constant totdat ik de code afbreek. De vraag is nu hoe ik de twee codes van deze motorjes en sensortjes kan samenvoegen zodat wanneer de volt onder de 1 is de motor linksom draait, de volt tussen 1 en 2 is de motor stil staat en als de volt boven de 2 is rechtom draait. Het moet dus een constante loop worden die naar de voltwaarde van de sensor kijkt en hierop de motor aanpast.
De codes heb ik van internet gehaald en zo aangepast dat ze in mijn situatie werken.
Hier een foto van de setup. Je ziet de twee sensoren en twee motoren (1 met tandwiel om later iets te kunnen laten bewegen).
:strip_exif()/f/image/BWb60OAIA0SjT8MooXhyXtdQ.jpg?f=fotoalbum_large)
Ik zal hieronder de huidige codes zetten. De eerste is voor een sensor, de tweede voor een motor.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| # SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries # SPDX-License-Identifier: MIT import time import board import busio import adafruit_ads1x15.ads1015 as ADS from adafruit_ads1x15.analog_in import AnalogIn # Create the I2C bus i2c = busio.I2C(board.SCL, board.SDA) # Create the ADC object using the I2C bus ads = ADS.ADS1015(i2c) # Create single-ended input on channel 0 chan = AnalogIn(ads, ADS.P1) # Create differential input between channel 0 and 1 # chan = AnalogIn(ads, ADS.P1, ADS.P2) print("{:>5}\t{:>5}".format("Druk", "Volt")) while True: print("{:>5}\t{:>5.3f}".format(chan.value, chan.voltage)) time.sleep(2) |
Hier de code van de motor:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
| import RPi.GPIO as GPIO import time motorPins = (7, 16, 18, 22) CCWStep = (0x01,0x02,0x04,0x08) CWStep = (0x08,0x04,0x02,0x01) def setup(): print ('Program is starting...') GPIO.setmode(GPIO.BOARD) # Numbers GPIOs by physical location for pin in motorPins: GPIO.setup(pin,GPIO.OUT) def moveOnePeriod(direction,ms): for j in range(0,4,1): #cycle for power supply order for i in range(0,4,1): #assign to each pin, a total of 4 pins if (direction == 1):#power supply order clockwise GPIO.output(motorPins[i],((CCWStep[j] == 1<<i) and GPIO.HIGH or GPIO.LOW)) else : #power supply order anticlockwise GPIO.output(motorPins[i],((CWStep[j] == 1<<i) and GPIO.HIGH or GPIO.LOW)) if(ms<3): #the delay can not be less than 3ms, otherwise it will exceed speed limit of the motor ms = 3 time.sleep(ms*0.001) def moveSteps(direction, ms, steps): for i in range(steps): moveOnePeriod(direction, ms) def motorStop(): for i in range(0,4,1): GPIO.output(motorPins[i],GPIO.LOW) def loop(): while True: moveSteps(1,3,512) time.sleep(0.5) moveSteps(0,3,512) time.sleep(0.5) def destroy(): GPIO.cleanup() if __name__ == '__main__': setup() try: loop() except KeyboardInterrupt: destroy() |
Hopelijk kunnen jullie mij helpen. Alvast erg bedankt!
En mocht er extra informatie of iets nodig zijn laat het dan natuurlijk weten.