Hide last authors
Jean-Yves Dupertuis 1.1 1 = Commutation d'antenne via raspberry - py =
2
3 Ce commutateur va permettre via internet de modifier l' antenne reliée au TX de la station EM.
Jean-Yves Dupertuis 6.1 4
Jean-Yves Dupertuis 6.2 5 Ce travail a été confié à un apprenant de 4ème année (M// Loris Gilliand//) .
Jean-Yves Dupertuis 6.1 6
Jean-Yves Dupertuis 6.2 7
Jean-Yves Dupertuis 11.5 8 = [[Fabrication>>doc:fabricationSwitch]] =
Jean-Yves Dupertuis 11.4 9
10
Jean-Yves Dupertuis 11.6 11 = Interface Homme - Machine =
Jean-Yves Dupertuis 6.1 12
Jean-Yves Dupertuis 6.3 13 Pour commuter le TX sur une autre antenne, il suffit de taper la lettre (//canal désiré) au clavier.//
14
15 L'image se modifie selon votre choix pour valider sa commutation.
16
17 Vous pouvez via la "souris" obtenir le même résultat !
18
19
20
Jean-Yves Dupertuis 6.1 21 [[image:PremFenetre.jpg]]
22
23
24
25 [[image:ZoneAide.jpg]]
26
27
28
29 [[image:BoutonIndication.jpg]]
30
31
32 [[image:ClassGpio.jpg]]
Jean-Yves Dupertuis 8.2 33
34
35 On a ajouté un LCD fournit par //HB9FOX //qui permet de commuter directement sur le module la bonne Antenne.
36
37 **IMPORTANT !!** Pour ce faire le raspberry - py doit fonctionné et le programme lancé !
38
39
40 Voici le détail :
41
42
43 [[image:lcdVue.jpg]]
44
45
46 [[image:lcdCommande.jpg]]
47
48
Jean-Yves Dupertuis 10.2 49 == Câblage du module ==
Jean-Yves Dupertuis 8.2 50
Jean-Yves Dupertuis 10.2 51 Le raspberry - py travaille avec 8 GPIO qui pour des raisons de protection transit via des opto - coupleurs.
52
53 Une carte dédiée à cette protection a été développée.
54
55 Le rasbberry - py est directement relié aux entrée de ces optos et la photo montre comment relié les sorties
56
57 des optos à la carte relais. Une carte relais possède 4 relais de commutation. C'est pourquoi le module
58
59 possède 2 cartes relais.
60
61
62
63 [[image:OptoRelais.jpg]]
64
65
66
67 Depuis les sorties relais on installe le câble de la boite de commutation.
68
69
70 [[image:RelaiCommutateur.jpg]]
71
72
73 Les fils rouge sont l'arrivée du 12 Vdc depuis l'autre côté de la carte relais.
74
75 **Ne pas oublier de les relier au 12Vdc !**
Jean-Yves Dupertuis 11.2 76
77
78 == Câble ==
79
80
81 [[image:cableCommAnt.jpg]]
82
83
Jean-Yves Dupertuis 11.6 84
85 = Programmation Python =
86
87 Voici le code source, vous pouvez le copier directement dans un IDLE Python 2.7.
88
89 Si vous ne l'avez pas, voici un installeur pour Windows. Pour linux c'est plus simple il suffit d' ouvrir l'IDLE 2.7 déjà présent
90
91 sur votre carte raspberry - py.
92
Jean-Yves Dupertuis 11.7 93 {{{
Jean-Yves Dupertuis 11.6 94 # auteur : Gilliand Loris
95 # date : 02.06.14
96 # version 0.8
97 #
98 # amelioration depuis 0.7 : integre un lcd qui peut commander les changements
99
100 # importation bibilotheques
101 import pygame, sys, time
102 from pygame.locals import *
103 import RPi.GPIO as GPIO
104 from Adafruit_CharLCDPlate import *
105
106 # initialisation fenetre et gpio
107 pygame.init()
108 GPIO.setmode(GPIO.BCM)
109
110 # fonction qui change LA sortie active
111 def change_sortie(ligne):
112 BP1.etat = 0
113 BP2.etat = 0
114 BP3.etat = 0
115 BP4.etat = 0
116 BP1.affiche_etat(inactif)
117 BP2.affiche_etat(inactif)
118 BP3.affiche_etat(inactif)
119 BP4.affiche_etat(inactif)
120 time.sleep(0.25)
121 if ligne == 'a':
122 BP1.etat = 1
123 BP1.affiche_etat(actif)
124 elif ligne == 'b':
125 BP2.etat = 1
126 BP2.affiche_etat(actif)
127 elif ligne == 'c':
128 BP3.etat = 1
129 BP3.affiche_etat(actif)
130 elif ligne == 'd':
131 BP4.etat = 1
132 BP4.affiche_etat(actif)
133
134 # classe de creation de cases
135 class Cases:
Jean-Yves Dupertuis 11.7 136 def init(self,image,pos,port,init):
Jean-Yves Dupertuis 11.6 137 self.image = pygame.image.load(image).convert()
138 self.pos = pos
139 self.port = port
140 self.etat = init
141 self.rect = self.image.get_rect().move(self.pos)
142 GPIO.setup(self.port,GPIO.OUT)
143 GPIO.output(self.port,GPIO.LOW)
144
145 def affiche_etat(self,indicateur):
146 indicateur = pygame.image.load(indicateur).convert()
147 indi_rect = indicateur.get_rect()
148 indi_rect.centerx = self.rect.centerx - self.pos[0]
149 indi_rect.centery = self.rect.centery - self.pos[1]
150 if self.etat == 0:
151 GPIO.output(self.port,GPIO.LOW)
152 elif self.etat == 1:
153 GPIO.output(self.port,GPIO.HIGH)
154 self.image.blit(indicateur,indi_rect)
155
156 # initialisation de la fenetre
157 screen = pygame.display.set_mode((600,600))
158 clock = pygame.time.Clock()
159 # initialisation des couleurs
160 rouge = (255,0,0)
161 noir = (0,0,0)
162 blanc = (255,255,255)
163 vert = (0,255,0)
164 bleu = (0,0,255)
165
166 # initialisation des variables
167 startline = (183,149)
168 endline = (293,75)
169
170 flag_canal = 0
171
172 canal = [4,17,18,22,23,24,25,27]
173
174 # definitions des zones
175 zone1 = pygame.Surface((600,150))
176 zone1.fill(bleu)
177
178 zone2 = pygame.Surface((400,300))
179 zone2.fill(bleu)
180
181 zone3 = pygame.Surface((600,150))
182 zone3.fill(bleu)
183
184 zone4 = pygame.Surface((200,300))
185 zone4.fill(bleu)
186
187 # definitions des objets a afficher dans les zones
188 # zone 1
189 font = pygame.font.Font(None,60)
190 titre1 = font.render("HB9EM",1,noir)
191 titre2 = font.render("Commutateur d'antennes",1,noir)
192 zone1.blit(titre1,(230,30))
193 zone1.blit(titre2,(50,70))
194
195 # zone 2
196 commu = pygame.image.load("commu_antenne.bmp").convert()
197 zone2.blit(commu,(50,50))
198
199 # zone 3
200 actif = "actif_commu.bmp"
201 inactif = "inactif_commu.bmp"
202
203 BP1 = Cases("bouton_commu.bmp",(125,50),canal[1],1)
204 BP2 = Cases("bouton_commu.bmp",(225,50),canal[2],0)
205 BP3 = Cases("bouton_commu.bmp",(325,50),canal[3],0)
206 BP4 = Cases("bouton_commu.bmp",(425,50),canal[4],0)
207 grp_cases = [BP1,BP2,BP3,BP4]
208 BP1.affiche_etat(actif)
209 BP2.affiche_etat(inactif)
210 BP3.affiche_etat(inactif)
211 BP4.affiche_etat(inactif)
212
213 zone3.blit(BP1.image,BP1.rect)
214 zone3.blit(BP2.image,BP2.rect)
215 zone3.blit(BP3.image,BP3.rect)
216 zone3.blit(BP4.image,BP4.rect)
217
218 font = pygame.font.Font(None,20)
219 canal_a = font.render("canal A",1,noir)
220 canal_b = font.render("canal B",1,noir)
221 canal_c = font.render("canal C",1,noir)
222 canal_d = font.render("canal D",1,noir)
223 zone3.blit(canal_a,(125,35))
224 zone3.blit(canal_b,(225,35))
225 zone3.blit(canal_c,(325,35))
226 zone3.blit(canal_d,(425,35))
227
228 # zone 4
229 commande = font.render("Commandes :",1,noir)
230 touche_a = font.render("Selection canal A : touche a",1,noir)
231 touche_b = font.render("Selection canal B : touche b",1,noir)
232 touche_c = font.render("Selection canal C : touche c",1,noir)
233 touche_d = font.render("Selection canal D : touche d",1,noir)
234 quitter = font.render("Quitter : touche q",1,noir)
235 zone4.blit(commande,(10,20))
236 zone4.blit(touche_a,(10,60))
237 zone4.blit(touche_b,(10,80))
238 zone4.blit(touche_c,(10,100))
239 zone4.blit(touche_d,(10,120))
240 zone4.blit(quitter,(10,200))
241
242 # affichage des zones
243 screen.blit(zone1,(0,0))
244 screen.blit(zone2,(0,150))
245 screen.blit(zone3,(0,450))
246 screen.blit(zone4,(400,150))
247
248 lcd = Adafruit_CharLCDPlate()
249 lcd.begin(16,2)
250 btn = ((lcd.SELECT, '', lcd.ON),
251 (lcd.LEFT , 'Antenne 1' , lcd.ON),
252 (lcd.UP , 'Antenne 2' , lcd.ON),
253 (lcd.DOWN , 'Antenne 4' , lcd.ON),
254 (lcd.RIGHT , 'Antenne 3' , lcd.ON))
255 prev = -1
256 temp = ''
257 active = 'Antenne 1'
258 act = ' active'
259 lcd.message((active + act))
260 while 1:
261 clock.tick(30)
262 for b in btn:
263 if lcd.buttonPressed(lcd.SELECT):
264 lcd.clear()
265 lcd.message((active + act))
266 time.sleep(0.25)
267 if temp != '':
268 active = temp
269 temp = ''
270 if active == 'Antenne 1':
271 change_sortie('a')
272 endline = (293,75)
273 if active == 'Antenne 2':
274 change_sortie('b')
275 endline = (293,125)
276 if active == 'Antenne 3':
277 change_sortie('c')
278 endline = (293,175)
279 if active == 'Antenne 4':
280 change_sortie('d')
281 endline = (293,225)
282 lcd.setCursor(0,0)
283 lcd.message((active + act))
284 lcd.setCursor(0,1)
285 lcd.message(' ')
286 if lcd.buttonPressed(lcd.RIGHT):
287 temp = 'Antenne 3'
288 lcd.setCursor(0,1)
289 lcd.message(temp)
290 if lcd.buttonPressed(lcd.DOWN):
291 temp = 'Antenne 4'
292 lcd.setCursor(0,1)
293 lcd.message(temp)
294 if lcd.buttonPressed(lcd.UP):
295 temp = 'Antenne 2'
296 lcd.setCursor(0,1)
297 lcd.message(temp)
298 if lcd.buttonPressed(lcd.LEFT):
299 temp = 'Antenne 1'
300 lcd.setCursor(0,1)
301 lcd.message(temp)
302
303 for event in pygame.event.get():
304 lcd.setCursor(0,0)
305 if event.type == pygame.QUIT:
306 GPIO.cleanup()
307 sys.exit()
308 if event.type == pygame.KEYDOWN:
309 if event.key == pygame.K_q:
310 GPIO.cleanup()
311 sys.exit()
312 if event.key == pygame.K_a:
313 active = 'Antenne 1'
314 lcd.message((active + act))
315 change_sortie('a')
316 endline = (293,75)
317 if event.key == pygame.K_b:
318 active = 'Antenne 2'
319 lcd.message((active + act))
320 change_sortie('b')
321 endline = (293,125)
322 if event.key == pygame.K_c:
323 active = 'Antenne 3'
324 lcd.message((active + act))
325 change_sortie('c')
326 endline = (293,175)
327 if event.key == pygame.K_d:
328 active = 'Antenne 4'
329 lcd.message((active + act))
330 change_sortie('d')
331 endline = (293,225)
332
333 souris = pygame.mouse.get_pos()
Jean-Yves Dupertuis 11.7 334 souris_rect = souris[0],souris[1,[5,5]]
Jean-Yves Dupertuis 11.6 335 souris_rect = pygame.Rect(souris_rect)
336
337 for i in grp_cases:
338 lcd.setCursor(0,0)
339 if souris_rect.colliderect(i.rect.move((0,450))):
340 if pygame.mouse.get_pressed() == (1,0,0):
341 if i.port == canal[1]:
342 active = 'Antenne 1'
343 lcd.message((active + act))
344 change_sortie('a')
345 endline = (293,75)
346 if i.port == canal[2]:
347 active = 'Antenne 2'
348 lcd.message((active + act))
349 change_sortie('b')
350 endline = (293,125)
351 if i.port == canal[3]:
352 active = 'Antenne 3'
353 lcd.message((active + act))
354 change_sortie('c')
355 endline = (293,175)
356 if i.port == canal[4]:
357 active = 'Antenne 4'
358 lcd.message((active + act))
359 change_sortie('d')
360 endline = (293,225)
361
362 zone3.blit(BP1.image,BP1.rect)
363 zone3.blit(BP2.image,BP2.rect)
364 zone3.blit(BP3.image,BP3.rect)
365 zone3.blit(BP4.image,BP4.rect)
366 screen.blit(zone3,(0,450))
367 zone2.blit(commu,(50,50))
368 pygame.draw.line(zone2,noir,startline,endline,2)
369 screen.blit(zone2,(0,150))
370 pygame.display.update()
Jean-Yves Dupertuis 11.7 371 }}}
Jean-Yves Dupertuis 11.6 372
Jean-Yves Dupertuis 11.7 373