Deze teller is bedoeld om 230V pulsen te tellen. Als de voedingsspanning wegvalt blijft de telwaarde behouden. Met een knopje kan deze wel gereset worden.
Schema:
Als de voedingsspanning wegvalt dan gaat de optocoupler uit geleiding. Daardoor gaat de pic in interrupt en daar word de telwaarde naar de eeprom weggeschreven.
Dit is een projectje dat ik een paar jaar geleden in school voor een projectweek samen met 2 klasgenoten heb gebouwd .
De plastic onderdelen en de printplaten (bouwkit) zijn aangekocht. Onze opdracht was de printplaten solderen en het programma schrijven.
In normale werking loopt de hexavoider rechtdoor. Dit gebeurt door de linkse kant omhoog te halen. Rechts wordt dan naar voor gedaan en links wordt naar achter gedaan. Dan wordt de andere kant omhoog gedaan. Links wordt dan naar voor gedaan en rechts naar achter. Zo stapt hij vooruit.
De HexAvioder heeft 2 soorten detectoren: de voelsprieten en de IR sensoren. Als de voelsprieten worden bediend gaat deze eerst achteruit en vervolgens draait hij naar de andere kant als van waar hij detecteerde. Hetzelfde is als de IR-sensoren iets detecteren. Eerst achteruit en dan draaien, dit is wel in een vaste richting aangezien we maar 1 IR-ontvanger hebben.
Filmpje van de HexAvoider in actie:
Code (Bascom):
'*************************************************
'* HexAvoider *
'* Stijn Coenen, Rob Thomas, Stijn van Roy *
'* 3ELO2 *
'*************************************************
$regfile = "89C51RC.dat"
'Kristal = 11Mhz
$crystal = 11059200
'*************************************************
'In en uitgangen aanduiden
Config Servos = 3 , Servo1 = P1.5 , Servo2 = P1.6 , Servo3 = P1.7 , Reload = 100
Led1 Alias P0.0
Led2 Alias P0.1
Led3 Alias P0.2
Led4 Alias P0.3
Buzzer Alias P0.5
Switch1 Alias P0.4
Switch2 Alias P0.5
Links_antenne Alias P3.2
Recht_antenne Alias P3.3
Led_antenne Alias T0
Irled_left Alias P1.0
Irled_right Alias P1.1
Irin Alias P1.2
Led_left Alias P1.3
Led_right Alias P1.4
Dim index As Byte
'*************************************************
'Subroutines
'Subroutines skippen bij opstarten programma
GoTo Oversub
'*************************************************
'Ir leds laten knipperen
Ir_led_sturen:
For index = 0 To 100
Irled_left = 1
Irled_right = 1
delay
Irled_left = 0
Irled_right = 0
Delay
Next
Return
'*************************************************
'Als er links gedetecteerd is
Links_detect:
Led1 = 0
GoSub Servo_mid
GoSub Achteruit
GoSub Achteruit
Waitms 2000
GoSub Servo_mid
GoSub Rechts_draai
GoSub Rechts_draai
Led1 = 1
Return
'*************************************************
'Als er rechts gedetecteerd is
Rechts_detect:
Led2 = 0
GoSub Servo_mid
GoSub Achteruit
GoSub Achteruit
Waitms 2000
GoSub Servo_mid
GoSub Links_draai
GoSub Links_draai
Led2 = 1
Return
'*************************************************
'Alle servo's in de middenstand zetten
Servo_mid:
Servo1 = 12
Servo2 = 12
Servo3 = 12
Return
'************************************************* 'Achteruit lopen
Achteruit:
'links omhoog
Servo2 = 16
Waitms 350
'links naar achter
Servo3 = 8
Waitms 350
'links naar voor
Servo1 = 8
Waitms 350
' rechts omhoog
Servo2 = 8
Waitms 350
'rechts naar achter
Servo1 = 16
Waitms 350
'links naar voor
Servo3 = 16
Waitms 350
Return
'*************************************************
'Naar rechts draaien
Rechts_draai:
'links omhoog
Servo2 = 16
Waitms 350
'links naar voor
Servo3 = 14
Waitms 350
'rechts naar voor
Servo1 = 8
Waitms 350
'rechts omhoog
Servo2 = 8
Waitms 350
'rechts naar achter
Servo1 = 14
Waitms 350
'links naar achter
Servo3 = 8
Waitms 350
Return
'*************************************************
'Naar links draaien
Links_draai:
'links omhoog
Servo2 = 16
Waitms 350
'links naar achter
Servo3 = 8
Waitms 350
'rechts naar voor
Servo1 = 14
Waitms 350
'rechts omhoog
Servo2 = 8
Waitms 350
'rechts naar voor
Servo1 = 8
Waitms 350
'links naar voor
Servo3 = 14
Waitms 350
Return
'*************************************************
'Sensoren checken
Sensor_check:
'Linkse antenne
If Links_antenne = 0 Then
GoSub Links_detect
End If
'Rechtse antenne
If Recht_antenne = 0 Then
GoSub Rechts_detect
End If
'IR-Leds
GoSub Ir_led_sturen
If Irin = 0 Then
GoSub Rechts_detect
End If
Return
Oversub:
'*************************************************
'Servo's in de middenstand zetten
GoSub Servo_mid
Do
'rechts omhoog
Servo2 = 8
Waitms 350
If Links_antenne = 0 Then
GoSub Links_detect
End If
If Recht_antenne = 0 Then
GoSub Rechts_detect
End If
GoSub Ir_led_sturen
If Irin = 0 Then
GoSub Rechts_detect
End If
'Links naar achter
Servo3 = 10
Waitms 350
If Links_antenne = 0 Then
GoSub Links_detect
End If
If Recht_antenne = 0 Then
GoSub Rechts_detect
End If
GoSub Ir_led_sturen
If Irin = 0 Then
GoSub Rechts_detect
End If
'Rechts voor
Servo1 = 8
Waitms 350
If Links_antenne = 0 Then
GoSub Links_detect
End If
If Recht_antenne = 0 Then
GoSub Rechts_detect
End If
GoSub Ir_led_sturen
If Irin = 0 Then
GoSub Rechts_detect
End If
'links omhoog
Servo2 = 16
Waitms 350
If Links_antenne = 0 Then
GoSub Links_detect
End If
If Recht_antenne = 0 Then
GoSub Rechts_detect
End If
GoSub Ir_led_sturen
If Irin = 0 Then
GoSub Rechts_detect
End If
'rechts naar achter
Servo1 = 15
Waitms 350
If Links_antenne = 0 Then
GoSub Links_detect
End If
If Recht_antenne = 0 Then
GoSub Rechts_detect
End If
GoSub Ir_led_sturen
If Irin = 0 Then
GoSub Rechts_detect
End If
'Links Naar Voor
Servo3 = 14
Waitms 350
If Links_antenne = 0 Then
GoSub Links_detect
End If
If Recht_antenne = 0 Then
GoSub Rechts_detect
End If
GoSub Ir_led_sturen
If Irin = 0 Then
GoSub Rechts_detect
End If
Loop
'*************************************************
End
Dit is een projectje dat ik een paar jaar geleden in school voor een projectweek samen met 2 klasgenoten heb gebouwd .
Het chassis en de printen van de cruiser micromouse zijn aangekocht, het programma hebben we zelf geschreven. De functie van dit robotje is een doolhof doorlopen.
Om de auto’s te testen hebben we een circuit gemaakt. Dit is zo gemaakt dat aan de ene zijde een doolhof is en aan de andere kant een lijn voor de lijnvolger.
Filmpje van de cruiser in actie:
Code (Bascom):
'*************************************************
'* Cruiser micromouse *
'* Stijn Coenen, Rob Thomas, Stijn van Roy *
'* 3ELO2 *
'*************************************************
$regfile = "m8def.dat"
'Aangeven dat het intern kristal
'op 8MHz is ingesteld
$crystal = 8000000
'**********************************
'In en uitgangen instellen
Config Portd.0 = Output
Config Portd.1 = Output
Config Portd.2 = Output
Config Portd.3 = Input
Config Portd.4 = Input
Config Portd.5 = Output
Config Portd.6 = Output
Config Portd.7 = Output
Config Portc.6 = Input
Config PORTB = Output
'**********************************
'In en uitgangen declareren
Led0 Alias Portd.0
Led1 Alias Portd.1
Led2 Alias Portd.2
Selectt Alias Portd.3
Modee Alias Portd.4
Sensor0 Alias Portd.5
Sensor1 Alias Portd.6
Sensor2 Alias Portd.7
Resett Alias Portc.6
Motor_en Alias PORTB.0
L_motor Alias PORTB.1
R_motor Alias PORTB.2
Led3 Alias PORTB.3
Led4 Alias PORTB.4
Led5 Alias PORTB.5
Buzzer Alias PORTB.6
'**********************************
'Byte's declareren
Dim Temp_register As Long
Dim Rechts_achter As Bit
Dim Rechts As Bit
Dim Rechts_voor As Bit
Dim Links_voor As Bit
Dim Links As Bit
Dim Links_achter As Bit
Dim I As Byte
Dim Led_bit As Bit
Dim Vanvoor As Bit
Dim Motorwaarde As Byte
Dim Muurbit As Bit
Dim Teller As Byte
'***********************************
'Analoge ingang instellen
Config Adc = Single , Prescaler = Auto
Start Adc
'***********************************
'Timer0 instellen (Voor de IR leds aan te sturen)
Config Timer0 = Timer , Prescale = 64 , Reference = External
'Prescaled kloksnelheid: 8000000 / 64 = 125 Khz
'Waarde die in timer0 wordt gezet bij een
overflow
Const Preload = 248
'************************************
'Interrupt's aanzetten
Enable Interrupts
Enable Timer0
On Timer0 Interupt_label
'************************************
'Subroutines
'Subroutines skippen bij opstarten programma
GoTo Overint
Interupt_label:
'IR leds van de sensoren aansturen
If Led_bit = 0 Then
Sensor0 = 1
Sensor1 = 1
Sensor2 = 1
Led_bit = 1
Else
Sensor0 = 0
Sensor1 = 0
Sensor2 = 0
Led_bit = 0
End If
'De preload waarde terug in Timer0 zetten
Timer0 = Preload
'Motor PWM
Incr Motorwaarde
If Motorwaarde < 32 Then
Motor_en = 1
Else
Motor_en = 0
If Motorwaarde = 64 Then
Motorwaarde = 0
End If
End If
Return
'*******************************************
Buzzer_aanst:
For I = 0 To 100
Buzzer = 1
Waitus 100
Buzzer = 0
Waitms 1
Next
Return
'**********************************************
'Analoge ingangen inlezen en omzetten naar bits
Analoog_in:
Start Adc
Temp_register = Getadc(5)
If Temp_register > 40 Then
Rechts_achter = 1
Led5 = 0
Else
Rechts_achter = 0
Led5 = 1
End If
Temp_register = Getadc(4)
If Temp_register > 60 Then
Rechts = 1
Led4 =
Else
Rechts = 0
Led4 = 1
End If
Temp_register = Getadc(3)
If Temp_register > 60 Then
Rechts_voor = 1
Led3 = 0
Else
Rechts_voor = 0
Led3 = 1
End If
Temp_register = Getadc(2)
If Temp_register > 60 Then
Links_voor = 1
Led2 = 0
Else
Links_voor = 0
Led2 = 1
End If
Temp_register = Getadc(1)
If Temp_register > 40 Then
Links = 1
Led1 = 0
Else
Links = 0
Led1 = 1
End If
Temp_register = Getadc(0)
If Temp_register > 40 Then
Links_achter = 1
Led0 = 0
Else
Links_achter = 0
Led0 = 1
End If
Return
'**************************************
Overint:
'Motors opzetten
L_motor = 1
R_motor = 1
Do
GoSub Analoog_in
If Links = 1 Then
R_motor = 0
L_motor = 1
'Rechts draaien tot dat links niks
'meer gedetecteerd wordt
Do
GoSub Analoog_in
Loop Until Links = 0
L_motor = 1
R_motor = 1
Teller = 0
ElseIf Rechts = 1 Then
R_motor = 1
L_motor = 0
'Links draaien tot dat rechts niks
'meer gedetecteerd wordt
Do
GoSub Analoog_in
Loop Until Rechts = 0
L_motor = 1
R_motor = 1
Teller = 0
ElseIf Links_voor = 1 Then
R_motor = 0
L_motor = 1
Waitms 260
'Links draaien tot dat vanvoor niks
'meer gedetecteerd wordt
Do
GoSub Analoog_in
Loop Until Links_voor = 0
L_motor = 1
R_motor = 1
Teller = 0
End If
'Als het programma 30 keer doorlopen is
'zonder dat er iets gedetecteerd is
'dan kort naar links draaien
Incr Teller
If Teller = 30 Then
Waitms 20
R_motor = 1
L_motor = 0
Waitms 30
L_motor = 1
R_motor = 1
Waitms 10
Teller = 0
End If
Loop
'******************************************
End
Dit is een projectje dat ik een paar jaar geleden in school voor een projectweek samen met 2 klasgenoten heb gebouwd .
Nadat we de Cruiser Micromouse hadden gemaakt hadden we een sensor printje voor een lijnvolger over. De school had nog een chassis voor een zelfde robotje dus hebben we beslist om ook maar een lijnvolger te maken. De aansturingsprint hebben we zelf ontworpen, deze keer op basis van een PIC16F876A.
De lijnvolger moet de lijn volgen. Dit gebeurt doordat de sensoren, die voor op de robot zitten, infrarood licht uitzenden naar de ondergrond. Het infrarode licht wordt gereflecteerd door de ondergrond en wordt opgevangen door fototransistoren. Die zijn aangesloten op de analoge ingangen van de PIC. Als de waarde van die ingangen kleiner is dan een ingestelde waarde dan is de ondergrond wit. Als er links of rechts gedetecteerd wordt dan gaat de robot bijsturen. De buitenste sensoren worden niet gebruikt omdat hier nooit wordt gedetecteerd.
Op het zelfgemaakt printje zitten 4 groene ledjes: Led 1 is de power led, led 2 gaat aan als er naar rechts gedraaid wordt, led 3 bij vooruit rijden en led 4 bij links draaien.
Schema main print:
Schema sensor print:
Filmpje van de lijnvolger in actie:
Code (Picbasic):
'*************************************************
'*Naam : Lijnvolger *
'*Auteurs: Coenen Stijn, Thomas Rob,van Roy Stijn*
'*Datum : 18/02/2009 *
'*************************************************
Device 16F876A
Config WDT_OFF, PWRTE_ON, HS_OSC, lvp_off
XTAL = 20
Declare ADIN_RES 10 ' 10-bit result required
Declare ADIN_TAD FRC ' RC OSC chosen
Declare ADIN_STIME 50 ' Allow 50us sample time
Dim sensor_waarde As Word
Dim detect_links2 As Bit
Dim detect_links1 As Bit
Dim detect_midden As Bit
Dim detect_rechts1 As Bit
Dim detect_rechts2 As Bit
ADCON1 = %10000010
'
Symbol sensorRU = PORTA.0
Symbol sensorRB = PORTA.1
Symbol sensorM = PORTA.2
Symbol sensorLB = PORTA.3
Symbol sensorLU = PORTA.5
TRISA=1
'
Symbol IR_led1 =PORTB.2
Symbol IR_led2 =PORTB.3
Symbol IR_led3 =PORTB.4
Symbol led4 = PORTB.5
Symbol led3 = PORTB.6
Symbol led2 = PORTB.7
TRISB = 0
'
Symbol motor1A = PORTC.7
Symbol motor1B = PORTC.6
Symbol motor2A = PORTC.5
Symbol motor2B = PORTC.4
TRISC=0
'
Symbol motor_en = PORTC.2
'
Clear
'
HPWM 1,190,1221
motor1A = 0
motor1B = 0
motor2A = 0
motor2B = 0
DelayMS 3000
'**********************************************
'afstemmen van IRled's en sensoren.
'Kijken welke led er wanneer 1 is.
GoTo over_sub
sensorinl:
'*************************************
'* L2 **** L1 * L0 * R0 * R1 **** R2 *
'*************************************
' A4 A3 A2 A1 A0
' 15 15 30 20 70
sensor_waarde = ADIn 0
If sensor_waarde < 70 Then
detect_links2 = 1
Else
detect_links2 = 0
EndIf
sensor_waarde = ADIn 1
If sensor_waarde < 15 Then
detect_links1 = 1
Else
detect_links1 = 0
EndIf
sensor_waarde = ADIn 2
If sensor_waarde < 30 Then
detect_midden = 1
Else
detect_midden = 0
EndIf
sensor_waarde = ADIn 3
If sensor_waarde < 15 Then
detect_rechts1 = 1
Else
detect_rechts1 = 0
EndIf
sensor_waarde = ADIn 4
If sensor_waarde < 15 Then
detect_rechts2 = 1
Else
detect_rechts2 = 0
EndIf
Return
'**********************************************
'Vooruit gaan
vooruit:
motor1A = 0
motor1B = 1
motor2A = 1
motor2B = 0
led2 = 0
led3 = 1
led4 = 0
Return
'**********************************************
'een stuk naar links draaien
Links_draaien_weinig:
motor1A = 0
motor1B = 0
motor2A = 1
motor2B = 0
led2 = 0
led3 = 0
led4 = 1
DelayMS 5
GoSub vooruit
Return
'**********************************************
'een stuk naar links draaien
Rechts_draaien_weinig:
motor1A = 0
motor1B = 1
motor2A = 0
motor2B = 0
led2 = 1
led3 = 0
led4 = 0
DelayMS 5
GoSub vooruit
Return
'**********************************************
'een stuk naar links draaien (langere delay)
Links_draaien_veel:
motor1A = 0
motor1B = 0
motor2A = 1
motor2B = 0
led2 = 0
led3 = 0
led4 = 1
DelayMS 100
GoSub vooruit
Return
'**********************************************
'een stuk naar rechts draaien (langere delay)
Rechts_draaien_veel:
motor1A = 0
motor1B = 1
motor2A = 0
motor2B = 0
led2 = 1
led3 = 0
led4 = 0
DelayMS 100
GoSub vooruit
Return
'**********************************************
'alle sensoren op 1 zette
over_sub:
IR_led1 = 0
IR_led2 = 0
IR_led3 = 0
GoSub vooruit
'**********************************************
'oneindige lus
While 1=1
Main:
'**********************************************
'kijken welke sensor(en) er 1 is/zijn
GoSub sensorinl
If detect_links1 = 1 Then
GoSub Rechts_draaien_weinig
GoTo Main
EndIf
If detect_rechts1 = 1 Then
GoSub Links_draaien_weinig
GoTo Main
EndIf
'**********************************************
Wend
End
Dit is een projectje dat ik een paar jaar geleden in school voor een projectweek samen met 2 klasgenoten heb gebouwd .
We hadden nog wat tijd over tijdens de projectweek dus hadden we beslist een led cubus te bouwen.
De gebruikte microcontroller is 16F648A. De leds staan in een matrix. Ze worden horizontaal en verticaal gestuurd. Hierdoor kunnen ze apart worden aangestuurd en kan je verschillende figuren maken.
Het aansturen van ledjes gebeurt op volgende manier: eerste wordt de transistor van de eerste rij aangestuurd (wordt aan de massa gelegd). Hierna worden de leds van deze rij aangestuurd door het aansturen van de niveaus. Hierna wordt de transistor van de eerste rij weer laag en het tweede rij wordt dan aangestuurd enz… .
Zo kun je de leds elk apart aansturen.
This is my entry for the 555 contest. I didn’t have much time to make something so the entry isn’t much.
This design is a fan controller. The base of it is a simple pwm circuit with the 555 timer. The problem with fan’s is that they don’t start at low voltages. So I added a capacitor (C2) to give it a little voltage boost at the startup.
[youtube]37ZOpoyEyEs[/youtube]
The circuit can also be easily adjusted to have a soft start. This can be useful when driving led’s etc. This way the light is not instantly bright.
My dad’s car has a cd storage box in the dashboard. My car had a simple storage box which is not as handy with CD’s (especially when you are driving). So I bought a CD storage box on eBay and replaced the one in my car.
We gebruiken cookies om er zeker van te zijn dat je onze website zo goed mogelijk beleeft. Als je deze website blijft gebruiken gaan we ervan uit dat je dat goed vindt.